diff --git a/src/lib-sieve-tool/sieve-tool.c b/src/lib-sieve-tool/sieve-tool.c
index 81411a8ed22f8ace0147622e9b13c53a488f3f8a..c911893729655c1d5f0f0c3ad8827946a274ed35 100644
--- a/src/lib-sieve-tool/sieve-tool.c
+++ b/src/lib-sieve-tool/sieve-tool.c
@@ -52,7 +52,6 @@ struct sieve_tool {
 	struct sieve_instance *svinst;
 
 	struct mail_storage_service_ctx *storage_service;
-	struct mail_storage_service_user *service_user;
 	struct mail_user *mail_user_dovecot;
 	struct mail_user *mail_user;
 
@@ -263,7 +262,7 @@ sieve_tool_init_finish(struct sieve_tool *tool, bool init_mailstore,
 	tool->storage_service = mail_storage_service_init(
 		master_service, NULL, storage_service_flags);
 	if (mail_storage_service_lookup_next(
-		tool->storage_service, &service_input, &tool->service_user,
+		tool->storage_service, &service_input,
 		&tool->mail_user_dovecot, &errstr) <= 0)
 		i_fatal("%s", errstr);
 
@@ -334,7 +333,6 @@ void sieve_tool_deinit(struct sieve_tool **_tool)
 	if (tool->mail_user_dovecot != NULL)
 		mail_user_unref(&tool->mail_user_dovecot);
 
-	mail_storage_service_user_unref(&tool->service_user);
 	mail_storage_service_deinit(&tool->storage_service);
 
 	/* Free sieve tool object */
@@ -354,7 +352,6 @@ void sieve_tool_init_mail_user(struct sieve_tool *tool,
 			       const char *mail_location)
 {
 	struct mail_user *mail_user_dovecot = tool->mail_user_dovecot;
-	struct mail_storage_service_user *service_user;
 	const char *username = tool->username;
 	struct mail_namespace *ns = NULL;
 	const char *home = NULL, *errstr = NULL;
@@ -364,8 +361,7 @@ void sieve_tool_init_mail_user(struct sieve_tool *tool,
 		.unexpanded_set_parser = mail_user_dovecot->unexpanded_set_parser,
 		.no_userdb_lookup = TRUE,
 	};
-	if (mail_storage_service_lookup_next(tool->storage_service,
-					     &input, &service_user,
+	if (mail_storage_service_lookup_next(tool->storage_service, &input,
 					     &tool->mail_user, &errstr) < 0)
 		i_fatal("Test user lookup failed: %s", errstr);
 
diff --git a/src/managesieve/main.c b/src/managesieve/main.c
index 21eb2ffa36265ff98945047f8b43351e39ef0e6a..2d964cf12c33edda93c9435f4e99871473509da6 100644
--- a/src/managesieve/main.c
+++ b/src/managesieve/main.c
@@ -82,7 +82,7 @@ void managesieve_refresh_proctitle(void)
 
 static void client_kill_idle(struct client *client)
 {
-	mail_storage_service_io_activate_user(client->service_user);
+	mail_storage_service_io_activate_user(client->user->service_user);
 	client_send_bye(client, MASTER_SERVICE_SHUTTING_DOWN_MSG".");
 	client_destroy(client, MASTER_SERVICE_SHUTTING_DOWN_MSG);
 }
@@ -145,7 +145,6 @@ client_create_from_input(const struct mail_storage_service_input *input,
 			 const char **error_r)
 {
 	struct mail_storage_service_input service_input;
-	struct mail_storage_service_user *user;
 	struct mail_user *mail_user;
 	struct client *client;
 	struct managesieve_settings *set;
@@ -163,7 +162,7 @@ client_create_from_input(const struct mail_storage_service_input *input,
 	service_input = *input;
 	service_input.event_parent = event;
 	if (mail_storage_service_lookup_next(storage_service, &service_input,
-					     &user, &mail_user, error_r) <= 0) {
+					     &mail_user, error_r) <= 0) {
 		event_unref(&event);
 		return -1;
 	}
@@ -177,14 +176,13 @@ client_create_from_input(const struct mail_storage_service_input *input,
 	if (mail_user_var_expand(mail_user, &managesieve_setting_parser_info,
 				 set, &error) <= 0) {
 		e_error(event, "Failed to expand settings: %s", error);
-		mail_storage_service_user_unref(&user);
 		mail_user_unref(&mail_user);
 		event_unref(&event);
 		return -1;
 	}
 
 	client = client_create(fd_in, fd_out, input->session_id,
-			       event, mail_user, user, set);
+			       event, mail_user, set);
 	if (input_buf != NULL && input_buf->used > 0)
 		client_add_istream_prefix(client, input_buf);
 	client_create_finish(client);
diff --git a/src/managesieve/managesieve-client.c b/src/managesieve/managesieve-client.c
index 30b4dce6220cde7b2bf0c3415858663d8878eff2..604a7f03e8e1868f5c01d1cad478d065b7c5f01c 100644
--- a/src/managesieve/managesieve-client.c
+++ b/src/managesieve/managesieve-client.c
@@ -104,7 +104,6 @@ client_get_storage(struct sieve_instance *svinst, struct event *event,
 struct client *
 client_create(int fd_in, int fd_out, const char *session_id,
 	      struct event *event, struct mail_user *user,
-	      struct mail_storage_service_user *service_user,
 	      const struct managesieve_settings *set)
 {
 	struct client *client;
@@ -139,7 +138,6 @@ client_create(int fd_in, int fd_out, const char *session_id,
 	client->event = event;
 	event_ref(client->event);
 	client->set = set;
-	client->service_user = service_user;
 	client->session_id = p_strdup(pool, session_id);
 	client->fd_in = fd_in;
 	client->fd_out = fd_out;
@@ -281,7 +279,6 @@ void client_destroy(struct client *client, const char *reason)
 
 	event_unref(&client->cmd.event);
 	pool_unref(&client->cmd.pool);
-	mail_storage_service_user_unref(&client->service_user);
 
 	managesieve_client_count--;
 	DLLIST_REMOVE(&managesieve_clients, client);
@@ -781,7 +778,7 @@ int client_output(struct client *client)
 
 void client_kick(struct client *client)
 {
-	mail_storage_service_io_activate_user(client->service_user);
+	mail_storage_service_io_activate_user(client->user->service_user);
 	if (!client->command_pending)
 		client_send_bye(client, MASTER_SERVICE_SHUTTING_DOWN_MSG".");
 	client_destroy(client, MASTER_SERVICE_SHUTTING_DOWN_MSG);
diff --git a/src/managesieve/managesieve-client.h b/src/managesieve/managesieve-client.h
index 96a6646f07288f9eeebac76f7d345d2d1633062c..f674aa61820237f888fec3d03dd1a845a549e75d 100644
--- a/src/managesieve/managesieve-client.h
+++ b/src/managesieve/managesieve-client.h
@@ -49,7 +49,6 @@ struct client {
 	guid_128_t anvil_conn_guid;
 
 	pool_t pool;
-	struct mail_storage_service_user *service_user;
 	const struct managesieve_settings *set;
 
 	struct mail_user *user;
@@ -91,7 +90,6 @@ extern unsigned int managesieve_client_count;
 struct client *
 client_create(int fd_in, int fd_out, const char *session_id,
 	      struct event *event, struct mail_user *user,
-	      struct mail_storage_service_user *service_user,
 	      const struct managesieve_settings *set);
 void client_create_finish(struct client *client);
 void client_destroy(struct client *client, const char *reason);
diff --git a/src/testsuite/testsuite-mailstore.c b/src/testsuite/testsuite-mailstore.c
index 730e5507cda6cd78e2becb657214c5ddcf86a80e..bcf99606b6114b01cd72ca3aefab89a42d30f601 100644
--- a/src/testsuite/testsuite-mailstore.c
+++ b/src/testsuite/testsuite-mailstore.c
@@ -61,7 +61,6 @@ static char *testsuite_mailstore_attrs = NULL;
 
 void testsuite_mailstore_init(void)
 {
-	struct mail_storage_service_user *service_user;
 	struct mail_user *mail_user_dovecot, *mail_user;
 	struct mail_namespace *ns;
 	struct mail_namespace_settings *ns_set;
@@ -95,9 +94,8 @@ void testsuite_mailstore_init(void)
 	};
 	if (mail_storage_service_lookup_next(
 			sieve_tool_get_mail_storage_service(sieve_tool),
-			&input, &service_user, &mail_user, &error) < 0)
+			&input, &mail_user, &error) < 0)
 		i_fatal("Test user initialization failed: %s", error);
-	mail_storage_service_user_unref(&service_user);
 	mail_user->autocreated = TRUE;
 
 	ns_set = p_new(mail_user->pool, struct mail_namespace_settings, 1);