diff --git a/src/lib-sieve/sieve-extensions.c b/src/lib-sieve/sieve-extensions.c
index dd8a7f090c330684604300b8d0094c41afb7c2a1..9b21026e24d77610bc99c7073ff77efe0ead9710 100644
--- a/src/lib-sieve/sieve-extensions.c
+++ b/src/lib-sieve/sieve-extensions.c
@@ -282,7 +282,8 @@ void sieve_extensions_set_string(const char *ext_string)
 		eregs = array_get_modifiable(&extensions, &ext_count);
 		
 		for ( i = 0; i < ext_count; i++ ) {
-			*(eregs[i].extension->_id) = eregs[i].id;
+			if ( eregs[i].extension->_id == NULL )
+				*(eregs[i].extension->_id) = eregs[i].id;
 		}
 
 		return;	
@@ -336,10 +337,13 @@ void sieve_extensions_set_string(const char *ext_string)
 			}		
 		}
 
-		if ( disabled ) {
-			*(eregs[i].extension->_id) = -1;
-		} else {
-			*(eregs[i].extension->_id) = eregs[i].id;
+		if ( eregs[i].extension->_id != NULL && 
+			*(eregs[i].extension->name) != '@' ) {
+			if ( disabled ) {
+				*(eregs[i].extension->_id) = -1;
+			} else {
+				*(eregs[i].extension->_id) = eregs[i].id;
+			}
 		}
 	}
 }