diff --git a/.vscode/settings.json b/.vscode/settings.json
index 1fde8c11fd..efae5a0931 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -19,7 +19,8 @@
       "iosfwd": "c",
       "xlocbuf": "c",
       "xmemory0": "c",
-      "ios": "c"
+      "ios": "c",
+      "list": "c"
    },
    "C_Cpp.dimInactiveRegions": false,
 }
\ No newline at end of file
diff --git a/configuration.c b/configuration.c
index 758e111fc6..57fcafdff2 100644
--- a/configuration.c
+++ b/configuration.c
@@ -1620,7 +1620,7 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings,
 #ifdef HAVE_FFMPEG
    SETTING_UINT("video_stream_port",            &settings->uints.video_stream_port,    true, RARCH_STREAM_DEFAULT_PORT, false);
    SETTING_UINT("video_record_quality",            &settings->uints.video_record_quality,    true, RECORD_CONFIG_TYPE_RECORDING_LOSSLESS_QUALITY, false);
-   SETTING_UINT("video_stream_quality",            &settings->uints.video_record_quality,    true, RECORD_CONFIG_TYPE_STREAMING_LOW_QUALITY, false);
+   SETTING_UINT("video_stream_quality",            &settings->uints.video_stream_quality,    true, RECORD_CONFIG_TYPE_STREAMING_LOW_QUALITY, false);
 #endif
 
    *size = count;
diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h
index f2e17652d5..e48254fbdd 100644
--- a/intl/msg_hash_lbl.h
+++ b/intl/msg_hash_lbl.h
@@ -903,6 +903,8 @@ MSG_HASH(MENU_ENUM_LABEL_RECORDING_SETTINGS,
       "recording_settings")
 MSG_HASH(MENU_ENUM_LABEL_RECORD_CONFIG,
       "record_config")
+MSG_HASH(MENU_ENUM_LABEL_STREAM_CONFIG,
+      "stream_config")
 MSG_HASH(MENU_ENUM_LABEL_RECORD_DRIVER,
       "record_driver")
 MSG_HASH(MENU_ENUM_LABEL_MIDI_DRIVER,
diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h
index 5737f704b4..215d584580 100644
--- a/intl/msg_hash_us.h
+++ b/intl/msg_hash_us.h
@@ -2151,7 +2151,11 @@ MSG_HASH(
     )
 MSG_HASH(
     MENU_ENUM_LABEL_VALUE_RECORD_CONFIG,
-    "Load Recording Config..."
+    "Custom Record Config"
+    )
+MSG_HASH(
+    MENU_ENUM_LABEL_VALUE_STREAM_CONFIG,
+    "Custom Stream Config"
     )
 MSG_HASH(
     MENU_ENUM_LABEL_VALUE_RECORD_DRIVER,
diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c
index 4c3fac9c5c..fd5008c71b 100644
--- a/menu/cbs/menu_cbs_deferred_push.c
+++ b/menu/cbs/menu_cbs_deferred_push.c
@@ -118,6 +118,7 @@ generic_deferred_push(deferred_push_cheat_file_load,                DISPLAYLIST_
 generic_deferred_push(deferred_push_cheat_file_load_append,         DISPLAYLIST_CHEAT_FILES)
 generic_deferred_push(deferred_push_remap_file_load,                DISPLAYLIST_REMAP_FILES)
 generic_deferred_push(deferred_push_record_configfile,              DISPLAYLIST_RECORD_CONFIG_FILES)
+generic_deferred_push(deferred_push_stream_configfile,              DISPLAYLIST_STREAM_CONFIG_FILES)
 generic_deferred_push(deferred_push_input_overlay,                  DISPLAYLIST_OVERLAYS)
 generic_deferred_push(deferred_push_video_font_path,                DISPLAYLIST_FONTS)
 generic_deferred_push(deferred_push_xmb_font_path,                  DISPLAYLIST_FONTS)
@@ -1034,6 +1035,9 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
             case MENU_ENUM_LABEL_RECORD_CONFIG:
                BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_record_configfile);
                break;
+            case MENU_ENUM_LABEL_STREAM_CONFIG:
+               BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_stream_configfile);
+               break;
             case MENU_ENUM_LABEL_SHADER_OPTIONS:
                BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_shader_options);
                break;
diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c
index 8c2032da5e..0cee50acdc 100644
--- a/menu/menu_displaylist.c
+++ b/menu/menu_displaylist.c
@@ -7058,6 +7058,10 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
                MENU_ENUM_LABEL_RECORD_CONFIG,
                PARSE_ONLY_PATH, false) == 0)
             count++;
+         if (menu_displaylist_parse_settings_enum(menu, info,
+               MENU_ENUM_LABEL_STREAM_CONFIG,
+               PARSE_ONLY_PATH, false) == 0)
+            count++;
          if (menu_displaylist_parse_settings_enum(menu, info,
                MENU_ENUM_LABEL_RECORD_PATH,
                PARSE_ONLY_STRING, false) == 0)
@@ -7618,6 +7622,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
          info->exts         = strdup("cfg");
          break;
       case DISPLAYLIST_RECORD_CONFIG_FILES:
+      case DISPLAYLIST_STREAM_CONFIG_FILES:
          menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
          filebrowser_clear_type();
          info->type_default = FILE_TYPE_RECORD_CONFIG;
diff --git a/menu/menu_displaylist.h b/menu/menu_displaylist.h
index 10a0ad40aa..5a8d49b79f 100644
--- a/menu/menu_displaylist.h
+++ b/menu/menu_displaylist.h
@@ -102,6 +102,7 @@ enum menu_displaylist_ctl_state
    DISPLAYLIST_CHEAT_FILES,
    DISPLAYLIST_REMAP_FILES,
    DISPLAYLIST_RECORD_CONFIG_FILES,
+   DISPLAYLIST_STREAM_CONFIG_FILES,
    DISPLAYLIST_CONFIG_FILES,
    DISPLAYLIST_CONTENT_HISTORY,
    DISPLAYLIST_IMAGES,
diff --git a/menu/menu_setting.c b/menu/menu_setting.c
index 50090a759d..1f9e026f43 100644
--- a/menu/menu_setting.c
+++ b/menu/menu_setting.c
@@ -5926,8 +5926,8 @@ static bool setting_append_list(
             START_SUB_GROUP(list, list_info, "State", &group_info, &subgroup_info, parent_group);
             CONFIG_PATH(
                   list, list_info,
-                  global->record.config,
-                  sizeof(global->record.config),
+                  settings->paths.path_record_config,
+                  sizeof(settings->paths.path_record_config),
                   MENU_ENUM_LABEL_RECORD_CONFIG,
                   MENU_ENUM_LABEL_VALUE_RECORD_CONFIG,
                   "",
@@ -5938,19 +5938,34 @@ static bool setting_append_list(
                   general_read_handler);
             menu_settings_list_current_add_values(list, list_info, "cfg");
 
-            CONFIG_STRING(
+            CONFIG_PATH(
                   list, list_info,
-                  global->record.path,
-                  sizeof(global->record.path),
-                  MENU_ENUM_LABEL_RECORD_PATH,
-                  MENU_ENUM_LABEL_VALUE_RECORD_PATH,
+                  settings->paths.path_stream_config,
+                  sizeof(settings->paths.path_stream_config),
+                  MENU_ENUM_LABEL_STREAM_CONFIG,
+                  MENU_ENUM_LABEL_VALUE_STREAM_CONFIG,
                   "",
                   &group_info,
                   &subgroup_info,
                   parent_group,
                   general_write_handler,
                   general_read_handler);
-            settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT);
+            menu_settings_list_current_add_values(list, list_info, "cfg");
+
+         CONFIG_DIR(
+               list, list_info,
+               global->record.output_dir,
+               sizeof(global->record.output_dir),
+               MENU_ENUM_LABEL_SCREENSHOT_DIRECTORY,
+               MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY,
+               g_defaults.dirs[DEFAULT_DIR_SCREENSHOT],
+               MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT,
+               &group_info,
+               &subgroup_info,
+               parent_group,
+               general_write_handler,
+               general_read_handler);
+         (*list)[list_info->index - 1].action_start = directory_action_start_generic;
 
             END_SUB_GROUP(list, list_info, parent_group);
 
diff --git a/msg_hash.h b/msg_hash.h
index 954b91a4e9..30038dc55a 100644
--- a/msg_hash.h
+++ b/msg_hash.h
@@ -1680,6 +1680,7 @@ enum msg_hash_enums
    MENU_LABEL(VIDEO_GPU_RECORD),
    MENU_LABEL(RECORD_USE_OUTPUT_DIRECTORY),
    MENU_LABEL(RECORD_CONFIG),
+   MENU_LABEL(STREAM_CONFIG),
    MENU_LABEL(RECORD_PATH),
    MENU_LABEL(VIDEO_POST_FILTER_RECORD),
    MENU_LABEL(RECORD_ENABLE),
diff --git a/record/record_driver.c b/record/record_driver.c
index 1121749c81..a6ef7af312 100644
--- a/record/record_driver.c
+++ b/record/record_driver.c
@@ -52,7 +52,6 @@ size_t      recording_gpu_width                = 0;
 size_t      recording_gpu_height               = 0;
 static bool recording_enable                   = false;
 static bool streaming_enable                   = false;
-static bool recording_use_output_dir           = false;
 
 static const record_driver_t *recording_driver = NULL;
 void *recording_data                           = NULL;
@@ -374,10 +373,6 @@ bool recording_init(void)
 
       }
    }
-   if (recording_use_output_dir)
-      fill_pathname_join(output,
-            global->record.output_dir,
-            global->record.path, sizeof(output));
 
    params.out_width  = av_info->geometry.base_width;
    params.out_height = av_info->geometry.base_height;
@@ -522,7 +517,6 @@ unsigned *recording_driver_get_height(void)
 
 void recording_driver_free_state(void)
 {
-   recording_use_output_dir = false;
    recording_gpu_width      = 0;
    recording_gpu_height     = 0;
    recording_width          = 0;