diff --git a/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java b/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java
index d11439d..df24f73 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java
@@ -44,6 +44,7 @@
 import org.apache.pdfbox.cos.COSString;
 
 import org.apache.pdfbox.pdmodel.common.PDStream;
+import org.apache.pdfbox.pdmodel.font.PDCIDFont;
 import org.apache.pdfbox.pdmodel.font.PDCIDFontType0;
 import org.apache.pdfbox.pdmodel.font.PDCIDFontType2;
 import org.apache.pdfbox.pdmodel.font.PDFont;
@@ -164,22 +165,22 @@
         if (font.getName() != null) {
             String extra = "";
             String name = getName(font.getName()) + "_" + ((COSName)fontData.getItem(COSName.SUBTYPE)).getName();
-            if (font instanceof PDType0Font
-                    && ((PDType0Font) font).getDescendantFont() instanceof PDCIDFontType0) {
-                CFFFont cffFont = ((PDCIDFontType0) ((PDType0Font) font).getDescendantFont()).getCFFFont();
-                if (cffFont instanceof CFFCIDFont
-                        && ((CFFCIDFont)cffFont).getFdSelect().getClass().getName()
-                        .equals("org.apache.fontbox.cff.CFFParser$Format0FDSelect")) {
-                    extra += "format0";
+            if (font instanceof PDType0Font) {
+                PDCIDFont descendantFont = ((PDType0Font) font).getDescendantFont();
+                if (descendantFont instanceof PDCIDFontType0) {
+                    CFFFont cffFont = ((PDCIDFontType0) descendantFont).getCFFFont();
+                    if (cffFont instanceof CFFCIDFont
+                            && ((CFFCIDFont) cffFont).getFdSelect().getClass().getName()
+                            .equals("org.apache.fontbox.cff.CFFParser$Format0FDSelect")) {
+                        extra += "format0";
+                    }
+                    return name + extra + "cff";
+                } else if (descendantFont instanceof PDCIDFontType2 && fontContainer.getToUnicode() != null) {
+                    if (!isSubsetFont(font.getName())) {
+                        extra = "f3";
+                    }
+                    return name + extra;
                 }
-                return name + extra;
-            } else if (font instanceof PDType0Font
-                    && fontContainer.getToUnicode() != null
-                    && ((PDType0Font) font).getDescendantFont() instanceof PDCIDFontType2) {
-                if (!isSubsetFont(font.getName())) {
-                    extra = "f3";
-                }
-                return name + extra;
             } else if (font instanceof PDTrueTypeFont && isSubsetFont(font.getName())) {
                 TrueTypeFont tt = ((PDTrueTypeFont) font).getTrueTypeFont();
                 for (CmapSubtable c : tt.getCmap().getCmaps()) {
diff --git a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
index a8507cb..102cc0e 100644
--- a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
@@ -113,6 +113,8 @@
     private static final String ERROR = "test/resources/error.pdf";
     private static final String LIBREOFFICE = "test/resources/libreoffice.pdf";
     private static final String SMASK = "test/resources/smask.pdf";
+    private static final String TYPE0TT = "test/resources/type0tt.pdf";
+    private static final String TYPE0CFF = "test/resources/type0cff.pdf";
 
     private static PDFPage getPDFPage(PDFDocument doc) {
         final Rectangle2D r = new Rectangle2D.Double();
@@ -158,7 +160,18 @@
         Assert.assertTrue(msg, msg.contains("/URWChanceryL-MediItal_Type1 20 Tf"));
         msg = writeText(fi, Type1Subset4);
         Assert.assertTrue(msg, msg.contains("/F15-1521012718 40 Tf"));
+        parseFonts(fi);
+    }
 
+    @Test
+    public void testMergeTTCFF() throws IOException {
+        FontInfo fi = new FontInfo();
+        writeText(fi, TYPE0TT);
+        writeText(fi, TYPE0CFF);
+        parseFonts(fi);
+    }
+
+    private void parseFonts(FontInfo fi) throws IOException {
         for (Typeface font : fi.getUsedFonts().values()) {
             InputStream is = ((CustomFont) font).getInputStream();
             if (font.getFontType() == FontType.TYPE1C || font.getFontType() == FontType.CIDTYPE0) {
diff --git a/test/resources/type0cff.pdf b/test/resources/type0cff.pdf
new file mode 100644
index 0000000..ea3535d
--- /dev/null
+++ b/test/resources/type0cff.pdf
Binary files differ
diff --git a/test/resources/type0tt.pdf b/test/resources/type0tt.pdf
new file mode 100644
index 0000000..08bf94a
--- /dev/null
+++ b/test/resources/type0tt.pdf
Binary files differ
