diff --git a/src/java/org/apache/fop/render/pdf/pdfbox/MergeTTFonts.java b/src/java/org/apache/fop/render/pdf/pdfbox/MergeTTFonts.java
index 6e7eb00..ed0289d 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/MergeTTFonts.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/MergeTTFonts.java
@@ -216,6 +216,7 @@
         readHorizontalHeader();
         readHorizontalMetrics();
         readIndexToLocation();
+        int sgsize = subsetGlyphs.size();
         if (!cid && subsetGlyphs.size() <= 1) {
             for (int i = 0; i < mtxTab.length; i++) {
                 subsetGlyphs.put(i, i);
@@ -224,7 +225,10 @@
         scanGlyphs(fontFile, subsetGlyphs);
         readGlyf(subsetGlyphs, fontFile);
         if (nhmtxDiff == null) {
-            nhmtxDiff = subsetGlyphs.size() - nhmtx;
+            nhmtxDiff = sgsize - nhmtx;
+            if (nhmtxDiff < 0) {
+                nhmtxDiff = 0;
+            }
         }
     }
 
diff --git a/src/java/org/apache/fop/render/pdf/pdfbox/MergeType1Fonts.java b/src/java/org/apache/fop/render/pdf/pdfbox/MergeType1Fonts.java
index a9e1aed..8e0568a 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/MergeType1Fonts.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/MergeType1Fonts.java
@@ -101,16 +101,18 @@
             subByteMap.put(i, subArray.get(i));
         }
         Map<String, byte[]> cs = font.getType1Font().getCharStringsDict();
-        int skipBytes = 4;
-        PostscriptParser.PSElement element = getElement("lenIV", mainSection);
+        int lenIV = 4;
+        PostscriptParser.PSElement element = getElement("/lenIV", mainSection);
         if (element != null && element instanceof PostscriptParser.PSVariable) {
-            PostscriptParser.PSVariable lenIV = (PostscriptParser.PSVariable)element;
-            skipBytes = Integer.parseInt(lenIV.getValue());
+            PostscriptParser.PSVariable lenIVVar = (PostscriptParser.PSVariable)element;
+            lenIV = Integer.parseInt(lenIVVar.getValue());
         }
         for (String e : cs.keySet()) {
             byte[] charStringEntry = getBinaryEntry(charStrings.getBinaryEntries().get("/" + e), decoded);
-            charStringEntry = BinaryCoder.decodeBytes(charStringEntry, 4330, skipBytes);
-            charStringEntry = BinaryCoder.encodeBytes(charStringEntry, 4330, 4);
+            if (lenIV != 4) {
+                charStringEntry = BinaryCoder.decodeBytes(charStringEntry, 4330, lenIV);
+                charStringEntry = BinaryCoder.encodeBytes(charStringEntry, 4330, 4);
+            }
             subsetCharStrings.put("/" + e, charStringEntry);
         }
     }
@@ -216,6 +218,7 @@
         String nd = findVariable(decoded, mainSection, new String[] {"def", "noaccess def"}, "noaccess def");
         String np = findVariable(decoded, mainSection, new String[] {"put", "noaccess put"}, "noaccess put");
         main.write(subrsBeforeStream.toByteArray());
+        writeString("/lenIV 4 def", main);
         writeString("/Subrs " + subByteMap.size() + " array" + eol, main);
         for (Map.Entry<Integer, byte[]> e : subByteMap.entrySet()) {
             byte[] encoded = BinaryCoder.encodeBytes(e.getValue(), 4330, 4);
diff --git a/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java b/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java
index 80e3a0e..cf4596b 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java
@@ -495,8 +495,12 @@
             readCharMap(font, gidToGlyph, glyphData, mainFont, oldToNewGIMap);
             FontFileReader ffr = readFontFile(mainFont);
             if (ttf != null) {
-                mergeMaxp(ttf);
+                mergeMaxp(ttf, mergeTTFonts.maxp);
+                int sizeNoCompGlyphs = oldToNewGIMap.size();
                 mergeTTFonts.readFont(ffr, oldToNewGIMap, true);
+                if (oldToNewGIMap.size() > sizeNoCompGlyphs) {
+                    cidSet.mapChar(256 * 256, (char) 0);
+                }
             } else {
                 mergeCFFFonts.readType1CFont(new ByteArrayInputStream(ffr.getAllBytes()), getEmbedFontName());
             }
@@ -583,26 +587,6 @@
             return mapping;
         }
 
-        private void mergeMaxp(TrueTypeFont ttf) {
-            MaximumProfileTable mp = ttf.getMaximumProfile();
-            MaximumProfileTable outMaxp = mergeTTFonts.maxp;
-            outMaxp.setVersion(mp.getVersion());
-            outMaxp.setNumGlyphs(outMaxp.getNumGlyphs() + mp.getNumGlyphs());
-            outMaxp.setMaxPoints(outMaxp.getMaxPoints() + mp.getMaxPoints());
-            outMaxp.setMaxContours(outMaxp.getMaxContours() + mp.getMaxContours());
-            outMaxp.setMaxCompositePoints(outMaxp.getMaxCompositePoints() + mp.getMaxCompositePoints());
-            outMaxp.setMaxCompositeContours(outMaxp.getMaxCompositeContours() + mp.getMaxCompositeContours());
-            outMaxp.setMaxZones(outMaxp.getMaxZones() + mp.getMaxZones());
-            outMaxp.setMaxTwilightPoints(outMaxp.getMaxTwilightPoints() + mp.getMaxTwilightPoints());
-            outMaxp.setMaxStorage(outMaxp.getMaxStorage() + mp.getMaxStorage());
-            outMaxp.setMaxFunctionDefs(outMaxp.getMaxFunctionDefs() + mp.getMaxFunctionDefs());
-            outMaxp.setMaxInstructionDefs(outMaxp.getMaxInstructionDefs() + mp.getMaxInstructionDefs());
-            outMaxp.setMaxStackElements(outMaxp.getMaxStackElements() + mp.getMaxStackElements());
-            outMaxp.setMaxSizeOfInstructions(outMaxp.getMaxSizeOfInstructions() + mp.getMaxSizeOfInstructions());
-            outMaxp.setMaxComponentElements(outMaxp.getMaxComponentElements() + mp.getMaxComponentElements());
-            outMaxp.setMaxComponentDepth(outMaxp.getMaxComponentDepth() + mp.getMaxComponentDepth());
-        }
-
         private boolean differentGlyphData(GlyphData[] data, Map<Integer, String> mapping) throws IOException {
             Map<String, Integer> tmpMap = new HashMap<String, Integer>();
             for (Map.Entry<Integer, String> entry : mapping.entrySet()) {
@@ -830,17 +814,16 @@
             if (font instanceof PDTrueTypeFont) {
                 TrueTypeFont ttfont = ((PDTrueTypeFont) font).getTTFFont();
                 CMAPEncodingEntry[] cmapList = ttfont.getCMAP().getCmaps();
-                CMAPEncodingEntry c = cmapList[0];
-                if (cmapList.length > 1) {
-                    c = cmapList[1];
-                }
-                newCmap.platformId = c.getPlatformId();
-                newCmap.platformEncodingId = c.getPlatformEncodingId();
-                for (int i = 0; i < 256 * 256; i++) {
-                    if (c.getGlyphId(i) != 0) {
-                        newCmap.glyphIdToCharacterCode.put(i, c.getGlyphId(i));
+                for (CMAPEncodingEntry c : cmapList) {
+                    newCmap.platformId = c.getPlatformId();
+                    newCmap.platformEncodingId = c.getPlatformEncodingId();
+                    for (int i = 0; i < 256 * 256; i++) {
+                        if (c.getGlyphId(i) != 0) {
+                            newCmap.glyphIdToCharacterCode.put(i, c.getGlyphId(i));
+                        }
                     }
                 }
+                mergeMaxp(ttfont, mergeTTFonts.maxp);
             }
         }
 
@@ -1142,6 +1125,25 @@
         }
     }
 
+    private void mergeMaxp(TrueTypeFont ttf, MaximumProfileTable outMaxp) {
+        MaximumProfileTable mp = ttf.getMaximumProfile();
+        outMaxp.setVersion(mp.getVersion());
+        outMaxp.setNumGlyphs(outMaxp.getNumGlyphs() + mp.getNumGlyphs());
+        outMaxp.setMaxPoints(outMaxp.getMaxPoints() + mp.getMaxPoints());
+        outMaxp.setMaxContours(outMaxp.getMaxContours() + mp.getMaxContours());
+        outMaxp.setMaxCompositePoints(outMaxp.getMaxCompositePoints() + mp.getMaxCompositePoints());
+        outMaxp.setMaxCompositeContours(outMaxp.getMaxCompositeContours() + mp.getMaxCompositeContours());
+        outMaxp.setMaxZones(outMaxp.getMaxZones() + mp.getMaxZones());
+        outMaxp.setMaxTwilightPoints(outMaxp.getMaxTwilightPoints() + mp.getMaxTwilightPoints());
+        outMaxp.setMaxStorage(outMaxp.getMaxStorage() + mp.getMaxStorage());
+        outMaxp.setMaxFunctionDefs(outMaxp.getMaxFunctionDefs() + mp.getMaxFunctionDefs());
+        outMaxp.setMaxInstructionDefs(outMaxp.getMaxInstructionDefs() + mp.getMaxInstructionDefs());
+        outMaxp.setMaxStackElements(outMaxp.getMaxStackElements() + mp.getMaxStackElements());
+        outMaxp.setMaxSizeOfInstructions(outMaxp.getMaxSizeOfInstructions() + mp.getMaxSizeOfInstructions());
+        outMaxp.setMaxComponentElements(outMaxp.getMaxComponentElements() + mp.getMaxComponentElements());
+        outMaxp.setMaxComponentDepth(outMaxp.getMaxComponentDepth() + mp.getMaxComponentDepth());
+    }
+
     public class PDFWriter {
         protected StringBuilder s = new StringBuilder();
         private String key;
diff --git a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
index 3e5512e..1438676 100644
--- a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
@@ -246,7 +246,7 @@
         Assert.assertEquals(name, "TimesNewRomanPSMT_TrueType");
         Assert.assertEquals(mbfont.getFontName(), "TimesNewRomanPSMT_TrueType");
         byte[] is = IOUtils.toByteArray(mbfont.getInputStream());
-        Assert.assertEquals(is.length, 34228);
+        Assert.assertEquals(is.length, 34264);
         doc.close();
         doc2.close();
     }
