diff -crB pango-1.29.3/pango/pangocoretext-fontmap.c pango-1.29.3_fixed/pango/pangocoretext-fontmap.c
*** pango-1.29.3/pango/pangocoretext-fontmap.c	2011-06-16 21:17:27.000000000 +0200
--- pango-1.29.3_fixed/pango/pangocoretext-fontmap.c	2011-10-05 23:13:24.000000000 +0200
***************
*** 595,600 ****
--- 595,603 ----
    PangoFontDescription *desc;
    char *postscript_name;
    gpointer context_key;
+   gint size;
+   gboolean size_is_absolute;
+   double dpi;
  };
  
  /* Fowler / Noll / Vo (FNV) Hash (http://www.isthe.com/chongo/tech/comp/fnv/)
***************
*** 629,635 ****
        key_a->matrix.yx == key_b->matrix.yx &&
        key_a->matrix.yy == key_b->matrix.yy &&
        pango_font_description_equal (key_a->desc, key_b->desc) &&
!       strcmp (key_a->postscript_name, key_b->postscript_name) == 0)
      {
        if (key_a->context_key)
          return PANGO_CORE_TEXT_FONT_MAP_GET_CLASS (key_a->fontmap)->context_key_equal (key_a->fontmap,
--- 632,641 ----
        key_a->matrix.yx == key_b->matrix.yx &&
        key_a->matrix.yy == key_b->matrix.yy &&
        pango_font_description_equal (key_a->desc, key_b->desc) &&
!       strcmp (key_a->postscript_name, key_b->postscript_name) == 0
!       && key_a->dpi == key_b->dpi
!       && key_a->size == key_b->size
!       && key_a->size_is_absolute == key_b->size_is_absolute)
      {
        if (key_a->context_key)
          return PANGO_CORE_TEXT_FONT_MAP_GET_CLASS (key_a->fontmap)->context_key_equal (key_a->fontmap,
***************
*** 657,662 ****
--- 663,680 ----
                                                                                   key->context_key);
  
    hash ^= g_str_hash (key->postscript_name);
+   
+   hash = hash_bytes_fnv ((unsigned char*)(&key->dpi), 
+                          sizeof(double), 
+                          hash);
+  
+   hash = hash_bytes_fnv ((unsigned char*)(&key->size), 
+                          sizeof(gint), 
+                          hash);
+     
+   hash = hash_bytes_fnv ((unsigned char*)(&key->size_is_absolute), 
+                          sizeof(gboolean), 
+                          hash);
  
    return (hash ^ pango_font_description_hash (key->desc));
  }
***************
*** 680,685 ****
--- 698,706 ----
    key->matrix = old->matrix;
    key->desc = pango_font_description_copy (old->desc);
    key->postscript_name = g_strdup (old->postscript_name);
+   key->size = old->size;
+   key->size_is_absolute = old->size_is_absolute;
+   key->dpi = old->dpi;
    if (old->context_key)
      key->context_key = PANGO_CORE_TEXT_FONT_MAP_GET_CLASS (key->fontmap)->context_key_copy (key->fontmap, old->context_key);
    else
***************
*** 707,712 ****
--- 728,751 ----
      *matrix = identity;
  }
  
+ extern double
+ pango_cairo_context_get_resolution (PangoContext *context);
+ 
+ static double 
+ pango_core_text_get_resolution (PangoCoreTextFontMap *ctfontmap,
+                                 PangoContext         *context)
+ {
+     if (context) 
+     {
+         return pango_cairo_context_get_resolution (context); 
+     }
+     
+     PangoCoreTextFontMapClass *klass;    
+     klass = PANGO_CORE_TEXT_FONT_MAP_GET_CLASS (ctfontmap);
+     
+     return klass->get_resolution(ctfontmap, context);
+ }
+ 
  static void
  font_hash_key_for_context (PangoCoreTextFontMap *fcfontmap,
                             PangoContext         *context,
***************
*** 715,720 ****
--- 754,761 ----
    key->fontmap = fcfontmap;
    get_context_matrix (context, &key->matrix);
  
+   key->dpi = pango_core_text_get_resolution (fcfontmap, context);
+ 
    if (PANGO_CORE_TEXT_FONT_MAP_GET_CLASS (fcfontmap)->context_key_get)
      key->context_key = (gpointer)PANGO_CORE_TEXT_FONT_MAP_GET_CLASS (fcfontmap)->context_key_get (fcfontmap, context);
    else
***************
*** 736,741 ****
--- 777,784 ----
    face = _pango_core_text_font_get_face (ctfont);
    key.postscript_name = (char *)_pango_core_text_face_get_postscript_name (face);
    key.desc = _pango_core_text_font_get_font_description (ctfont);
+   key.size = pango_font_description_get_size (key.desc);
+   key.size_is_absolute = pango_font_description_get_size_is_absolute (key.desc);
  
    key_copy = font_hash_key_copy (&key);
    _pango_core_text_font_set_context_key (ctfont, key_copy->context_key);
***************
*** 753,758 ****
--- 796,803 ----
    font_hash_key_for_context (ctfontmap, context, &key);
    key.postscript_name = (char *)_pango_core_text_face_get_postscript_name (face);
    key.desc = desc;
+   key.size = pango_font_description_get_size (key.desc);
+   key.size_is_absolute = pango_font_description_get_size_is_absolute (key.desc);
  
    return g_hash_table_lookup (ctfontmap->font_hash, &key);
  }
diff -crB pango-1.29.3/pango/pangocoretext-private.h pango-1.29.3_fixed/pango/pangocoretext-private.h
*** pango-1.29.3/pango/pangocoretext-private.h	2011-06-16 21:17:27.000000000 +0200
--- pango-1.29.3_fixed/pango/pangocoretext-private.h	2011-10-05 22:53:14.000000000 +0200
***************
*** 57,62 ****
--- 57,65 ----
  {
    PangoFontMapClass parent_class;
  
+   double       (*get_resolution)     (PangoCoreTextFontMap   *ctfontmap,
+                                       PangoContext           *context);
+     
    gconstpointer (*context_key_get)   (PangoCoreTextFontMap   *ctfontmap,
                                        PangoContext           *context);
    gpointer     (*context_key_copy)   (PangoCoreTextFontMap   *ctfontmap,
