diff --git a/src/Makefile.am b/src/Makefile.am
index df3cf17..390ca82 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -151,7 +151,6 @@
 	fcname.c \
 	fcobjs.c \
 	fcobjs.h \
-	fcopentype.c \
 	fcpat.c \
 	fcrange.c \
 	fcserialize.c \
diff --git a/src/fcdir.c b/src/fcdir.c
index 06644a0..e332897 100644
--- a/src/fcdir.c
+++ b/src/fcdir.c
@@ -117,9 +117,6 @@
 	if (config && !FcConfigSubstitute (config, font, FcMatchScan))
 	    ret = FcFalse;
 
-	if (!FcPatternAddFullname (font))
-	    ret = FcFalse;
-
 	if (FcDebug() & FC_DBG_SCANV)
 	{
 	    printf ("Final font pattern:\n");
diff --git a/src/fcfreetype.c b/src/fcfreetype.c
index 4b545bf..ee86eb9 100644
--- a/src/fcfreetype.c
+++ b/src/fcfreetype.c
@@ -1655,6 +1655,61 @@
 	++nfamily;
     }
 
+    /* Add the fullname into the cache */
+    if (!variable && !nfullname)
+    {
+	FcChar8 *family, *style, *lang;
+	int n = 0;
+	size_t len, i;
+	FcStrBuf sbuf;
+
+	while (FcPatternObjectGetString (pat, FC_FAMILYLANG_OBJECT, n, &lang) == FcResultMatch)
+	{
+	    if (FcStrCmp (lang, (const FcChar8 *) "en") == 0)
+		break;
+	    n++;
+	    lang = NULL;
+	}
+	if (!lang)
+	    n = 0;
+	if (FcPatternObjectGetString (pat, FC_FAMILY_OBJECT, n, &family) != FcResultMatch)
+	    goto bail1;
+	len = strlen ((const char *) family);
+	for (i = len; i > 0; i--)
+	{
+	    if (!isspace (family[i]))
+		break;
+	}
+	family[i] = 0;
+	while (FcPatternObjectGetString (pat, FC_STYLELANG_OBJECT, n, &lang) == FcResultMatch)
+	{
+	    if (FcStrCmp (lang, (const FcChar8 *) "en") == 0)
+		break;
+	    n++;
+	    lang = NULL;
+	}
+	if (!lang)
+	    n = 0;
+	if (FcPatternObjectGetString (pat, FC_STYLE_OBJECT, n, &style) != FcResultMatch)
+	    goto bail1;
+	len = strlen ((const char *) style);
+	for (i = 0; style[i] != 0 && isspace (style[i]); i++)
+	    break;
+	memcpy (style, &style[i], len - i);
+	FcStrBufInit (&sbuf, NULL, 0);
+	FcStrBufString (&sbuf, family);
+	FcStrBufChar (&sbuf, ' ');
+	FcStrBufString (&sbuf, style);
+	if (!FcPatternObjectAddString (pat, FC_FULLNAME_OBJECT, FcStrBufDoneStatic (&sbuf)))
+	{
+	    FcStrBufDestroy (&sbuf);
+	    goto bail1;
+	}
+	FcStrBufDestroy (&sbuf);
+	if (!FcPatternObjectAddString (pat, FC_FULLNAMELANG_OBJECT, (const FcChar8 *) "en"))
+	    goto bail1;
+	++nfullname;
+    }
     /* Add the PostScript name into the cache */
     if (!variable)
     {
diff --git a/src/fcint.h b/src/fcint.h
index 4150a05..612287f 100644
--- a/src/fcint.h
+++ b/src/fcint.h
@@ -1374,10 +1374,6 @@
 FcPrivate const FcObjectType *
 FcObjectLookupOtherTypeByName (const char *str);
 
-/* fcopentype.c */
-FcPrivate FcBool
-FcPatternAddFullname (FcPattern *pat);
-
 /* fchash.c */
 FcPrivate FcBool
 FcHashStrCopy (const void  *src,
diff --git a/src/fcopentype.c b/src/fcopentype.c
deleted file mode 100644
index eff3742..0000000
--- a/src/fcopentype.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  The authors make no
- * representations about the suitability of this software for any purpose.  It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-#include "fcint.h"
-
-FcBool
-FcPatternAddFullname (FcPattern *pat)
-{
-    FcBool b = FcFalse;
-
-    if (FcRefIsConst (&pat->ref))
-	return FcFalse;
-    if (FcPatternObjectGetBool (pat, FC_VARIABLE_OBJECT, 0, &b) != FcResultMatch || b == FcFalse)
-    {
-	FcChar8 *family, *style, *lang = NULL;
-	int n = 0;
-	size_t len, i;
-	FcStrBuf sbuf;
-
-	while (FcPatternObjectGetString (pat, FC_FAMILYLANG_OBJECT, n, &lang) == FcResultMatch)
-	{
-	    if (FcStrCmp (lang, (const FcChar8 *) "en") == 0)
-		break;
-	    n++;
-	    lang = NULL;
-	}
-	if (!lang)
-	    n = 0;
-	if (FcPatternObjectGetString (pat, FC_FAMILY_OBJECT, n, &family) != FcResultMatch)
-	    return FcFalse;
-	len = strlen ((const char *) family);
-	for (i = len; i > 0; i--)
-	{
-	    if (!isspace (family[i-1]))
-		break;
-	}
-	family[i] = 0;
-	lang = NULL;
-	while (FcPatternObjectGetString (pat, FC_STYLELANG_OBJECT, n, &lang) == FcResultMatch)
-	{
-	    if (FcStrCmp (lang, (const FcChar8 *) "en") == 0)
-		break;
-	    n++;
-	    lang = NULL;
-	}
-	if (!lang)
-	    n = 0;
-	if (FcPatternObjectGetString (pat, FC_STYLE_OBJECT, n, &style) != FcResultMatch)
-	    return FcFalse;
-	len = strlen ((const char *) style);
-	for (i = 0; style[i] != 0 && isspace (style[i]); i++);
-	memcpy (style, &style[i], len - i);
-	FcStrBufInit (&sbuf, NULL, 0);
-	FcStrBufString (&sbuf, family);
-	if (FcStrCmpIgnoreBlanksAndCase(style, (const FcChar8 *) "Regular") != 0)
-	{
-	    FcStrBufChar (&sbuf, ' ');
-	    FcStrBufString (&sbuf, style);
-	}
-	FcPatternObjectDel (pat, FC_FULLNAME_OBJECT);
-	if (!FcPatternObjectAddString (pat, FC_FULLNAME_OBJECT, FcStrBufDoneStatic (&sbuf)))
-	{
-	    FcStrBufDestroy (&sbuf);
-	    return FcFalse;
-	}
-	FcStrBufDestroy (&sbuf);
-	FcPatternObjectDel (pat, FC_FULLNAMELANG_OBJECT);
-	if (!FcPatternObjectAddString (pat, FC_FULLNAMELANG_OBJECT, (const FcChar8 *) "en"))
-	    return FcFalse;
-    }
-
-    return FcTrue;
-}
diff --git a/src/meson.build b/src/meson.build
index 73cb2de..9a6ba20 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -19,7 +19,6 @@
   'fcmatrix.c',
   'fcname.c',
   'fcobjs.c',
-  'fcopentype.c',
   'fcpat.c',
   'fcrange.c',
   'fcserialize.c',
