diff --git a/graphics/x11drv/xfont.c b/graphics/x11drv/xfont.c
index f54ac79f463ca192e8da97c71affd571f5219a4f..21521de1ab640fdaa541f8e8a7dd75da98324b67 100644
--- a/graphics/x11drv/xfont.c
+++ b/graphics/x11drv/xfont.c
@@ -458,7 +458,7 @@ static BOOL32  LFD_ComposeLFD( fontObject* fo,
        else
 	   strcat( lpLFD, "-i" );
    else 
-       strcat( lpLFD, (uRelax < 4) ? "-r" : "-*" );
+       strcat( lpLFD, (uRelax < 6) ? "-r" : "-*" );
 
 /* add width style and skip serifs */
    if( fo->fi->fi_flags & FI_NORMAL )
@@ -511,15 +511,18 @@ static BOOL32  LFD_ComposeLFD( fontObject* fo,
 #define CHRS_CASE1(charset)	case 0: \
 				case 3: \
 		     		case 6: \
-				case 9: sprintf(lpEncoding, charset ); break; 
+				case 9: \
+				case 12: sprintf(lpEncoding, charset ); break; 
 #define CHRS_CASE2(charset)	case 1: \
                                 case 4: \
                                 case 7: \
-                                case 10: sprintf(lpEncoding, charset ); break;
+                                case 10: \
+				case 13: sprintf(lpEncoding, charset ); break;
 #define CHRS_CASE3(charset)	case 2: \
                                 case 5: \
                                 case 8: \
-                                case 11: sprintf(lpEncoding, charset ); break;
+                                case 11: \
+				case 14: sprintf(lpEncoding, charset ); break;
 #define CHRS_DEF(charset)	default: sprintf(lpEncoding, charset ); break;
 
    if( fo->fi->df.dfCharSet == ANSI_CHARSET )
@@ -651,7 +654,7 @@ static BOOL32  LFD_ComposeLFD( fontObject* fo,
 	switch (uRelax) {
 	CHRS_CASE1( "*-fontspecific" );
         CHRS_CASE2( "*-symbol" );
-	CHRS_DEF( "*" ); /* whatever */
+	CHRS_DEF( "*-*" ); /* whatever */
 	}
    }
 
@@ -678,30 +681,33 @@ static BOOL32  LFD_ComposeLFD( fontObject* fo,
        case 3: 
        case 4:
        case 5:
+       case 6: /* 6-8 will have replaced an 'r' in slant by '*' */
+       case 7:
+       case 8:
 	    sprintf( lpch, "%s-*-%i-%c-%c-*-%s", h_string, 
 			fo->fi->lfd_resolution, ch, w, lpEncoding );
 	    break;
 
-       case 6:
-       case 7:
-       case 8:
+       case 9:
+       case 10:
+       case 11:
 	    sprintf( lpch, "%s-*-%i-%c-*-*-%s",
 			h_string, fo->fi->lfd_resolution, ch, lpEncoding );
 	    break;
 
-       case 9:
-       case 10:
-       case 11:
+       case 12:
+       case 13:
+       case 14:
 	    sprintf( lpch, "%i-*-%i-%c-*-*-%s", fo->fi->lfd_height,
 			fo->fi->lfd_resolution, ch, lpEncoding );
 	    break;
 
-       case 12:
+       case 15:
 	    sprintf( lpch, "%i-*-*-*-*-*-%s", fo->fi->lfd_height, lpEncoding );
 	    break;
 
        default:
-	    sprintf( lpch, "%i-*-*-*-*-*-*", fo->fi->lfd_height);
+	    sprintf( lpch, "%i-*-*-*-*-*-*-*", fo->fi->lfd_height);
 	    break;
 
        /* to avoid an infinite loop; those will allways match */
@@ -709,7 +715,7 @@ static BOOL32  LFD_ComposeLFD( fontObject* fo,
             sprintf( lpLFD, "-*-*-*-*-*-*-*-*-*-*-*-*-iso8859-1" );
             break;
        case 201:
-            sprintf( lpLFD, "-*-*-*-*-*-*-*-*-*-*-*-*-*" );
+            sprintf( lpLFD, "-*-*-*-*-*-*-*-*-*-*-*-*-*-*" );
             break;
    }