diff --git a/src/lib-sieve-tool/mail-raw.c b/src/lib-sieve-tool/mail-raw.c
index f5117c97deb94cefe532d4d1c4a2cb082a2e4fee..572161ade5e9b3819e106eeafdc8fec4464a38f0 100644
--- a/src/lib-sieve-tool/mail-raw.c
+++ b/src/lib-sieve-tool/mail-raw.c
@@ -113,7 +113,8 @@ void mail_raw_init(const char *user)
 {
 	const char *error;
 
-	raw_mail_user = mail_user_init(user, NULL);
+	raw_mail_user = mail_user_init(user);
+	mail_user_set_home(raw_mail_user, NULL);
 	raw_ns = mail_namespaces_init_empty(raw_mail_user);
 	raw_ns->flags |= NAMESPACE_FLAG_INTERNAL;
 	
@@ -126,9 +127,9 @@ void mail_raw_init(const char *user)
 
 void mail_raw_deinit(void)
 {
-	mail_user_deinit(&raw_mail_user);
+	mail_user_unref(&raw_mail_user);
 }
-	
+
 /*
  * Open raw mail data
  */
@@ -146,11 +147,11 @@ static struct mail_raw *mail_raw_create
 	mailr->pool = pool;
 
 	if ( mailfile == NULL ) {
-		mailr->box = mailbox_open(raw_ns->storage, "Dovecot Raw Mail",
+		mailr->box = mailbox_open(&raw_ns->storage, "Dovecot Raw Mail",
 				   input, MAILBOX_OPEN_NO_INDEX_FILES);
 	} else {
 		mtime = (time_t)-1;
-		mailr->box = mailbox_open(raw_ns->storage, mailfile, NULL,
+		mailr->box = mailbox_open(&raw_ns->storage, mailfile, NULL,
 				   MAILBOX_OPEN_NO_INDEX_FILES);
 	}
 
diff --git a/src/lib-sieve-tool/sieve-tool.c b/src/lib-sieve-tool/sieve-tool.c
index b5f30766a8b985ce6389cb02911dcd7a1dc576ba..04d0ade3ec43a81bbe9d31464be05ec2560d6f3e 100644
--- a/src/lib-sieve-tool/sieve-tool.c
+++ b/src/lib-sieve-tool/sieve-tool.c
@@ -85,12 +85,12 @@ const char *sieve_tool_get_user(void)
 		process_euid = geteuid();
 
 		if ((pw = getpwuid(process_euid)) != NULL) {
-            user = t_strdup(pw->pw_name);
-        }
-	}
+			user = t_strdup(pw->pw_name);
+		}
 
-	if ( user == NULL || *user == '\0' ) {
-		i_fatal("couldn't lookup our username (uid=%s)", dec2str(process_euid));
+		if ( user == NULL || *user == '\0' ) {
+			i_fatal("couldn't lookup our username (uid=%s)", dec2str(process_euid));
+		}
 	}
 	
 	return user;
diff --git a/src/lib-sieve/sieve-actions.c b/src/lib-sieve/sieve-actions.c
index abcc9803c6aa01fe9fb4ae1d0f191774b4ed7f4b..517b4a49a6e9a5a41dba0fc2191eca8da84b61ef 100644
--- a/src/lib-sieve/sieve-actions.c
+++ b/src/lib-sieve/sieve-actions.c
@@ -168,28 +168,30 @@ static void act_store_get_storage_error
 static struct mailbox *act_store_mailbox_open
 (const struct sieve_action_exec_env *aenv, struct mail_namespace *ns, const char *folder)
 {
+	struct mail_storage **storage = &(aenv->estatus->last_storage);
 	enum mailbox_open_flags open_flags = 
 		MAILBOX_OPEN_FAST | MAILBOX_OPEN_KEEP_RECENT | 
 		MAILBOX_OPEN_SAVEONLY | MAILBOX_OPEN_POST_SESSION;
 	struct mailbox *box;
 
 	if (strcasecmp(folder, "INBOX") == 0) {
-        /* Deliveries to INBOX must always succeed, regardless of ACLs */
-        open_flags |= MAILBOX_OPEN_IGNORE_ACLS;
-    }
+		/* Deliveries to INBOX must always succeed, regardless of ACLs */
+		open_flags |= MAILBOX_OPEN_IGNORE_ACLS;
+	}
+
+	*storage = ns->storage;
 
-	box = mailbox_open
-		(ns->storage, folder, NULL, open_flags);
+	box = mailbox_open(storage, folder, NULL, open_flags);
 		
 	if ( box == NULL && aenv->scriptenv->mailbox_autocreate ) {
 		enum mail_error error;
 	
-		(void)mail_storage_get_last_error(ns->storage, &error);
+		(void)mail_storage_get_last_error(*storage, &error);
 		if ( error != MAIL_ERROR_NOTFOUND )
 			return NULL;
 
 		/* Try creating it */
-		if ( mail_storage_mailbox_create(ns->storage, folder, FALSE) < 0 )
+		if ( mail_storage_mailbox_create(*storage, folder, FALSE) < 0 )
 			return NULL;
    
 		if ( aenv->scriptenv->mailbox_autosubscribe ) {
@@ -198,8 +200,7 @@ static struct mailbox *act_store_mailbox_open
 		}
 
 		/* Try opening again */
-		box = mailbox_open
-			(ns->storage, folder, NULL, open_flags);
+		box = mailbox_open(storage, folder, NULL, open_flags);
     
 		if (box == NULL)
 			return NULL;
@@ -233,8 +234,6 @@ static bool act_store_start
 
 		if ( ns != NULL ) {		
 			box = act_store_mailbox_open(aenv, ns, ctx->folder);
-		
-			aenv->estatus->last_storage = ns->storage;
 		}
 	}
 				
diff --git a/src/sieve-tools/sieve-exec.c b/src/sieve-tools/sieve-exec.c
index bf4ac5c339dc320895036eb37d5291fe9934a777..cc66524767ee7816e38ac63acac5abe4b23e9a32 100644
--- a/src/sieve-tools/sieve-exec.c
+++ b/src/sieve-tools/sieve-exec.c
@@ -3,8 +3,8 @@
 
 #include "lib.h"
 #include "ostream.h"
-#include "mail-storage.h"
 #include "mail-namespace.h"
+#include "mail-storage.h"
 #include "env-util.h"
 
 #include "sieve.h"
@@ -161,6 +161,7 @@ int main(int argc, char **argv)
 	home = getenv("HOME");
 
 	/* Initialize mail storages */
+	mail_users_init(getenv("AUTH_SOCKET_PATH"), getenv("DEBUG") != NULL);
 	mail_storage_init();
 	mail_storage_register_all();
 	mailbox_list_register_all();
@@ -173,9 +174,10 @@ int main(int argc, char **argv)
 		env_put("NAMESPACE_1_SEP=.");
 		env_put("NAMESPACE_1_SUBSCRIPTIONS=1");
 
-		mail_user = mail_user_init(user, home);
-	    if (mail_namespaces_init(mail_user) < 0)
-    	    i_fatal("Namespace initialization failed");	
+		mail_user = mail_user_init(user);
+		mail_user_set_home(mail_user, home);
+		if (mail_namespaces_init(mail_user) < 0)
+			i_fatal("Namespace initialization failed");	
 
 		ns = mail_user->namespaces;
 	} 
@@ -238,10 +240,11 @@ int main(int argc, char **argv)
 
 	/* De-initialize mail user object */
 	if ( mail_user != NULL )
-		mail_user_deinit(&mail_user);
+		mail_user_unref(&mail_user);
 
 	/* De-intialize mail storages */
 	mail_storage_deinit();
+	mail_users_deinit();
 
 	sieve_tool_deinit();  
 	
diff --git a/src/sieve-tools/sieve-test.c b/src/sieve-tools/sieve-test.c
index 41508a1f1a6ea817210f1470b6dcf9742668b958..854942593451d9da38986449343e8d9bc9497bb5 100644
--- a/src/sieve-tools/sieve-test.c
+++ b/src/sieve-tools/sieve-test.c
@@ -3,6 +3,7 @@
 
 #include "lib.h"
 #include "ostream.h"
+#include "mail-namespace.h"
 #include "mail-storage.h"
 
 #include "sieve.h"
@@ -134,6 +135,7 @@ int main(int argc, char **argv)
 	user = sieve_tool_get_user();
 
 	/* Initialize mail storages */
+	mail_users_init(getenv("AUTH_SOCKET_PATH"), getenv("DEBUG") != NULL);
 	mail_storage_init();
 	mail_storage_register_all();
 	mailbox_list_register_all();
@@ -188,6 +190,7 @@ int main(int argc, char **argv)
 
 	/* De-initialize mail storages */
 	mail_storage_deinit();
+	mail_users_deinit();
 
 	sieve_tool_deinit();  
 	return 0;
diff --git a/src/testsuite/testsuite.c b/src/testsuite/testsuite.c
index 10c81f9ce41feadb92113e4c1bc65b74739d4540..465bbe088d54b7b0c6787c2c76333e7eeef50e6d 100644
--- a/src/testsuite/testsuite.c
+++ b/src/testsuite/testsuite.c
@@ -7,6 +7,7 @@
 #include "ostream.h"
 #include "hostpid.h"
 #include "mail-storage.h"
+#include "mail-namespace.h"
 #include "env-util.h"
 
 #include "sieve.h"
@@ -164,6 +165,7 @@ int main(int argc, char **argv)
 	sieve_tool_dump_binary_to(sbin, dumpfile);
 	
 	/* Initialize mail storages */
+	mail_users_init(getenv("AUTH_SOCKET_PATH"), getenv("DEBUG") != NULL);
 	mail_storage_init();
 	mail_storage_register_all();
 	mailbox_list_register_all();
@@ -200,6 +202,7 @@ int main(int argc, char **argv)
 
 	/* De-initialize mail storages */
 	mail_storage_deinit();
+	mail_users_deinit();
 
 	/* De-initialize testsuite */
 	testsuite_tool_deinit();