{
       rface->rfont = rfont;
       rface->layouter = rfont->layouter;
+      rfont->layouter = Mnil;
       work_gstring.glyphs[0].rface = rface;
       work_gstring.glyphs[0].code = MCHAR_INVALID_CODE;
       mfont__get_metric (&work_gstring, 0, 1);
              *new = *rface;
              new->rfont = rfont;
              new->layouter = rfont->layouter;
+             rfont->layouter = Mnil;
              new->non_ascii_list = NULL;
              new->ascent = rfont->ascent;
              new->descent = rfont->descent;
            {
              from_g->rface = new;
              from_g->code
-               = (rfont->layouter
-                  ? mfont__flt_encode_char (rfont->layouter, from_g->c)
+               = (new->layouter
+                  ? mfont__flt_encode_char (new->layouter, from_g->c)
                   : mfont__encode_char (rfont->frame, (MFont *) rfont, NULL,
                                         from_g->c));
            }
   rfont = mfont__lookup_fontset (from_g->rface->rfontset, from_g, &num,
                                 script, language, charset, size, 0);
   if (rfont)
-    layouter = rfont->layouter;
+    {
+      layouter = rfont->layouter;
+      rfont->layouter = Mnil;
+    }
   else
     {
       from_g->code = MCHAR_INVALID_CODE;