--- pango-1.32.6/pango/pangowin32-fontmap.c.orig	2013-01-08 03:06:50.000000000 +0100
+++ pango-1.32.6/pango/pangowin32-fontmap.c	2013-01-27 11:55:33.202855914 +0100
@@ -46,6 +46,7 @@ struct _PangoWin32Family
   GSList *faces;
 
   gboolean is_monospace;
+  BYTE pitch_and_family;
 };
 
 #if !defined(NTM_PS_OPENTYPE)
@@ -1565,7 +1566,8 @@ pango_win32_insert_font (PangoWin32FontM
   win32family =
     pango_win32_get_font_family (win32fontmap,
 				 pango_font_description_get_family (win32face->description));
-  if ((lfp->lfPitchAndFamily & 0xF0) == FF_MODERN)
+  win32family->pitch_and_family = lfp->lfPitchAndFamily;
+  if ((win32family->pitch_and_family & 0xF0) == FF_MODERN)
     win32family->is_monospace = TRUE;
     
   win32family->faces = g_slist_append (win32family->faces, win32face);
@@ -1740,7 +1742,7 @@ pango_win32_font_map_load_fontset (Pango
   /* font for various texts when we are on Windows */
   /* (Copied directly from pango-fontmap.c) */
   PangoFontDescription *tmp_desc = pango_font_description_copy_static (desc);
-  const char *family;
+  char *family;
   char **families;
   int i;
   PangoFontsetSimple *fonts;
@@ -1749,7 +1751,36 @@ pango_win32_font_map_load_fontset (Pango
 
   g_return_val_if_fail (fontmap != NULL, NULL);
 
-  family = pango_font_description_get_family (desc);
+  family = g_strdup (pango_font_description_get_family (desc));
+
+  /* Amend the family for font fallbacks. */
+  if (family && strchr (family, ',') == NULL)
+    {
+      PangoWin32FontMap *win32fontmap = (PangoWin32FontMap *) fontmap;
+      PangoWin32Family *win32_family = g_hash_table_lookup (win32fontmap->families, family);
+
+      /* If the font to amend is not known, a family is not appended.
+       * (For example when an invalid font name is specified). This way,
+       * an empty fontset is still obtained such that that fallbacks
+       * below come into action.
+       */
+      if (win32_family != NULL)
+        {
+          char *amended_family;
+
+          if ((win32_family->pitch_and_family & 0xF0) == FF_ROMAN)
+            amended_family = g_strconcat (family, ",serif", NULL);
+          else if ((win32_family->pitch_and_family & 0xF0) == FF_MODERN)
+            amended_family = g_strconcat (family, ",monospace", NULL);
+          else
+            amended_family = g_strconcat (family, ",sans", NULL);
+
+          g_free (family);
+          family = amended_family;
+          pango_font_description_set_family_static (tmp_desc, family);
+        }
+    }
+
   families = g_strsplit (family ? family : "", ",", -1);
 
   fonts = pango_fontset_simple_new (language);
@@ -1834,6 +1865,7 @@ pango_win32_font_map_load_fontset (Pango
     }
 
   pango_font_description_free (tmp_desc);
+  g_free (family);
 
   /* Everything failed, we are screwed, there is no way to continue,
    * but lets just not crash here.
