diff --git a/src/module/module_repo.c b/src/module/module_repo.c
index ad0a0277503b39be654eb95780f457502d6519b8..f6ec21bac660c530a10d8b8665f8e550236ddaa5 100644
--- a/src/module/module_repo.c
+++ b/src/module/module_repo.c
@@ -42,6 +42,7 @@ struct kara {
     int update_count;
     volatile sqlite3 *db;
     struct module_repo_internal *repo;
+    size_t kara_dir_len;
     long id;
     long unix_timestamp;
     struct kara_metadata mdt;
@@ -68,9 +69,8 @@ struct module_repo_internal {
 
     /* Craft a filename for newly downloaded karas. Arguments:
      * - str: the destination string, the prefix, i.e. the kara_dir, is already here
-     * - len: the length of the string, not its size (which is PATH_MAX)
      * - kara: the kara structure, which contains all the data to create the filename */
-    void (*craft_filename)(char str[PATH_MAX], size_t, struct kara *);
+    void (*craft_filename)(char str[PATH_MAX], struct kara *);
 
     /* Worker threads */
     // *INDENT-OFF*
@@ -129,19 +129,19 @@ __mkdir(const char *dir, unsigned int umask)
 }
 
 static inline void
-__craft_filename_obfuscate(char str[PATH_MAX], size_t len, struct kara *kara)
+__craft_filename_obfuscate(char str[PATH_MAX], struct kara *kara)
 {
     /* Obfuscate filename */
-    safe_snprintf(str + len, PATH_MAX - len, "%ld.mkv", kara->id);
+    safe_snprintf(str, PATH_MAX, "%s%ld.mkv", kara->database_filepath, kara->id);
 }
 
 static inline void
-__craft_filename_non_obfuscate(char str[PATH_MAX], size_t len, struct kara *kara)
+__craft_filename_non_obfuscate(char str[PATH_MAX], struct kara *kara)
 {
     /* Not obfuscate filename, need to create directories, won't fail if not
      * possible.  The program will fail later, when write will be attempted. */
-    len += safe_snprintf(str + len, PATH_MAX - len, "%s/%s/%s/", kara->mdt.category,
-                         kara->mdt.language, kara->mdt.author_name);
+    size_t len = safe_snprintf(str, PATH_MAX, "%s%s/%s/%s/", kara->database_filepath,
+                               kara->mdt.category, kara->mdt.language, kara->mdt.author_name);
     __mkdir(str, 0);
     if (access(str, R_OK | W_OK))
         LOG_ERROR("REPO", "No access in read / write for folder %s", str);
@@ -311,7 +311,7 @@ __handle_got_json_dl(struct kara *kara, int current_id)
 
     safe_snprintf(kara->url, LKT_LINE_MAX, kara->repo->get_id_file, kara->id);
 
-    LOG_INFO("REPO", "Start downloading kara %ld to %s", kara->id, kara->filename);
+    LOG_INFO("REPO", "Start downloading kara %ld to: %s", kara->id, kara->filename);
     if (__download_kara(kara->url, kara->filename, true)) {
         LOG_WARN("REPO", "Could not download kara %ld at path '%s'",
                  kara->id, kara->filename);
@@ -383,13 +383,19 @@ __handle_got_json_internal_callback(const char *key, const char *val, int comp,
         int current_id = 0;
 
         /* Timestamp and presence verification */
-        if (!database_get_kara_path(kara->db, kara->id, kara->database_filepath))
+        kara->repo->craft_filename(kara->filename, kara);
+        LOG_DEBUG("REPO", "Generated filepath for kara %ld is: %s", kara->id, kara->filename);
+        if (!database_get_kara_path(kara->db, kara->id, kara->filename)) {
+            kara->repo->craft_filename(kara->filename, kara);
             goto do_it;
+        }
 
         /* Override calculated filename if it exists */
         size_t db_fp_size = (strlen(kara->database_filepath) + 1) * sizeof(char);
         memcpy(kara->filename, kara->database_filepath, db_fp_size);
 
+        /* Set filepath for kara */
+
         filestamp = get_mtime(kara->filename);
         if (!(filestamp > kara->unix_timestamp))
             goto do_it;
@@ -426,16 +432,19 @@ __handle_got_json(volatile sqlite3 *db, struct module_repo_internal *repo, const
                   "Can't get the mkvpropedit executable path", NOTHING);
 
     /* Craft a folder path here, it will be used later */
-    size_t kara_dir_len = strlen(repo->kara_dir);
-    kara_dir_len        = sizeof(char) * (kara_dir_len + 1);
-    memcpy(kara.database_filepath, repo->kara_dir, kara_dir_len);
-    if (kara.database_filepath[kara_dir_len - 1] != '/') {
+    kara.kara_dir_len = strlen(repo->kara_dir);
+    kara.kara_dir_len = sizeof(char) * (kara.kara_dir_len + 1);
+
+    memcpy(kara.database_filepath, repo->kara_dir, kara.kara_dir_len);
+    memcpy(kara.filename,          repo->kara_dir, kara.kara_dir_len);
+
+    if (kara.database_filepath[kara.kara_dir_len - 1] != '/') {
         strncat(kara.database_filepath, "/", PATH_MAX - 1);
-        kara.database_filepath[++kara_dir_len] = 0;
+        kara.database_filepath[++kara.kara_dir_len] = 0;
     }
 
     /* Handle the json */
-    LOG_INFO("REPO", "Starting to process json for repo %s", repo->name);
+    LOG_INFO("REPO", "Starting to process json for repo %s, total of %ld karas", repo->name, len);
     json_parse(json, 2, __handle_got_json_internal_callback, (void *) &kara);
     LOG_INFO("REPO", "Updated %ld karas and ignored %ld karas, total is %ld",
              kara.update_count, kara.ignored_count, len);