diff --git a/src/lib-sieve-tool/sieve-tool.c b/src/lib-sieve-tool/sieve-tool.c
index 99662174c26e0441cf87cc8477a3202ef0d7bcce..1f5433db529f9c6f47b8cc4a8d05e1522f606185 100644
--- a/src/lib-sieve-tool/sieve-tool.c
+++ b/src/lib-sieve-tool/sieve-tool.c
@@ -352,7 +352,7 @@ void sieve_tool_init_mail_user(struct sieve_tool *tool,
 	struct mail_namespace *ns = NULL;
 	const char *home = NULL, *errstr = NULL;
 
-	struct master_service_settings_instance *set_instance =
+	struct settings_instance *set_instance =
 		mail_storage_service_user_get_settings_instance(mail_user_dovecot->service_user);
 	struct mail_storage_service_input input = {
 		.username = username,
diff --git a/src/lib-sieve/sieve-message.c b/src/lib-sieve/sieve-message.c
index 0169ce20436efe5a9dd3a2906f7da41d01786358..e860ab315fb7cd0d279a0eca049968eeb5477c90 100644
--- a/src/lib-sieve/sieve-message.c
+++ b/src/lib-sieve/sieve-message.c
@@ -347,7 +347,7 @@ int sieve_message_substitute
 		struct mail_storage_service_ctx *storage_service =
 			mail_storage_service_user_get_service_ctx(
 				mail_user->service_user);
-		struct master_service_settings_instance *set_instance =
+		struct settings_instance *set_instance =
 			mail_storage_service_user_get_settings_instance(mail_user->service_user);
 		msgctx->raw_mail_user =
 			raw_storage_create_from_set(storage_service, set_instance);
diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.c b/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.c
index 35fe5cba7b5250601431a0be7969ced9a3a9b32d..3c15cb13dfc5ff2b014de43f9e7bae8d76c6dfdd 100644
--- a/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.c
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.c
@@ -3,7 +3,7 @@
 
 #include "lib.h"
 #include "env-util.h"
-#include "settings.h"
+#include "settings-legacy.h"
 
 #include "sieve-common.h"
 
diff --git a/src/lib-sieve/util/edit-mail.c b/src/lib-sieve/util/edit-mail.c
index d4ad6395b96f4f1d0f5e209362e833f0ca902a6b..61bff6b130ec6ffd0e58c9c1c133ba609519f69e 100644
--- a/src/lib-sieve/util/edit-mail.c
+++ b/src/lib-sieve/util/edit-mail.c
@@ -52,7 +52,7 @@ static struct mail_user *edit_mail_raw_storage_get(struct mail_user *mail_user)
 		struct mail_storage_service_ctx *storage_service =
 			mail_storage_service_user_get_service_ctx(
 				mail_user->service_user);
-		struct master_service_settings_instance *set_instance =
+		struct settings_instance *set_instance =
 			mail_storage_service_user_get_settings_instance(mail_user->service_user);
 		edit_mail_user =
 			raw_storage_create_from_set(storage_service, set_instance);
diff --git a/src/lib-sieve/util/mail-raw.c b/src/lib-sieve/util/mail-raw.c
index 0ef20592a2cda15c5b1bd8fa1e566f8446656506..69a8a7d950be911a3c9b9927421795751ebbd101 100644
--- a/src/lib-sieve/util/mail-raw.c
+++ b/src/lib-sieve/util/mail-raw.c
@@ -140,7 +140,7 @@ struct mail_user *mail_raw_user_create(struct mail_user *mail_user)
 	struct mail_storage_service_ctx *storage_service =
 		mail_storage_service_user_get_service_ctx(
 			mail_user->service_user);
-	struct master_service_settings_instance *set_instance =
+	struct settings_instance *set_instance =
 		mail_storage_service_user_get_settings_instance(mail_user->service_user);
 	return raw_storage_create_from_set(storage_service, set_instance);
 }
diff --git a/src/managesieve-login/client.c b/src/managesieve-login/client.c
index 1f478889681b1c17362b799e7142d51bc4fd0411..d44d5a2ae857177deecdfb7533d75e66f5d89cfa 100644
--- a/src/managesieve-login/client.c
+++ b/src/managesieve-login/client.c
@@ -10,8 +10,8 @@
 #include "str.h"
 #include "strescape.h"
 #include "base64.h"
+#include "settings.h"
 #include "master-service.h"
-#include "master-service-settings.h"
 #include "auth-client.h"
 
 #include "managesieve-parser.h"
@@ -380,9 +380,8 @@ static int managesieve_client_create(struct client *client)
 		(struct managesieve_client *)client;
 	const char *error;
 
-	if (master_service_settings_get(client->event,
-			&managesieve_login_setting_parser_info, 0,
-			&msieve_client->set, &error) < 0) {
+	if (settings_get(client->event, &managesieve_login_setting_parser_info, 0,
+			 &msieve_client->set, &error) < 0) {
 		e_error(client->event, "%s", error);
 		return -1;
 	}
@@ -398,7 +397,7 @@ static void managesieve_client_destroy(struct client *client)
 		(struct managesieve_client *)client;
 
 	managesieve_parser_destroy(&managesieve_client->parser);
-	master_service_settings_free(managesieve_client->set);
+	settings_free(managesieve_client->set);
 }
 
 static void managesieve_client_notify_auth_ready(struct client *client)
diff --git a/src/managesieve/main.c b/src/managesieve/main.c
index 928fe66a349e24c72ff4c4dcc45fd807f20c1c0e..b3f82cde1eac63aa3cf2673c19a41045707baee6 100644
--- a/src/managesieve/main.c
+++ b/src/managesieve/main.c
@@ -12,6 +12,7 @@
 #include "base64.h"
 #include "process-title.h"
 #include "restrict-access.h"
+#include "settings.h"
 #include "settings-parser.h"
 #include "master-interface.h"
 #include "master-service-settings.h"
@@ -167,10 +168,8 @@ client_create_from_input(const struct mail_storage_service_input *input,
 	}
 	restrict_access_allow_coredumps(TRUE);
 
-	if (master_service_settings_instance_get(mail_user->event,
-			mail_user->set_instance,
-			&managesieve_setting_parser_info, 0,
-			&set, error_r) < 0) {
+	if (settings_get(mail_user->event, &managesieve_setting_parser_info, 0,
+			 &set, error_r) < 0) {
 		mail_user_unref(&mail_user);
 		event_unref(&event);
 		return -1;
diff --git a/src/managesieve/managesieve-capabilities.c b/src/managesieve/managesieve-capabilities.c
index 4388b4efd9f5d1322d5cf433795ab746ba05c05d..baa35d83be43751dcefd9d07c2ecb1d8fb7ee168 100644
--- a/src/managesieve/managesieve-capabilities.c
+++ b/src/managesieve/managesieve-capabilities.c
@@ -5,9 +5,9 @@
 #include "array.h"
 #include "hostpid.h"
 #include "var-expand.h"
+#include "settings.h"
 #include "settings-parser.h"
 #include "master-service.h"
-#include "master-service-settings.h"
 
 #include "sieve.h"
 
@@ -68,7 +68,8 @@ void managesieve_capabilities_dump(void)
 
 	/* Read plugin settings */
 
-	global_plugin_settings = master_service_settings_get_or_fatal(NULL,
+	global_plugin_settings = settings_get_or_fatal(
+		master_service_get_event(master_service),
 		&managesieve_plugin_setting_parser_info);
 
 	/* Initialize Sieve engine */
@@ -91,6 +92,6 @@ void managesieve_capabilities_dump(void)
 		       sieve_get_capabilities(svinst, "notify"));
 	}
 
-	master_service_settings_free(global_plugin_settings);
+	settings_free(global_plugin_settings);
 	sieve_deinit(&svinst);
 }
diff --git a/src/managesieve/managesieve-client.c b/src/managesieve/managesieve-client.c
index 90630afdbee6a2b5eb7f8d63a8b2087feb5871c5..3a7e6f5d29329ff30568a14b983e4a05693ba66d 100644
--- a/src/managesieve/managesieve-client.c
+++ b/src/managesieve/managesieve-client.c
@@ -13,8 +13,8 @@
 #include "iostream-rawlog.h"
 #include "var-expand.h"
 #include "time-util.h"
+#include "settings.h"
 #include "master-service.h"
-#include "master-service-settings.h"
 #include "mail-storage-service.h"
 #include "mail-namespace.h"
 
@@ -281,7 +281,7 @@ void client_destroy(struct client *client, const char *reason)
 
 	event_unref(&client->cmd.event);
 	pool_unref(&client->cmd.pool);
-	master_service_settings_free(client->set);
+	settings_free(client->set);
 
 	managesieve_client_count--;
 	DLLIST_REMOVE(&managesieve_clients, client);
diff --git a/src/testsuite/testsuite-mailstore.c b/src/testsuite/testsuite-mailstore.c
index e456bbba6828fe34346015e37af345a9fb8e5145..6e1673c57212291a329d41afb1339ce9ee2ba548 100644
--- a/src/testsuite/testsuite-mailstore.c
+++ b/src/testsuite/testsuite-mailstore.c
@@ -86,7 +86,7 @@ void testsuite_mailstore_init(void)
 		t_strconcat("home=", cwd, NULL),
 		NULL,
 	};
-	struct master_service_settings_instance *set_instance =
+	struct settings_instance *set_instance =
 		mail_storage_service_user_get_settings_instance(mail_user_dovecot->service_user);
 	struct mail_storage_service_input input = {
 		.username = "testsuite-mail-user@example.org",