diff --git a/src/main/groovy/lang/GroovyClassLoader.java b/src/main/groovy/lang/GroovyClassLoader.java
index b0730a6..e34b16a 100644
--- a/src/main/groovy/lang/GroovyClassLoader.java
+++ b/src/main/groovy/lang/GroovyClassLoader.java
@@ -774,13 +774,25 @@ public class GroovyClassLoader extends URLClassLoader {
             if ((oldClass != null && isSourceNewer(source, oldClass)) || (oldClass == null)) {
                 synchronized (sourceCache) {
                     sourceCache.remove(className);
-                    return parseClass(source.openStream(), className);
+                    if (isFile(source)) {
+                        try {
+                            return parseClass(new File(source.toURI()));
+                        } catch (URISyntaxException e) {
+                            // do nothing and fall back to the other version
+                        }
+                    }
+                    return parseClass(source.openStream(), makeFileName(className));
                 }
             }
         }
         return oldClass;
     }
 
+    private String makeFileName(String className) {
+        className = className.replace('.','/');
+        return className+".groovy";
+    }
+
     /**
      * Implemented here to check package access prior to returning an
      * already loaded class.
