diff --git a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/BaseEngine.java b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/BaseEngine.java
index 9d82220..69bbf9d 100644
--- a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/BaseEngine.java
+++ b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/BaseEngine.java
@@ -137,21 +137,7 @@
         return false;
     }
 
-    protected void initPaths(ServletContext context, String initParam, String defaultValue)
-    {
-        String pathSeparatedList = context.getInitParameter(initParam);
-        pathSeparatedList = (pathSeparatedList != null) ? pathSeparatedList : defaultValue;
-        if (pathSeparatedList.equals(JAVA_SOURCE_ROOT))
-        {
-            URL resource = ClassUtils.getContextClassLoader().getResource("./");
-            pathSeparatedList = FilenameUtils.normalize(resource.getPath() + "../.." + defaultValue);
-        }
-        String[] paths = pathSeparatedList.split(",");
-        for (String path : paths)
-        {
-            getSourcePaths().add(path);
-        }
-    }
+
 
     public DependencyRegistry getDependencyRegistry()
     {
@@ -224,4 +210,20 @@
         }
 
     }
+
+    protected void initPaths(ServletContext context, String initParam, String defaultValue)
+        {
+            String pathSeparatedList = context.getInitParameter(initParam);
+            pathSeparatedList = (pathSeparatedList != null) ? pathSeparatedList : defaultValue;
+            if (pathSeparatedList.equals(defaultValue))
+            {
+                URL resource = ClassUtils.getContextClassLoader().getResource("./");
+                pathSeparatedList = FilenameUtils.normalize(resource.getPath() + "../.." + defaultValue);
+            }
+            String[] paths = pathSeparatedList.split(",");
+            for (String path : paths)
+            {
+                getSourcePaths().add(path);
+            }
+        }
 }
diff --git a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/EngineGroovy.java b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/EngineGroovy.java
index 3680977..d2f0a3c 100644
--- a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/EngineGroovy.java
+++ b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/EngineGroovy.java
@@ -19,6 +19,7 @@
 
 package rewrite.org.apache.myfaces.extensions.scripting.core.engine;
 
+import org.apache.commons.io.FilenameUtils;
 import rewrite.org.apache.myfaces.extensions.scripting.core.common.util.ClassUtils;
 import rewrite.org.apache.myfaces.extensions.scripting.core.context.Configuration;
 import rewrite.org.apache.myfaces.extensions.scripting.core.context.WeavingContext;
@@ -27,6 +28,7 @@
 
 import javax.servlet.ServletContext;
 import java.io.File;
+import java.net.URL;
 import java.util.Collection;
 import java.util.logging.Logger;
 
@@ -86,9 +88,5 @@
         log.info("[EXT-SCRIPTING] ending dependency scan");
     }
 
-    @Override
-    public void markTaintedDependencies()
-    {
-        //To change body of implemented methods use File | Settings | File Templates.
-    }
+
 }
diff --git a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/EngineJava.java b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/EngineJava.java
index d8e3778..ca19348 100644
--- a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/EngineJava.java
+++ b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/EngineJava.java
@@ -19,6 +19,7 @@
 
 package rewrite.org.apache.myfaces.extensions.scripting.core.engine;
 
+import org.apache.commons.io.FilenameUtils;
 import rewrite.org.apache.myfaces.extensions.scripting.core.common.util.ClassUtils;
 import rewrite.org.apache.myfaces.extensions.scripting.core.context.Configuration;
 import rewrite.org.apache.myfaces.extensions.scripting.core.context.WeavingContext;
@@ -28,6 +29,7 @@
 
 import javax.servlet.ServletContext;
 import java.io.File;
+import java.net.URL;
 import java.util.Collection;
 import java.util.logging.Logger;
 
