diff --git a/src/base/commands.c b/src/base/commands.c
index 353573f804b2b2f4a5ee442c7e665c4d383aa5cc..7a6f8c0a88dbded2fd18cd39271f572181cafa8b 100644
--- a/src/base/commands.c
+++ b/src/base/commands.c
@@ -591,34 +591,22 @@ command_idle(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX])
     bool once;
     size_t i;
 
-#pragma message(TODO "Use a lookup table here...")
     for (once = false, i = 0; args[i]; ++i, once |= true) {
-        if (STR_MATCH(args[i], "database"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_DATABASE);
-        else if (STR_MATCH(args[i], "update"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_UPDATE);
-        else if (STR_MATCH(args[i], "stored_playlist"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_STORED_PLAYLIST);
-        else if (STR_MATCH(args[i], "playlist"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_PLAYLIST);
-        else if (STR_MATCH(args[i], "player"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_PLAYER);
-        else if (STR_MATCH(args[i], "mixer"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_MIXER);
-        else if (STR_MATCH(args[i], "output"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_OUTPUT);
-        else if (STR_MATCH(args[i], "options"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_OPTIONS);
-        else if (STR_MATCH(args[i], "partition"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_PARTITION);
-        else if (STR_MATCH(args[i], "sticker"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_STICKER);
-        else if (STR_MATCH(args[i], "subscription"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_SUBSCRIPTION);
-        else if (STR_MATCH(args[i], "message"))
-            lkt_client_add_mask(srv, c, MPD_IDLE_MESSAGE);
-        else
-            lkt_client_add_mask(srv, c, MPD_IDLE_ALL);
+        MPD_IDLE_FLAG idle_mask =
+            (STR_MATCH(args[i], "database") * MPD_IDLE_DATABASE) +
+            (STR_MATCH(args[i], "update") * MPD_IDLE_UPDATE) +
+            (STR_MATCH(args[i], "stored_playlist") * MPD_IDLE_STORED_PLAYLIST) +
+            (STR_MATCH(args[i], "playlist") * MPD_IDLE_PLAYLIST) +
+            (STR_MATCH(args[i], "player") * MPD_IDLE_PLAYER) +
+            (STR_MATCH(args[i], "mixer") * MPD_IDLE_MIXER) +
+            (STR_MATCH(args[i], "output") * MPD_IDLE_OUTPUT) +
+            (STR_MATCH(args[i], "options") * MPD_IDLE_OPTIONS) +
+            (STR_MATCH(args[i], "partition") * MPD_IDLE_PARTITION) +
+            (STR_MATCH(args[i], "sticker") * MPD_IDLE_STICKER) +
+            (STR_MATCH(args[i], "subscription") * MPD_IDLE_SUBSCRIPTION) +
+            (STR_MATCH(args[i], "message") * MPD_IDLE_MESSAGE);
+        idle_mask = idle_mask + ((unsigned int)(!(bool)(idle_mask)) * MPD_IDLE_ALL);
+        lkt_client_add_mask(srv, c, idle_mask);
     }
 
     if (!once)