diff --git a/src/syncterm/bbslist.c b/src/syncterm/bbslist.c
index cc1995c71c65bb47795f3be9bef9fe635704eb04..c0abc58744af8fcabe144e2f7e9a407f210f82f2 100644
--- a/src/syncterm/bbslist.c
+++ b/src/syncterm/bbslist.c
@@ -1962,7 +1962,7 @@ change_settings(int connected)
 		SAFEPRINTF(opts[6], "Modem/Comm Rate         %s", str);
 		SAFEPRINTF(opts[7], "Modem Init String       %s", settings.mdm.init_string);
 		SAFEPRINTF(opts[8], "Modem Dial String       %s", settings.mdm.dial_string);
-		SAFEPRINTF(opts[9], "List Path               %s", settings.list_path);
+		SAFEPRINTF(opts[9], "List Path               %s", settings.stored_list_path);
 		SAFEPRINTF(opts[10], "TERM For Shell          %s", settings.TERM);
 		sprintf(opts[11],   "Scaling                 %s", scaling_names[settings_to_scale()]);
 		if (connected)
@@ -2211,13 +2211,15 @@ change_settings(int connected)
 			case 9:
 				uifc.helpbuf = "`List Path`\n\n"
 				    "The complete path to the BBS list goes here.\n";
-				if (uifc.input(WIN_MID | WIN_SAV, 0, 0, "List Path", settings.list_path, MAX_PATH,
+				if (uifc.input(WIN_MID | WIN_SAV, 0, 0, "List Path", settings.stored_list_path, MAX_PATH,
 				    K_EDIT) >= 0) {
 					iniSetString(&inicontents,
 					    "SyncTERM",
 					    "ListPath",
-					    settings.list_path,
+					    settings.stored_list_path,
 					    &ini_style);
+					if (list_override == NULL)
+						SAFECOPY(settings.list_path, settings.stored_list_path);
 				}
 				else {
 					check_exit(false);
diff --git a/src/syncterm/syncterm.c b/src/syncterm/syncterm.c
index 0a1553b1c7986faf9cd4122f82b2026df69096e3..439c5f75d85597e8c6ff0c30b27f1cb1cb01d35e 100644
--- a/src/syncterm/syncterm.c
+++ b/src/syncterm/syncterm.c
@@ -1257,8 +1257,6 @@ get_syncterm_filename(char *fn, int fnlen, int type, bool shared)
 		sprintf(fn, "%.*s", fnlen - 1, config_override);
 		return fn;
 	}
-if ((type == SYNCTERM_PATH_LIST) && !shared)
-fprintf(stderr, "List override = %p, type = %d (%d), shared: %d\n", list_override, type, SYNCTERM_PATH_LIST, shared);
 	if ((list_override != NULL) && (type == SYNCTERM_PATH_LIST) && !shared) {
 		sprintf(fn, "%.*s", fnlen - 1, list_override);
 		return fn;
@@ -1338,8 +1336,14 @@ load_settings(struct syncterm_settings *set)
 	set->custom_fontheight = iniReadInteger(inifile, "SyncTERM", "CustomFontHeight", 16);
 	set->custom_aw = iniReadInteger(inifile, "SyncTERM", "CustomAspectWidth", 4);
 	set->custom_ah = iniReadInteger(inifile, "SyncTERM", "CustomAspectHeight", 3);
-	get_syncterm_filename(set->list_path, sizeof(set->list_path), SYNCTERM_PATH_LIST, false);
-	iniReadSString(inifile, "SyncTERM", "ListPath", set->list_path, set->list_path, sizeof(set->list_path));
+	get_syncterm_filename(set->stored_list_path, sizeof(set->stored_list_path), SYNCTERM_PATH_LIST, false);
+	iniReadSString(inifile, "SyncTERM", "ListPath", set->stored_list_path, set->stored_list_path, sizeof(set->stored_list_path));
+	if (list_override != NULL) {
+		SAFECOPY(set->list_path, list_override);
+	}
+	else {
+		SAFECOPY(set->list_path, set->stored_list_path);
+	}
 	set->scaling_factor = iniReadFloat(inifile, "SyncTERM", "ScalingFactor", 0);
 	set->blocky = iniReadBool(inifile, "SyncTERM", "BlockyScaling", true);
 	set->extern_scale = iniReadBool(inifile, "SyncTERM", "ExternalScaling", false);
@@ -1564,6 +1568,41 @@ main(int argc, char **argv)
 	uifc.esc_delay = 25;
 	url[0] = 0;
 
+	/*
+	 * We need to parse -n and -b before we call load_settings()
+	 * so that get_syncterm_filename works properly
+	 */
+	for (i = 1; i < argc; i++) {
+		if (argv[i][0] == '-'
+#ifndef __unix__
+		    || argv[i][0] == '/'
+#endif
+		    ) {
+			switch (toupper(argv[i][1])) {
+				case 'B':
+					if (argv[i][2] == 0) {
+						if ((i + 1) < argc)
+							list_override = argv[++i];
+						// Error handling below
+					}
+					else {
+						list_override = &argv[i][2];
+					}
+					break;
+				case 'N':
+					if (argv[i][2] == 0) {
+						if ((i + 1) < argc)
+							config_override = argv[++i];
+						// Error handling below
+					}
+					else {
+						config_override = &argv[i][2];
+					}
+					break;
+			}
+		}
+	}
+
 	load_settings(&settings);
 	cvmode = find_vmode(CIOLIB_MODE_CUSTOM);
 	vparams[cvmode].cols = settings.custom_cols;
@@ -1598,24 +1637,30 @@ main(int argc, char **argv)
 					break;
 				case 'B':
 					if (argv[i][2] == 0) {
-						if ((i + 1) < argc)
-							list_override = argv[++i];
+						if ((i + 1) < argc) {
+							// This has already been parsed above...
+							//list_override = argv[++i];
+						}
 						else
 							goto USAGE;
 					}
 					else {
-						list_override = &argv[i][2];
+						// This has already been parsed above...
+						//list_override = &argv[i][2];
 					}
 					break;
 				case 'N':
 					if (argv[i][2] == 0) {
-						if ((i + 1) < argc)
-							config_override = argv[++i];
+						if ((i + 1) < argc) {
+							// This has already been parsed above...
+							//config_override = argv[++i];
+						}
 						else
 							goto USAGE;
 					}
 					else {
-						config_override = &argv[i][2];
+						// This has already been parsed above...
+						//config_override = &argv[i][2];
 					}
 					break;
 				case 'C':
diff --git a/src/syncterm/syncterm.h b/src/syncterm/syncterm.h
index 30f401fcef3d7e953aa161b3d8645677851f5a9b..5ca4a7565200bfa0d97ab606be1ecb56dc20b412 100644
--- a/src/syncterm/syncterm.h
+++ b/src/syncterm/syncterm.h
@@ -64,6 +64,7 @@ struct syncterm_settings {
 	struct modem_settings mdm;
 	char                  TERM[INI_MAX_VALUE_LEN + 1];
 	char                  list_path[MAX_PATH + 1];
+	char                  stored_list_path[MAX_PATH + 1];
 	double                scaling_factor;
 	int                   xfer_failure_keypress_timeout; /* wait for user acknowledgement via keypress, in seconds
                                                               */
@@ -82,6 +83,7 @@ struct syncterm_settings {
 };
 
 extern char                    *inpath;
+extern char                    *list_override;
 extern const char              *syncterm_version;
 extern struct vmem_cell        *scrollback_buf;
 extern uint32_t                *scrollback_fbuf;