diff --git a/exec/load/coldfuncs.js b/exec/load/coldfuncs.js
index 19d2b40faeeefd2d92f4b98317f262673387a528..7e58fcf09446833a70eae466a7ced6ad85958877 100644
--- a/exec/load/coldfuncs.js
+++ b/exec/load/coldfuncs.js
@@ -7,9 +7,11 @@ function get_next_key()
 	var retchar;
 	var bytes=1;
 
+	if(bbs.command_str.substr(0,1)=="\r")
+		bbs.command_str='';
 	if(!bbs.command_str.length) {		// Nothing in STR already?
 		if(user.settings & USER_COLDKEYS)
-			bbs.command_str=console.getstr("",60,0);
+			bbs.command_str=console.getstr("",60,0)+"\r";
 		else
 			bbs.command_str=getkeye();
 	}
@@ -17,56 +19,63 @@ function get_next_key()
 		bytes=2;
 	retchar=bbs.command_str.substr(0,bytes);
 	bbs.command_str=bbs.command_str.substr(bytes);
-log("Returning: "+retchar);
 	return(retchar);
 }
 
 function get_next_keys(keys, have_part)
 {
 	var ret='';
+	var i;
 
-	// If there is something in STR, and coldkeys, push STR back into the input buffer
-	if(bbs.command_str.length && (user.settings & USER_COLDKEYS)) {
-		console.ungetstr(bbs.command_str);
+	// If there is something in STR, and coldkeys, grab from STR
+	if((bbs.command_str.length && (user.settings & USER_COLDKEYS)) || (have_part && !(user.settings & USER_COLDKEYS))) {
+		if((i=keys.indexOf(bbs.command_str.substr(0,1)))!=-1) {
+			bbs.command_str=bbs.command_str.substr(i);
+		}
+		if(keys.indexOf(bbs.command_str.substr(0,1))!=-1) {
+			ret=bbs.command_str.substr(0,1);
+			bbs.command_str=bbs.command_str.substr(1);
+			return(ret);
+		}
 		bbs.command_str='';
 	}
 
-	if(have_part && !(user.settings & USER_COLDKEYS))
-		console.ungetstr(bbs.command_str);
-
 	return(console.getkeys(keys));
 }
 
 function get_next_num(max, have_part)
 {
 	var ret='';
-
-	// If there is something in STR, and coldkeys, push STR back into the input buffer
-	if(bbs.command_str.length && (user.settings & USER_COLDKEYS)) {
-		console.ungetstr(bbs.command_str);
-		bbs.command_str='';
+	var use_str=false;
+
+	if(bbs.command_str.length && (user.settings & USER_COLDKEYS))
+		use_str=true;
+	while(ret+=get_next_keys("0123456789\r\n",have_part)) {
+		if(parseInt(ret+'0') > max)
+			return(parseInt(ret));
+		if(ret.search(/[\r\n]/)!=-1)
+			return(parseInt(ret));
+		// Using coldkeys and there was something in STR and there was a number
+		if(use_str && !bbs.command_str.length && parseInt(ret)>0)
+			return(parseInt(ret));
 	}
-
-	if(have_part && !(user.settings & USER_COLDKEYS))
-		console.ungetstr(bbs.command_str);
-
 	return(console.getnum(max));
 }
 
 function get_next_str(def_val, max_len, mode_bits, have_part)
 {
 	var ret='';
-
-	// If there is something in STR, and coldkeys, push STR back into the input buffer
-	if(bbs.command_str.length && (user.settings & USER_COLDKEYS)) {
-		console.ungetstr(bbs.command_str);
-		bbs.command_str='';
+	var use_str=false;
+
+	if(bbs.command_str.length && (user.settings & USER_COLDKEYS))
+		use_str=true;
+	while(ret+=get_next_key()) {
+		if(ret.search(/[\r\n]/)!=-1)
+			return(ret.replace(/[\r\n]/g,''));
+		// Using coldkeys and there was something in STR
+		if(use_str && !bbs.command_str.length)
+			return(ret);
 	}
-
-	if(have_part && !(user.settings & USER_COLDKEYS))
-		console.ungetstr(bbs.command_str);
-
-	return(console.getstr(def_val, max_len, mode_bits));
 }
 
 function getkeye()
@@ -87,6 +96,5 @@ function getkeye()
 		}
 		break;
 	}
-log("Getche - "+key);
 	return(key);
 }