diff --git a/src/managesieve-login/managesieve-login-settings.c b/src/managesieve-login/managesieve-login-settings.c
index fcf30368b02cc4589ffb54e96a6b454877601242..c45c4cb44f8f04e0947977e1e7fc48ef097fcc2f 100644
--- a/src/managesieve-login/managesieve-login-settings.c
+++ b/src/managesieve-login/managesieve-login-settings.c
@@ -60,12 +60,12 @@ struct service_settings managesieve_login_settings_service_settings = {
 
 #undef DEF
 #define DEF(type, name) \
-	{ type, #name, offsetof(struct managesieve_login_settings, name), NULL }
+	SETTING_DEFINE_STRUCT_##type(#name, name, struct managesieve_login_settings)
 
 static const struct setting_define managesieve_login_setting_defines[] = {
-	DEF(SET_STR, managesieve_implementation_string),
-	DEF(SET_STR, managesieve_sieve_capability),
-	DEF(SET_STR, managesieve_notify_capability),
+	DEF(STR, managesieve_implementation_string),
+	DEF(STR, managesieve_sieve_capability),
+	DEF(STR, managesieve_notify_capability),
 
 	SETTING_DEFINE_LIST_END
 };
diff --git a/src/managesieve/managesieve-capabilities.c b/src/managesieve/managesieve-capabilities.c
index 4dbc6df8019cb8cfc168b1c96c54ee83e738cdd8..c72558f0c48a1824e569aede4868ed2d15674eb4 100644
--- a/src/managesieve/managesieve-capabilities.c
+++ b/src/managesieve/managesieve-capabilities.c
@@ -27,13 +27,9 @@ struct plugin_settings {
 
 static const struct setting_parser_info **plugin_set_roots;
 
-#undef DEF
-#define DEF(type, name) \
-	{ type, #name, offsetof(struct plugin_settings, name), NULL }
-
 static const struct setting_define plugin_setting_defines[] = {
-	{ SET_STRLIST, "plugin",
-	  offsetof(struct plugin_settings, plugin_envs), NULL },
+	{ .type = SET_STRLIST, .key = "plugin",
+	  .offset = offsetof(struct plugin_settings, plugin_envs) },
 
 	SETTING_DEFINE_LIST_END
 };
diff --git a/src/managesieve/managesieve-settings.c b/src/managesieve/managesieve-settings.c
index 6b2aef59adf99c23b56b0b0489c06cd3e5d15541..189a4bc4400f0993a4ca3d6a2b871c03abb60b9b 100644
--- a/src/managesieve/managesieve-settings.c
+++ b/src/managesieve/managesieve-settings.c
@@ -56,23 +56,19 @@ struct service_settings managesieve_settings_service_settings = {
 };
 
 #undef DEF
-#undef DEFLIST
 #define DEF(type, name) \
-	{ type, #name, offsetof(struct managesieve_settings, name), NULL }
-#define DEFLIST(field, name, defines) \
-	{ SET_DEFLIST, name, \
-	  offsetof(struct managesieve_settings, field), defines }
+	SETTING_DEFINE_STRUCT_##type(#name, name, struct managesieve_settings)
 
 static struct setting_define managesieve_setting_defines[] = {
-	DEF(SET_BOOL, mail_debug),
-	DEF(SET_BOOL, verbose_proctitle),
-	DEF(SET_STR_VARS, rawlog_dir),
-
-	DEF(SET_SIZE, managesieve_max_line_length),
-	DEF(SET_STR, managesieve_implementation_string),
-	DEF(SET_STR, managesieve_client_workarounds),
-	DEF(SET_STR, managesieve_logout_format),
-	DEF(SET_UINT, managesieve_max_compile_errors),
+	DEF(BOOL, mail_debug),
+	DEF(BOOL, verbose_proctitle),
+	DEF(STR_VARS, rawlog_dir),
+
+	DEF(SIZE, managesieve_max_line_length),
+	DEF(STR, managesieve_implementation_string),
+	DEF(STR, managesieve_client_workarounds),
+	DEF(STR, managesieve_logout_format),
+	DEF(UINT, managesieve_max_compile_errors),
 
 
 	SETTING_DEFINE_LIST_END