diff --git a/src/conio/x_events.c b/src/conio/x_events.c
index 4809f04d93c7ad4038c534f56e80939cba4ffc60..03ee8a5648c746ba7f0cecec3e8324b80054a787 100644
--- a/src/conio/x_events.c
+++ b/src/conio/x_events.c
@@ -534,13 +534,19 @@ static void handle_resize_event(int width, int height)
 	old_scaling = x_cvstat.scaling;
 	if(x_cvstat.scaling > 16)
 		x_setscaling(16);
+
 	/*
-	 * We only need to resize if the width/height are not even multiples
+	 * We only need to resize if the width/height are not even multiples,
+	 * or if the two axis don't scale the same way.
 	 * Otherwise, we can simply resend everything
 	 */
-	if((width % (x_cvstat.charwidth * x_cvstat.cols) != 0)
+	if (newFSH != newFSW)
+		resize_window();
+	else if((width % (x_cvstat.charwidth * x_cvstat.cols) != 0)
 			|| (height % (x_cvstat.charheight * x_cvstat.rows) != 0))
 		resize_window();
+	else
+		resize_xim();
 	bitmap_drv_request_pixels();
 }
 
@@ -587,12 +593,12 @@ static int x11_event(XEvent *ev)
 			x11_window_height=ev->xconfigure.height;
 			handle_resize_event(ev->xconfigure.width, ev->xconfigure.height);
 			break;
-        case NoExpose:
-                break;
-        case GraphicsExpose:
+		case NoExpose:
+			break;
+		case GraphicsExpose:
 			expose_rect(ev->xgraphicsexpose.x, ev->xgraphicsexpose.y, ev->xgraphicsexpose.width, ev->xgraphicsexpose.height);
 			break;
-        case Expose:
+		case Expose:
 			expose_rect(ev->xexpose.x, ev->xexpose.y, ev->xexpose.width, ev->xexpose.height);
 			break;