diff --git a/exec/tickitcfg.js b/exec/tickitcfg.js
index 550d57dab1aa9a70555908fc61e9fa1ce21b7e7b..5af024ab39b7c6c0bc3d997bb7da11e403b71b0d 100644
--- a/exec/tickitcfg.js
+++ b/exec/tickitcfg.js
@@ -171,13 +171,23 @@ function edit_links(links)
 	return links;
 }
 
-function edit_sourceaddress(obj)
+function select_sourceaddress(obj)
 {
+	var ctx = new uifc.list.CTX();
 	var tmp;
+	var addr;
+	var addrs = ["No Source Address"]; // initial value so we can remove object's sourceaddress
 
-	tmp = uifc.input(WIN_SAV|WIN_MID, "Source Address", obj.sourceaddress === undefined ? '' : obj.sourceaddress, 32, K_EDIT);
-	if (tmp != undefined)
-		obj.sourceaddress = tmp;
+	// TODO: error dialog if system.fido_addr_list is empty.
+	for (addr in system.fido_addr_list)
+		addrs.push(FIDO.parse_addr(system.fido_addr_list[addr]));
+	tmp = uifc.list(WIN_SAV|WIN_MID|WIN_ESC, "Select Address", addrs, ctx);
+	if (tmp == -1)
+		return;							// ESC hit so do not change anything
+	if (tmp === 0)
+		delete obj.sourceaddress;		// selected No Source Address so delete it from the object
+	else
+		obj.sourceaddress = addrs[tmp];	// save selected source address string value in object's sourceaddress
 }
 
 function edit_uploader(obj)
@@ -195,9 +205,8 @@ function edit_area(obj, name)
 	var link = 0;
 	var links;
 	var tmp;
-	var tmp2;
 	var ctx = new uifc.list.CTX();
-	
+
 	while(obj && cmd >= 0) {
 		var menu = ["AKA Matching   : "+(obj.akamatching === true ? "Yes" : "No"),
 					"Force Replace  : "+(obj.forcereplace === true ? "Yes" : "No"),
@@ -214,7 +223,7 @@ function edit_area(obj, name)
 				set_forcereplace(obj);
 				break;
 			case 2:
-				edit_sourceaddress(obj);
+				select_sourceaddress(obj);
 				break;
 			case 3:
 				edit_uploader(obj);
@@ -302,36 +311,25 @@ function import_areas(libname)
 	file.close();
 }
 
-var unexpected_exit = true;
-function main()
+function edit_globals()
 {
 
-	for(var i = 0; i < argc; i++)
-		if(argv[i].substr(0, 7) == "import=")
-			return import_areas(argv[i].substr(7));
-
-	uifc.init("TickIT Config Program");
-	js.on_exit("uifc.bail();");
-	js.on_exit("if(unexpected_exit) uifc.msg('Abnormal Exit');");
-
 	var cmd = 0;
 	var link = 0;
 	var links;
 	var tmp;
-	var tmp2;
 	var ctx = new uifc.list.CTX();
 
 	while(cmd >= 0) {
-		var menu = ["Global AKA Matching   : "+(tickit.gcfg.akamatching === true ? "Yes" : "No"),
-					"Global Force Replace  : "+(tickit.gcfg.forcereplace === true ? "Yes" : "No"),
-					"Global Ignore Password: "+(tickit.gcfg.ignorepassword === true ? "Yes" : "No"),
-					"Global Secure Only    : "+(tickit.gcfg.secureonly === true ? "Yes" : "No"),
-					"Global Source Address : "+(tickit.gcfg.sourceaddress === undefined ? "" : tickit.gcfg.sourceaddress),
-					"Global Uploader Name  : "+(tickit.gcfg.uploader === undefined ? "" : tickit.gcfg.uploader),
-					"Global Location       : ",
-					"Global Links          : ",
-					"Areas..."];
-		cmd = uifc.list(WIN_ORG|WIN_ACT|WIN_MID|WIN_ESC, "Global Options", menu, ctx);
+		var menu = ["AKA Matching   : "+(tickit.gcfg.akamatching === true ? "Yes" : "No"),
+					"Force Replace  : "+(tickit.gcfg.forcereplace === true ? "Yes" : "No"),
+					"Ignore Password: "+(tickit.gcfg.ignorepassword === true ? "Yes" : "No"),
+					"Secure Only    : "+(tickit.gcfg.secureonly === true ? "Yes" : "No"),
+					"Source Address : "+(tickit.gcfg.sourceaddress === undefined ? "" : tickit.gcfg.sourceaddress),
+					"Uploader Name  : "+(tickit.gcfg.uploader === undefined ? "" : tickit.gcfg.uploader),
+					"Location       : ",
+					"Links          : "];
+		cmd = uifc.list(WIN_ACT|WIN_ESC|WIN_MID|WIN_SAV, "Global Options", menu, ctx);
 		switch(cmd) {
 			case 0:
 				set_akamatching(tickit.gcfg);
@@ -346,7 +344,7 @@ function main()
 				set_secureonly(tickit.gcfg);
 				break;
 			case 4:
-				edit_sourceaddress(tickit.gcfg);
+				select_sourceaddress(tickit.gcfg);
 				break;
 			case 5:
 				edit_uploader(tickit.gcfg);
@@ -365,10 +363,42 @@ function main()
 				else
 					tickit.gcfg.links = tmp.join(',');
 				break;
-			case 8:
+			case -1:
+				break;
+			default:
+				uifc.msg("Unhandled Return: "+cmd);
+				break;
+		}
+	}
+}
+
+var unexpected_exit = true;
+function main()
+{
+
+	for(var i = 0; i < argc; i++)
+		if(argv[i].substr(0, 7) == "import=")
+			return import_areas(argv[i].substr(7));
+
+	uifc.init("TickIT Config Program");
+	js.on_exit("uifc.bail();");
+	js.on_exit("if(unexpected_exit) uifc.msg('Abnormal Exit');");
+
+	var cmd = 0;
+	var ctx = new uifc.list.CTX();
+
+	while(cmd >= 0) {
+		var menu = ["Global Options","Per Area Options"];
+		cmd = uifc.list(WIN_ORG|WIN_ACT|WIN_MID|WIN_ESC, "TickIT Options", menu, ctx);
+		switch(cmd) {
+			case 0:
+				edit_globals();
+				break;
+			case 1:
 				edit_areas();
 				break;
 			case -1:
+				// TODO: ask to save ini only if changes were made.
 				switch(uifc.list(WIN_MID|WIN_SAV, "Write INI", ["Yes", "No"])) {
 					case 0:
 						var result = tickit.save();