diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c
index 2487b6a086..b3cd5e2f9a 100644
--- a/menu/cbs/menu_cbs_ok.c
+++ b/menu/cbs/menu_cbs_ok.c
@@ -34,15 +34,6 @@ size_t hack_shader_pass = 0;
 char core_updater_path[PATH_MAX_LENGTH];
 #endif
 
-static int menu_action_setting_set_current_string_path(
-      rarch_setting_t *setting, const char *dir, const char *path)
-{
-   char s[PATH_MAX_LENGTH];
-   fill_pathname_join(s, dir, path, sizeof(s));
-   setting_set_with_string_representation(setting, s);
-   return menu_setting_generic(setting, false);
-}
-
 enum
 {
    ACTION_OK_DL_DEFAULT = 0,
@@ -671,11 +662,16 @@ static int generic_action_ok(const char *path,
          event_command(EVENT_CMD_RESUME);
          break;
       case ACTION_OK_SET_PATH:
+         flush_char = NULL;
+         flush_type = 49;
          {
             menu_file_list_cbs_t *cbs = menu_list_get_last_stack_actiondata(menu_list);
 
             if (cbs)
-               menu_action_setting_set_current_string_path(cbs->setting, menu_path, path);
+            {
+               setting_set_with_string_representation(cbs->setting, action_path);
+               ret = menu_setting_generic(cbs->setting, false);
+            }
          }
          break;
       default:
@@ -1006,10 +1002,7 @@ static int action_ok_file_load(const char *path,
    setting = menu_setting_find(menu_label);
 
    if (setting && setting->type == ST_PATH)
-   {
-      menu_action_setting_set_current_string_path(setting, menu_path_new, path);
-      menu_list_pop_stack_by_needle(menu_list, setting->name);
-   }
+      return action_ok_set_path(path, label, type, idx, entry_idx);
    else
    {
       if (type == MENU_FILE_IN_CARCHIVE)