diff --git a/src/lib-sieve/plugins/include/ext-include-common.c b/src/lib-sieve/plugins/include/ext-include-common.c
index bb02e59c40ecc6a31720882ebee0ff4af7d4ffb7..cee2790eab7a9e1d226d78422c09c646a9f499db 100644
--- a/src/lib-sieve/plugins/include/ext-include-common.c
+++ b/src/lib-sieve/plugins/include/ext-include-common.c
@@ -60,25 +60,22 @@ const char *ext_include_get_script_directory
 
         if (sieve_dir == NULL)
             sieve_dir = getenv("HOME");
-        if (sieve_dir == NULL) {
-            sieve_sys_error("include: sieve_dir and home not set "
-                   "(wanted script %s)", str_sanitize(script_name, 80));
-            return NULL;
-        }
 		break;
    	case EXT_INCLUDE_LOCATION_GLOBAL:
 		sieve_dir = getenv("SIEVE_GLOBAL_DIR");
-
-        if (sieve_dir == NULL) {
-            sieve_sys_warning("include: sieve_global_dir not set "
-                   "(wanted script %s)", str_sanitize(script_name, 80));
-            return NULL;
-        }
 		break;
 	default:
 		return NULL;
 	}
 
+	if (sieve_dir == NULL) {
+		sieve_sys_error("include: sieve_dir and home not set "	
+			"(wanted script %s)", str_sanitize(script_name, 80));
+		return NULL;
+	}
+
+	printf("SIEVE DIR: %s\n", sieve_dir);
+
 	return sieve_dir;
 }
 
diff --git a/src/testsuite/testsuite-common.c b/src/testsuite/testsuite-common.c
index 39a5f65ef4b7d519571046f665d337261cb775ed..297ebf6e5c5df7fb4b608cf2506a8dbc22be295e 100644
--- a/src/testsuite/testsuite-common.c
+++ b/src/testsuite/testsuite-common.c
@@ -4,6 +4,7 @@
 #include "ostream.h"
 #include "hash.h"
 #include "mail-storage.h"
+#include "env-util.h"
 
 #include "mail-raw.h"
 #include "namespaces.h"
@@ -301,6 +302,8 @@ static void _testsuite_script_verror
 
 	msg.location = p_strdup(pool, location);
 	msg.message = p_strdup_vprintf(pool, fmt, args);
+
+//	printf("error: %s: %s.\n", location, t_strdup_vprintf(fmt, args));
 	
 	array_append(&_testsuite_script_errors, &msg, 1);	
 }
@@ -370,9 +373,21 @@ static void testsuite_script_init(void)
 bool testsuite_script_compile(const char *script_path)
 {
 	struct sieve_binary *sbin;
+	const char *sieve_dir;
 
 	testsuite_script_clear_messages();
 
+	    /* Initialize environment */
+    sieve_dir = strrchr(script_path, '/');
+    if ( sieve_dir == NULL )
+        sieve_dir= "./";
+    else
+        sieve_dir = t_strdup_until(script_path, sieve_dir+1);
+
+    /* Currently needed for include (FIXME) */
+    env_put(t_strconcat("SIEVE_DIR=", sieve_dir, "included", NULL));
+    env_put(t_strconcat("SIEVE_GLOBAL_DIR=", sieve_dir, "included-global", NULL));
+
     if ( (sbin = sieve_compile(script_path, test_script_ehandler)) == NULL )
         return FALSE;
 
diff --git a/src/testsuite/testsuite.c b/src/testsuite/testsuite.c
index 99f9fd9a669fd5fadfc46d14e44df885063bba9c..e21786f1e60568e2bb37554c3727e807bf8e12d2 100644
--- a/src/testsuite/testsuite.c
+++ b/src/testsuite/testsuite.c
@@ -61,7 +61,6 @@ static void testsuite_bin_init(void)
 	
 	testsuite_init();
 }
-
 static void testsuite_bin_deinit(void)
 {
 	testsuite_deinit();
@@ -216,11 +215,13 @@ int main(int argc, char **argv)
 	/* Initialize environment */
 	sieve_dir = strrchr(scriptfile, '/');
     if ( sieve_dir == NULL )
-        sieve_dir="./";
+        sieve_dir= "./";
 	else
-		sieve_dir = t_strdup_until(scriptfile, sieve_dir);
+		sieve_dir = t_strdup_until(scriptfile, sieve_dir+1);
 
-	env_put(t_strconcat("SIEVE_DIR=", sieve_dir, NULL));
+	/* Currently needed for include (FIXME) */
+	env_put(t_strconcat("SIEVE_DIR=", sieve_dir, "included", NULL));
+	env_put(t_strconcat("SIEVE_GLOBAL_DIR=", sieve_dir, "included-global", NULL));
 	
 	/* Compile sieve script */
 	sbin = _compile_sieve_script(scriptfile);
diff --git a/tests/extensions/include/errors.svtest b/tests/extensions/include/errors.svtest
index c58a5f49b33b1bd5e06e88f5a226619924092c05..dc0c9814b97e802caa0358105ea420b9b452e486 100644
--- a/tests/extensions/include/errors.svtest
+++ b/tests/extensions/include/errors.svtest
@@ -17,6 +17,36 @@ test "Generic" {
 	}
 }
 
+test "Circular - direct" {
+	if test_compile "errors/circular-1.sieve" {
+		test_fail "compile should have failed";
+	}
+
+	if not test_error :count "eq" :comparator "i;ascii-numeric" "3" {
+		test_fail "wrong number of errors reported";
+	}
+}
+
+test "Circular - one intermittent" {
+	if test_compile "errors/circular-2.sieve" {
+		test_fail "compile should have failed";
+	}
+
+	if not test_error :count "eq" :comparator "i;ascii-numeric" "4" {
+		test_fail "wrong number of errors reported";
+	}
+}
+
+test "Circular - two intermittent" {
+	if test_compile "errors/circular-3.sieve" {
+		test_fail "compile should have failed";
+	}
+
+	if not test_error :count "eq" :comparator "i;ascii-numeric" "5" {
+		test_fail "wrong number of errors reported";
+	}
+}
+
 /*
  * Using import/export without variables required
  */
diff --git a/tests/extensions/include/errors/circular-1.sieve b/tests/extensions/include/errors/circular-1.sieve
new file mode 100644
index 0000000000000000000000000000000000000000..9526ff7479e9e5ed24e33f552eebaeb97cefb39e
--- /dev/null
+++ b/tests/extensions/include/errors/circular-1.sieve
@@ -0,0 +1,5 @@
+require "include";
+
+discard;
+
+include "circular-one.sieve";
diff --git a/tests/extensions/include/errors/circular-2.sieve b/tests/extensions/include/errors/circular-2.sieve
new file mode 100644
index 0000000000000000000000000000000000000000..59fca94c1ec2ef7e3e64ff3d5249f1f7917209d2
--- /dev/null
+++ b/tests/extensions/include/errors/circular-2.sieve
@@ -0,0 +1,5 @@
+require "include";
+
+discard;
+
+include "circular-two.sieve";
diff --git a/tests/extensions/include/errors/circular-3.sieve b/tests/extensions/include/errors/circular-3.sieve
new file mode 100644
index 0000000000000000000000000000000000000000..1ad95b6b68f6889b57dca67a686152eae6b89426
--- /dev/null
+++ b/tests/extensions/include/errors/circular-3.sieve
@@ -0,0 +1,5 @@
+require "include";
+
+discard;
+
+include "circular-three";
diff --git a/tests/extensions/include/errors/included/circular-one.sieve b/tests/extensions/include/errors/included/circular-one.sieve
new file mode 100644
index 0000000000000000000000000000000000000000..91978fede1495fa68ee92aa4c63f080329712caf
--- /dev/null
+++ b/tests/extensions/include/errors/included/circular-one.sieve
@@ -0,0 +1,5 @@
+require "include";
+
+keep;
+
+include "circular-one.sieve";
diff --git a/tests/extensions/include/errors/included/circular-three-2.sieve b/tests/extensions/include/errors/included/circular-three-2.sieve
new file mode 100644
index 0000000000000000000000000000000000000000..323751053fcd3002a84d1451b894ffc9de2b4f07
--- /dev/null
+++ b/tests/extensions/include/errors/included/circular-three-2.sieve
@@ -0,0 +1,3 @@
+require "include";
+
+include "circular-three-3.sieve";
diff --git a/tests/extensions/include/errors/included/circular-three-3.sieve b/tests/extensions/include/errors/included/circular-three-3.sieve
new file mode 100644
index 0000000000000000000000000000000000000000..4c062cdb338a0411f5cad1ac59be0792b604cf7a
--- /dev/null
+++ b/tests/extensions/include/errors/included/circular-three-3.sieve
@@ -0,0 +1,3 @@
+require "include";
+
+include "circular-three.sieve";
diff --git a/tests/extensions/include/errors/included/circular-three.sieve b/tests/extensions/include/errors/included/circular-three.sieve
new file mode 100644
index 0000000000000000000000000000000000000000..14c3c7f7b94ea2ec56538882a3de2b2487dc388e
--- /dev/null
+++ b/tests/extensions/include/errors/included/circular-three.sieve
@@ -0,0 +1,7 @@
+require "include";
+
+keep;
+
+include "circular-three-2.sieve";
+
+
diff --git a/tests/extensions/include/errors/included/circular-two-2.sieve b/tests/extensions/include/errors/included/circular-two-2.sieve
new file mode 100644
index 0000000000000000000000000000000000000000..d529214d4c0624698231af6597360034ee2ace55
--- /dev/null
+++ b/tests/extensions/include/errors/included/circular-two-2.sieve
@@ -0,0 +1,3 @@
+require "include";
+
+include "circular-two.sieve";
diff --git a/tests/extensions/include/errors/included/circular-two.sieve b/tests/extensions/include/errors/included/circular-two.sieve
new file mode 100644
index 0000000000000000000000000000000000000000..340ff9e08df0d553a369be9298934f7de93bc1f6
--- /dev/null
+++ b/tests/extensions/include/errors/included/circular-two.sieve
@@ -0,0 +1,7 @@
+require "include";
+
+keep;
+
+include "circular-two-2.sieve";
+
+
diff --git a/tests/extensions/include/variables-included1.sieve b/tests/extensions/include/included/variables-included1.sieve
similarity index 100%
rename from tests/extensions/include/variables-included1.sieve
rename to tests/extensions/include/included/variables-included1.sieve
diff --git a/tests/extensions/include/variables-included2.sieve b/tests/extensions/include/included/variables-included2.sieve
similarity index 100%
rename from tests/extensions/include/variables-included2.sieve
rename to tests/extensions/include/included/variables-included2.sieve
diff --git a/tests/extensions/include/variables-included3.sieve b/tests/extensions/include/included/variables-included3.sieve
similarity index 100%
rename from tests/extensions/include/variables-included3.sieve
rename to tests/extensions/include/included/variables-included3.sieve