diff --git a/frontend/menu/disp/lakka.c b/frontend/menu/disp/lakka.c
index a8e97183ab..df7c320008 100644
--- a/frontend/menu/disp/lakka.c
+++ b/frontend/menu/disp/lakka.c
@@ -695,7 +695,7 @@ void lakka_draw_icon(void *data, GLuint texture, float x, float y, float alpha,
 
    gl_t *gl = (gl_t*)data;
 
-   glViewport(x, 900 - y, dim, dim);
+   glViewport(x, gl->win_height - y, dim, dim);
 
    glEnable(GL_BLEND);
 
@@ -1178,7 +1178,7 @@ static void lakka_free_assets(void *data)
 {
    (void)data;
 
-   if (tweens)
+   if (numtweens)
       free(tweens);
 }
 
@@ -1222,7 +1222,7 @@ static void lakka_init_core_info(void *data)
 
 static void *lakka_init(void)
 {
-   int i;
+   int i, j;
    gl_t *gl;
    rgui_handle_t *rgui = (rgui_handle_t*)calloc(1, sizeof(*rgui));
    if (!rgui)
@@ -1230,24 +1230,67 @@ static void *lakka_init(void)
 
    gl = (gl_t*)driver.video_data;
 
-   init_font(gl, g_settings.video.font_path, 6, gl->win_width, gl->win_height);
+   init_font(gl, g_settings.video.font_path, g_settings.video.font_size, gl->win_width, gl->win_height);
 
    lakka_init_core_info(rgui);
    lakka_init_assets(rgui);
 
-   categories = (menu_category_t*)realloc(categories, num_categories * sizeof(menu_category_t));
+   if (categories)
+   {
+      for (i = 1; i < num_categories; i++)
+      {
+         menu_category_t *category = (menu_category_t*)&categories[i];
+
+         char core_id[256], texturepath[256], gametexturepath[256], dirpath[256];
+         core_info_t *info;
+
+         fill_pathname_join(dirpath, g_settings.assets_directory, "lakka", sizeof(dirpath));
+         fill_pathname_slash(dirpath, sizeof(dirpath));
+         info = (core_info_t*)&rgui->core_info->list[i-1];
+
+         strlcpy(core_id, basename(info->path), sizeof(core_id));
+         strlcpy(core_id, str_replace(core_id, ".so", ""), sizeof(core_id));
+         strlcpy(core_id, str_replace(core_id, ".dll", ""), sizeof(core_id));
+         strlcpy(core_id, str_replace(core_id, ".dylib", ""), sizeof(core_id));
+         strlcpy(core_id, str_replace(core_id, "-libretro", ""), sizeof(core_id));
+         strlcpy(core_id, str_replace(core_id, "_libretro", ""), sizeof(core_id));
+         strlcpy(core_id, str_replace(core_id, "libretro-", ""), sizeof(core_id));
+         strlcpy(core_id, str_replace(core_id, "libretro_", ""), sizeof(core_id));
+
+         strlcpy(texturepath, dirpath, sizeof(texturepath));
+         strlcat(texturepath, core_id, sizeof(texturepath));
+         strlcat(texturepath, ".png", sizeof(texturepath));
+
+         strlcpy(gametexturepath, dirpath, sizeof(gametexturepath));
+         strlcat(gametexturepath, core_id, sizeof(gametexturepath));
+         strlcat(gametexturepath, "-content.png", sizeof(gametexturepath));
+
+         category->icon = png_texture_load(texturepath, &dim, &dim);
+         font_driver->render_msg(font, category->name, &category->out);
+
+         for (j = 0; j < category->num_items; j++)
+         {
+            menu_item_t *item = (menu_item_t*)&category->items[j];
+            item->icon = png_texture_load(gametexturepath, &dim, &dim);
+            font_driver->render_msg(font, item->name, &item->out);
+         }
+      }
+      return rgui;
+   }
+
+   categories = (menu_category_t*)calloc(num_categories, sizeof(menu_category_t));
 
    lakka_init_settings();
 
-   for (i = 0; i < num_categories-1; i++)
+   for (i = 1; i < num_categories; i++)
    {
       char core_id[256], texturepath[256], gametexturepath[256], dirpath[256];
       core_info_t *info;
-      menu_category_t *category = (menu_category_t*)&categories[i+1];
+      menu_category_t *category = (menu_category_t*)&categories[i];
 
       fill_pathname_join(dirpath, g_settings.assets_directory, "lakka", sizeof(dirpath));
       fill_pathname_slash(dirpath, sizeof(dirpath));
-      info = (core_info_t*)&rgui->core_info->list[i];
+      info = (core_info_t*)&rgui->core_info->list[i-1];
 
       strlcpy(core_id, basename(info->path), sizeof(core_id));
       strlcpy(core_id, str_replace(core_id, ".so", ""), sizeof(core_id));
@@ -1277,7 +1320,7 @@ static void *lakka_init(void)
 
       font_driver->render_msg(font, category->name, &category->out);
 
-      lakka_init_items(i+1, category, info, gametexturepath, g_settings.content_directory);
+      lakka_init_items(i, category, info, gametexturepath, g_settings.content_directory);
    }
 
    return rgui;