diff --git a/extscript-core-root/extscript-core/src/main_old/groovy/org/apache/myfaces/extensions/scripting/groovyloader/core/GroovyGlobalReloadingStrategy.groovy b/extscript-core-root/extscript-core/src/main_old/groovy/org/apache/myfaces/extensions/scripting/groovyloader/core/GroovyGlobalReloadingStrategy.groovy
new file mode 100644
index 0000000..6b6e156
--- /dev/null
+++ b/extscript-core-root/extscript-core/src/main_old/groovy/org/apache/myfaces/extensions/scripting/groovyloader/core/GroovyGlobalReloadingStrategy.groovy
@@ -0,0 +1,37 @@
+package org.apache.myfaces.extensions.scripting.groovyloader.core
+
+import org.apache.myfaces.extensions.scripting.api.ReloadingStrategy
+import org.apache.myfaces.extensions.scripting.core.reloading.SimpleReloadingStrategy
+import org.apache.myfaces.extensions.scripting.api.BaseWeaver
+import org.apache.myfaces.extensions.scripting.core.reloading.NoMappingReloadingStrategy
+import org.apache.myfaces.extensions.scripting.api.ScriptingWeaver;
+
+/**
+ * Reloading strategy for the groovy
+ * connectors
+ *
+ * Groovy has a different behavior, because
+ * every attribute normally is reachable even
+ * some introspection ones which under no circumstances
+ * should be overwritten
+ *
+ * so er have to set the all others instance var to a specialized reloading strategy
+ * and cope with the rest the standard java way by not doing anything
+ *
+ */
+public class GroovyGlobalReloadingStrategy extends org.apache.myfaces.extensions.scripting.core.reloading.GlobalReloadingStrategy {
+
+  //we cannot use a constructor here to bypass a groovy bug
+  //we use an explicit call to setWeaver instead
+
+  public GroovyGlobalReloadingStrategy() {
+    super();
+    _allOthers = new StandardGroovyReloadingStrategy()
+  }
+
+  public void setWeaver(ScriptingWeaver weaver) {
+    super.setWeaver(weaver)
+    _allOthers.setWeaver(weaver)
+  }
+
+}
\ No newline at end of file
diff --git a/extscript-core-root/extscript-core/src/main_old/groovy/org/apache/myfaces/extensions/scripting/groovyloader/core/StandardGroovyReloadingStrategy.groovy b/extscript-core-root/extscript-core/src/main_old/groovy/org/apache/myfaces/extensions/scripting/groovyloader/core/StandardGroovyReloadingStrategy.groovy
new file mode 100644
index 0000000..8ff947d
--- /dev/null
+++ b/extscript-core-root/extscript-core/src/main_old/groovy/org/apache/myfaces/extensions/scripting/groovyloader/core/StandardGroovyReloadingStrategy.groovy
@@ -0,0 +1,60 @@
+/*
+ * 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.groovyloader.core
+
+import org.apache.myfaces.extensions.scripting.api.BaseWeaver
+import org.apache.myfaces.extensions.scripting.core.reloading.SimpleReloadingStrategy
+
+public class StandardGroovyReloadingStrategy extends SimpleReloadingStrategy {
+
+  public StandardGroovyReloadingStrategy(BaseWeaver weaver) {
+    super(weaver);
+  }
+
+  public StandardGroovyReloadingStrategy() {
+    super();
+  }
+
+  /**
+   * central algorithm which determines which property values are overwritten and which are not
+   */
+  protected void mapProperties(def target, def src) {
+    src.properties.each {property ->
+      //ok here is the algorithm, basic datatypes usually are not copied but read in anew and then overwritten
+      //later on
+      //all others can be manually overwritten by adding an attribute <attributename>_changed
+
+      try {
+        if (target.properties.containsKey(property.key)
+                && !property.key.equals("metaClass")        //the class information and meta class information cannot be changed
+                && !property.key.equals("class")            //otherwise we will get following error
+                // java.lang.IllegalArgumentException: object is not an instance of declaring class
+                && !(
+        target.properties.containsKey(property.key + "_changed") //||
+        //nothing further needed the phases take care of that
+        )) {
+          target.setProperty(property.key, property.value)
+        }
+      } catch (Exception e) {
+
+      }
+    }
+  }
+}
+
diff --git a/extscript-core-root/extscript-core/src/main_old/groovy/org/apache/myfaces/extensions/scripting/groovyloader/core/readme.txt b/extscript-core-root/extscript-core/src/main_old/groovy/org/apache/myfaces/extensions/scripting/groovyloader/core/readme.txt
new file mode 100644
index 0000000..f2de993
--- /dev/null
+++ b/extscript-core-root/extscript-core/src/main_old/groovy/org/apache/myfaces/extensions/scripting/groovyloader/core/readme.txt
@@ -0,0 +1,15 @@
+This is the core of the groovy loader
+we have two things in here
+a groovy proxy which allows the reloading
+of groovy objects loaded via our classloader under certain circumstances
+The proxy on the groovy side loads itself into the class metadata
+so that the objects under the best circumstances
+can run new code or run a new instance
+
+
+secondly our threaded filewatcher
+and object reloader
+which checks if files have changed and then reloads
+objects wherever possible
+
+
