diff --git a/src/managesieve-login/client.c b/src/managesieve-login/client.c
index 6def80b4a2bf1a63a659920562be4f56b86efa35..8e5dded63b9eee1ff4c7e6489d46f7472bb2a340 100644
--- a/src/managesieve-login/client.c
+++ b/src/managesieve-login/client.c
@@ -58,11 +58,17 @@ static void client_send_capabilities(struct client *client)
 {
 	struct managesieve_client *msieve_client =
 		container_of(client, struct managesieve_client, common);
+	const ARRAY_TYPE(const_string) *sieve_cap_list =
+		&msieve_client->set->managesieve_sieve_capability;
+	const ARRAY_TYPE(const_string) *notify_cap_list =
+		&msieve_client->set->managesieve_notify_capability;
 	const char *sieve_cap, *notify_cap, *sasl_cap;
 
 	T_BEGIN {
-		sieve_cap = msieve_client->set->managesieve_sieve_capability;
-		notify_cap = msieve_client->set->managesieve_notify_capability;
+		sieve_cap = t_strarray_join(
+			settings_boollist_get(sieve_cap_list), " ");
+		notify_cap = t_strarray_join(
+			settings_boollist_get(notify_cap_list), " ");
 		sasl_cap = client_authenticate_get_capabilities(client);
 
 		/* Default capabilities */
diff --git a/src/managesieve-login/managesieve-login-settings.c b/src/managesieve-login/managesieve-login-settings.c
index 880970a4aba841cca5ce80c97fdc1139aad283cc..2819d2ad27bf71c5d9ba0ff8192d236dbff4fc3c 100644
--- a/src/managesieve-login/managesieve-login-settings.c
+++ b/src/managesieve-login/managesieve-login-settings.c
@@ -59,16 +59,16 @@ const struct setting_keyvalue managesieve_login_settings_service_settings_defaul
 
 static const struct setting_define managesieve_login_setting_defines[] = {
 	DEF(STR, managesieve_implementation_string),
-	DEF(STR, managesieve_sieve_capability),
-	DEF(STR, managesieve_notify_capability),
+	DEF(BOOLLIST, managesieve_sieve_capability),
+	DEF(BOOLLIST, managesieve_notify_capability),
 
 	SETTING_DEFINE_LIST_END
 };
 
 static const struct managesieve_login_settings managesieve_login_default_settings = {
 	.managesieve_implementation_string = DOVECOT_NAME " " PIGEONHOLE_NAME,
-	.managesieve_sieve_capability = "",
-	.managesieve_notify_capability = "",
+	.managesieve_sieve_capability = ARRAY_INIT,
+	.managesieve_notify_capability = ARRAY_INIT,
 };
 
 const struct setting_parser_info managesieve_login_setting_parser_info = {
diff --git a/src/managesieve-login/managesieve-login-settings.h b/src/managesieve-login/managesieve-login-settings.h
index aef5472ba7d180df82b338b444f28d9ae6a95f84..c20a9db75fdb27ae95afcb8c9f16a285d631cf7d 100644
--- a/src/managesieve-login/managesieve-login-settings.h
+++ b/src/managesieve-login/managesieve-login-settings.h
@@ -4,8 +4,8 @@
 struct managesieve_login_settings {
 	pool_t pool;
 	const char *managesieve_implementation_string;
-	const char *managesieve_sieve_capability;
-	const char *managesieve_notify_capability;
+	ARRAY_TYPE(const_string) managesieve_sieve_capability;
+	ARRAY_TYPE(const_string) managesieve_notify_capability;
 };
 
 extern const struct setting_parser_info managesieve_login_setting_parser_info;