--- unix/tkUnixRFont.c.orig	2008-02-14 21:38:54.000000000 +0300
+++ unix/tkUnixRFont.c	2008-02-15 13:01:07.000000000 +0300
@@ -69,23 +69,35 @@
     if (ucs4) {
 	for (i = 0; i < fontPtr->nfaces; i++) {
 	    FcCharSet *charset = fontPtr->faces[i].charset;
-	    if (charset && FcCharSetHasChar(charset, ucs4)) {
-		break;
+	    if (!(charset && FcCharSetHasChar(charset, ucs4))) {
+		continue;
+	    }
+	    if (!fontPtr->faces[i].ftFont) {
+		FcPattern *pat = FcFontRenderPrepare(0, fontPtr->pattern,
+			fontPtr->faces[i].source);
+
+		fontPtr->faces[i].ftFont = XftFontOpenPattern(fontPtr->display, pat);
+	    }
+	    if (fontPtr->faces[i].ftFont) {
+		return fontPtr->faces[i].ftFont;
 	    }
 	}
-	if (i == fontPtr->nfaces) {
-	    i = 0;
-	}
-    } else {
-	i = 0;
     }
-    if (!fontPtr->faces[i].ftFont) {
-	FcPattern *pat = FcFontRenderPrepare(0, fontPtr->pattern,
-		fontPtr->faces[i].source);
 
-	fontPtr->faces[i].ftFont = XftFontOpenPattern(fontPtr->display, pat);
+    for (i = 0; i < fontPtr->nfaces; i++) {
+	if (!fontPtr->faces[i].ftFont) {
+	    FcPattern *pat = FcFontRenderPrepare(0, fontPtr->pattern,
+		    fontPtr->faces[i].source);
+
+	    fontPtr->faces[i].ftFont = XftFontOpenPattern(fontPtr->display, pat);
+	}
+	if (fontPtr->faces[i].ftFont) {
+	    return fontPtr->faces[i].ftFont;
+	}
     }
-    return fontPtr->faces[i].ftFont;
+
+    /* No fonts from a fontset are usable. Cannot recover */
+    return NULL;
 }
 
 /*
