diff --git a/src/sieve-tools/sieve-test.c b/src/sieve-tools/sieve-test.c
index 56d3d5f582ff9a565416bdbba805df1273983e66..3ae6fa081fa58b67747c1db62af98370fcce4ec1 100644
--- a/src/sieve-tools/sieve-test.c
+++ b/src/sieve-tools/sieve-test.c
@@ -101,12 +101,14 @@ static void duplicate_mark
 int main(int argc, char **argv) 
 {
 	enum mail_storage_service_flags service_flags = 0;
-	struct master_service *master_service;
-	int c;
+	struct mail_storage_service_ctx *storage_service;
+	struct mail_storage_service_user *service_user;
+	struct mail_storage_service_input service_input;
+	struct mail_user *mail_user_dovecot = NULL;
 	ARRAY_DEFINE(scriptfiles, const char *);
 	const char *scriptfile, *recipient, *sender, *mailbox, *dumpfile, *mailfile, 
 		*mailloc, *extensions; 
-	const char *user, *home;
+	const char *user, *home, *errstr;
 	struct mail_raw *mailr;
 	struct mail_namespace_settings ns_set;
 	struct mail_namespace *ns = NULL;
@@ -118,11 +120,10 @@ int main(int argc, char **argv)
 	struct ostream *teststream = NULL;
 	bool force_compile = FALSE, execute = FALSE;
 	bool trace = FALSE;
-	int ret;
+	int ret, c;
 
-	master_service = master_service_init("sieve-test",
-        MASTER_SERVICE_FLAG_STANDALONE,
-        &argc, &argv, "r:f:m:d:l:x:s:ect");
+	master_service = master_service_init("sieve-test", 
+		MASTER_SERVICE_FLAG_STANDALONE, &argc, &argv, "r:f:m:d:l:x:s:ect");
 
 	sieve_tool_init(NULL, FALSE);
 
@@ -210,6 +211,27 @@ int main(int argc, char **argv)
 	/* Register tool-specific extensions */
 	(void) sieve_extension_register(sieve_instance, &debug_extension, TRUE);
 	
+	user = sieve_tool_get_user();
+	home = getenv("HOME");
+
+	/* Initialize mail storages */
+	//env_remove("HOME");
+	env_put("DOVECONF_ENV=1");
+	env_put(t_strdup_printf("MAIL=maildir:/tmp/dovecot-test-%s", user));
+
+	master_service_init_finish(master_service);
+
+	memset(&service_input, 0, sizeof(service_input));
+	service_input.module = "sieve-test";
+	service_input.service = "sieve-test";
+	service_input.username = user;
+
+	storage_service = mail_storage_service_init
+		(master_service, NULL, service_flags);
+	if (mail_storage_service_lookup_next(storage_service, &service_input,
+					     &service_user, &mail_user_dovecot, &errstr) <= 0)
+		i_fatal("%s", errstr);
+
 	/* Create error handler */
 	ehandler = sieve_stderr_ehandler_create(0);
 	sieve_system_ehandler_set(ehandler);
@@ -225,29 +247,11 @@ int main(int argc, char **argv)
 	}
 
 	if ( main_sbin != NULL ) {
-		struct mail_user *mail_user_dovecot = NULL;
 		struct mail_user *mail_user = NULL;
-		struct mail_storage_service_input input;
 
 		/* Dump script */
 		sieve_tool_dump_binary_to(main_sbin, dumpfile);
 	
-		user = sieve_tool_get_user();
-		home = getenv("HOME");
-
-		/* Initialize mail storages */
-		//env_remove("HOME");
-		env_put("DOVECONF_ENV=1");
-		env_put(t_strdup_printf("MAIL=maildir:/tmp/dovecot-test-%s", user));
-
-		master_service_init_finish(master_service);
-
-		memset(&input, 0, sizeof(input));
-		input.username = user;
-		mail_user_dovecot = 
-			mail_storage_service_init_user(master_service, &input,
-                NULL, service_flags);
-	
 		/* Obtain mail namespaces from -l argument */
 		if ( mailloc != NULL ) {
 			const char *errstr;
@@ -269,7 +273,8 @@ int main(int argc, char **argv)
 		        i_fatal("Test storage creation failed: %s", errstr);
 		}
 
-		if ( master_service_set(master_service, "mail_full_filesystem_access=yes") < 0 )
+		if ( master_service_set
+			(master_service, "mail_full_filesystem_access=yes") < 0 )
 			i_unreached(); 
 
 		/* Initialize raw mail object */
@@ -420,19 +425,19 @@ int main(int argc, char **argv)
 		/* De-initialize mail user objects */
 		if ( mail_user != NULL )
 			mail_user_unref(&mail_user);
-
-		if ( mail_user_dovecot != NULL )
-			mail_user_unref(&mail_user_dovecot);
-	
-		mail_storage_service_deinit_user();
 	}
 
+	if ( mail_user_dovecot != NULL )
+		mail_user_unref(&mail_user_dovecot);
+	
 	/* Cleanup error handler */
 	sieve_error_handler_unref(&ehandler);
 	sieve_system_ehandler_reset();
 
 	sieve_tool_deinit();
 
+	mail_storage_service_user_free(&service_user);
+	mail_storage_service_deinit(&storage_service);
 	master_service_deinit(&master_service);
 	
 	return 0;
diff --git a/src/testsuite/testsuite.c b/src/testsuite/testsuite.c
index eb9583d56983d1cc6c7af92bc5488c467777619b..8b820cd600f6977a222cff27104477a79a060a7f 100644
--- a/src/testsuite/testsuite.c
+++ b/src/testsuite/testsuite.c
@@ -128,20 +128,19 @@ static const char *_get_cwd(void)
 int main(int argc, char **argv) 
 {
 	enum mail_storage_service_flags service_flags = 0;
-	struct master_service *master_service;
+	struct mail_storage_service_ctx *storage_service;
+	struct mail_storage_service_user *service_user;
+	struct mail_storage_service_input service_input;
 	struct mail_user *mail_user_dovecot;
-	int c;
 	const char *scriptfile, *dumpfile, *extensions; 
-	struct mail_storage_service_input input;
-	const char *user, *home;
+	const char *user, *home, *errstr;
 	struct sieve_binary *sbin;
 	const char *sieve_dir;
 	bool trace = FALSE;
-	int ret;
+	int ret, c;
 
-    master_service = master_service_init("testsuite",
-        MASTER_SERVICE_FLAG_STANDALONE,
-        &argc, &argv, "d:x:t");
+	master_service = master_service_init
+		("testsuite", MASTER_SERVICE_FLAG_STANDALONE, &argc, &argv, "d:x:t");
 
 	user = getenv("USER");
 
@@ -184,16 +183,23 @@ int main(int argc, char **argv)
 	/* Initialize mail user */
 	home = _get_cwd();
 	user = sieve_tool_get_user();
+
 	env_put("DOVECONF_ENV=1");
 	env_put(t_strdup_printf("HOME=%s", home));
 	env_put(t_strdup_printf("MAIL=maildir:/tmp/dovecot-test-%s", user));
 
 	master_service_init_finish(master_service);
 
-	memset(&input, 0, sizeof(input));
-	input.username = user;
-	mail_user_dovecot = mail_storage_service_init_user
-		(master_service, &input, NULL, service_flags);
+	memset(&service_input, 0, sizeof(service_input));
+	service_input.module = "testsuite";
+	service_input.service = "testsuite";
+	service_input.username = user;
+
+	storage_service = mail_storage_service_init
+		(master_service, NULL, service_flags);
+	if ( mail_storage_service_lookup_next(storage_service, &service_input,
+		&service_user, &mail_user_dovecot, &errstr) <= 0 )
+		i_fatal("%s", errstr);
 
 	/* Initialize testsuite */
 	testsuite_tool_init(extensions);
@@ -272,19 +278,19 @@ int main(int argc, char **argv)
 		testsuite_message_deinit();
 		testsuite_mailstore_deinit();
 		testsuite_result_deinit();
-
-		/* De-initialize mail user */
-		if ( mail_user_dovecot != NULL )
-			mail_user_unref(&mail_user_dovecot);
-
-		mail_storage_service_deinit_user();
 	} else {
 		testsuite_testcase_fail("failed to compile testcase script");
 	}
 
+	/* De-initialize mail user */
+	if ( mail_user_dovecot != NULL )
+		mail_user_unref(&mail_user_dovecot);
+
 	/* De-initialize testsuite */
 	testsuite_tool_deinit();  
 
+	mail_storage_service_user_free(&service_user);
+	mail_storage_service_deinit(&storage_service);
 	master_service_deinit(&master_service);
 
 	return testsuite_testcase_result();