diff --git a/src/conio/win32cio.c b/src/conio/win32cio.c
index 74e14fa6630958a278940b07ef5d18b2bfe88c7a..d581931ebb0c1e671966a9828be1e78864b897b8 100644
--- a/src/conio/win32cio.c
+++ b/src/conio/win32cio.c
@@ -210,10 +210,14 @@ int win32_getchcode(WORD code, DWORD state)
 				return(keyval[i].ALT);
 			if(state & (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED))
 				return(keyval[i].CTRL);
-			if(state & (SHIFT_PRESSED))
-				return(keyval[i].Shift);
-			if((state & (CAPSLOCK_ON)) && isalpha(keyval[i].Key))
-				return(keyval[i].Shift);
+			if((state & (CAPSLOCK_ON)) && isalpha(keyval[i].Key)) {
+				if(!(state & (SHIFT_PRESSED))
+					return(keyval[i].Shift);
+			}
+			else {
+				if(state & (SHIFT_PRESSED))
+					return(keyval[i].Shift);
+			}
 			return(keyval[i].Key);
 		}
 	}