diff --git a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/api/CdiContainer.java b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/api/CdiContainer.java
index facc216..ebd1188 100644
--- a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/api/CdiContainer.java
+++ b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/api/CdiContainer.java
@@ -23,6 +23,7 @@
 
 import javax.enterprise.inject.spi.BeanManager;
 import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
 import javax.servlet.http.HttpSession;
 
 /**
@@ -42,12 +43,12 @@
      * for Beans and extensions available.
      * The container might throw a DeploymentException or similar on startup.
      */
-    void boot();
+    void boot(ServletContextEvent context);
     
     /**
      * This will shutdown the underlying CDI container.
      */
-    void shutdown();
+    void shutdown(ServletContextEvent context);
     
 
     /**
diff --git a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/ReloadingListener.java b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/ReloadingListener.java
index b1a4a25..0cf5d77 100644
--- a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/ReloadingListener.java
+++ b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/ReloadingListener.java
@@ -28,6 +28,7 @@
 import org.apache.myfaces.extensions.scripting.core.engine.ThrowAwayClassloader;
 
 import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
 import javax.servlet.http.HttpServletRequest;
 
 /**
@@ -70,9 +71,9 @@
 
                     container.getContextControl(req.getServletContext(),
                             req.getSession()).stopContexts();
-                    //container.shutdown();
+                    container.shutdown(new ServletContextEvent(req.getServletContext()));
 
-                    //CdiContainerLoader.getCdiContainer().boot();
+                    CdiContainerLoader.getCdiContainer().boot(new ServletContextEvent(req.getServletContext()));
 
                     container.getContextControl(req.getServletContext(),
                             req.getSession()).startContexts();
diff --git a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/owb/OpenWebBeansContainerControl.java b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/owb/OpenWebBeansContainerControl.java
index d2766be..60f2bfb 100644
--- a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/owb/OpenWebBeansContainerControl.java
+++ b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/owb/OpenWebBeansContainerControl.java
@@ -28,6 +28,7 @@
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
 import javax.servlet.http.HttpSession;
 import java.util.Set;
 
@@ -54,15 +55,15 @@
     }
 
     @Override
-    public synchronized void boot()
+    public synchronized void boot(ServletContextEvent servletContext)
     {
 
         init();
-        lifecycle.startApplication(null);
+        lifecycle.startApplication(servletContext);
     }
 
     @Override
-    public synchronized void shutdown()
+    public synchronized void shutdown(ServletContextEvent servletContext)
     {
         if (ctxCtrl != null)
         {
@@ -72,7 +73,7 @@
 
         if (lifecycle != null) 
         {
-            lifecycle.stopApplication(null);
+            lifecycle.stopApplication(servletContext);
         }
     }
 
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/ThrowAwayClassloader.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/ThrowAwayClassloader.java
index 5f56a37..299973c 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/ThrowAwayClassloader.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/ThrowAwayClassloader.java
@@ -55,6 +55,18 @@
     }
 
     @Override
+    protected Class<?> findClass(String s) throws ClassNotFoundException
+    {
+        return super.findClass(s);
+    }
+
+    @Override
+    protected synchronized Class<?> loadClass(String s, boolean b) throws ClassNotFoundException
+    {
+        return super.loadClass(s, b);
+    }
+
+    @Override
     /**
      * load called either if the class is not loaded at all
      * or if the class has been recompiled (check upfront)
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/monitor/ClassResource.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/monitor/ClassResource.java
index 7620110..2855ff5 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/monitor/ClassResource.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/monitor/ClassResource.java
@@ -98,7 +98,7 @@
     public void setTainted(boolean value)
     {
         //if (isTainted()) return;
-        if (value && !tainted)
+        if (value)
         {
             WeavingContext.getInstance().markLastTaint();
             //TODO add logging event here
diff --git a/extscript-examples/cdi-example/src/main/java/org/apache/myfaces/extension/scripting/cdi/JavaHello.java b/extscript-examples/cdi-example/src/main/webapp/WEB-INF/java/JavaHello.java
similarity index 95%
rename from extscript-examples/cdi-example/src/main/java/org/apache/myfaces/extension/scripting/cdi/JavaHello.java
rename to extscript-examples/cdi-example/src/main/webapp/WEB-INF/java/JavaHello.java
index 09810d3..72cc656 100644
--- a/extscript-examples/cdi-example/src/main/java/org/apache/myfaces/extension/scripting/cdi/JavaHello.java
+++ b/extscript-examples/cdi-example/src/main/webapp/WEB-INF/java/JavaHello.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.myfaces.extension.scripting.cdi;
+
 
 import javax.inject.Named;
 
