diff --git a/frontend/menu/disp/lakka.c b/frontend/menu/disp/lakka.c
index 6e4e02fdf4..e39469f200 100644
--- a/frontend/menu/disp/lakka.c
+++ b/frontend/menu/disp/lakka.c
@@ -540,7 +540,7 @@ static void lakka_draw_items(int i)
          continue;
 
       if (i >= menu_active_category - 1 &&
-	 i <= menu_active_category + 1) /* performance improvement */
+         i <= menu_active_category + 1) /* performance improvement */
       {
          lakka_draw_icon(category->item_icon,
             margin_left + hspacing*(i+1) +
@@ -649,7 +649,7 @@ static GLuint png_texture_load(const char * file_name)
 
 static void lakka_context_destroy(void *data)
 {
-   int i, j;
+   int i, j, k;
    gl_t *gl = (gl_t*)driver.video_data;
 
    for (i = 0; i < TEXTURE_LAST; i++)
@@ -672,9 +672,12 @@ static void lakka_context_destroy(void *data)
 
          item = (menu_item_t*)&category->items[j];
 
-         if (item)
+         if (!item)
+            continue;
+
+         for (k = 0; k < item->num_subitems; k++ )
          {
-            subitem = (menu_subitem_t*)&item->subitems[j];
+            subitem = (menu_subitem_t*)&item->subitems[k];
 
             if (subitem)
                glDeleteTextures(1, &subitem->icon);
@@ -892,11 +895,14 @@ static void lakka_context_reset(void *data)
       if (info_list)
          info = (core_info_t*)&info_list->list[i-1];
 
-      if (info != NULL && info->systemname) {
+      if (info != NULL && info->systemname)
+      {
          char *tmp = str_replace(info->systemname, "/", " ");
          strlcpy(core_id, tmp, sizeof(core_id));
          free(tmp);
-      } else {
+      }
+      else
+      {
          strlcpy(core_id, "default", sizeof(core_id));
       }
 
@@ -1016,6 +1022,8 @@ static void lakka_init_items(int i, menu_category_t *category,
          }
       }
    }
+
+   string_list_free(list);
 }
 
 static void lakka_free(void *data)
@@ -1054,13 +1062,17 @@ static void lakka_init_core_info(void *data)
 
    core_info_list_free(g_extern.core_info);
    g_extern.core_info = NULL;
-   if (*g_settings.libretro_directory) {
+   if (*g_settings.libretro_directory)
+   {
       g_extern.core_info = core_info_list_new(g_settings.libretro_directory);
    }
 
-   if (g_extern.core_info) {
+   if (g_extern.core_info)
+   {
       num_categories = g_extern.core_info->count + 1;
-   } else {
+   }
+   else
+   {
      num_categories = 1;
    }
 }
@@ -1070,6 +1082,7 @@ static void *lakka_init(void)
    int i;
    menu_handle_t *menu = (menu_handle_t*)calloc(1, sizeof(*menu));
    gl_t *gl = (gl_t*)driver.video_data;
+
    if (!menu || !gl)
       return NULL;
 
@@ -1103,7 +1116,7 @@ static void *lakka_init(void)
       category->active_item = 0;
       category->num_items   = 0;
       category->items       = (menu_item_t*)
-         calloc(category->num_items, sizeof(menu_item_t));
+         calloc(category->num_items + 1, sizeof(menu_item_t));
 
       lakka_init_items(i, category, info, g_settings.content_directory);
    }