--- jakarta-tomcat-5.5.9-src/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/servlet/JspServlet.java.old	2005-03-26 17:22:44.000000000 -0500
+++ jakarta-tomcat-5.5.9-src/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/servlet/JspServlet.java	2006-12-12 15:21:50.000000000 -0500
@@ -17,6 +17,7 @@
 package org.apache.jasper.servlet;
 
 import java.io.IOException;
+import java.lang.reflect.Constructor;
 import java.util.Enumeration;
 
 import javax.servlet.ServletConfig;
@@ -72,7 +73,29 @@
 	this.context = config.getServletContext();
 
         // Initialize the JSP Runtime Context
-        options = new EmbeddedServletOptions(config, context);
+        // Check for a custom Options implementation
+        String engineOptionsName = 
+            config.getInitParameter("engineOptionsClass");
+        if (engineOptionsName != null) {
+            // Instantiate the indicated Options implementation
+            try {
+                ClassLoader loader = Thread.currentThread()
+                        .getContextClassLoader();
+                Class engineOptionsClass = loader.loadClass(engineOptionsName);
+                Class[] ctorSig = { ServletConfig.class, ServletContext.class };
+                Constructor ctor = engineOptionsClass.getConstructor(ctorSig);
+                Object[] args = { config, context };
+                options = (Options) ctor.newInstance(args);
+            } catch (Throwable e) {
+                // Need to localize this.
+                log.warn("Failed to load engineOptionsClass", e);
+                // Use the default Options implementation
+                options = new EmbeddedServletOptions(config, context);
+            }
+        } else {
+            // Use the default Options implementation
+            options = new EmbeddedServletOptions(config, context);
+        }
         rctxt = new JspRuntimeContext(context,options);
 
 	if (log.isDebugEnabled()) {
