diff --git a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/common/util/ClassUtils.java b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/common/util/ClassUtils.java
index 1dae081..66109f8 100644
--- a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/common/util/ClassUtils.java
+++ b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/common/util/ClassUtils.java
@@ -76,6 +76,9 @@
     {
         String className = relativeFileName.replaceAll("\\\\", ".").replaceAll("\\/", ".");
         className = className.substring(0, className.lastIndexOf("."));
+        if(className.startsWith(".")) {
+            className = className.substring(1);
+        }
         return className;
     }
 
diff --git a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/context/WeavingContext.java b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/context/WeavingContext.java
index 0b9b098..1197a1e 100644
--- a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/context/WeavingContext.java
+++ b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/context/WeavingContext.java
@@ -201,7 +201,7 @@
     /**
      * reload the class dynamically
      */
-    public Class reloadClass(Class clazz)
+    public Class reload(Class clazz)
     {
         if (!isDynamic(clazz)) return clazz;
         ClassResource resource = (ClassResource) getResource(clazz.getName());
diff --git a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/dependencyScan/loaders/ScannerClassloader.java b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/dependencyScan/loaders/ScannerClassloader.java
index e1f847d..84a8d45 100644
--- a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/dependencyScan/loaders/ScannerClassloader.java
+++ b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/dependencyScan/loaders/ScannerClassloader.java
@@ -80,6 +80,7 @@
             return super.loadClass(className);
         }
 
+
         //ClassResource data = WeavingContext.getFileChangedDaemon().getClassMap().get(className);
         //if (data != null && !data.getRefreshAttribute().requiresRefresh()) {
         //    return data.getAClass();
@@ -98,10 +99,13 @@
                 iStream = new FileInputStream(target);
                 int len = iStream.read(fileContent);
                 if (_logger.isLoggable(Level.FINER)) {
-                    _logger.log(Level.FINER, "class read {0}� bytes read", String.valueOf(len));
+                    _logger.log(Level.FINER, "class read {0} bytes read", String.valueOf(len));
                 }
             }
 
+            if(className.contains("TestResourceHandler")){
+                System.out.println("debugpoint found");
+            }
             //we have to do it here because just in case
             //a dependent class is loaded as well we run into classcast exceptions
             Class retVal = super.defineClass(className, fileContent, 0, fileLength);
diff --git a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/monitor/ClassResource.java b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/monitor/ClassResource.java
index 2926788..2fe7dfa 100644
--- a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/monitor/ClassResource.java
+++ b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/monitor/ClassResource.java
@@ -140,6 +140,7 @@
     {
         String targetDir = WeavingContext.getInstance().getConfiguration().getCompileTarget().getAbsolutePath();
         String className = ClassUtils.relativeFileToClassName(getSourceFile());
+
         return className;
     }
 
diff --git a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/reloading/MethodLevelReloadingHandler.java b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/reloading/MethodLevelReloadingHandler.java
index 34ab404..c5e26e7 100644
--- a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/reloading/MethodLevelReloadingHandler.java
+++ b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/reloading/MethodLevelReloadingHandler.java
@@ -85,7 +85,7 @@
 
         if (_delegate == null) {
             //stateless or lost state due to a lifecycle iteration we trigger anew
-            _delegate = (WeavingContext.getInstance().reloadClass(_loadedClass)).newInstance();
+            _delegate = (WeavingContext.getInstance().reload(_loadedClass)).newInstance();
         } else {
             //if we are stateful only a tainted artifact is reloaded
             _delegate = WeavingContext.getInstance().reload(_delegate, _artifactType);
diff --git a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/reloading/SimpleReloadingStrategy.java b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/reloading/SimpleReloadingStrategy.java
index 9f8b1eb..aa30a35 100644
--- a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/reloading/SimpleReloadingStrategy.java
+++ b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/reloading/SimpleReloadingStrategy.java
@@ -61,7 +61,7 @@
     public Object reload(Object scriptingInstance, int artifactType) {
 
         //reload the class to get new static content if needed
-        Class aclass = WeavingContext.getInstance().reloadClass(scriptingInstance.getClass());
+        Class aclass = WeavingContext.getInstance().reload(scriptingInstance.getClass());
         if (aclass.hashCode() == scriptingInstance.getClass().hashCode()) {
             //class of this object has not changed although
             // reload is enabled we can skip the rest now
diff --git a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/dynamicDecorators/implementations/ELResolverProxy.java b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/dynamicDecorators/implementations/ELResolverProxy.java
index ab0f903..498d3e6 100644
--- a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/dynamicDecorators/implementations/ELResolverProxy.java
+++ b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/dynamicDecorators/implementations/ELResolverProxy.java
@@ -77,7 +77,7 @@
     public Class<?> getType(ELContext elContext, Object o, Object o1) throws NullPointerException, ELException {
         Class<?> retVal = _delegate.getType(elContext, o, o1);
         if (retVal != null && WeavingContext.getInstance().isDynamic(retVal)) {
-            return WeavingContext.getInstance().reloadClass(retVal);
+            return WeavingContext.getInstance().reload(retVal);
         }
         return retVal;
     }
