diff --git a/src/lib-sieve/sieve-script.c b/src/lib-sieve/sieve-script.c
index 1f70cce5077243b89234d2d5a1f7be2c49a57ab5..3af517002fdcaa19d31970daaeff132a7b05babf 100644
--- a/src/lib-sieve/sieve-script.c
+++ b/src/lib-sieve/sieve-script.c
@@ -520,15 +520,19 @@ int sieve_script_is_active(struct sieve_script *script)
 
 int sieve_script_activate(struct sieve_script *script, time_t mtime)
 {
+	struct sieve_storage *storage = script->storage;
 	int ret;
 
-	i_assert( (script->storage->flags & SIEVE_STORAGE_FLAG_READWRITE) != 0 );
+	i_assert( (storage->flags & SIEVE_STORAGE_FLAG_READWRITE) != 0 );
 	i_assert( script->open ); // FIXME: auto-open?
 
 	i_assert( script->v.activate != NULL );
 	ret = script->v.activate(script);
 
-	sieve_storage_set_modified(script->storage, mtime);
+	if (ret >= 0) {
+		sieve_storage_set_modified(storage, mtime);
+		sieve_storage_sync_script_activate(storage);
+	}
 
 	return ret;
 }
diff --git a/src/lib-sieve/sieve-storage-private.h b/src/lib-sieve/sieve-storage-private.h
index 5fd7787a61eece76766aeb610b1d831aa44f5b54..d032c7f2c58d4791fd20e205a38458d600c93cb0 100644
--- a/src/lib-sieve/sieve-storage-private.h
+++ b/src/lib-sieve/sieve-storage-private.h
@@ -243,4 +243,10 @@ void sieve_storage_sync_script_rename
 void sieve_storage_sync_script_delete
 	(struct sieve_storage *storage, const char *name);
 
+void sieve_storage_sync_script_activate
+(struct sieve_storage *storage);
+void sieve_storage_sync_deactivate
+(struct sieve_storage *storage);
+
+
 #endif
diff --git a/src/lib-sieve/sieve-storage-sync.c b/src/lib-sieve/sieve-storage-sync.c
index 9ab5ab3b302d56e36d3041b2501f10a3b788bf77..6b0c8cd1d999c54ae8469f97639a0f836ba63f2c 100644
--- a/src/lib-sieve/sieve-storage-sync.c
+++ b/src/lib-sieve/sieve-storage-sync.c
@@ -134,3 +134,33 @@ void sieve_storage_sync_script_delete
 	mail_index_attribute_unset(t->itrans, TRUE, key, ioloop_time);
 	sieve_storage_sync_transaction_finish(storage, &t);
 }
+
+void sieve_storage_sync_script_activate
+(struct sieve_storage *storage)
+{
+	struct mailbox_transaction_context *t;
+
+	if (storage->sync_inbox == NULL)
+		return;
+
+	t = mailbox_transaction_begin(storage->sync_inbox, 0);	
+	mail_index_attribute_set
+		(t->itrans, TRUE, MAILBOX_ATTRIBUTE_SIEVE_DEFAULT, ioloop_time, 0);
+	sieve_storage_sync_transaction_finish(storage, &t);
+}
+
+void sieve_storage_sync_deactivate
+(struct sieve_storage *storage)
+{
+	struct mailbox_transaction_context *t;
+
+	if (storage->sync_inbox == NULL)
+		return;
+	
+	t = mailbox_transaction_begin(storage->sync_inbox, 0);	
+	mail_index_attribute_unset
+		(t->itrans, TRUE, MAILBOX_ATTRIBUTE_SIEVE_DEFAULT, ioloop_time);
+	sieve_storage_sync_transaction_finish(storage, &t);
+}
+
+
diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c
index b57f94fa9f3fca8fae33d2d9ed103db689b52648..f611787612a3100704f9b9635db2121397d5b86b 100644
--- a/src/lib-sieve/sieve-storage.c
+++ b/src/lib-sieve/sieve-storage.c
@@ -670,8 +670,11 @@ int sieve_storage_deactivate
 
 	i_assert(storage->v.deactivate != NULL);
 	ret = storage->v.deactivate(storage);
-
-	sieve_storage_set_modified(storage, mtime);
+	
+	if (ret >= 0) {
+		sieve_storage_set_modified(storage, mtime);
+		sieve_storage_sync_deactivate(storage);
+	}
 
 	return ret;
 }
diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-plugin.c b/src/plugins/doveadm-sieve/doveadm-sieve-plugin.c
index a3e00ce735b46621856eaca28b08161704ac58f6..278d1cbdf64a157393c72756b84825a384006903 100644
--- a/src/plugins/doveadm-sieve/doveadm-sieve-plugin.c
+++ b/src/plugins/doveadm-sieve/doveadm-sieve-plugin.c
@@ -188,7 +188,7 @@ sieve_attribute_unset_active_script(struct mail_storage *storage,
 {
 	int ret;
 
-	if ((ret=sieve_storage_is_singular(svstorage)) <= 0) {
+	if ((ret=sieve_storage_is_singular(svstorage)) != 0) {
 		if (ret < 0)
 			mail_storage_set_internal_error(storage);
 		return ret;