diff --git a/sieve/errors/address-errors.sieve b/sieve/errors/address-errors.sieve
deleted file mode 100644
index fb4726f1d3e5634d81f0921a4e6af023b64a6315..0000000000000000000000000000000000000000
--- a/sieve/errors/address-errors.sieve
+++ /dev/null
@@ -1,58 +0,0 @@
-require "comparator-i;ascii-numeric";
-
-if address :isnot :comparator "i;ascii-casemap" :localpart "From" "nico" {
-	discard;
-}
-
-if address :is :comparator 45 :localpart "From" "nico" {
-	discard;
-}
-
-if true :comparator "i;ascii-numeric" {
-  	keep;
-}
-
-if address :is :comparator "i;ascii-numeric" :localpart "From" 45 {
-	discard;
-}
-
-if address :is :comparator "i;ascii-numeric" :localpart 45 "nico" {
-	discard;
-}
-
-if address :is :comparator "i;ascii-numeric" :localpart "From" :tag {
-	discard;
-}
-
-if address :is :comparator "i;ascii-numeric" :localpart "From" {
-	discard;
-}
-
-if address :is :comparator "i;ascii-numeric" :localpart {
-	discard;
-}
-
-if address :localpart :is :comparator "i;ascii-casemap" "from" ["frop", "frop"] {
-	discard;
-}
-
-if address :localpart :hufter :is :comparator "i;ascii-casemap" "frop" ["frop", "frop"] {
-        discard;
-}
-
-if address :is "frop" "frml" {
-	keep;
-}
-
-if address :is "reply-to" "frml" {
-	keep;
-}
-
-if address :is ["to", "frop"] "frml" {
-	keep;
-}
-
-if address :is ["to", "reply-to"] "frml" {
-	keep;
-}
-
diff --git a/sieve/errors/address-part-errors.sieve b/sieve/errors/address-part-errors.sieve
deleted file mode 100644
index 9a49af08a122b2b6963c32d8af02dfc76f400135..0000000000000000000000000000000000000000
--- a/sieve/errors/address-part-errors.sieve
+++ /dev/null
@@ -1,10 +0,0 @@
-if address :all :comparator "i;octet" :domain "from" "STEPHAN" {
-	discard;
-
-	if address :localpart :domain :comparator "i;octet" "from" "drunksnipers.com" {
-		keep;
-	}
-	stop;
-}
-
-keep;
diff --git a/sieve/errors/encoded-character.sieve b/sieve/errors/encoded-character.sieve
deleted file mode 100644
index f8a7686df62a370a52e268a006c8b800a4f00f88..0000000000000000000000000000000000000000
--- a/sieve/errors/encoded-character.sieve
+++ /dev/null
@@ -1,5 +0,0 @@
-require "encoded-character";
-require "fileinto";
-
-fileinto "INBOX.${unicode:200000}";
-fileinto "INBOX.${Unicode:DF01}";
diff --git a/sieve/errors/envelope-errors.sieve b/sieve/errors/envelope-errors.sieve
deleted file mode 100644
index e5b7b1020657981bd25da9f3479befe39a715b3b..0000000000000000000000000000000000000000
--- a/sieve/errors/envelope-errors.sieve
+++ /dev/null
@@ -1,13 +0,0 @@
-require "envelope";
-
-if envelope :is "to" "frop@rename-it.nl" {
-}
-
-if envelope :is "frop" "frop@rename-it.nl" {
-}
-
-if envelope :is ["to","from"] "frop@rename-it.nl" {
-}
-
-if envelope :is ["to","frop"] "frop@rename-it.nl" {
-}
diff --git a/sieve/errors/header-errors.sieve b/sieve/errors/header-errors.sieve
deleted file mode 100644
index ac6108ba131741a96fe3432239da621b7e5975bf..0000000000000000000000000000000000000000
--- a/sieve/errors/header-errors.sieve
+++ /dev/null
@@ -1,44 +0,0 @@
-require "comparator-i;ascii-numeric";
-
-if header :isnot :comparator "i;ascii-casemap" "From" "nico" {
-	discard;
-}
-
-if header :is :comparator 45 "From" "nico" {
-	discard;
-}
-
-if header :all :comparator "i;ascii-numeric" {
-  	keep;
-}
-
-if header :is :comparator "i;ascii-numeric" "From" 45 {
-	discard;
-}
-
-if header :is :comparator "i;ascii-numeric" 45 "nico" {
-	discard;
-}
-
-if header :is :comparator "i;ascii-numeric" "From" :tag {
-	discard;
-}
-
-if header :is :comparator "i;ascii-numeric" "From" {
-	discard;
-}
-
-if header :is :comparator "i;ascii-numeric" {
-	discard;
-}
-
-if header :is :comparator "i;ascii-casemap" "frop" ["frop", "frop"] {
-	discard;
-}
-
-if header :hufter :is :comparator "i;ascii-casemap" "frop" ["frop", "frop"] {
-        discard;
-}
-
-if header "frop" "frop" true {
-}
diff --git a/sieve/errors/if-errors.sieve b/sieve/errors/if-errors.sieve
deleted file mode 100644
index 5aed28b65cce7f8fbd6a7b574d7d1232b43a225b..0000000000000000000000000000000000000000
--- a/sieve/errors/if-errors.sieve
+++ /dev/null
@@ -1,29 +0,0 @@
-if "frop" true;
-if true;
-if {
-  keep;
-}
-if ( false, false, true ) {
-  keep;
-}
-if [ "false", "false", "false" ] {
-  stop;
-}
-elsi;
-elsif true {
-  keep;
-}
-elsif true {
-  keep;
-}
-if true {
-  keep;
-} else {
-  stop;
-} elsif {
-  stop;
-}
-stop;
-else {
-  keep;
-}
diff --git a/sieve/errors/interesting.sieve b/sieve/errors/interesting.sieve
deleted file mode 100644
index 2dd1f35f335eb1cda68ac0199666b9a030fd876d..0000000000000000000000000000000000000000
--- a/sieve/errors/interesting.sieve
+++ /dev/null
@@ -1,24 +0,0 @@
-require ["fileinto"];
-require ["copy", "relational"];
-require "envelope";
-require "regex";
-
-va
-
-if header :is "To" "Stephan \"Nico\" Bosch <nico@voorbeeld.nl>" {
-	fileinto "INBOX.stephan";	
-} elsif header :matches "To" "*@voorbeeld.nl" {
-	fileinto "INBOX.vestingbar";
-}
-
-if envelope :isnot :comperator "i;ascii-casemap" :localpart "From" "nico" {
- 	discard;
-}
-
-if :disabled true {
-	break;
-}
-
-if header :comparator "i;octet" :is :comparator "i;ascii-casemap" {
-	frop;
-}
diff --git a/sieve/errors/keep-errors.sieve b/sieve/errors/keep-errors.sieve
deleted file mode 100644
index 8353f14b6b40b9f8416c2fc2151f31be34f240ff..0000000000000000000000000000000000000000
--- a/sieve/errors/keep-errors.sieve
+++ /dev/null
@@ -1,16 +0,0 @@
-keep "frop";
-keep 13;
-keep [ "frop", "frop" ];
-keep true;
-keep true {
-  keep;
-}
-keep "frop" true {
-  keep;
-}
-keep "frop" :frop true {
-  keep;
-}
-keep {
-  keep;
-}
diff --git a/sieve/errors/parse-errors.sieve b/sieve/errors/parse-errors.sieve
deleted file mode 100644
index 45af2c60e6c3de7b542b9202c71981424513619f..0000000000000000000000000000000000000000
--- a/sieve/errors/parse-errors.sieve
+++ /dev/null
@@ -1,65 +0,0 @@
-#
-# Example Sieve Filter
-# Declare any optional features or extension used by the script
-#
-require ["fileinto", "reject"];
-
-#
-# Reject any large messages (note that the four leading dots get
-# "stuffed" to three)
-#
-if size :over 1M ^^
-    {    
-    reject text:
-Please do not send me large attachments.
-Put your file on a server and send me the URL.
-Thank you.
-.... Fred
-.
-;
-    stop;
-    }
-#
-
-# Handle messages from known mailing lists
-# Move messages from IETF filter discussion list to filter folder
-#
-if header :is "Sender" "owner-ietf-mta-filters@imc.org"
-    {
-    fileinto "filter";  # move to "filter" folder
-    }
-#
-# Keep all messages to or from people in my company
-#
-elsif address :domain :is ["From", "To" "example.com"
-    {
-    keep;               # keep in "In" folder
-    }
-
-#
-# Try and catch unsolicited email.  If a message is not to me,
-# or it contains a subject known to be spam, file it away.
-#
-elsif anyof (not address :all :contains
-         ["To", "Cc", "Bcc" "me@example.com",
-     header :matches "subject"
-         ["*make*money*fast*", "*university*dipl*mas*"])
-    {
-    # If message header does not contain my address,
-    # it's from a list.
-    fileinto "spam";   # move to "spam" folder
-    }
- else
-    {
-    # Move all other (non-company) mail to "personal"
-    # folder.
-    fileinto "personal";
-    }
-
-
-if { 
-
-# 11111
-# dddd
-
-$$%%
diff --git a/sieve/errors/require-errors.sieve b/sieve/errors/require-errors.sieve
deleted file mode 100644
index 0fa4631862eca876dab5725a5788eb7a1c456704..0000000000000000000000000000000000000000
--- a/sieve/errors/require-errors.sieve
+++ /dev/null
@@ -1,20 +0,0 @@
-require "fileinto";
-require;
-require "fileinto" "vacation";
-require 45;
-require ["frop", "friep", "frml"];
-
-require "dovecot.test" true;
-
-requir;
-require "frop";
-
-require "dovecot.test" { 
-  keep;
-}
-
-if true {
-  require "relional";
-}
-
-require "copy";
diff --git a/sieve/errors/size-errors.sieve b/sieve/errors/size-errors.sieve
deleted file mode 100644
index 678dda18a2eec6e7ef9da9d0957ebc850c68136e..0000000000000000000000000000000000000000
--- a/sieve/errors/size-errors.sieve
+++ /dev/null
@@ -1,26 +0,0 @@
-size;
-
-if size {
-}
-
-if size 45 {
-	discard;
-}
-
-if size :over 34K {
-	stop;
-}
-
-if size :under 34M {
-	stop;
-}
-
-if size :under :over 34 {
-	keep;
-}
-
-if size :over :over 45M {
-	if size 34M :over {
-		stop;
-	}
-}
diff --git a/sieve/errors/stop-errors.sieve b/sieve/errors/stop-errors.sieve
deleted file mode 100644
index a2b43d76ddef18db75b8f4dd4fdb6184cdd0f1f0..0000000000000000000000000000000000000000
--- a/sieve/errors/stop-errors.sieve
+++ /dev/null
@@ -1,16 +0,0 @@
-stop "frop";
-stop 13;
-stop [ "frop", "frop" ];
-stop true;
-stop true {
-  stop;
-}
-stop "frop" true {
-  stop;
-}
-stop "frop" :frop true {
-  stop;
-}
-stop {
-  stop;
-}
diff --git a/sieve/errors/tag-errors.sieve b/sieve/errors/tag-errors.sieve
deleted file mode 100644
index 34b2267e706f5ecaa3e95c9640060fa8aedad0c5..0000000000000000000000000000000000000000
--- a/sieve/errors/tag-errors.sieve
+++ /dev/null
@@ -1,41 +0,0 @@
-require "envelope";
-
-if envelope :isnot :comparator "i;ascii-casemap" :localpart "From" "nico" {
-	discard;
-}
-
-if envelope :is :comparator 45 :localpart "From" "nico" {
-	discard;
-}
-
-if true :comparator "i;ascii-numeric" {
-  	keep;
-}
-
-if envelope :is :comparator "i;ascii-numeric" :localpart "From" 45 {
-	discard;
-}
-
-if envelope :is :comparator "i;ascii-numeric" :localpart 45 "nico" {
-	discard;
-}
-
-if envelope :is :comparator "i;ascii-numeric" :localpart "From" :tag {
-	discard;
-}
-
-if envelope :is :comparator "i;ascii-numeric" :localpart "From" {
-	discard;
-}
-
-if envelope :is :comparator "i;ascii-numeric" :localpart {
-	discard;
-}
-
-if envelope :localpart :is :comparator "i;ascii-casemap" "frop" ["frop", "frop"] {
-	discard;
-}
-
-if envelope :localpart :hufter :is :comparator "i;ascii-casemap" "frop" ["frop", "frop"] {
-        discard;
-}
diff --git a/tests/compile/errors.svtest b/tests/compile/errors.svtest
index af68e17e808cd82f494a0d345720c0a5ce2ead29..024b41f20b99c99b154549d1bca2b3980c10a41a 100644
--- a/tests/compile/errors.svtest
+++ b/tests/compile/errors.svtest
@@ -284,3 +284,32 @@ test "Encoded-character errors (FIXME: count only)" {
     }
 }
 
+/*
+ * Outgoing address errors
+ */
+
+test "Outgoing address errors (FIXME: count only)" {
+    if test_compile "errors/out-address.sieve" {
+        test_fail "compile should have failed.";
+    }
+
+    if not test_error :count "eq" :comparator "i;ascii-numeric" "13" {
+        test_fail "wrong number of errors reported";
+    }
+}
+
+
+/*
+ * Tagged argument errors
+ */
+
+test "Tagged argument errors (FIXME: count only)" {
+    if test_compile "errors/tag.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";
+    }
+}
+
diff --git a/sieve/errors/out-address-errors.sieve b/tests/compile/errors/out-address.sieve
similarity index 100%
rename from sieve/errors/out-address-errors.sieve
rename to tests/compile/errors/out-address.sieve
diff --git a/tests/compile/errors/tag.sieve b/tests/compile/errors/tag.sieve
new file mode 100644
index 0000000000000000000000000000000000000000..d285cf9c7dbfd25b614867c50f8c4b94cf5e0c6f
--- /dev/null
+++ b/tests/compile/errors/tag.sieve
@@ -0,0 +1,16 @@
+/*
+ * Tag errors
+ * 
+ * Total errors: 2 (+1 = 3)
+ */
+
+# Unknown tag (1)
+if envelope :isnot :comparator "i;ascii-casemap" :localpart "From" "nico" {
+	discard;
+}
+
+# Spurious tag (1)
+if true :comparator "i;ascii-numeric" {
+  	keep;
+}
+