diff --git a/src/database/open.c b/src/database/open.c
index c1b65d44dab7e0dd0c97e0924663195e767d8b17..497d71ff95c62bd2f6c88ff1bb7035e2bb9d89f2 100644
--- a/src/database/open.c
+++ b/src/database/open.c
@@ -48,7 +48,7 @@ __close_databases(void)
         free((void *) item->name);
         free(item);
     }
-    LOG_INFO_SCT("DB", "%s", "All db closed");
+    LOG_INFO_SCT("GARBAGE", "%s", "All db closed");
     stack_free(&db_stack);
 }
 
diff --git a/src/main/server.c b/src/main/server.c
index 3e564323db9c306daee4b250bfd4fc53a9989d55..5a5d969dd6487941697b4b29b4fe2d8c582ed7fc 100644
--- a/src/main/server.c
+++ b/src/main/server.c
@@ -35,6 +35,25 @@ REG_ADD(load_x11)
 #endif
 REG_END()
 
+char *db_path   = NULL;
+char *kara_dir  = NULL;
+char *conf_file = NULL;
+struct lkt_state srv;
+
+static void
+__garbage_collect(void)
+{
+    if (db_path)
+        free(db_path);
+    if (kara_dir)
+        free(kara_dir);
+    if (conf_file)
+        free(conf_file);
+    if (srv.win.free)
+        srv.win.free(&srv.win);
+    LOG_INFO_SCT("GARBAGE", "%s", "Cleaning a bit with global variables");
+}
+
 static void
 __sig_exit(int sig)
 {
@@ -71,11 +90,11 @@ normal_launch:
     executable_name = exe;
 
     /* Init the server */
-    struct lkt_state srv;
     int autoclear, check_exclusive = 1;
-    char *db_path  = safe_malloc(PATH_MAX * sizeof(char));
-    char *kara_dir = safe_malloc(PATH_MAX * sizeof(char));
-    char conf_file[PATH_MAX];
+    assert(!atexit(__garbage_collect));
+    db_path   = safe_malloc(PATH_MAX * sizeof(char));
+    kara_dir  = safe_malloc(PATH_MAX * sizeof(char));
+    conf_file = safe_malloc(PATH_MAX * sizeof(char));
     memset(&srv, 0, sizeof(struct lkt_state));
 
     /* Initialize the system. */
@@ -105,6 +124,5 @@ normal_launch:
     RETURN_IF(load_module_by_name(&srv, "player", &srv.win),  "Can't load module player", 3);
     RETURN_IF(load_module_by_name(&srv, "repo",   &srv.repo), "Can't load module repo", 3);
     lkt_listen(&srv);
-    srv.win.free(&srv.win);
     return EXIT_FAILURE;
 }
diff --git a/src/mkv/utils.c b/src/mkv/utils.c
index bd721a065e45716d6862ac4a8237214fdd294a69..2e21974189e2420e0a99cf04eff2b5fd00974e8f 100644
--- a/src/mkv/utils.c
+++ b/src/mkv/utils.c
@@ -12,7 +12,7 @@ mdtcat(struct kara_metadata *mdt, char **ret)
     size_t size = strlen(mdt->song_name) + strlen(mdt->source_name) +
                   strlen(mdt->category) + strlen(mdt->language)     +
                   strlen(mdt->author_name) + strlen(mdt->song_type) +
-                  /* Null byte */ 1 + /* Separators */ 12           +
+                  /* Null byte */ 1 + /* Separators */ 12 + 5       +
                   long_length(mdt->song_number);
     *ret = malloc(sizeof(char) * size);
     if (!*ret) {
@@ -20,7 +20,7 @@ mdtcat(struct kara_metadata *mdt, char **ret)
         return;
     }
 
-    safe_snprintf(*ret, size, "%s - %s / %s - %s%d - %s", mdt->category,
+    safe_snprintf(*ret, size, "%s - %s / %s - %s%d - %s [ %s ]", mdt->category,
                   mdt->language, mdt->source_name, mdt->song_type,
-                  mdt->song_number, mdt->song_name);
+                  mdt->song_number, mdt->song_name, mdt->author_name);
 }