--- src/main.c.orig	Wed Oct 14 19:26:23 1998
+++ src/main.c	Wed Oct 14 19:57:13 1998
@@ -497,6 +497,16 @@
 			       GCForeground | GCBackground |
 			       GCFont | GCGraphicsExposures,
 			       &gcvalue);
+#ifdef	FIX_ALIGNMENT
+	TermWin.ngc = TermWin.gc;
+#ifdef	MULTICHAR_SET
+	gcvalue.font = TermWin.mfont->fid;
+	TermWin.mgc = XCreateGC(Xdisplay, TermWin.vt,
+			GCForeground | GCBackground |
+			GCFont | GCGraphicsExposures,
+			&gcvalue);
+#endif
+#endif
     }
 }
 /*}}} */
@@ -976,7 +986,11 @@
 
 /* alter existing GC */
     if (!init) {
+#ifdef	FIX_ALIGNMENT
+	XSetFont(Xdisplay, TermWin.ngc, TermWin.font->fid);
+#else
 	XSetFont(Xdisplay, TermWin.gc, TermWin.font->fid);
+#endif
 	menubar_expose();
     }
 /* set the sizes */
--- src/rxvt.h.orig	Wed Oct 14 19:35:44 1998
+++ src/rxvt.h	Wed Oct 14 19:37:53 1998
@@ -198,11 +198,18 @@
     Window          parent, vt;	/* parent (main) and vt100 window           */
     GC              gc;		/* GC for drawing text                      */
     XFontStruct    *font;	/* main font structure                      */
+#ifdef	FIX_ALIGNMENT
+    GC              ngc;
+    int             vascent;
+#endif
 #ifndef NO_BOLDFONT
     XFontStruct    *boldFont;	/* bold font                                */
 #endif
 #ifdef MULTICHAR_SET
     XFontStruct    *mfont;	/* Multichar font structure                 */
+#endif
+#ifdef	FIX_ALIGNMENT
+    GC              mgc;
 #endif
 #ifdef XPM_BACKGROUND
     Pixmap          pixmap;
--- src/screen.c.orig	Wed Oct 14 19:37:57 1998
+++ src/screen.c	Wed Oct 14 19:54:01 1998
@@ -2046,7 +2046,12 @@
  * always go back to the base font - it's much safer
  */
     wbyte = 0;
+#ifdef	FIX_ALIGNMENT
+    TermWin.gc = TermWin.ngc;
+    TermWin.vascent = TermWin.font->ascent;
+#else
     XSetFont(Xdisplay, TermWin.gc, TermWin.font->fid);
+#endif
     draw_string = XDrawString;
     draw_image_string = XDrawImageString;
     boldlast = 0;
@@ -2224,7 +2229,11 @@
 
 	    len = 0;
 	    buffer[len++] = stp[col];
+#ifdef	FIX_ALIGNMENT
+	    ypixel = TermWin.vascent + Row2Pixel(row);
+#else
 	    ypixel = TermWin.font->ascent + Row2Pixel(row);
+#endif
 	    xpixel = Col2Pixel(col);
 	    wlen = 1;
 
@@ -2238,7 +2247,13 @@
 		    && ((srp[col + 1]) & RS_multiMask) == RS_multi2) {
 		    if (!wbyte) {
 			wbyte = 1;
+#ifdef	FIX_ALIGNMENT
+			TermWin.gc = TermWin.mgc;
+			ypixel += TermWin.mfont->ascent - TermWin.vascent;
+			TermWin.vascent = TermWin.mfont->ascent;
+#else
 			XSetFont(Xdisplay, TermWin.gc, TermWin.mfont->fid);
+#endif
 			draw_string = XDrawString16;
 			draw_image_string = XDrawImageString16;
 		    }
@@ -2276,7 +2291,13 @@
 		    }
 		    if (wbyte) {
 			wbyte = 0;
+#ifdef	FIX_ALIGNMENT
+			TermWin.gc = TermWin.ngc;
+			ypixel += TermWin.font->ascent - TermWin.vascent;
+			TermWin.vascent = TermWin.font->ascent;
+#else
 			XSetFont(Xdisplay, TermWin.gc, TermWin.font->fid);
+#endif
 			draw_string = XDrawString;
 			draw_image_string = XDrawImageString;
 		    }
@@ -2364,7 +2385,11 @@
 		rend &= ~RS_Bold;	/* we've taken care of it */
 	    } else if (bfont) {
 		bfont = 0;
+#ifdef	FIX_ALIGNMENT
+		XSetFont(Xdisplay, TermWin.ngc, TermWin.font->fid);
+#else
 		XSetFont(Xdisplay, TermWin.gc, TermWin.font->fid);
+#endif
 	    }
 #endif
 /*
@@ -2376,12 +2401,20 @@
 		    gcmask |= (GCForeground | GCBackground);
 		    XChangeGC(Xdisplay, TermWin.gc, gcmask, &gcvalue);
 		    XFillRectangle(Xdisplay, drawBuffer, TermWin.gc,
+#ifdef	FIX_ALIGNMENT
+				   xpixel, ypixel - TermWin.vascent,
+#else
 				   xpixel, ypixel - TermWin.font->ascent,
+#endif
 				   Width2Pixel(1), Height2Pixel(1));
 		    SWAP_IT(gcvalue.foreground, gcvalue.background, ltmp);
 		    XChangeGC(Xdisplay, TermWin.gc, gcmask, &gcvalue);
 		} else
+#ifdef	FIX_ALIGNMENT
+		    CLEAR_CHARS(xpixel, ypixel - TermWin.vascent, 1);
+#else
 		    CLEAR_CHARS(xpixel, ypixel - TermWin.font->ascent, 1);
+#endif
 		DRAW_STRING(draw_string, xpixel, ypixel, buffer, 1);
 #ifndef NO_BOLDOVERSTRIKE
 		if (MONO_BOLD(rend))
@@ -2390,7 +2423,11 @@
 	    } else
 #ifdef XPM_BACKGROUND
 	    if (TermWin.pixmap != None && back == Color_bg) {
+#ifdef	FIX_ALIGNMENT
+		CLEAR_CHARS(xpixel, ypixel - TermWin.vascent, len);
+#else
 		CLEAR_CHARS(xpixel, ypixel - TermWin.font->ascent, len);
+#endif
 		DRAW_STRING(draw_string, xpixel, ypixel, buffer, wlen);
 	    } else
 #endif
@@ -2488,6 +2525,9 @@
     end_row = TermWin.saveLines - TermWin.view_start;
     if (selection.op && current_screen == selection.screen) {
 	i = selection.beg.row + TermWin.saveLines;
+#ifdef	FIX_ALIGNMENT
+	TermWin.gc = TermWin.ngc;
+#endif
 	row = selection.end.row + TermWin.saveLines;
 	if (i >= end_row)
 	    col = selection.beg.col;
