diff --git a/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerRenderedImage.java b/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerRenderedImage.java
index eec267c..087ccd9 100644
--- a/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerRenderedImage.java
+++ b/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerRenderedImage.java
@@ -83,7 +83,7 @@
         ImageEncodingHelper helper = new ImageEncodingHelper(ri);
         ColorModel cm = helper.getEncodedColorModel();
 
-        PSImageUtils.writeImage(encoder, imgDim, imgDescription, targetRect, cm, gen, ri, null);
+        PSImageUtils.writeImage(encoder, imgDim, imgDescription, targetRect, cm, gen, ri, false);
     }
 
     /** {@inheritDoc} */
diff --git a/fop-core/src/main/java/org/apache/fop/render/ps/PSPainter.java b/fop-core/src/main/java/org/apache/fop/render/ps/PSPainter.java
index 2eadfca..1d3aaa0 100644
--- a/fop-core/src/main/java/org/apache/fop/render/ps/PSPainter.java
+++ b/fop-core/src/main/java/org/apache/fop/render/ps/PSPainter.java
@@ -24,6 +24,7 @@
 import java.awt.Paint;
 import java.awt.Point;
 import java.awt.Rectangle;
+import java.awt.Transparency;
 import java.awt.geom.AffineTransform;
 import java.io.IOException;
 import java.util.Map;
@@ -232,9 +233,12 @@
                         throw new UnsupportedOperationException("Non-Color paints NYI");
                     }
                 }
-                generator.defineRect(rect.x / 1000.0, rect.y / 1000.0,
-                        rect.width / 1000.0, rect.height / 1000.0);
-                generator.writeln(generator.mapCommand("fill"));
+                if (fill.getTransparency() != Transparency.OPAQUE) {
+                    PSPainterUtil.drawTransparency(generator, rect, fill);
+                } else {
+                    generator.defineRect(rect.x / 1000.0, rect.y / 1000.0, rect.width / 1000.0, rect.height / 1000.0);
+                    generator.writeln(generator.mapCommand("fill"));
+                }
             } catch (IOException ioe) {
                 throw new IFException("I/O error in fillRect()", ioe);
             }
diff --git a/fop-core/src/main/java/org/apache/fop/render/ps/PSPainterUtil.java b/fop-core/src/main/java/org/apache/fop/render/ps/PSPainterUtil.java
new file mode 100644
index 0000000..2baa780
--- /dev/null
+++ b/fop-core/src/main/java/org/apache/fop/render/ps/PSPainterUtil.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+package org.apache.fop.render.ps;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Paint;
+import java.awt.Rectangle;
+import java.awt.image.BufferedImage;
+import java.awt.image.RenderedImage;
+
+import org.apache.xmlgraphics.java2d.GraphicContext;
+import org.apache.xmlgraphics.java2d.ps.PSGraphics2D;
+import org.apache.xmlgraphics.ps.PSGenerator;
+
+import org.apache.fop.util.bitmap.BitmapImageUtil;
+
+public final class PSPainterUtil {
+    private PSPainterUtil() {
+    }
+
+    public static void drawTransparency(PSGenerator generator, Rectangle rect, Paint fill) {
+        PSGraphics2D graphics = new PSGraphics2D(true, generator);
+        graphics.setGraphicContext(new GraphicContext());
+        BufferedImage image = buildImage((Color) fill, rect.width / 1000, rect.height / 1000);
+        RenderedImage mask = buildMaskImage(image, rect.width / 1000, rect.height / 1000);
+        graphics.drawImage(image, rect.x / 1000, rect.y / 1000, null, null, mask);
+    }
+
+    private static BufferedImage buildImage(Color color, int width, int height) {
+        BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
+        Graphics graphics = bufferedImage.getGraphics();
+        Color alpha = new Color(color.getAlpha(), color.getAlpha(), color.getAlpha());
+        graphics.setColor(alpha);
+        graphics.fillRect(0, 0, width, height);
+        graphics.dispose();
+        return bufferedImage;
+    }
+
+    private static RenderedImage buildMaskImage(BufferedImage image, int width, int height) {
+        return BitmapImageUtil.convertToMonochrome(image, new Dimension(width, height), 1);
+    }
+}
diff --git a/fop-core/src/test/java/org/apache/fop/render/ps/PSPainterUtilTestCase.java b/fop-core/src/test/java/org/apache/fop/render/ps/PSPainterUtilTestCase.java
new file mode 100644
index 0000000..d34b569
--- /dev/null
+++ b/fop-core/src/test/java/org/apache/fop/render/ps/PSPainterUtilTestCase.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.fop.render.ps;
+
+import java.awt.Color;
+import java.awt.Rectangle;
+import java.io.ByteArrayOutputStream;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.xmlgraphics.ps.PSGenerator;
+
+public class PSPainterUtilTestCase {
+    @Test
+    public void testDrawTransparency() {
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        PSGenerator generator = new PSGenerator(bos);
+        Color color = new Color(0, 0, 0, 128);
+        PSPainterUtil.drawTransparency(generator, new Rectangle(10000, 10000), color);
+        Assert.assertTrue(bos.toString().contains("imagemask"));
+    }
+}
