diff --git a/meson.build b/meson.build
index 965c48258c6ace6ed6fb4c5543bc2576477c3a2c..7a1ea671d22e459994ebe782e6dd2e727de9442c 100644
--- a/meson.build
+++ b/meson.build
@@ -62,7 +62,7 @@ core_sources =  [ 'src/mkv/write.c'
                 , 'src/net/command.c'
                 , 'src/net/listen.c'
                 , 'src/net/message.c'
-                , 'src/net/downloader.c'
+                , 'src/module/repo.c'
                 , 'src/config.c'
                 , 'src/uri.c'
                 , 'src/thread.c'
diff --git a/src/config.c b/src/config.c
index 7fd842ed029fc4f5b8416fff4f72962d1ccb3fe0..f22b715677ae69231627144f4af144c635ef4347 100644
--- a/src/config.c
+++ b/src/config.c
@@ -127,12 +127,14 @@ load_so(const char *const mod_path, const char *const mod_init, void *mod, struc
     *(void **) (&module_set_function) = reg_pick(mod_path, &handle, mod_init);
 
     if (module_set_function)
-        return ! module_set_function(mod, srv, handle);
-    else
+        return module_set_function(mod, srv, handle);
+    else {
+        LOG_ERROR_SCT("LOAD", "Failed to find init symbol %s", mod_init);
         return 1;
+    }
 }
 
-inline int
+int
 load_module_by_name(struct lkt_state *srv, const char *name, void *mod)
 {
     char mod_path[PATH_MAX], mod_load[INI_MAX_LINE_LEN];
diff --git a/src/module/module_sdl2.c b/src/module/module_sdl2.c
index 885229bc46299e92f992442fe6676f8b34c741cd..1f1001ad20bc3f25c9da510eaf786f28c2cb1651 100644
--- a/src/module/module_sdl2.c
+++ b/src/module/module_sdl2.c
@@ -260,7 +260,7 @@ module_set_function(void *arg__, struct lkt_state *srv, void *handle__)
 {
     RETURN_UNLESS(arg__ && handle__, "Invalid argument", 1);
     struct lkt_win *win = (struct lkt_win *) arg__;
-    win->srv = srv;
+    win->srv            = srv;
 
     win->new            = module_sdl2_new;
     win->close          = module_sdl2_close;
@@ -274,7 +274,7 @@ module_set_function(void *arg__, struct lkt_state *srv, void *handle__)
     win->attach         = module_sdl2_attach;
     win->handle         = handle__;
 
-    return 0;
+    return !module_sdl2_new(&srv->win);
 }
 
 bool
diff --git a/src/module/module_x11.c b/src/module/module_x11.c
index c6db99e04a0be31e57f98fb9dc0b760db98774c8..d0fc16d5eef5a311a0f161e4ecd16d4a044c8344 100644
--- a/src/module/module_x11.c
+++ b/src/module/module_x11.c
@@ -47,7 +47,7 @@ module_set_function(void *arg__, struct lkt_state *srv, void *handle__)
 {
     RETURN_UNLESS(arg__ && handle__, "Invalid arguments", 1);
     struct lkt_win *win = (struct lkt_win *) arg__;
-    win->srv = srv;
+    win->srv            = srv;
 
     win->new            = module_x11_new;
     win->close          = module_x11_close;
@@ -61,7 +61,7 @@ module_set_function(void *arg__, struct lkt_state *srv, void *handle__)
     win->attach         = module_x11_attach;
     win->handle         = handle__;
 
-    return 0;
+    return !module_x11_new(&srv->win);
 }
 
 /*
diff --git a/src/net/downloader.c b/src/module/repo.c
similarity index 99%
rename from src/net/downloader.c
rename to src/module/repo.c
index 37ec6716755ec1992c9a889b6f323e1d90b21896..48e240df5447cb0481d3a54e8bf07895ca685419 100644
--- a/src/net/downloader.c
+++ b/src/module/repo.c
@@ -90,7 +90,8 @@ repo_new(struct lkt_repo *const repo_, struct lkt_state *srv)
 int
 load_repo_https(void *mod, struct lkt_state *srv, void *handle)
 {
-    RETURN_UNLESS(mod && handle, "Invalid argument", 1);
+    UNUSED(handle);
+    RETURN_UNLESS(mod, "Invalid argument", 1);
     struct lkt_repo *repo = mod;
     return repo_new(repo, srv);
 }
diff --git a/src/net/listen.c b/src/net/listen.c
index 0e6a55c93a74826e3d9128bc76997299c92b98b0..a0ab1f1f0e7c96de18db6e17d5377f388d5523bf 100644
--- a/src/net/listen.c
+++ b/src/net/listen.c
@@ -701,7 +701,7 @@ lkt_listen(void)
     char *const kara_dir = memory + PATH_MAX + 1;   /* Size is PATH_MAX.        */
     char *const host     = kara_dir + PATH_MAX + 1; /* Size is HOST_NAME_MAX.   */
     char port[7];   /* Maximal port number is 65535, +2 for '\n' and '\0' */
-    char player_mod[INI_MAX_LINE_LEN];
+    char mod[INI_MAX_LINE_LEN];
     char conf_file[PATH_MAX];
     memset(&srv, 0, sizeof(struct lkt_state));
 
@@ -715,11 +715,11 @@ lkt_listen(void)
     RETURN_UNLESS(database_open(srv.db, db_path),                                             "Can't open database", 1);
 
     /* Read the configuration. */
-    RETURN_UNLESS(database_config_get_int (srv.db, "player",   "autoclear", &autoclear),                   "Cfg error", 2);
-    RETURN_UNLESS(database_config_get_text(srv.db, "database", "kara_dir",  kara_dir, PATH_MAX),           "Cfg error", 2);
-    RETURN_UNLESS(database_config_get_text(srv.db, "server",   "host",      host, HOST_NAME_MAX),          "Cfg error", 2);
-    RETURN_UNLESS(database_config_get_text(srv.db, "server",   "port",      port, 5),                      "Cfg error", 2);
-    RETURN_UNLESS(database_config_get_text(srv.db, "player",   "module",    player_mod, INI_MAX_LINE_LEN), "Cfg error", 2);
+    RETURN_UNLESS(database_config_get_int (srv.db, "player",   "autoclear", &autoclear),            "Cfg error", 2);
+    RETURN_UNLESS(database_config_get_text(srv.db, "database", "kara_dir",  kara_dir, PATH_MAX),    "Cfg error", 2);
+    RETURN_UNLESS(database_config_get_text(srv.db, "server",   "host",      host, HOST_NAME_MAX),   "Cfg error", 2);
+    RETURN_UNLESS(database_config_get_text(srv.db, "server",   "port",      port, 5),               "Cfg error", 2);
+    RETURN_UNLESS(database_config_get_text(srv.db, "player",   "module",    mod, INI_MAX_LINE_LEN), "Cfg error", 2);
 
     if (kara_dir[strlen(kara_dir) - 1] != '/')
         strncat(kara_dir, "/", PATH_MAX - 1);
@@ -741,10 +741,8 @@ lkt_listen(void)
     if (autoclear)
         database_queue_clear(srv.db);
 
-    RETURN_IF    (repo_new(&srv.repo, &srv),                        "Failed to create repo", 4);
-    RETURN_UNLESS(load_module_by_name(&srv, player_mod, &srv.win),  "Can't load module",     3);
-    RETURN_UNLESS(srv.win.new(&srv.win),                            "Can't create window",   3);
-    srv.win.attach(&srv.win, &srv);
+    RETURN_IF(load_module_by_name(&srv, mod,    &srv.win),  "Can't load module player", 3);
+    RETURN_IF(load_module_by_name(&srv, "repo", &srv.repo), "Can't load module repo", 3);
 
     for (;;) {
         if (handle_network_events(&srv) < 0)