diff --git a/src/net/listen.c b/src/net/listen.c
index cc0411972673598c353704ec8a14c6c2d26725ba..761ca87e171ff81e3ca5ad2989cd824575837b98 100644
--- a/src/net/listen.c
+++ b/src/net/listen.c
@@ -177,25 +177,25 @@ handle_simple_command(struct lkt_state *srv, size_t c, struct lkt_command cmd)
             err = 0;
 
         else if (STR_MATCH(cmd.name, "next"))
-            err = !command_next(srv->db, &srv->win, &srv->mpd_idle_events);
+            err = !command_next(srv, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "pause"))
-            err = !command_pause(srv->db, &srv->win, &srv->mpd_idle_events);
+            err = !command_pause(srv, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "previous"))
-            err = !command_previous(srv->db, &srv->win, &srv->mpd_idle_events);
+            err = !command_previous(srv, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "play"))
-            err = ! command_play(srv->db, &srv->win, cmd.args, &srv->mpd_idle_events);
+            err = ! command_play(srv, cmd.args, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "playid"))
-            err = ! command_playid(srv->db, &srv->win, cmd.args, &srv->mpd_idle_events);
+            err = ! command_playid(srv, cmd.args, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "stop"))
-            err = !command_stop(srv->db, &srv->win, &srv->mpd_idle_events);
+            err = !command_stop(srv, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "clear"))
-            err = !command_clear(srv->db, &srv->mpd_idle_events);
+            err = !command_clear(srv, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "crop"))
-            err = !command_crop(srv->db, &srv->mpd_idle_events);
+            err = !command_crop(srv, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "moveid"))
-            err = !command_move(srv->db, cmd.args, &srv->mpd_idle_events);
+            err = !command_move(srv, cmd.args, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "shuffle"))
-            err = !command_shuffle(srv->db, &srv->mpd_idle_events);
+            err = !command_shuffle(srv, &srv->mpd_idle_events);
 
         else if (STR_MATCH(cmd.name, "playlist") || STR_MATCH(cmd.name, "playlistinfo"))
             err = !command_queue_list(srv, c, cmd.args);
@@ -217,37 +217,33 @@ handle_simple_command(struct lkt_state *srv, size_t c, struct lkt_command cmd)
             err = !command_help(srv, c);
 
         else if (STR_MATCH(cmd.name, "__insert"))
-            err = ! command_add(srv->db, &srv->win, cmd.args,
-                                &srv->mpd_idle_events, 5);
+            err = ! command_add(srv, cmd.args, &srv->mpd_idle_events, 5);
         else if (STR_MATCH(cmd.name, "searchadd")   ||
                  STR_MATCH(cmd.name, "findadd")     ||
                  STR_MATCH(cmd.name, "add"))
-            err = ! command_add(srv->db, &srv->win, cmd.args,
-                                &srv->mpd_idle_events, 1);
+            err = ! command_add(srv, cmd.args, &srv->mpd_idle_events, 1);
         else if (STR_MATCH(cmd.name, "addid"))
-            err = ! command_addid(srv->db, &srv->win, cmd.args,
-                                  &srv->mpd_idle_events);
+            err = ! command_addid(srv, cmd.args, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "deleteid"))
             err = ! (cmd.args[0] != NULL &&
-                     command_delid(srv->db, &srv->win, cmd.args[0],
-                                   &srv->mpd_idle_events));
+                     command_delid(srv, cmd.args[0], &srv->mpd_idle_events));
 
         else if (STR_MATCH(cmd.name, "playlistclear"))
-            err = ! command_plt_clear(srv->db, cmd.args, &srv->mpd_idle_events);
+            err = ! command_plt_clear(srv, cmd.args, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "rename"))
-            err = ! command_plt_rename(srv->db, cmd.args, &srv->mpd_idle_events);
+            err = ! command_plt_rename(srv, cmd.args, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "playlistdelete"))
-            err = ! command_plt_remove(srv->db, cmd.args, &srv->mpd_idle_events);
+            err = ! command_plt_remove(srv, cmd.args, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "playlistadd"))
-            err = ! command_plt_add(srv->db, cmd.args, &srv->mpd_idle_events);
+            err = ! command_plt_add(srv, cmd.args, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "rm") && cmd.args[0] != NULL && cmd.args[1] == NULL)
-            err = ! command_plt_remove(srv->db, cmd.args, &srv->mpd_idle_events);
+            err = ! command_plt_remove(srv, cmd.args, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "save"))
-            err = ! command_plt_export(srv->db, cmd.args, &srv->mpd_idle_events);
+            err = ! command_plt_export(srv, cmd.args, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "__import"))
-            err = ! command_plt_import(srv->db, cmd.args, &srv->mpd_idle_events);
+            err = ! command_plt_import(srv, cmd.args, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "__dump"))
-            err = ! command_dump(srv->db, cmd.args, &srv->mpd_idle_events);
+            err = ! command_dump(srv, cmd.args, &srv->mpd_idle_events);
         else if (STR_MATCH(cmd.name, "listplaylist"))
             err = ! command_find(srv, c, cmd.args, cmd.cont, database_search_playlist_init);
 
@@ -729,16 +725,16 @@ redo:
         if (NULL == (string = malloc(BUFFER_MAX * sizeof(char))))
             return;
         safe_snprintf(string, BUFFER_MAX, "%ld", (size_t) evt.attr);
-        command_play(srv->db, &srv->win, &string, &srv->mpd_idle_events);
+        command_play(srv, &string, &srv->mpd_idle_events);
         free(string);
         break;
 
     case lkt_event_play_next:
-        command_next(srv->db, &srv->win, &srv->mpd_idle_events);
+        command_next(srv, &srv->mpd_idle_events);
         break;
 
     case lkt_event_play_prev:
-        command_previous(srv->db, &srv->win, &srv->mpd_idle_events);
+        command_previous(srv, &srv->mpd_idle_events);
         break;
 
     case lkt_event_play_toggle:
@@ -770,7 +766,7 @@ redo:
         if (NULL == (string = malloc(PATH_MAX * sizeof(char))))
             return;
         database_queue_skip_current(srv->db, string);
-        srv->win.load_file(&srv->win, string);
+        MOD_CALL(srv->window_mod, "load_file", string);
         free(string);
         break;
 
@@ -801,7 +797,6 @@ lkt_listen(struct lkt_state *srv)
             break;
         if (handle_idle_events(srv) < 0)
             break;
-        srv->win.handle_events(&srv->win, srv->db, &srv->mpd_idle_events);
         handle_queue_events(srv);
     }
 }