diff --git a/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java b/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java
index 379485d..b8bb249 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2D.java
@@ -37,7 +37,13 @@
 import org.apache.fontbox.FontBoxFont;
 import org.apache.fontbox.ttf.TTFParser;
 import org.apache.fontbox.ttf.TrueTypeFont;
+import org.apache.pdfbox.contentstream.PDFStreamEngine;
+import org.apache.pdfbox.contentstream.operator.Operator;
+import org.apache.pdfbox.contentstream.operator.color.SetNonStrokingDeviceGrayColor;
+import org.apache.pdfbox.contentstream.operator.graphics.DrawObject;
+import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSInteger;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
@@ -51,6 +57,7 @@
 import org.apache.pdfbox.pdmodel.font.PDFontDescriptor;
 import org.apache.pdfbox.pdmodel.graphics.PDXObject;
 import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
+import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
 import org.apache.pdfbox.pdmodel.graphics.shading.PDShading;
 import org.apache.pdfbox.rendering.PDFRenderer;
 
@@ -158,7 +165,7 @@
                 if (rotation == 90 || rotation == 270) {
                     at.scale(area.getWidth() / area.getHeight(), area.getHeight() / area.getWidth());
                 }
-                if (g2d instanceof PSGraphics2D && new PageUtil().pageHasTransparency(page.getResources())) {
+                if (g2d instanceof PSGraphics2D && new PageUtil().pageHasTransparency(page.getResources(), page)) {
                     drawPageAsImage(at, g2d);
                 } else {
                     at.translate(area.getX(), area.getY());
@@ -197,8 +204,9 @@
 
         static class PageUtil {
             private List<COSDictionary> visited = new ArrayList<COSDictionary>();
+            private Map<String, PDXObject> visitedXOjects = new HashMap<String, PDXObject>();
 
-            private boolean pageHasTransparency(PDResources res) throws IOException {
+            private boolean pageHasTransparency(PDResources res, final PDPage page) throws IOException {
                 if (res != null) {
                     visited.add(res.getCOSObject());
                     if (res.getShadingNames() != null) {
@@ -225,6 +233,7 @@
                     }
                     for (COSName pdxObjectName : res.getXObjectNames()) {
                         PDXObject pdxObject = res.getXObject(pdxObjectName);
+                        visitedXOjects.put(pdxObjectName.getName(), pdxObject);
                         if (pdxObject instanceof PDFormXObject) {
                             PDFormXObject form = (PDFormXObject) pdxObject;
                             if (form.getGroup() != null && COSName.TRANSPARENCY.equals(
@@ -233,13 +242,14 @@
                             }
                             PDResources formRes = form.getResources();
                             if (formRes != null && !visited.contains(formRes.getCOSObject())
-                                    && pageHasTransparency(formRes)) {
+                                    && pageHasTransparency(formRes, page)) {
                                 return true;
                             }
                         }
                     }
                 }
-                return false;
+                CheckImageMask checkImageMask = new CheckImageMask(visitedXOjects, page);
+                return checkImageMask.foundWhite;
             }
         }
 
@@ -253,6 +263,48 @@
         }
     }
 
+    static final class CheckImageMask extends PDFStreamEngine {
+        private static final String DRAWOBJECT = new DrawObject().getName();
+        private static final String SETNONSTROKINGDEVICEGRAYCOLOR = new SetNonStrokingDeviceGrayColor().getName();
+        private boolean foundWhite;
+        private boolean checkColor;
+        private Map<String, PDXObject> xobjects;
+        private PDPage page;
+
+        private CheckImageMask(Map<String, PDXObject> visitedXOjects, PDPage page) throws IOException {
+            xobjects = visitedXOjects;
+            this.page = page;
+            for (PDXObject pdxObject : xobjects.values()) {
+                if (pdxObject instanceof PDImageXObject) {
+                    if (((PDImageXObject) pdxObject).isStencil()) {
+                        processChildStream(page, page);
+                        return;
+                    }
+                }
+            }
+        }
+
+        protected void processOperator(Operator operator, List<COSBase> arguments) throws IOException {
+            if (!foundWhite) {
+                String op = operator.getName();
+                if (checkColor && op.equals(SETNONSTROKINGDEVICEGRAYCOLOR)) {
+                    COSBase color = arguments.get(0);
+                    if (color instanceof COSInteger && ((COSInteger) color).intValue() == 1) {
+                        foundWhite = true;
+                    }
+                } else if (op.equals(DRAWOBJECT)) {
+                    COSName name = (COSName) arguments.get(0);
+                    PDXObject xobject = xobjects.get(name.getName());
+                    if (xobject instanceof PDFormXObject) {
+                        checkColor = true;
+                        processChildStream((PDFormXObject)xobject, page);
+                    }
+                    checkColor = false;
+                }
+            }
+        }
+    }
+
     static class FopFontProvider {
         private static FopFontMapper fopFontMapper = new FopFontMapper();
         static {
diff --git a/test/java/org/apache/fop/render/pdf/ImageConverterPDF2G2DTestCase.java b/test/java/org/apache/fop/render/pdf/ImageConverterPDF2G2DTestCase.java
index 2683521..f2d833a 100644
--- a/test/java/org/apache/fop/render/pdf/ImageConverterPDF2G2DTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/ImageConverterPDF2G2DTestCase.java
@@ -25,11 +25,16 @@
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
+import java.io.OutputStream;
 
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.common.PDStream;
+import org.apache.pdfbox.pdmodel.graphics.PDXObject;
 
 import org.apache.xmlgraphics.image.loader.ImageException;
 import org.apache.xmlgraphics.image.loader.ImageInfo;
@@ -61,13 +66,19 @@
     }
 
     private boolean pdfToPS(String pdf, String font) throws IOException, ImageException {
+        PDDocument doc = PDDocument.load(new File(pdf));
+        MyLazyFont lazyFont = new MyLazyFont();
+        pdfToPS(doc, pdf, font, lazyFont);
+        return lazyFont.font.fontUsed;
+    }
+
+    private String pdfToPS(PDDocument doc, String pdf, String font, MyLazyFont lazyFont)
+            throws IOException, ImageException {
         ImageConverterPDF2G2D i = new ImageConverterPDF2G2D();
         ImageInfo imgi = new ImageInfo(pdf, "b");
-        PDDocument doc = PDDocument.load(new File(pdf));
         org.apache.xmlgraphics.image.loader.Image img = new ImagePDF(imgi, doc);
         ImageGraphics2D ig = (ImageGraphics2D)i.convert(img, null);
         GeneralGraphics2DImagePainter g = (GeneralGraphics2DImagePainter) ig.getGraphics2DImagePainter();
-        MyLazyFont lazyFont = new MyLazyFont();
         g.addFallbackFont(font, lazyFont);
         ByteArrayOutputStream stream = new ByteArrayOutputStream();
         PSPDFGraphics2D g2d = (PSPDFGraphics2D)
@@ -77,7 +88,7 @@
         g2d.setGraphicContext(gc);
         g.paint(g2d, rect);
         doc.close();
-        return lazyFont.font.fontUsed;
+        return stream.toString("UTF-8");
     }
 
     static class MyLazyFont extends LazyFont {
@@ -114,4 +125,24 @@
         doc.close();
         Assert.assertEquals(graphics2D.getTransform().getScaleX(), 1.63, 0);
     }
+
+    @Test
+    public void testCheckImageMask() throws IOException, ImageException {
+        String pdf = PDFBoxAdapterTestCase.CFFCID1;
+        PDDocument doc = PDDocument.load(new File(pdf));
+        COSStream cosStream = new COSStream();
+        OutputStream outputStream = cosStream.createOutputStream();
+        outputStream.write("/Fm0 Do\n".getBytes("UTF-8"));
+        outputStream.close();
+        PDStream pdStream = new PDStream(cosStream);
+        doc.getPage(0).setContents(pdStream);
+
+        PDXObject form = doc.getPage(0).getResources().getXObject(COSName.getPDFName("Fm0"));
+        OutputStream formStream = form.getCOSObject().createOutputStream();
+        formStream.write("1 g".getBytes("UTF-8"));
+        formStream.close();
+
+        String ps = pdfToPS(doc, pdf, null, null);
+        Assert.assertTrue(ps.contains("/ImageType 1"));
+    }
 }
diff --git a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
index b988aee..47491fb 100644
--- a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
@@ -97,7 +97,7 @@
     protected static final String TTSubset2 = "test/resources/ttsubset2.pdf";
     private static final String TTSubset3 = "test/resources/ttsubset3.pdf";
     private static final String TTSubset5 = "test/resources/ttsubset5.pdf";
-    private static final String CFFCID1 = "test/resources/cffcid1.pdf";
+    protected static final String CFFCID1 = "test/resources/cffcid1.pdf";
     private static final String CFFCID2 = "test/resources/cffcid2.pdf";
     protected static final String Type1Subset1 = "test/resources/t1subset.pdf";
     protected static final String Type1Subset2 = "test/resources/t1subset2.pdf";
