diff --git a/src/conio/win32cio.c b/src/conio/win32cio.c
index 8dfa299e874246698a976a3a702f724011a4e75e..8bdcba6feeb9f2fc9b0a7c3bd7b1fe7af89397be 100644
--- a/src/conio/win32cio.c
+++ b/src/conio/win32cio.c
@@ -26,7 +26,7 @@ const struct vid_mode vid_modes[VID_MODES]={
 };
 
 static int lastch=0;
-static int domouse=0;
+static int domouse=1;
 static DWORD last_state=0;
 static int xpos=1;
 static int ypos=1;
@@ -88,6 +88,8 @@ int win32_kbhit(void)
 	if(lastch)
 		return(1);
 	while(1) {
+		if(mouse_pending())
+			return(1);
 		if(!PeekConsoleInput(GetStdHandle(STD_INPUT_HANDLE), &input, 1, &num)
 			|| !num)
 			break;
@@ -128,8 +130,6 @@ int win32_kbhit(void)
 			continue;
 		}
 	}
-	if(mouse_pending())
-		return(1);
 	return(0);
 }
 
@@ -146,8 +146,10 @@ int win32_getch(void)
 			lastch>>=8;
 			return(ch);
 		}
-		if(mouse_pending())
+		if(mouse_pending()) {
 			lastch=CIO_KEY_MOUSE;
+			continue;
+		}
 		if(!ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE), &input, 1, &num)
 			|| !num || (input.EventType!=KEY_EVENT && input.EventType!=MOUSE_EVENT))
 			continue;
@@ -240,13 +242,13 @@ int win32_initciolib(long inmode)
 
 int win32_hidemouse(void)
 {
-	domouse=0;
+	/* domouse=0; */
 	return(0);
 }
 
 int win32_showmouse(void)
 {
-	domouse=1;
+	/* domouse=1; */
 	return(0);
 }