Index: src/java/org/apache/fop/svg/AbstractFOPBridgeContext.java
===================================================================
--- src/java/org/apache/fop/svg/AbstractFOPBridgeContext.java	(revision 1545298)
+++ src/java/org/apache/fop/svg/AbstractFOPBridgeContext.java	(working copy)
@@ -21,17 +21,17 @@
 
 import java.awt.geom.AffineTransform;
 import java.lang.reflect.Constructor;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.apache.batik.bridge.Bridge;
 import org.apache.batik.bridge.BridgeContext;
 import org.apache.batik.bridge.DocumentLoader;
 import org.apache.batik.bridge.UserAgent;
-
+import org.apache.fop.fonts.FontInfo;
 import org.apache.xmlgraphics.image.loader.ImageManager;
 import org.apache.xmlgraphics.image.loader.ImageSessionContext;
 
-import org.apache.fop.fonts.FontInfo;
-
 /**
  * A FOP base implementation of a Batik BridgeContext.
  */
@@ -127,16 +127,34 @@
      * @param className name of bridge class to load and construct
      * @param testFor class name to test for presence
      */
+    private static Map<String, Constructor> cache = new HashMap<String, Constructor>();
+    private static Map<String, Boolean> noCache = new HashMap<String, Boolean>();
+
     protected void putElementBridgeConditional(String className, String testFor) {
+        Constructor constructor = null;
         try {
-            Class.forName(testFor);
-            //if we get here the test class is available
+            if (!noCache.containsKey(className)) {
+                if (cache.containsKey(className)) {
+                    constructor = cache.get(className);
+                } else {
 
-            Class clazz = Class.forName(className);
-            Constructor constructor = clazz.getConstructor(new Class[] {FontInfo.class});
-            putBridge((Bridge)constructor.newInstance(new Object[] {fontInfo}));
+                    Class.forName(testFor);
+                    // if we get here the test class is available
+                    //System.out.println(className);
+                    Class clazz = Class.forName(className);
+                    constructor = clazz
+                            .getConstructor(new Class[] { FontInfo.class });
+                    cache.put(className, constructor);
+                }
+                if (constructor != null) {
+                    putBridge((Bridge) constructor
+                            .newInstance(new Object[] { fontInfo }));
+                }
+            }
         } catch (Throwable t) {
-            //simply ignore (bridges instantiated over this method are optional)
+            // simply ignore (bridges instantiated over this method are
+            // optional)
+            noCache.put(className, true);
         }
     }
 
