diff --git a/src/lib-sieve/sieve-message.c b/src/lib-sieve/sieve-message.c
index d0868830b79c6c0d6d0ce660a746598578180754..17398d67f3275c37176ef5ed45d86819d1890d05 100644
--- a/src/lib-sieve/sieve-message.c
+++ b/src/lib-sieve/sieve-message.c
@@ -343,10 +343,11 @@ int sieve_message_substitute
 	i_assert(input->blocking);
 
 	if ( msgctx->raw_mail_user == NULL ) {
-		void **sets = master_service_settings_get_others(master_service);
-
+		const struct mail_user_settings *user_set =
+			master_service_settings_get_root_set(master_service,
+				&mail_user_setting_parser_info);
 		msgctx->raw_mail_user =
-			raw_storage_create_from_set(mail_user->set_info, sets[0]);
+			raw_storage_create_from_set(mail_user->set_info, user_set);
 	}
 
 	i_stream_seek(input, 0);
diff --git a/src/lib-sieve/util/edit-mail.c b/src/lib-sieve/util/edit-mail.c
index 1ad9406c1d560398593f96e8bed1f619745d82f2..04b03c39df5c4039c92694e5b2eab0d4c6693067 100644
--- a/src/lib-sieve/util/edit-mail.c
+++ b/src/lib-sieve/util/edit-mail.c
@@ -48,11 +48,11 @@ static unsigned int edit_mail_refcount = 0;
 static struct mail_user *edit_mail_raw_storage_get(struct mail_user *mail_user)
 {
 	if (edit_mail_user == NULL) {
-		void **sets =
-			master_service_settings_get_others(master_service);
-
+		const struct mail_user_settings *user_set =
+			master_service_settings_get_root_set(master_service,
+				&mail_user_setting_parser_info);
 		edit_mail_user = raw_storage_create_from_set(
-			mail_user->set_info, sets[0]);
+			mail_user->set_info, user_set);
 	}
 
 	edit_mail_refcount++;
diff --git a/src/lib-sieve/util/mail-raw.c b/src/lib-sieve/util/mail-raw.c
index b357fe1beadb723e2c69a4105285cf3f957b6d47..d9729a9fb837bff64909666de3de187144f2d374 100644
--- a/src/lib-sieve/util/mail-raw.c
+++ b/src/lib-sieve/util/mail-raw.c
@@ -137,9 +137,10 @@ static struct istream *mail_raw_create_stream
 struct mail_user *mail_raw_user_create
 (struct master_service *service, struct mail_user *mail_user)
 {
-	void **sets = master_service_settings_get_others(service);
-
-	return raw_storage_create_from_set(mail_user->set_info, sets[0]);
+	const struct mail_user_settings *user_set =
+		master_service_settings_get_root_set(service,
+			&mail_user_setting_parser_info);
+	return raw_storage_create_from_set(mail_user->set_info, user_set);
 }
 
 /*
diff --git a/src/managesieve/main.c b/src/managesieve/main.c
index 7c0e90587cc7520d4a7b948fc8108a86d60b12ed..166fd7e1fa3711fc89366aff1ab18639bc491fa0 100644
--- a/src/managesieve/main.c
+++ b/src/managesieve/main.c
@@ -14,6 +14,7 @@
 #include "restrict-access.h"
 #include "settings-parser.h"
 #include "master-interface.h"
+#include "master-service-settings.h"
 #include "master-admin-client.h"
 #include "master-service.h"
 #include "login-server.h"
@@ -168,7 +169,8 @@ client_create_from_input(const struct mail_storage_service_input *input,
 	}
 	restrict_access_allow_coredumps(TRUE);
 
-	set = mail_storage_service_user_get_set(user)[1];
+	set = master_service_settings_get_root_set(master_service,
+		&managesieve_setting_parser_info);
 	if (set->verbose_proctitle)
 		verbose_proctitle = TRUE;
 
diff --git a/src/managesieve/managesieve-capabilities.c b/src/managesieve/managesieve-capabilities.c
index c72558f0c48a1824e569aede4868ed2d15674eb4..f261ea25d27e3c3e9179f6a9175a0ab3ce4125ff 100644
--- a/src/managesieve/managesieve-capabilities.c
+++ b/src/managesieve/managesieve-capabilities.c
@@ -60,8 +60,8 @@ static struct plugin_settings *plugin_settings_read(void)
 		master_service, plugin_set_roots, &error) < 0)
 		i_fatal("Error reading configuration: %s", error);
 
-	return (struct plugin_settings *)
-		master_service_settings_get_others(master_service)[0];
+	return master_service_settings_get_root_set(master_service,
+				plugin_set_roots[0]);
 }
 
 static const char *