diff --git a/xtrn/tw2/input.js b/xtrn/tw2/input.js
index c012f170b6e9def7495009dd699bb78114154146..8640b731c158561485e06c5f46df33a06d45a0f5 100644
--- a/xtrn/tw2/input.js
+++ b/xtrn/tw2/input.js
@@ -7,8 +7,14 @@ function GetKeyEcho()
 	return(ret);
 }
 
-var lastmisc=system.node_list[bbs.node_num-1].misc;
-var laststatus=system.node_list[bbs.node_num-1].status;
+var lastmisc;
+var laststatus;
+try {
+	lastmisc=system.node_list[bbs.node_num-1].misc;
+	laststatus=system.node_list[bbs.node_num-1].status;
+}
+catch (e) {}
+
 function InputFunc(values)
 {
 	var str='';
diff --git a/xtrn/tw2/maint.js b/xtrn/tw2/maint.js
index 1ed5c62311c6e5524f52b5650a49fe864354b2ab..e5af6b85260e3e2816437b0f68581464d38bc189 100644
--- a/xtrn/tw2/maint.js
+++ b/xtrn/tw2/maint.js
@@ -381,3 +381,20 @@ function CabalAttack(cabal)
 	sector.Put();
 }
 
+function InitializeCabal()
+{
+	var sector=sectors.Get(85);
+
+	uifc.pop("Initializing the Cabal");
+	sector_map[85].Fighters=3000;
+	sector_map[85].FightersOwner=-1;
+	for(i=1; i<=10; i++) {
+		var grp=cabals.New();
+		if(i==1) {
+			grp.Size=3000;
+			grp.Sector=85;
+			grp.Goal=85;
+		}
+		grp.Put();
+	}
+}
diff --git a/xtrn/tw2/messages.js b/xtrn/tw2/messages.js
index 0101793219b4b14ddcfb8268dd21fd66ade0dbd2..ea5dc42b2bc6b97158ef8d6f7a9288b082464011 100644
--- a/xtrn/tw2/messages.js
+++ b/xtrn/tw2/messages.js
@@ -54,6 +54,8 @@ var RadioMessageProperties = [
 
 var twpmsg=new RecordFile(fname("twpmesg.dat"), PlayerMessageProperties);
 var twrmsg=new RecordFile(fname("twrmesg.dat"), RadioMessageProperties);
+var twmsg=new File(fname("twmesg.dat"));
+twmsg.open("a", true);
 
 function ReadPMsg()
 {
@@ -166,3 +168,27 @@ function SendRadioMessage()
 	RadioMessage(player.Record, p.Record, msg);
 	return(true);
 }
+
+function ResetAllMessages()
+{
+	var i;
+
+	uifc.pop("SysOp Messages");
+	twmsg.close();
+	twmsg.open("w");
+	twmsg.writeln(system.timestr()+" TW 500 initialized");
+	twmsg.close();
+
+	uifc.pop("Player Messages");
+	for(i=0; i<100; i++) {
+		msg=twpmsg.New();
+		msg.Put();
+	}
+
+	uifc.pop("Radio Messages");
+	for(i=0; i<2; i++) {
+		msg=twrmsg.New();
+		twrmsg.Read=true;
+		msg.Put();
+	}
+}
diff --git a/xtrn/tw2/planets.js b/xtrn/tw2/planets.js
index c4341220154d8f2dd2465edebf80c5e365f76649..47d9601d32c519e6dd864f21113cac6bffed0f9c 100644
--- a/xtrn/tw2/planets.js
+++ b/xtrn/tw2/planets.js
@@ -322,3 +322,15 @@ function PlanetTakeCommodity(planet, commodity, freeholds)
 	player.Put();
 	return(freeholds);
 }
+
+function ResetAllPlanets()
+{
+	uifc.pop("Creating Planets");
+	var i;
+	var planet=planets.New();
+	planet.Put();
+	for(i=0; i<Settings.MaxPlanets; i++) {
+		planet=planets.New();
+		planet.Put();
+	}
+}
diff --git a/xtrn/tw2/players.js b/xtrn/tw2/players.js
index 338bf7ec39501d34d5279a4d325b7727a49cc938..92fca762098631445b3a39a95fca7b082767521b 100644
--- a/xtrn/tw2/players.js
+++ b/xtrn/tw2/players.js
@@ -717,3 +717,23 @@ function Dropfighters()
 	}
 	return(false);
 }
+
+function ResetAllPlayers()
+{
+	uifc.pop("Creating Players");
+	var player=players.New();
+	var loc=playerLocation.New();
+	var i;
+	player.UserNumber=0;
+	player.Put();
+	loc.Put();
+	for(i=0; i<Settings.MaxPlayers; i++) {
+		player=players.New();
+		player.UserNumber=0;
+		player.Sector=0;
+		player.Put();
+		loc=playerLocation.New();
+		loc.Sector=0;
+		loc.Put();
+	}
+}
diff --git a/xtrn/tw2/ports.js b/xtrn/tw2/ports.js
index 5cd3202afd236d80c7f3639652e472f53e29eb47..6d09a477cb74fff1233e6dfacc88944f46bcd4b7 100644
--- a/xtrn/tw2/ports.js
+++ b/xtrn/tw2/ports.js
@@ -320,3 +320,25 @@ function Transact(type, price, vary, avail)
 	return(0);
 }
 
+function InitializePorts()
+{
+	uifc.pop("Placing Ports");
+	port=ports.New();
+	port.Put();
+
+	/* Place ports */
+	for(i=0; i<ports_init.length; i++) {
+		port=ports.New();
+		for(prop in ports_init[i])
+			port[prop]=ports_init[i][prop];
+		port.Production=[ports_init[i].OreProduction, ports_init[i].OrgProduction, ports_init[i].EquProduction];
+		port.PriceVariance=[ports_init[i].OreDeduction,ports_init[i].OrgDeduction,ports_init[i].EquDeduction];
+
+		var sector=sectors.Get(ports_init[i].Position);
+		sector.Port=port.Record;
+		sector.Put();
+		ports_init[i].LastUpdate=system.datestr(time()-15*86400);
+
+		port.Put();
+	}
+}
diff --git a/xtrn/tw2/sectors.js b/xtrn/tw2/sectors.js
index fed81561fa7ad5a33d3698ab2c567a45b8b7ebcd..98819af26990b80a257745f04ffae3d76b59d297 100644
--- a/xtrn/tw2/sectors.js
+++ b/xtrn/tw2/sectors.js
@@ -296,3 +296,16 @@ function ShortestPath(start, end)
 	return(ret);
 }
 
+function InitializeSectors()
+{
+	uifc.pop("Writing Sectors");
+	/* Write sectors.dat */
+	sector=sectors.New();
+	sector.Put();
+	for(i=0; i<sector_map.length; i++) {
+		sector=sectors.New();
+		for(prop in sector_map[i])
+			sector[prop]=sector_map[i][prop];
+		sector.Put();
+	}
+}
diff --git a/xtrn/tw2/teams.js b/xtrn/tw2/teams.js
index bede88fa820e50059945883b86bb1859b349151e..1592b08121c0af1f3059f2688868639aad6c2d3f 100644
--- a/xtrn/tw2/teams.js
+++ b/xtrn/tw2/teams.js
@@ -273,3 +273,10 @@ function TeamTransfer(type)
 	console.writeln(type+" Transfered!");
 	return(true);
 }
+
+function InitializeTeams()
+{
+	uifc.pop("Teams");
+	var team=teams.New();
+	team.Put();
+}
diff --git a/xtrn/tw2/tw2.js b/xtrn/tw2/tw2.js
index 2e0da8eff5bb3aad8d78870295c4f7e7cdf8b18a..7d606a8d4c846c2d82cd13c0c62159516e2a9faf 100644
--- a/xtrn/tw2/tw2.js
+++ b/xtrn/tw2/tw2.js
@@ -43,10 +43,8 @@ load(fname("messages.js"));
 load(fname("computer.js"));
 load(fname("input.js"));
 
-var twmsg=new File(fname("twmesg.dat"));
 var twopeng=new File(fname("twopeng.dat"));
 twopeng.open("a", true);
-twmsg.open("a", true);
 
 var today=system.datestr(system.datestr());
 
diff --git a/xtrn/tw2/twint500.js b/xtrn/tw2/twint500.js
index be01433488bfb2d6d4b5496131ee803b4d7ffb41..34650e1288578bd16dd0f655e52edc4bc83b0383 100644
--- a/xtrn/tw2/twint500.js
+++ b/xtrn/tw2/twint500.js
@@ -73,8 +73,6 @@ ConfigureSettings();
 if(uifc.list(WIN_MID|WIN_SAV, 0, 0, 0, 0, 0, "Reset Game?", ["No", "Yes"])!=1)
 	exit(1);
 
-load(fname("structs.js"));
-
 file_remove(fname("sectors.dat"));
 file_remove(fname("ports.dat"));
 file_remove(fname("players.dat"));
@@ -86,106 +84,27 @@ file_remove(fname("twrmesg.dat"));
 file_remove(fname("teams.dat"));
 file_remove(fname("twopeng.dat"));
 file_remove(fname("cabals.dat"));
-var sectors=new RecordFile(fname("sectors.dat"), SectorProperties);
-var ports=new RecordFile(fname("ports.dat"), PortProperties);
-var players=new RecordFile(fname("players.dat"), PlayerProperties);
-var playerLocation=new RecordFile(fname("player-loc.dat"), PlayerLocation);
-var teams=new RecordFile(fname("teams.dat"), TeamProperties);
-var planets=new RecordFile(fname("planets.dat"), PlanetProperties);
-var twmsg=new File(fname("twmesg.dat"));
-var twpmsg=new RecordFile(fname("twpmesg.dat"), PlayerMessageProperties);
-var twrmsg=new RecordFile(fname("twrmesg.dat"), RadioMessageProperties);
-var cabals=new RecordFile(fname("cabal.dat"), CabalProperties);
-var i;
-
-uifc.pop("Creating Players");
-player=players.New();
-loc=playerLocation.New();
-player.UserNumber=0;
-player.Put();
-loc.Put();
-for(i=0; i<Settings.MaxPlayers; i++) {
-	player=players.New();
-	player.UserNumber=0;
-	player.Sector=0;
-	player.Put();
-	loc=playerLocation.New();
-	loc.Sector=0;
-	loc.Put();
-}
-
-uifc.pop("Creating Planets");
-planet=planets.New();
-planet.Put();
-for(i=0; i<Settings.MaxPlanets; i++) {
-	planet=planets.New();
-	planet.Put();
-}
-
-uifc.pop("SysOp Messages");
-twmsg.open("w");
-twmsg.writeln(system.timestr()+" TW 500 initialized");
-twmsg.close();
-
-uifc.pop("Player Messages");
-for(i=0; i<100; i++) {
-	msg=twpmsg.New();
-	msg.Put();
-}
 
-uifc.pop("Radio Messages");
-for(i=0; i<2; i++) {
-	msg=twrmsg.New();
-	twrmsg.Read=true;
-	msg.Put();
-}
-
-uifc.pop("Teams");
-var team=teams.New();
-team.Put();
+load(fname("ports.js"));
+load(fname("planets.js"));
+load(fname("teams.js"));
+load(fname("sectors.js"));
+load(fname("maint.js"));
+load(fname("players.js"));
+load(fname("messages.js"));
+load(fname("computer.js"));
+load(fname("input.js"));
 
-uifc.pop("Placing Ports");
-/* Place ports */
-for(i=0; i<ports_init.length; i++) {
-	sector_map[ports_init[i].Position-1].Port=i+1;
-	ports_init[i].LastUpdate=system.datestr(time()-15*86400);
-}
-
-uifc.pop("Initializing the Cabal");
-sector_map[85-1].Fighters=3000;
-sector_map[85-1].FightersOwner="The Cabal";
-for(i=1; i<=10; i++) {
-	var grp=cabals.New();
-	if(i==1) {
-		grp.Size=3000;
-		grp.Sector=85;
-		grp.Goal=85;
-	}
-	grp.Put();
-}
+var twmsg=new File(fname("twmesg.dat"));
+var i;
 
-uifc.pop("Writing Sectors");
-/* Write sectors.dat */
-sector=sectors.New();
-sector.Put();
-for(i=0; i<sector_map.length; i++) {
-	sector=sectors.New();
-	for(prop in sector_map[i])
-		sector[prop]=sector_map[i][prop];
-	sector.Put();
-}
+ResetAllPlayers();
+ResetAllPlanets();
+ResetAllMessages();
+InitializeTeams();
+InitializeSectors();
+InitializePorts();
+InitializeCabal();
 
-uifc.pop("Writing Ports");
-/* Write ports.ini */
-port=ports.New();
-port.Put();
-for(i=0; i<ports_init.length; i++) {
-	port=ports.New();
-	for(prop in ports_init[i])
-		port[prop]=ports_init[i][prop];
-	port.Production=[ports_init[i].OreProduction, ports_init[i].OrgProduction, ports_init[i].EquProduction];
-	port.PriceVariance=[ports_init[i].OreDeduction,ports_init[i].OrgDeduction,ports_init[i].EquDeduction];
-	port.Put();
-}
 uifc.pop();
 uifc.bail();