diff --git a/xtrn/lord/lord.js b/xtrn/lord/lord.js
index af27b95b90439d7bf0a878096a0ea6a1810eca6a..c65342ae3dd7542ef6177258536455c9e0e3882f 100644
--- a/xtrn/lord/lord.js
+++ b/xtrn/lord/lord.js
@@ -1738,23 +1738,6 @@ function all_players()
 	return ret;
 }
 
-function try_fmutex(fname, str)
-{
-	fname += '.lock';
-	if (str === undefined) {
-		if(!file_mutex(fname)) {
-			return false;
-		}
-	}
-	else {
-		if(!file_mutex(fname, str)) {
-			return false;
-		}
-	}
-	cleanup_files.push(fname);
-	return true;
-}
-
 function fmutex(fname, str)
 {
 	var end = time() + 15;
@@ -1763,14 +1746,14 @@ function fmutex(fname, str)
 		while(!file_mutex(fname)) {
 			if (time() > end)
 				throw new Error("Unable to create "+fname+" please notify Sysop");
-			mswait(1);
+			mswait(100);
 		}
 	}
 	else {
 		while(!file_mutex(fname, str)) {
 			if (time() > end)
 				throw new Error("Unable to create "+fname+" please notify Sysop");
-			mswait(1);
+			mswait(100);
 		}
 	}
 	cleanup_files.push(fname);
@@ -3406,16 +3389,19 @@ function ob_cleanup() {
 function ob_read_msg(fname) {
 	var f = new File(fname);
 	var msg;
+	var end = time() + 15;
 
 	if (psock !== undefined) {
 		return undefined;
 	}
 	do {
-		while (!f.open('r')) {
-			mswait(1);
+		while (!f.open('r') && time() <= end) {
+			mswait(100);
 		}
 		msg = f.read();
 		f.close();
+		if (time() > end) 
+			break;
 	} while (msg === undefined || msg.length < 1 || msg[msg.length-1] !== '\n');
 	msg = msg.replace(/[\r\n]/g,'');
 
@@ -3592,17 +3578,18 @@ function on_battle(op, first, action) {
 			sln('  You run as fast as your legs will carry you!');
 			sln('');
 			more_nomail();
-			return;
+			return 'ABORT';
 		}
 		if (waction === 'R') {
-			lln('  `0The sniveling '+op.name+' `0has run away.  Unfortunatly, this battle');
+			lln('  `0The sniveling '+op.name+' `0has run away.  Unfortunately, this battle');
 			sln('  is OVER.');
 			log_line('  `0'+player.name+' `2& `0'+op.name+' `2had an uneventful online duel.');
 			sln('');
 			more_nomail();
-			return;
+			return 'ABORT';
 		}
 		on_struck(op, waction);
+		return;
 	}
 
 	if (first) {
@@ -3613,7 +3600,8 @@ function on_battle(op, first, action) {
 	else {
 		lln('  `%** YOUR ENEMY STRIKES YOU FIRST **');
 		if (action === undefined) {
-			wait_for_hit(op);
+			if (wait_for_hit(op) === 'ABORT');
+				return;
 		}
 		else {
 			on_struck(op, action);
@@ -3649,7 +3637,8 @@ outer:
 						lln('  `2You miss `0'+op.name+'`2 Completely!');
 						sln('');
 						ob_send_resp(op, '0');
-						wait_for_hit(op);
+						if (wait_for_hit(op) === 'ABORT')
+							break outer;
 						break;
 					}
 					lln('  `2You HIT `0'+op.name+'`2 for `4'+pretty_int(tmp)+'`2 points of damage!');
@@ -3688,7 +3677,8 @@ outer:
 						tournament_check();
 						break outer;
 					}
-					wait_for_hit(op);
+					if (wait_for_hit(op) === 'ABORT')
+						break outer;
 					break;
 				case 'Y':
 					if (cantaunt) {
@@ -3698,7 +3688,7 @@ outer:
 						lw(' `0>`2');
 						tmp = '  '+dk.console.getstr();
 						if (psock === undefined) {
-							file_mutex(gamedir('mess'+op.Record+'.bin', tmp+'\n'));
+							file_mutex(gamedir('mess'+op.Record+'.bin'), tmp+'\n');
 						}
 						else {
 							psock.writeln('SendBattleResponse Yell: '+tmp);
@@ -6140,7 +6130,7 @@ function load_player(create)
 			foreground(10);
 			sln('-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-');
 			foreground(2);
-			sln('  You have never visted the realm before.  Do you want to join this place');
+			sln('  You have never visited the realm before.  Do you want to join this place');
 			sln('  of Dragons, Knights, Magic, Friends & Foes and Good & Evil?');
 			sln('');
 			lln('  `2(`0Y`2)es.');
@@ -11535,7 +11525,7 @@ function fight_dragon(cant_run) {
 			lln('`c                   `%EPILOGUE `2- `0The Warrior\'s Ending');
 			lln('`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-');
 			lln('  `2After your bloody duel with the huge Dragon, your first inpulse is to rip');
-			lln('  its head off and bring it town.  Carefull thought reveals it is much to');
+			lln('  its head off and bring it town.  Careful thought reveals it is much to');
 			lln('  big for your horse, so that plan is moot.  Your second notion is bring back');
 			lln('  the childrens bones.  Bags and bags of them for proper burial, but you');
 			lln('  realize this would only cause the town\'s inhabitants `0MORE`2 pain.  You');
@@ -12574,7 +12564,7 @@ function forest()
 			more();
 			return;
 		}
-		lln('  `0You\'re quite a hero.  Unfortunatly, the '+lad+' seems to have');
+		lln('  `0You\'re quite a hero.  Unfortunately, the '+lad+' seems to have');
 		sln('  forgotten the return address.  You\'ll have to guess.');
 		sln('');
 		lln('  `2(`0C`2)astle Coldrake');