diff --git a/exec/load/install-3rdp-xtrn.js b/exec/load/install-3rdp-xtrn.js
index 68305e6a3a5d115e70967ef77dbbc183bc49415f..f9f81bada40cabb6b996429a566bf547edb6b1c3 100755
--- a/exec/load/install-3rdp-xtrn.js
+++ b/exec/load/install-3rdp-xtrn.js
@@ -9,7 +9,12 @@
 
 // The additional install-xtrn.ini keys are:
 // exe = filename of door's executable
-// md5 = comma-separated list of md5-sums (in lowercase hexadecimal)
+
+// The additional install-xtrn.ini sections are:
+// [md5:<md5-sum>] where <md5-sum> is a hex md5-sum of a version of the exe file
+// ver = <optional version information, don't start with "v" or "version">
+// url = <optional location to find corresponding distribution/install archive>
+
 
 "use strict";
 
@@ -32,22 +37,24 @@ function scan(options)
 			return;
 		}
 		const ini = f.iniGetObject(/* lowercase: */true);
+		const md5 = f.iniGetAllObjects("sum", "md5:", /* lowercase: */true);
 		f.close();
 		if (!ini.exe) {
 			out.push("!No executable filename specified in " + f.name);
 			return;
 		}
-		if (!ini.md5) {
+		if (!md5) {
 			out.push("!No md5 list specified in " + f.name);
 			return;
 		}
 		if (!exe_list[ini.exe])
 			exe_list[ini.exe] = {};
-		var md5_list = ini.md5.split(',');
-		for(var i in md5_list)
-			exe_list[ini.exe][md5_list[i]] = f.name;
+		for(var i in md5) {
+			exe_list[ini.exe][md5[i].sum] = md5;
+			exe_list[ini.exe][md5[i].sum].ini_fname = f.name;
+		}
 	});
-	
+
 	for(var i in exe_list) {
 		directory(options.xtrn_dir + '*').forEach(function (e) {
 			const f = new File(e + i);
@@ -57,8 +64,10 @@ function scan(options)
 			var md5 = f.md5_hex;
 			f.close();
 			if(!exe_list[i][md5]) {
-				if(options.debug)
+				if(options.debug) {
 					out.push("!MD5 sum of " + f.name + " (" + md5 + ") not found.");
+					out.push(JSON.stringify(exe_list, null, 4));
+				}
 				return;
 			}
 			var startup_dir = f.name.substr(0, Math.max(f.name.lastIndexOf("/"), f.name.lastIndexOf("\\"), 0));
@@ -68,11 +77,12 @@ function scan(options)
 					out.push(ini_fname + " already exists");
 				return;
 			}
-			if (!file_copy(exe_list[i][md5], ini_fname)) {
-				out.push("!Error copying " + exe_list[i][md5] + " to " + ini_fname);
+			var src = exe_list[i][md5].ini_fname;
+			if (!file_copy(src, ini_fname)) {
+				out.push("!Error copying " + src + " to " + ini_fname);
 				return;
 			}
-			out.push(exe_list[i][md5] + " copied to " + ini_fname);
+			out.push(src + " copied to " + ini_fname);
 		});
 	}
 	return out;
diff --git a/xtrn/3rdp-install/README.md b/xtrn/3rdp-install/README.md
index 3e0a6a7e311e79dc0ffa4d7d5c61058fd3f7cd70..c19671a9bec4be9862cf408657d14917ca60f6a9 100644
--- a/xtrn/3rdp-install/README.md
+++ b/xtrn/3rdp-install/README.md
@@ -4,10 +4,13 @@ The `.ini` files in this directory are in the Synchronet `install-xtrn.ini`
 format with base filenames reflecting the door they are intended to help
 install into a Synchronet system.
 
-The additional keys expected are:
+The additional keys/sections expected are:
 ~~~
-exe = name of the executable file
-md5 = comma-separated list of MD5-sums for supported executable file versions
+exe = name of the executable file (in the root/unnamed section) [one]
+
+[md5:<sum>] Hex MD5-sum for a supported executable file version [multiple]
+ver = <optional version information - start with a number, not 'v')
+url = <optional distribution/install package location - start with scheme://>
 ~~~
 MD5-sums are presented in lowercase hexadecimal (e.g. same format returned by
 *nix `md5sum` utility).
diff --git a/xtrn/3rdp-install/doormud.ini b/xtrn/3rdp-install/doormud.ini
index b21ad50d4cec595eff56f73e6ada236c2e6d2f0a..37d145e81947dea70fb8a9c714269ef3281d523e 100644
--- a/xtrn/3rdp-install/doormud.ini
+++ b/xtrn/3rdp-install/doormud.ini
@@ -5,7 +5,7 @@ By:   RhythmNp (Evan Elias)
 Cats: Games
 Subs: Multiplayer, Adventure, MUD, Native
 exe:  dmud32.exe
-md5:  b92fe52e1883ad8502cb2ea9de75173f
+[md5:b92fe52e1883ad8502cb2ea9de75173f]
 
 [prog:DOORMUD]
 cmd  = dmud32
diff --git a/xtrn/3rdp-install/foodfite-wilson.ini b/xtrn/3rdp-install/foodfite-wilson.ini
index 4bf25d4f815613e6fb4dffb6c08f0839186d4a66..83ea5ccbf8018dce82eb22ddd6b8bdfd364c87bb 100644
--- a/xtrn/3rdp-install/foodfite-wilson.ini
+++ b/xtrn/3rdp-install/foodfite-wilson.ini
@@ -6,17 +6,26 @@ By:   Mike Wilson
 Cats: Games
 Subs: Multiplayer, RPG
 exe:  FOODFITE.EXE
-; 591c73daff36feb8ba36ebb8b322307e 4.61
-; 591c73daff36feb8ba36ebb8b322307e 4.6
-; b42ed4a7d5cb0689d835def10a86b67b 4.5
-; bde3e380329a902c5fcf1391ec06f440 4.4
-; b8a9e177e208df0b496cad7f7c77aec2 4.0
-; 939bb5189d4535f6388e6c35b96cc45f 3.3
-; 33cd35708a5cf17ce2415636f715f196 3.2
-; 36be50db6c3ef653ff1024bdd4e8f0dc 3.0
-; fe15a026d4fd10db3f67997c2ac146d2 2.5
-; 94ba5e82ab234124ddad72eaa7dc4658 2.0
-md5:  591c73daff36feb8ba36ebb8b322307e,bde3e380329a902c5fcf1391ec06f440,b42ed4a7d5cb0689d835def10a86b67b,591c73daff36feb8ba36ebb8b322307e,b8a9e177e208df0b496cad7f7c77aec2,939bb5189d4535f6388e6c35b96cc45f,33cd35708a5cf17ce2415636f715f196,36be50db6c3ef653ff1024bdd4e8f0dc,fe15a026d4fd10db3f67997c2ac146d2,94ba5e82ab234124ddad72eaa7dc4658
+[md5:591c73daff36feb8ba36ebb8b322307e]
+ver = 4.61
+[md5:591c73daff36feb8ba36ebb8b322307e]
+ver = 4.6
+[md5:b42ed4a7d5cb0689d835def10a86b67b]
+ver = 4.5
+[md5:bde3e380329a902c5fcf1391ec06f440]
+ver = 4.4
+[md5:b8a9e177e208df0b496cad7f7c77aec2]
+ver = 4.0
+[md5:939bb5189d4535f6388e6c35b96cc45f]
+ver = 3.3
+[md5:33cd35708a5cf17ce2415636f715f196]
+ver = 3.2
+[md5:36be50db6c3ef653ff1024bdd4e8f0dc]
+ver = 3.0
+[md5:fe15a026d4fd10db3f67997c2ac146d2]
+ver = 2.5
+[md5:94ba5e82ab234124ddad72eaa7dc4658]
+ver = 2.0
 
 [prog:FOODFITE]
 ;      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX