diff --git a/src/cioxtrn/cioxtrn.c b/src/cioxtrn/cioxtrn.c
index 5a6bd049c8226e814f4f972f33a6cc1d6a9b5481..1a7a4f0cfea9412f4ba1b8fe530129ff2d6833f2 100644
--- a/src/cioxtrn/cioxtrn.c
+++ b/src/cioxtrn/cioxtrn.c
@@ -15,6 +15,7 @@ void input_thread(void *args)
 	int					key;
 	INPUT_RECORD		ckey;
 	int					alt=0;
+	int					ctrl=0;
 	DWORD d;
 	SHORT s;
 
@@ -46,6 +47,30 @@ void input_thread(void *args)
 			if(alt)
 				continue;
 		}
+		if(key < ' ') {
+			/* If this is NOT a "normal" key, fiddle with CTRL */
+			switch(key) {
+			case 8:
+			case 9:
+			case 10:
+			case 13:
+			case 27:
+				break;
+			default:
+				ctrl=1;
+				ckey.Event.KeyEvent.bKeyDown=TRUE;
+				ckey.Event.KeyEvent.dwControlKeyState = LEFT_CTRL_PRESSED;
+				ckey.Event.KeyEvent.wRepeatCount=1;
+				ckey.Event.KeyEvent.wVirtualKeyCode=VK_CONTROL;
+				ckey.Event.KeyEvent.wVirtualScanCode=MapVirtualKey(ckey.Event.KeyEvent.wVirtualKeyCode, 0);
+				ckey.Event.KeyEvent.uChar.AsciiChar=0;
+				d=0;
+				while(!d) {
+					if(!WriteConsoleInput(console_input, &ckey, 1, &d))
+						d=0;
+				}
+			}
+		}
 
 		ckey.Event.KeyEvent.bKeyDown=TRUE;
 		ckey.Event.KeyEvent.wRepeatCount=1;
@@ -175,6 +200,20 @@ void input_thread(void *args)
 			}
 			alt=0;
 		}
+		if(ctrl) {
+			ckey.Event.KeyEvent.bKeyDown=FALSE;
+			ckey.Event.KeyEvent.wRepeatCount=1;
+			ckey.Event.KeyEvent.wVirtualKeyCode=VK_CONTROL;
+			ckey.Event.KeyEvent.wVirtualScanCode=MapVirtualKey(ckey.Event.KeyEvent.wVirtualKeyCode, 0);
+			ckey.Event.KeyEvent.uChar.AsciiChar=0;
+			ckey.Event.KeyEvent.dwControlKeyState = LEFT_CTRL_PRESSED;
+			d=0;
+			while(!d) {
+				if(!WriteConsoleInput(console_input, &ckey, 1, &d))
+					d=0;
+			}
+			alt=0;
+		}
 	}
 	input_thread_running=0;
 }