diff -ru rxvt-cygport.orig/rxvt-20050409-21/src/rxvt/W11/w32/event.c rxvt-cygport/rxvt-20050409-21/src/rxvt/W11/w32/event.c
--- rxvt-cygport.orig/rxvt-20050409-21/src/rxvt/W11/w32/event.c	2014-09-23 20:25:10.142032400 +0200
+++ rxvt-cygport/rxvt-20050409-21/src/rxvt/W11/w32/event.c	2014-09-23 20:10:17.748834000 +0200
@@ -191,6 +191,18 @@
     long mask;
     PAINTSTRUCT paintStruct;
 
+    /* RS 2014-09-08 */
+    LPRECT lprc;
+    int wdiff;
+    int hdiff;
+    int w;
+    int h;
+    DWORD font_width;
+    DWORD line_height;
+    DWORD initial_width;
+    DWORD initial_height;
+    RECT wr;
+
     /*	if (message == WM_CLOSE) exit(0); */
 
     window = NT_find_window_from_id(hWnd);
@@ -216,6 +228,96 @@
 	case WM_MOVE:
 #if defined(WIN9X)
 	case WM_SIZING:
+#else
+	    QEvent(wineventq,window,message,wParam,lParam);
+	    break;
+	case WM_SIZING:
+	    /* Handle WM_SIZING event to control size increment.
+	     * Initially I thought about implementing something along
+	     * the way GNU Emacs does on Win32 (i. e., handling
+	     * WM_WINDOWPOSCHANGING). The downside is that that event
+	     * doesn't give us the corner that is used to resize, and
+	     * that it doesn't have an immediately visible effect when
+	     * using wireframe resize (RDP and such). So WM_SIZING
+	     * seems to be the way to go. I still follow the Emacs
+	     * approach to save the size increment data in the window
+	     * bytes, but the actual code to adjust the size struct
+	     * works more like in Vim or StackOverflow #5736229. */
+	    lprc=(LPRECT)lParam;
+	    GetWindowRect (hWnd, &wr);
+	    font_width = GetWindowLong (hWnd, WND_FONTWIDTH_INDEX);
+	    line_height = GetWindowLong (hWnd, WND_LINEHEIGHT_INDEX);
+	    /* For child windows (or when SetWindowLong didn't work), retain
+	     * increment of 1 (= any size allowed) */
+	    if(font_width==0||line_height==0)
+	    {
+		font_width=1;
+		line_height=1;
+		initial_width=0;
+		initial_height=0;
+	    }
+	    else
+	    {
+		initial_width=GetWindowLong(hWnd,WND_INITIAL_WIDTH_INDEX);
+		initial_height=GetWindowLong(hWnd,WND_INITIAL_HEIGHT_INDEX);
+		if(initial_width==0)
+		{
+		    initial_width=(wr.right - wr.left) % font_width;
+		    initial_height=(wr.bottom - wr.top) % line_height;
+		    /* this is the initial window size; we read it
+		     * before executing the first manual user resize.
+		     * It measures the top-level window including any
+		     * decorations. We're only interested in the modulo
+		     * result though. */
+		    SetWindowLong(hWnd,WND_INITIAL_WIDTH_INDEX,
+				  initial_width);
+		    SetWindowLong(hWnd,WND_INITIAL_HEIGHT_INDEX,
+				  initial_height);
+		}
+	    }
+	    /* Force width and height of client area to be exact
+	     * multiples of the character cell dimensions. */
+	    /* RS 2014-09-21: In contrast to the GNU Emacs
+	     * implementation, we use the window's original extent
+	     * to compute the diff, as we can assume that it was
+	     * right initially, so we don't need to know the
+	     * scrollbar dimensions. */
+	    w = lprc->right - lprc->left;
+	    h = lprc->bottom - lprc->top;
+	    wdiff = (w - initial_width) % font_width;
+	    hdiff = (h - initial_height) % line_height;
+	    
+	    if (wParam == WMSZ_LEFT || 
+		wParam == WMSZ_TOPLEFT || 
+		wParam == WMSZ_BOTTOMLEFT)
+	    {
+		lprc->left += wdiff;
+	    }
+	    else if (wParam == WMSZ_RIGHT ||
+		     wParam == WMSZ_TOPRIGHT || 
+		     wParam == WMSZ_BOTTOMRIGHT)
+	    {
+		lprc->right -= wdiff;
+	    }
+	    
+	    if (wParam == WMSZ_TOP ||
+		wParam == WMSZ_TOPLEFT ||
+		wParam == WMSZ_TOPRIGHT)
+	    {
+		lprc->top += hdiff;
+	    }
+	    else if (wParam == WMSZ_BOTTOM ||
+		     wParam == WMSZ_BOTTOMLEFT || 
+		     wParam == WMSZ_BOTTOMRIGHT)
+	    {
+		lprc->bottom -= hdiff;
+	    }
+	    /* WM_SIZING appears to not have been handled on non-9x
+	     * before; so I suppose we don't need to enqueue it as X11
+	     * event. We handled it, so no DefWindowProc either. Win9x
+	     * we leave alone, I'm not really sure why it was handled
+	     * there (and I don't care too). */
+	    return TRUE;
 #endif
 	case WM_SIZE:
 	    QEvent(wineventq,window,message,wParam,lParam);
@@ -971,3 +1073,7 @@
     return 0;
 }
 
+/* Local Variables: */
+/* indent-tabs-mode: t */
+/* tab-width: 8 */
+/* End: */
diff -ru rxvt-cygport.orig/rxvt-20050409-21/src/rxvt/W11/w32/ntdef.h rxvt-cygport/rxvt-20050409-21/src/rxvt/W11/w32/ntdef.h
--- rxvt-cygport.orig/rxvt-20050409-21/src/rxvt/W11/w32/ntdef.h	2014-09-23 20:25:10.142032400 +0200
+++ rxvt-cygport/rxvt-20050409-21/src/rxvt/W11/w32/ntdef.h	2014-09-21 21:21:10.392708900 +0200
@@ -70,4 +70,13 @@
 LONG NT_handleMsg(HWND hWnd,UINT message,UINT wParam,LONG lParam);
 HBITMAP NT_getWallpaper();
 void NT_moveWindow(NT_window *ntw, BOOL repaint);
+
+/* From GNU Emacs' w32term.h... well almost:
+ * RS 2014-09-08 */
+#define WND_FONTWIDTH_INDEX      (0)
+#define WND_LINEHEIGHT_INDEX     (4)
+#define WND_INITIAL_WIDTH_INDEX  (8)
+#define WND_INITIAL_HEIGHT_INDEX (12)
+#define WND_LAST_INDEX           (16)
+
 #endif
diff -ru rxvt-cygport.orig/rxvt-20050409-21/src/rxvt/W11/w32/xlib.c rxvt-cygport/rxvt-20050409-21/src/rxvt/W11/w32/xlib.c
--- rxvt-cygport.orig/rxvt-20050409-21/src/rxvt/W11/w32/xlib.c	2014-09-23 20:25:10.162061200 +0200
+++ rxvt-cygport/rxvt-20050409-21/src/rxvt/W11/w32/xlib.c	2014-09-21 18:56:44.923332200 +0200
@@ -3189,6 +3198,12 @@
 		ntw->miny = hints->min_height;
 	}
 
+	if(VALID_WINDOW(ntw) && (hints->flags&PResizeInc))
+	{
+	    SetWindowLong(ntw->w,WND_FONTWIDTH_INDEX,hints->width_inc);
+	    SetWindowLong(ntw->w,WND_LINEHEIGHT_INDEX,hints->height_inc);
+	}
+
 	if (VALID_WINDOW(ntw) && (hints->flags & USSize || hints->flags &USPosition))
 	{
 		SetWindowPos(ntw->w,HWND_TOPMOST,hints->x,hints->y,
@@ -5280,5 +5295,9 @@
 	return 0;
 }
 
+/* Local Variables: */
+/* indent-tabs-mode: t */
+/* tab-width: 8 */
+/* End: */
 
 #endif
diff -ru rxvt-cygport.orig/rxvt-20050409-21/src/rxvt/W11/wrap/wrap.c rxvt-cygport/rxvt-20050409-21/src/rxvt/W11/wrap/wrap.c
--- rxvt-cygport.orig/rxvt-20050409-21/src/rxvt/W11/wrap/wrap.c	2014-09-23 20:25:10.172075600 +0200
+++ rxvt-cygport/rxvt-20050409-21/src/rxvt/W11/wrap/wrap.c	2014-09-21 21:29:49.809593700 +0200
@@ -86,7 +86,7 @@
 	wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; /* CS_OWNDC */
 	wc.lpfnWndProc = WndProc;
 	wc.cbClsExtra = 0;
-	wc.cbWndExtra = 0;
+	wc.cbWndExtra = 16 /* RS 2014-09-08 */;
 	wc.hInstance = curInstance;
 	wc.hIcon = LoadIcon(curInstance, MAKEINTRESOURCE( IDI_RXVT ));
 	wc.hCursor =  LoadCursor(NULL, IDC_ARROW);
