diff --git a/src/lib-sieve-tool/sieve-tool.c b/src/lib-sieve-tool/sieve-tool.c
index c2320f0e40b0671d36c8988c31dd1b598e32ddd2..99662174c26e0441cf87cc8477a3202ef0d7bcce 100644
--- a/src/lib-sieve-tool/sieve-tool.c
+++ b/src/lib-sieve-tool/sieve-tool.c
@@ -138,6 +138,7 @@ sieve_tool_init(const char *name, int *argc, char **argv[],
 		MASTER_SERVICE_FLAG_STANDALONE |
 		MASTER_SERVICE_FLAG_DONT_SEND_STATS |
 		MASTER_SERVICE_FLAG_NO_INIT_DATASTACK_FRAME;
+	const char *error;
 
 	if (no_config)
 		service_flags |= MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS;
@@ -151,6 +152,8 @@ sieve_tool_init(const char *name, int *argc, char **argv[],
 
 	i_array_init(&tool->sieve_plugins, 16);
 
+	if (master_service_settings_read_simple(master_service, &error) < 0)
+		i_fatal("%s", error);
 	return tool;
 }
 
@@ -221,8 +224,7 @@ sieve_tool_init_finish(struct sieve_tool *tool, bool init_mailstore,
 {
 	enum mail_storage_service_flags storage_service_flags =
 		MAIL_STORAGE_SERVICE_FLAG_NO_CHDIR |
-		MAIL_STORAGE_SERVICE_FLAG_NO_LOG_INIT |
-		MAIL_STORAGE_SERVICE_FLAG_USE_SYSEXITS;
+		MAIL_STORAGE_SERVICE_FLAG_NO_LOG_INIT;
 	struct mail_storage_service_input service_input;
 	struct sieve_environment svenv;
 	const char *username = tool->username;
diff --git a/src/lib-sieve/util/test-edit-mail.c b/src/lib-sieve/util/test-edit-mail.c
index 4051d664a399dce5d1f961a344541a5b11958ed3..e29bb85fb82cbc57dc68633ca7c59a43230d7ac9 100644
--- a/src/lib-sieve/util/test-edit-mail.c
+++ b/src/lib-sieve/util/test-edit-mail.c
@@ -10,6 +10,7 @@
 #include "istream-crlf.h"
 #include "unlink-directory.h"
 #include "master-service.h"
+#include "master-service-settings.h"
 #include "istream-header-filter.h"
 #include "mail-storage.h"
 #include "mail-storage-service.h"
@@ -882,6 +883,8 @@ int main(int argc, char *argv[])
 
 	master_service = master_service_init("test-edit-header", service_flags,
 					     &argc, &argv, "");
+	if (master_service_settings_read_simple(master_service, &error) < 0)
+		i_fatal("%s", error);
 	master_service_init_finish(master_service);
 
 	if (t_get_working_dir(&cwd, &error) < 0)
diff --git a/src/managesieve/main.c b/src/managesieve/main.c
index 7c280b5f33626b2a56a2387ff1b1801c9ca16712..57fbca947cd3614b5c05bdb994a1908e1672e8ec 100644
--- a/src/managesieve/main.c
+++ b/src/managesieve/main.c
@@ -349,6 +349,9 @@ int main(int argc, char *argv[])
 	/* plugins may want to add commands, so this needs to be called early */
 	commands_init();
 
+	if (master_service_settings_read_simple(master_service, &error) < 0)
+		i_fatal("%s", error);
+
 	/* Dump capabilities if requested */
 	if (getenv("DUMP_CAPABILITY") != NULL) {
 		i_set_debug_file("/dev/null");
diff --git a/src/managesieve/managesieve-capabilities.c b/src/managesieve/managesieve-capabilities.c
index 24042af95fc931e1e1027b108c1486a16823c359..4388b4efd9f5d1322d5cf433795ab746ba05c05d 100644
--- a/src/managesieve/managesieve-capabilities.c
+++ b/src/managesieve/managesieve-capabilities.c
@@ -22,17 +22,6 @@
  */
 
 
-static const struct plugin_settings *plugin_settings_read(void)
-{
-	const char *error;
-
-	if (master_service_settings_read_simple(master_service, &error) < 0)
-		i_fatal("Error reading configuration: %s", error);
-
-	return master_service_settings_get_or_fatal(NULL,
-		&managesieve_plugin_setting_parser_info);
-}
-
 static const char *
 plugin_settings_get(const struct plugin_settings *set, const char *identifier)
 {
@@ -79,7 +68,8 @@ void managesieve_capabilities_dump(void)
 
 	/* Read plugin settings */
 
-	global_plugin_settings = plugin_settings_read();
+	global_plugin_settings = master_service_settings_get_or_fatal(NULL,
+		&managesieve_plugin_setting_parser_info);
 
 	/* Initialize Sieve engine */