diff --git a/src/sieve-bin/mail-raw.c b/src/sieve-bin/mail-raw.c
index 19b400f2f73f76947afe65e9d542ad29420487be..693ad63c70809d16e6b361a93f438b238f07f3a8 100644
--- a/src/sieve-bin/mail-raw.c
+++ b/src/sieve-bin/mail-raw.c
@@ -78,14 +78,17 @@ static struct istream *create_raw_stream(int fd)
 
 static struct mail_namespace *raw_ns;
 
-void mail_raw_init(pool_t namespaces_pool, const char *user) 
+void mail_raw_init(const char *user) 
 {
 	const char *error;
-
-	raw_ns = mail_namespaces_init_empty(namespaces_pool);
-	raw_ns->flags |= NAMESPACE_FLAG_INTERNAL;
-	if (mail_storage_create(raw_ns, "raw", "/tmp", user,
-				0, FILE_LOCK_METHOD_FCNTL, &error) < 0)
+	struct mail_user *raw_mail_user;
+
+	raw_mail_user = mail_user_init(user, NULL);
+    raw_ns = mail_namespaces_init_empty(raw_mail_user);
+    raw_ns->flags |= NAMESPACE_FLAG_INTERNAL;
+	if (mail_storage_create(raw_ns, "raw", "/tmp",
+		MAIL_STORAGE_FLAG_FULL_FS_ACCESS,
+		FILE_LOCK_METHOD_FCNTL, &error) < 0)
 		i_fatal("Couldn't create internal raw storage: %s", error);	
 }	
 	
diff --git a/src/sieve-bin/mail-raw.h b/src/sieve-bin/mail-raw.h
index f54372e8edc98ff7d218bccb471abcbc872e4267..47e149f8f4e75fddf04206d251bbcf0fbdc3dd92 100644
--- a/src/sieve-bin/mail-raw.h
+++ b/src/sieve-bin/mail-raw.h
@@ -10,7 +10,7 @@ struct mail_raw {
     struct mailbox_transaction_context *trans;
 };
 
-void mail_raw_init(pool_t namespaces_pool, const char *user);
+void mail_raw_init(const char *user);
 struct mail_raw *mail_raw_open(int fd);
 void mail_raw_close(struct mail_raw *mailr);
 void mail_raw_deinit(void);
diff --git a/src/sieve-bin/namespaces.c b/src/sieve-bin/namespaces.c
index cc1378953022d6bde03267b21d6f053043187e8c..f032b3e85c6c0186d788c323ad31686059ce2394 100644
--- a/src/sieve-bin/namespaces.c
+++ b/src/sieve-bin/namespaces.c
@@ -43,22 +43,15 @@ mailbox_list_register(&fs_mailbox_list);
 index_mailbox_list_init();
 }
 
-static pool_t namespaces_pool;
-
-pool_t namespaces_init(void) 
+void namespaces_init(void) 
 {
 	mail_storage_init();
 	mail_storage_register_all();
 	mailbox_list_register_all();
-
-	namespaces_pool = pool_alloconly_create("namespaces", 1024);
-
-	return namespaces_pool;
 }	
 	
 void namespaces_deinit(void)
 {
 	mail_storage_deinit();
-	pool_unref(&namespaces_pool);
 }
 
diff --git a/src/sieve-bin/namespaces.h b/src/sieve-bin/namespaces.h
index 5f542d3f62d0d796937d97e0818f9003b5417e9b..81e9fc030b602c2c08f45647209fd297e1947f51 100644
--- a/src/sieve-bin/namespaces.h
+++ b/src/sieve-bin/namespaces.h
@@ -1,7 +1,7 @@
 #ifndef __NAMESPACES_H
 #define __NAMESPACES_H
 
-pool_t namespaces_init(void);
+void namespaces_init(void);
 void namespaces_deinit(void);
 
 #endif /* __MAIL_RAW_H */
diff --git a/src/sieve-bin/sieve-exec.c b/src/sieve-bin/sieve-exec.c
index 3eebaa6c0ac5de2f8a9c885e1828691afd3b959c..aad34b0886ba745592f1b37d74ef17a3999c9095 100644
--- a/src/sieve-bin/sieve-exec.c
+++ b/src/sieve-bin/sieve-exec.c
@@ -68,11 +68,10 @@ int main(int argc, char **argv)
 {
 	const char *scriptfile, *recipient, *sender, *mailbox, *dumpfile, *mailfile;
 	const char *mailloc; 
-	const char *user;
+	const char *user, *home;
 	int i, mfd;
-	pool_t namespaces_pool;
-	struct mail_namespace *ns;
 	struct mail_raw *mailr;
+	struct mail_namespace *ns;
 	struct sieve_binary *sbin;
 	struct sieve_message_data msgdata;
 	struct sieve_script_env scriptenv;
@@ -144,22 +143,29 @@ int main(int argc, char **argv)
 	bin_dump_sieve_binary_to(sbin, dumpfile);
 	
 	user = bin_get_user();
-	namespaces_pool = namespaces_init();
+	home = getenv("HOME");
+
+	namespaces_init();
 
 	if ( mailloc != NULL ) {
+		struct mail_user *mail_user;
+
 		env_put(t_strdup_printf("NAMESPACE_1=%s", mailloc));
 		env_put("NAMESPACE_1_INBOX=1");
 		env_put("NAMESPACE_1_LIST=1");
 		env_put("NAMESPACE_1_SEP=.");
 		env_put("NAMESPACE_1_SUBSCRIPTIONS=1");
-	
-		if (mail_namespaces_init(namespaces_pool, user, &ns) < 0)
-			i_fatal("Namespace initialization failed");
+
+		mail_user = mail_user_init(user, home);
+	    if (mail_namespaces_init(mail_user) < 0)
+    	    i_fatal("Namespace initialization failed");	
+
+		ns = mail_user->namespaces;
 	} else {
 		ns = NULL;
 	}
 
-	mail_raw_init(namespaces_pool, user);
+	mail_raw_init(user);
 	mailr = mail_raw_open(mfd);
 
 	bin_fill_in_envelope(mailr->mail, &recipient, &sender);
diff --git a/src/sieve-bin/sieve-test.c b/src/sieve-bin/sieve-test.c
index 2c361149b03093c14d5dad76f681788d5de51c6f..7af2d36bd448f1c593df4976d4d9c03d8a93dc1b 100644
--- a/src/sieve-bin/sieve-test.c
+++ b/src/sieve-bin/sieve-test.c
@@ -38,7 +38,6 @@ int main(int argc, char **argv)
 	const char *scriptfile, *recipient, *sender, *mailbox, *dumpfile, *mailfile; 
 	const char *user;
 	int i, mfd;
-	pool_t namespaces_pool;
 	struct mail_raw *mailr;
 	struct sieve_binary *sbin;
 	struct sieve_message_data msgdata;
@@ -123,8 +122,8 @@ int main(int argc, char **argv)
 	
 	user = bin_get_user();
 
-	namespaces_pool = namespaces_init();
-	mail_raw_init(namespaces_pool, user);
+	namespaces_init();
+	mail_raw_init(user);
 	mailr = mail_raw_open(mfd);
 
 	bin_fill_in_envelope(mailr->mail, &recipient, &sender);
diff --git a/src/testsuite/mail-raw.c b/src/testsuite/mail-raw.c
index 8b805d5f19c25a84e2a65085e61bd99c0fff7bfd..50c1689c7710497f6608102e7f800dceaf215bd7 100644
--- a/src/testsuite/mail-raw.c
+++ b/src/testsuite/mail-raw.c
@@ -35,15 +35,18 @@
 
 static struct mail_namespace *raw_ns;
 
-void mail_raw_init(pool_t namespaces_pool, const char *user) 
+void mail_raw_init(const char *user) 
 {
 	const char *error;
+    struct mail_user *raw_mail_user;
 
-	raw_ns = mail_namespaces_init_empty(namespaces_pool);
+	raw_mail_user = mail_user_init(user, NULL);
+	raw_ns = mail_namespaces_init_empty(raw_mail_user);
 	raw_ns->flags |= NAMESPACE_FLAG_INTERNAL;
-	if (mail_storage_create(raw_ns, "raw", "/tmp", user,
-				0, FILE_LOCK_METHOD_FCNTL, &error) < 0)
-		i_fatal("Couldn't create internal raw storage: %s", error);	
+	if (mail_storage_create(raw_ns, "raw", "/tmp",
+		MAIL_STORAGE_FLAG_FULL_FS_ACCESS,
+		FILE_LOCK_METHOD_FCNTL, &error) < 0)
+ 		i_fatal("Couldn't create internal raw storage: %s", error);
 }	
 	
 struct mail_raw *mail_raw_open(string_t *mail_data)
diff --git a/src/testsuite/mail-raw.h b/src/testsuite/mail-raw.h
index 789b133e3cc496b9ca9cb13583f23b3eeedc8321..73ed48b919952c9c263950a3b8081157db00262d 100644
--- a/src/testsuite/mail-raw.h
+++ b/src/testsuite/mail-raw.h
@@ -13,7 +13,7 @@ struct mail_raw {
     struct mailbox_transaction_context *trans;
 };
 
-void mail_raw_init(pool_t namespaces_pool, const char *user);
+void mail_raw_init(const char *user);
 struct mail_raw *mail_raw_open(string_t *mail_data);
 void mail_raw_close(struct mail_raw *mailr);
 void mail_raw_deinit(void);
diff --git a/src/testsuite/namespaces.c b/src/testsuite/namespaces.c
index cc1378953022d6bde03267b21d6f053043187e8c..f032b3e85c6c0186d788c323ad31686059ce2394 100644
--- a/src/testsuite/namespaces.c
+++ b/src/testsuite/namespaces.c
@@ -43,22 +43,15 @@ mailbox_list_register(&fs_mailbox_list);
 index_mailbox_list_init();
 }
 
-static pool_t namespaces_pool;
-
-pool_t namespaces_init(void) 
+void namespaces_init(void) 
 {
 	mail_storage_init();
 	mail_storage_register_all();
 	mailbox_list_register_all();
-
-	namespaces_pool = pool_alloconly_create("namespaces", 1024);
-
-	return namespaces_pool;
 }	
 	
 void namespaces_deinit(void)
 {
 	mail_storage_deinit();
-	pool_unref(&namespaces_pool);
 }
 
diff --git a/src/testsuite/namespaces.h b/src/testsuite/namespaces.h
index 5f542d3f62d0d796937d97e0818f9003b5417e9b..81e9fc030b602c2c08f45647209fd297e1947f51 100644
--- a/src/testsuite/namespaces.h
+++ b/src/testsuite/namespaces.h
@@ -1,7 +1,7 @@
 #ifndef __NAMESPACES_H
 #define __NAMESPACES_H
 
-pool_t namespaces_init(void);
+void namespaces_init(void);
 void namespaces_deinit(void);
 
 #endif /* __MAIL_RAW_H */
diff --git a/src/testsuite/testsuite-common.c b/src/testsuite/testsuite-common.c
index bd1331944aa8bf87c329833823eaf1a131ea555f..d14cf8fad6c6d237cd9dfb21ce680d4cb420cbcc 100644
--- a/src/testsuite/testsuite-common.c
+++ b/src/testsuite/testsuite-common.c
@@ -100,7 +100,7 @@ static void _testsuite_message_set(string_t *message)
 	(void)mail_get_first_header(mail, "Message-ID", &testsuite_msgdata.id);
 }
 
-void testsuite_message_init(pool_t namespaces_pool, const char *user)
+void testsuite_message_init(const char *user)
 {		
 	message_pool = pool_alloconly_create("testsuite_message", 6096);
 
@@ -108,7 +108,7 @@ void testsuite_message_init(pool_t namespaces_pool, const char *user)
 	str_append(default_message, _default_message_data);
 
 	testsuite_user = user;
-	mail_raw_init(namespaces_pool, user);
+	mail_raw_init(user);
 	_testsuite_message_set(default_message);
 
 	envelope_to = str_new(message_pool, 256);
diff --git a/src/testsuite/testsuite-common.h b/src/testsuite/testsuite-common.h
index 8bf37ab4752126bb325401ddc066ef86491e3aba..c371e5c8324bb0081fc0add99ae9f1dbe2fc9d44 100644
--- a/src/testsuite/testsuite-common.h
+++ b/src/testsuite/testsuite-common.h
@@ -9,7 +9,7 @@ extern int ext_testsuite_my_id;
 
 extern struct sieve_message_data testsuite_msgdata;
 
-void testsuite_message_init(pool_t namespaces_pool, const char *user);
+void testsuite_message_init(const char *user);
 void testsuite_message_deinit(void);
 
 void testsuite_message_set
diff --git a/src/testsuite/testsuite.c b/src/testsuite/testsuite.c
index e21786f1e60568e2bb37554c3727e807bf8e12d2..20e055573572af2ef703ff4c9e169e649d3ee03d 100644
--- a/src/testsuite/testsuite.c
+++ b/src/testsuite/testsuite.c
@@ -175,7 +175,6 @@ int main(int argc, char **argv)
 	const char *scriptfile, *dumpfile; 
 	const char *user;
 	int i, ret;
-	pool_t namespaces_pool;
 	struct sieve_binary *sbin;
 	const char *sieve_dir;
 	struct sieve_script_env scriptenv;
@@ -229,9 +228,9 @@ int main(int argc, char **argv)
 	/* Dump script */
 	_dump_sieve_binary_to(sbin, dumpfile);
 	
-	namespaces_pool = namespaces_init();
+	namespaces_init();
 	user = _get_user();
-	testsuite_message_init(namespaces_pool, user);
+	testsuite_message_init(user);
 
 	memset(&scriptenv, 0, sizeof(scriptenv));
 	scriptenv.inbox = "INBOX";