diff --git a/pom.xml b/pom.xml
index 329dc8c..fc1d892 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
   <parent>
     <groupId>org.apache.sling</groupId>
     <artifactId>sling</artifactId>
-    <version>28</version>
+    <version>29</version>
     <relativePath />
   </parent>
 
diff --git a/src/main/java/org/apache/sling/scripting/java/impl/JavaScriptEngineFactory.java b/src/main/java/org/apache/sling/scripting/java/impl/JavaScriptEngineFactory.java
index 77a9309..851ec29 100644
--- a/src/main/java/org/apache/sling/scripting/java/impl/JavaScriptEngineFactory.java
+++ b/src/main/java/org/apache/sling/scripting/java/impl/JavaScriptEngineFactory.java
@@ -71,8 +71,8 @@
     @Property(name=JavaScriptEngineFactory.PROPERTY_COMPILER_TARGET_V_M, value=JavaScriptEngineFactory.VERSION_AUTO),
     @Property(name=JavaScriptEngineFactory.PROPERTY_CLASSDEBUGINFO, boolValue=true),
     @Property(name=JavaScriptEngineFactory.PROPERTY_ENCODING, value="UTF-8"),
-    @Property(name = ResourceChangeListener.CHANGES, value = {"CHANGED","REMOVED"}),
-    @Property(name = ResourceChangeListener.PATHS, value = {"glob:."}, propertyPrivate = true)
+    @Property(name = ResourceChangeListener.CHANGES, value = {"CHANGED", "REMOVED"}),
+    @Property(name = ResourceChangeListener.PATHS, value = {"."}, propertyPrivate = true)
 })
 public class JavaScriptEngineFactory
     extends AbstractScriptEngineFactory
@@ -93,7 +93,7 @@
     @Reference
     private JavaCompiler javaCompiler;
 
-    @Reference
+    @Reference(target="(name=org.apache.sling)")
     private ServletContext slingServletContext;
 
     private SlingIOProvider ioProvider;
@@ -254,7 +254,7 @@
 	}
 
     private void handleModification(final String scriptName, final boolean remove) {
-        this.ioProvider.getServletCache().removeWrapper(scriptName);
+        this.ioProvider.getServletCache().removeWrapper(scriptName, remove);
     }
 
     private static class JavaScriptEngine extends AbstractSlingScriptEngine {
diff --git a/src/main/java/org/apache/sling/scripting/java/impl/ServletCache.java b/src/main/java/org/apache/sling/scripting/java/impl/ServletCache.java
index 7f6aaab..0484283 100644
--- a/src/main/java/org/apache/sling/scripting/java/impl/ServletCache.java
+++ b/src/main/java/org/apache/sling/scripting/java/impl/ServletCache.java
@@ -18,6 +18,7 @@
 package org.apache.sling.scripting.java.impl;
 
 import java.util.Iterator;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
@@ -58,16 +59,26 @@
      * Remove a  ServletWrapper.
      *
      * @param servletUri Servlet URI
+     * @param isRemove Is a remove
      */
-    public void removeWrapper(final String servletUri) {
+    public void removeWrapper(final String servletUri, final boolean isRemove) {
         final ServletWrapper wrapper = servlets.remove(servletUri);
         if ( wrapper != null ) {
             wrapper.destroy();
+        } else if ( isRemove ) {
+            final Iterator<Map.Entry<String, ServletWrapper>> iter = servlets.entrySet().iterator();
+            while ( iter.hasNext() ) {
+                final Map.Entry<String, ServletWrapper> entry = iter.next();
+                if ( entry.getKey().startsWith(servletUri) ) {
+                    iter.remove();
+                    entry.getValue().destroy();
+                }
+            }
         }
     }
 
     /**
-     * Process a "destory" event for this web application context.
+     * Process a "destroy" event for this web application context.
      */
     public void destroy() {
         Iterator<ServletWrapper> i = this.servlets.values().iterator();
