diff --git a/exec/load/mouse_getkey.js b/exec/load/mouse_getkey.js
index 4062e42f907956baf86b636cfd45301dc5b1323f..f76373f57014509c98274244edf62979a16c4736 100644
--- a/exec/load/mouse_getkey.js
+++ b/exec/load/mouse_getkey.js
@@ -1,3 +1,5 @@
+// $Id$
+
 function mouse_getkey(mode, timeout, enabled)
 {
 	var key;
@@ -8,13 +10,24 @@ function mouse_getkey(mode, timeout, enabled)
 	var motion;
 	var mods;
 	var press;
+	var ansiterm = bbs.mods.ansiterm_lib;
+	if(!ansiterm)
+		ansiterm = bbs.mods.ansiterm_lib = load({}, "ansiterm_lib.js");
 
 	// TODO: Fake these modes...
 	var safe_mode = mode & ~(K_UPPER|K_UPRLWR|K_NUMBER|K_ALPHA|K_NOEXASC);
 
-	if (mode & (K_UPPER|K_UPRLWR|K_NUMBER|K_ALPHA|K_NOEXASC)) {
+	if (safe_mode != mode) {
 		throw("Invalid mode "+mode+" for mouse_getkey()");
 	}
+	
+	function mouse_enable(enable)
+	{
+		if(console.term_supports(USER_ANSI)) {
+			ansiterm.send('mouse', enable ? 'set' : 'clear', 'x10_compatible');
+			ansiterm.send('mouse', enable ? 'set' : 'clear', 'extended_coord');
+		}
+	}
 
 	function restuff()
 	{
@@ -26,7 +39,7 @@ function mouse_getkey(mode, timeout, enabled)
 		enabled = false;
 
 	if (!enabled) {
-		console.write("\x1b[?1006;9h");
+		mouse_enable(true);
 	}
 	do {
 		if(timeout !== undefined)
@@ -34,7 +47,7 @@ function mouse_getkey(mode, timeout, enabled)
 		else
 			key=console.getkey(mode);
 		if (!enabled)
-			console.write("\x1b[?9l");
+			mouse_enable(false);
 
 		if (key === '' || key === undefined || key === null) {
 			ansi += key;