diff --git a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/listener/ReloadingListener.java b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/ReloadingListener.java
similarity index 97%
rename from extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/listener/ReloadingListener.java
rename to extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/ReloadingListener.java
index 6f74c65..4edbda2 100644
--- a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/listener/ReloadingListener.java
+++ b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/ReloadingListener.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.myfaces.extensions.scripting.cdi.listener;
+package org.apache.myfaces.extensions.scripting.cdi.core;
 
 import org.apache.myfaces.extensions.scripting.cdi.api.CdiContainerLoader;
 import org.apache.myfaces.extensions.scripting.core.api.eventhandling.WeavingEvent;
diff --git a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/CDIServletContainerInitializer.java b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/CDIServletContainerInitializer.java
new file mode 100644
index 0000000..1badd95
--- /dev/null
+++ b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/CDIServletContainerInitializer.java
@@ -0,0 +1,54 @@
+/*
+ * 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.myfaces.extensions.scripting.cdi.startup;
+
+import javax.servlet.ServletContainerInitializer;
+import javax.servlet.ServletContext;
+import java.lang.ref.WeakReference;
+import java.util.Set;
+
+/**
+ * @author Werner Punz (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ *
+ * Initializer which stores the servlet context
+ * for later non servlet based references.
+ *
+ * This is the first stage in the servlet lifecycle
+ * and starts before the cdi container.
+ *
+ * Stage 0 of our startup cycle
+ */
+
+public class CDIServletContainerInitializer implements ServletContainerInitializer
+{
+    private static WeakReference<ServletContext> _contextHolder = null;
+
+    public void onStartup(Set<Class<?>> c, ServletContext cx)
+    {
+        _contextHolder = new WeakReference(cx);
+    }
+
+    public static ServletContext getContext()
+    {
+        return _contextHolder.get();
+    }
+
+}
diff --git a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupPlugin.java b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/ExtScriptStartupPlugin.java
similarity index 84%
rename from extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupPlugin.java
rename to extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/ExtScriptStartupPlugin.java
index 1c7f9ce..1e39ab0 100644
--- a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupPlugin.java
+++ b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/ExtScriptStartupPlugin.java
@@ -20,15 +20,23 @@
 package org.apache.myfaces.extensions.scripting.cdi.startup;
 
 import javax.servlet.ServletContextEvent;
+
+import org.apache.myfaces.extensions.scripting.cdi.core.ReloadingListener;
 import org.apache.myfaces.extensions.scripting.core.api.Plugin;
 import org.apache.myfaces.extensions.scripting.core.api.WeavingContext;
 
 /**
  * @author Werner Punz (latest modification by $Author$)
  * @version $Revision$ $Date$
+ *
+ * An Ext-Scripting startup plugin
+ * which is called at the various
+ * stages of the startup lifecycle
+ *
+ * Stage 2 of our startup cycle
  */
 
-public class StartupPlugin implements Plugin
+public class ExtScriptStartupPlugin implements Plugin
 {
     /**
      * This method is called before myfaces initializes
@@ -38,6 +46,7 @@
     public void preInit(ServletContextEvent evt)
     {
         //WeavingContext.getInstance().
+        System.out.println("Starting up the jsf subsystem extension");
     }
 
     /**
@@ -47,7 +56,7 @@
      */
     public void postInit(ServletContextEvent evt)
     {
-
+        WeavingContext.getInstance().addListener(new ReloadingListener());
     }
 
     /**
diff --git a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupExtension.java b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupExtension.java
index 275c7a3..8e1a0df 100644
--- a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupExtension.java
+++ b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupExtension.java
@@ -19,10 +19,15 @@
 
 package org.apache.myfaces.extensions.scripting.cdi.startup;
 
+import org.apache.myfaces.extensions.scripting.core.engine.ThrowAwayClassloader;
+import org.apache.myfaces.extensions.scripting.jsf.startup.StartupServletContextPluginChainLoader;
+
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.AfterDeploymentValidation;
 import javax.enterprise.inject.spi.BeforeBeanDiscovery;
 import javax.enterprise.inject.spi.Extension;
+import java.io.IOException;
 
 /**
  * @author Werner Punz (latest modification by $Author$)
@@ -31,15 +36,40 @@
  *          An extension for cdi which does the initial lifecycle
  *          trigger from CDI instead of JSF since CDI is enabled
  *          before JSF we have to do it that way
+ *
+ *          Stage 1 of our startup cycle
  */
 
 public class StartupExtension implements Extension
 {
+    static ThreadLocal<ClassLoader> _classLoaderHolder = new ThreadLocal<ClassLoader>();
+
     void beforeBeanDiscovery(@Observes BeforeBeanDiscovery bbd)
     {
+        //We have to trigger our initial lifecycle with
+        //the compile runs but not with the daemon thread
+        //after that we can load the classes
+        //by temporarily plugging in our throw away classloader
+        try
+        {
+            StartupServletContextPluginChainLoader.startup(CDIServletContainerInitializer.getContext());
+            _classLoaderHolder.set(Thread.currentThread().getContextClassLoader());
+            Thread.currentThread().setContextClassLoader(new ThrowAwayClassloader());
+        }
+        catch (IOException e)
+        {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        }
     }
 
     void afterBeanDiscovery(@Observes AfterBeanDiscovery abd)
     {
+        //here we unplug our temporary classloader
     }
+
+
+    void afterDeploymentValidation(@Observes AfterDeploymentValidation abv)
+      {
+            Thread.currentThread().setContextClassLoader(_classLoaderHolder.get());
+      }
 }
diff --git a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupServletContextListener.java b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupServletContextListener.java
deleted file mode 100644
index 0f99824..0000000
--- a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupServletContextListener.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.myfaces.extensions.scripting.cdi.startup;
-
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-import javax.servlet.annotation.WebListener;
-
-/**
- * @author Werner Punz (latest modification by $Author$)
- * @version $Revision$ $Date$
- */
-
-@WebListener
-public class StartupServletContextListener implements ServletContextListener
-{
-
-    public void contextInitialized(ServletContextEvent sce)
-    {
-    }
-
-    public void contextDestroyed(ServletContextEvent sce)
-    {
-    }
-}
diff --git a/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension b/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
index fc26579..a394685 100644
--- a/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
+++ b/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
@@ -1 +1,20 @@
+#####################################################################################
+# 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.
+#####################################################################################
+
 org.apache.myfaces.extensions.scripting.cdi.startup.StartupExtension
\ No newline at end of file
diff --git a/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/javax.servlet.ServletContainerInitializer b/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/javax.servlet.ServletContainerInitializer
new file mode 100644
index 0000000..0ddf67b
--- /dev/null
+++ b/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/javax.servlet.ServletContainerInitializer
@@ -0,0 +1,20 @@
+#####################################################################################
+# 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.
+#####################################################################################
+
+org.apache.myfaces.extensions.scripting.cdi.startup.CDIServletContainerInitializer
\ No newline at end of file
diff --git a/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/org.apache.myfaces.extensions.scripting.core.api.Plugin b/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/org.apache.myfaces.extensions.scripting.core.api.Plugin
index 0a1d364..e93db49 100644
--- a/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/org.apache.myfaces.extensions.scripting.core.api.Plugin
+++ b/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/org.apache.myfaces.extensions.scripting.core.api.Plugin
@@ -17,4 +17,4 @@
 # under the License.
 #####################################################################################
 
-org.apache.myfaces.extensions.scripting.cdi.startup.StartupPlugin
\ No newline at end of file
+org.apache.myfaces.extensions.scripting.cdi.startup.ExtScriptStartupPlugin
\ No newline at end of file
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/monitor/ResourceMonitor.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/monitor/ResourceMonitor.java
index e4a1af0..42c6b76 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/monitor/ResourceMonitor.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/monitor/ResourceMonitor.java
@@ -96,6 +96,7 @@
     {
         //we do it in this complicated manner because of find bugs
         //practically this cannot really happen except for shutdown were it is not important anymore
+        if(_externalContext == null) return null;
         ServletContext context = _externalContext.get();
         if (context != null)
         {
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/startup/StartupServletContextPluginChainLoader.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/startup/StartupServletContextPluginChainLoader.java
index c8b698f..f619d68 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/startup/StartupServletContextPluginChainLoader.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/startup/StartupServletContextPluginChainLoader.java
@@ -45,7 +45,7 @@
 
 public class StartupServletContextPluginChainLoader implements StartupListener
 {
-    final Logger _log = Logger.getLogger(this.getClass().getName());
+    static final Logger _log = Logger.getLogger(StartupServletContextPluginChainLoader.class.getName());
     Plugin[] _plugins = new Plugin[]{};
 
     public StartupServletContextPluginChainLoader()
@@ -65,26 +65,7 @@
         ServletContext servletContext = servletContextEvent.getServletContext();
         try
         {
-            WeavingContext context = WeavingContext.getInstance();
-            _log.info("[EXT-SCRIPTING] Instantiating StartupServletContextPluginChainLoader");
-            context.initEngines();
-            _log.info("[EXT-SCRIPTING] Loading configuration");
-            context.getConfiguration().init(servletContext);
-            _log.info("[EXT-SCRIPTING] Loading Scripting end");
-            _log.info("[EXT-SCRIPTING] initializing startup daemon");
-            ResourceMonitor.init(servletContext);
-            _log.info("[EXT-SCRIPTING] initializing startup daemon end");
-            _log.info("[EXT-SCRIPTING] Initial Scan and compile");
-            //the initial scan should happen synchronsously
-            ResourceMonitor.getInstance().performMonitoringTask();
-            _log.info("[EXT-SCRIPTING] Starting Change Monitor");
-            ResourceMonitor.getInstance().start();
-            _log.info("[EXT-SCRIPTING] Startup done");
-            _log.info("[EXT-SCRIPTING] init the chain loader for class loading");
-            //TODO make this more generic depending on the implementation
-            MyFacesSPI.getInstance().registerClassloadingExtension(servletContext);
-            _log.info("[EXT-SCRIPTING] registering the JSF Implementation");
-            WeavingContext.getInstance().setImplementation(MyFacesSPI.getInstance());
+            startup(servletContext);
 
             for (Plugin plugin : _plugins)
             {
@@ -98,6 +79,32 @@
 
     }
 
+    public static void startup(ServletContext servletContext) throws IOException
+    {
+        if(ResourceMonitor.getInstance() != null && ResourceMonitor.getInstance().isAlive()) return;
+
+        WeavingContext context = WeavingContext.getInstance();
+        _log.info("[EXT-SCRIPTING] Instantiating StartupServletContextPluginChainLoader");
+        context.initEngines();
+        _log.info("[EXT-SCRIPTING] Loading configuration");
+        context.getConfiguration().init(servletContext);
+        _log.info("[EXT-SCRIPTING] Loading Scripting end");
+        _log.info("[EXT-SCRIPTING] initializing startup daemon");
+        ResourceMonitor.init(servletContext);
+        _log.info("[EXT-SCRIPTING] initializing startup daemon end");
+        _log.info("[EXT-SCRIPTING] Initial Scan and compile");
+        //the initial scan should happen synchronsously
+        ResourceMonitor.getInstance().performMonitoringTask();
+        _log.info("[EXT-SCRIPTING] Starting Change Monitor");
+        ResourceMonitor.getInstance().start();
+        _log.info("[EXT-SCRIPTING] Startup done");
+        _log.info("[EXT-SCRIPTING] init the chain loader for class loading");
+        //TODO make this more generic depending on the implementation
+        MyFacesSPI.getInstance().registerClassloadingExtension(servletContext);
+        _log.info("[EXT-SCRIPTING] registering the JSF Implementation");
+        WeavingContext.getInstance().setImplementation(MyFacesSPI.getInstance());
+    }
+
     public void postInit(ServletContextEvent evt)
     {
         //tell the system that the startup phase is done
