diff --git a/extscript-bundles/extscript-mojarra-bundle/pom.xml b/extscript-bundles/extscript-mojarra-bundle/pom.xml
index 0801711..a18f197 100644
--- a/extscript-bundles/extscript-mojarra-bundle/pom.xml
+++ b/extscript-bundles/extscript-mojarra-bundle/pom.xml
@@ -24,7 +24,7 @@
     <artifactId>extscript-mojarra-bundle</artifactId>
     <packaging>jar</packaging>
     <name>MyFaces Extension Scripting Mojarra 2.0 convenience meta bundle</name>
-    <version>1.0.5-SNAPSHOT</version>
+    <version>1.0.6-SNAPSHOT</version>
 
     <description>
         The meta bundle bundeling all needed core runtimes
@@ -34,7 +34,7 @@
     <parent>
         <groupId>org.apache.myfaces.extensions.scripting</groupId>
         <artifactId>extscript-bundles</artifactId>
-        <version>1.0.5-SNAPSHOT</version>
+        <version>1.0.6-SNAPSHOT</version>
     </parent>
 
     <scm>
@@ -53,12 +53,12 @@
         <dependency>
             <groupId>org.apache.myfaces.extensions.scripting</groupId>
             <artifactId>extscript-core</artifactId>
-            <version>1.0.5-SNAPSHOT</version>
+            <version>1.0.6-SNAPSHOT</version>
         </dependency>
         <dependency>
             <groupId>org.apache.myfaces.extensions.scripting</groupId>
             <artifactId>extscript-mojarra</artifactId>
-            <version>1.0.5-SNAPSHOT</version>
+            <version>1.0.6-SNAPSHOT</version>
         </dependency>
 
     </dependencies>
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/EngineScala.java b/extscript-core-root/extscript-core/attic/EngineScala.java
similarity index 92%
rename from extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/EngineScala.java
rename to extscript-core-root/extscript-core/attic/EngineScala.java
index 5cfffd6..2963ae6 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/EngineScala.java
+++ b/extscript-core-root/extscript-core/attic/EngineScala.java
@@ -28,7 +28,7 @@
 import org.apache.myfaces.extensions.scripting.core.engine.api.ScriptingEngine;
 import org.apache.myfaces.extensions.scripting.core.engine.compiler.ScalaCompiler;
 import org.apache.myfaces.extensions.scripting.core.reloading.SimpleReloadingStrategy;
-import scala.ScalaObject;
+
 
 import javax.servlet.ServletContext;
 import java.io.File;
@@ -44,6 +44,11 @@
 /**
  * @author Werner Punz (latest modification by $Author$)
  * @version $Revision$ $Date$
+ *
+ * Note, for now we cannot support scala anymore because, ScalaObject as identifier
+ * for a scala compiled class does not exist anymore. I cannot detect that the underlying
+ * object is from Scala. (There is another way via scala reflection but that one needs to be investigated further)
+ * Sorry for removing scala support for now
  */
 
 public class EngineScala extends BaseEngine implements ScriptingEngine
diff --git a/extscript-core-root/extscript-core/pom.xml b/extscript-core-root/extscript-core/pom.xml
index 26f5f37..7b6764b 100644
--- a/extscript-core-root/extscript-core/pom.xml
+++ b/extscript-core-root/extscript-core/pom.xml
@@ -145,6 +145,8 @@
                 </dependencies>
             </plugin>
             <!-- scala tools plugin -->
+            <!-- we remove scala support for now because of incompatible changes in the scala class format
+
             <plugin>
                 <groupId>org.scala-tools</groupId>
                 <artifactId>maven-scala-plugin</artifactId>
@@ -184,6 +186,7 @@
                     </dependency>
                 </dependencies>
             </plugin>
+            -->
             <!--
                 we reuse the maven shader plugin to get rid of the
                 asm transitive dependency in the final build
diff --git a/extscript-core-root/extscript-myfaces/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/ScalaCompilerTest.java b/extscript-core-root/extscript-myfaces/attic/ScalaCompilerTest.java
similarity index 100%
rename from extscript-core-root/extscript-myfaces/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/ScalaCompilerTest.java
rename to extscript-core-root/extscript-myfaces/attic/ScalaCompilerTest.java
diff --git a/extscript-core-root/extscript-myfaces/src/main/java/org/apache/myfaces/extensions/scripting/jsf/annotation/ManagedBeanHandler.java b/extscript-core-root/extscript-myfaces/src/main/java/org/apache/myfaces/extensions/scripting/jsf/annotation/ManagedBeanHandler.java
new file mode 100644
index 0000000..5d2ad2f
--- /dev/null
+++ b/extscript-core-root/extscript-myfaces/src/main/java/org/apache/myfaces/extensions/scripting/jsf/annotation/ManagedBeanHandler.java
@@ -0,0 +1,78 @@
+/*
+ * 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.jsf.annotation;
+
+import org.apache.myfaces.config.element.ManagedBean;
+import org.apache.myfaces.extensions.scripting.core.common.util.ReflectUtil;
+
+/**
+ * version dependend factory handler for the underlying ManagedBean implementation
+ * (ther was an api change by Leo regarding the managed bean implementation)
+ *
+ * @author Werner Punz (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+public class ManagedBeanHandler {
+
+    final static String NEW_CLASS = "org.apache.myfaces.config.impl.digester.elements.ManagedBeanImpl";
+    final static String OLD_CLASS = "org.apache.myfaces.config.impl.digester.elements.ManagedBean";
+
+    public static ManagedBean newInstance() {
+        try {
+            if (MYFACE_VERSION < 2.2) {
+                return (ManagedBean) Class.forName(OLD_CLASS).newInstance();
+            } else {
+                return (ManagedBean) Class.forName(NEW_CLASS).newInstance();
+            }
+        } catch (InstantiationException e) {
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+        } catch (ClassNotFoundException e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+
+    public static void setBeanClass(ManagedBean mbean, String name) {
+        ReflectUtil.executeMethod(mbean, "setBeanClass", name);
+    }
+
+    public static void setName(ManagedBean mbean, String name) {
+        ReflectUtil.executeMethod(mbean, "setName", name);
+    }
+
+    public static void setScope(ManagedBean mbean, String scope) {
+        ReflectUtil.executeMethod(mbean, "setScope", scope);
+    }
+
+    public static double MYFACE_VERSION = getVersion();
+
+    static double getVersion() {
+        try {
+            Class clazz = Class.forName(NEW_CLASS);
+            return 2.2;
+        } catch (ClassNotFoundException e) {
+            return 2.1;
+        }
+    }
+
+}
diff --git a/extscript-core-root/extscript-myfaces/src/main/java/org/apache/myfaces/extensions/scripting/jsf/annotation/ManagedPropertyHandler.java b/extscript-core-root/extscript-myfaces/src/main/java/org/apache/myfaces/extensions/scripting/jsf/annotation/ManagedPropertyHandler.java
new file mode 100644
index 0000000..e098e9f
--- /dev/null
+++ b/extscript-core-root/extscript-myfaces/src/main/java/org/apache/myfaces/extensions/scripting/jsf/annotation/ManagedPropertyHandler.java
@@ -0,0 +1,73 @@
+/*
+ * 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.jsf.annotation;
+
+
+import org.apache.myfaces.config.element.ManagedProperty;
+import org.apache.myfaces.extensions.scripting.core.common.util.ReflectUtil;
+
+import static org.apache.myfaces.extensions.scripting.jsf.annotation.ManagedBeanHandler.MYFACE_VERSION;
+
+/**
+ * version dependend factory handler for the underlying ManagedBean implementation
+ * (ther was an api change by Leo regarding the managed bean implementation)
+ *
+ * @author Werner Punz (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+public class ManagedPropertyHandler {
+
+    static final String OLD_CLASS="org.apache.myfaces.config.impl.digester.elements.ManagedProperty";
+    static final String NEW_CLASS="org.apache.myfaces.config.impl.digester.elements.ManagedPropertyImpl";
+
+
+
+    public static ManagedProperty newInstance() {
+        try {
+            if (MYFACE_VERSION < 2.2) {
+                return (ManagedProperty) Class.forName(OLD_CLASS).newInstance();
+            } else {
+                return (ManagedProperty) Class.forName(NEW_CLASS).newInstance();
+            }
+        } catch (InstantiationException e) {
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+        } catch (ClassNotFoundException e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+
+    public static void setPropertyName(ManagedProperty mpc, String name) {
+        ReflectUtil.executeMethod(mpc, "setPropertyName", name);
+    }
+
+
+    public static void setPropertyClass(ManagedProperty mpc, String name) {
+        ReflectUtil.executeMethod(mpc, "setPropertyClass", name);
+    }
+
+    public static void setValue(ManagedProperty mpc, String value) {
+        ReflectUtil.executeMethod(mpc, "setValue", value);
+    }
+
+}
diff --git a/extscript-core-root/extscript-myfaces/src/main/java/org/apache/myfaces/extensions/scripting/jsf/annotation/MyFacesBeanImplementationListener.java b/extscript-core-root/extscript-myfaces/src/main/java/org/apache/myfaces/extensions/scripting/jsf/annotation/MyFacesBeanImplementationListener.java
index 1a14d41..737d374 100644
--- a/extscript-core-root/extscript-myfaces/src/main/java/org/apache/myfaces/extensions/scripting/jsf/annotation/MyFacesBeanImplementationListener.java
+++ b/extscript-core-root/extscript-myfaces/src/main/java/org/apache/myfaces/extensions/scripting/jsf/annotation/MyFacesBeanImplementationListener.java
@@ -19,8 +19,9 @@
 package org.apache.myfaces.extensions.scripting.jsf.annotation;
 
 import org.apache.myfaces.config.RuntimeConfig;
+import org.apache.myfaces.config.element.ManagedBean;
 import org.apache.myfaces.config.element.NavigationRule;
-import org.apache.myfaces.config.impl.digester.elements.ManagedBean;
+
 import org.apache.myfaces.extensions.scripting.core.api.AnnotationScanListener;
 import org.apache.myfaces.extensions.scripting.core.common.util.ReflectUtil;
 import org.apache.myfaces.extensions.scripting.core.common.util.StringUtils;
@@ -93,13 +94,16 @@
             mbean = (ManagedBean) _alreadyRegistered.get(beanName);
             //return;
         } else {
-            mbean = new ManagedBean();
+            mbean = ManagedBeanHandler.newInstance();
         }
 
-        mbean.setBeanClass(clazz.getName());
+        ManagedBeanHandler.setBeanClass(mbean, clazz.getName());
+        //mbean.setBeanClass(clazz.getName());
+
 
         ReflectUtil.setField(mbean, "beanClass", null, true);
-        mbean.setName(beanName);
+        ManagedBeanHandler.setName(mbean, beanName);
+      //  mbean.setName(beanName);
         handleManagedpropertiesCompiled(mbean, fields(clazz));
         resolveScope(clazz, mbean);
 
@@ -124,7 +128,9 @@
             CustomScoped customScoped = (CustomScoped) clazz.getAnnotation(CustomScoped.class);
             scope = (customScoped != null) ? customScoped.value() : "custom";
         }
-        mbean.setScope(scope);
+
+        //mbean.setScope(scope);
+        ManagedBeanHandler.setScope(mbean, scope);
     }
 
     protected void handleManagedpropertiesCompiled(ManagedBean mbean, Field[] fields) {
@@ -142,15 +148,20 @@
                             + "' has a @ManagedProperty annotation");
                 }
 
-                org.apache.myfaces.config.impl.digester.elements.ManagedProperty mpc =
-                        new org.apache.myfaces.config.impl.digester.elements.ManagedProperty();
+                org.apache.myfaces.config.element.ManagedProperty mpc = ManagedPropertyHandler.newInstance();
                 String name = property.name();
                 if ((name == null) || "".equals(name)) {
                     name = field.getName();
                 }
-                mpc.setPropertyName(name);
-                mpc.setPropertyClass(field.getType().getName()); // FIXME - primitives, arrays, etc.
-                mpc.setValue(property.value());
+
+                ManagedPropertyHandler.setPropertyName(mpc, name);
+                //mpc.setPropertyName(name);
+                ManagedPropertyHandler.setPropertyClass(mpc, field.getType().getName());
+
+                //mpc.setPropertyClass(field.getType().getName()); // FIXME - primitives, arrays, etc.
+
+                ManagedPropertyHandler.setValue(mpc, property.value());// FIXME - primitives, arrays, etc.
+                //mpc.setValue(property.value());
 
                 ReflectUtil.executeMethod(mbean, "addProperty", mpc);
             }
diff --git a/extscript-core-root/extscript-weld/pom.xml b/extscript-core-root/extscript-weld/pom.xml
index cf0bb7c..c2806ed 100644
--- a/extscript-core-root/extscript-weld/pom.xml
+++ b/extscript-core-root/extscript-weld/pom.xml
@@ -20,7 +20,7 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <artifactId>extscript-weld</artifactId>
-    <version>1.0.5-SNAPSHOT</version>
+    <version>1.0.6-SNAPSHOT</version>
     <packaging>jar</packaging>
     <name>MyFaces Extension Scripting Core for Apache OWB</name>
 
@@ -31,14 +31,14 @@
     <parent>
         <groupId>org.apache.myfaces.extensions.scripting</groupId>
         <artifactId>extscript-core-root</artifactId>
-        <version>1.0.5-SNAPSHOT</version>
+        <version>1.0.6-SNAPSHOT</version>
     </parent>
 
     <dependencies>
         <dependency>
             <groupId>org.apache.myfaces.extensions.scripting</groupId>
             <artifactId>extscript-core</artifactId>
-            <version>1.0.5-SNAPSHOT</version>
+            <version>1.0.6-SNAPSHOT</version>
         </dependency>
         <dependency>
             <groupId>org.jboss.weld</groupId>
diff --git a/extscript-examples/cdi-example/pom.xml b/extscript-examples/cdi-example/pom.xml
index 50e7a1a..6ba2fee 100644
--- a/extscript-examples/cdi-example/pom.xml
+++ b/extscript-examples/cdi-example/pom.xml
@@ -163,7 +163,7 @@
                      <dependency>
                          <groupId>org.apache.myfaces.extensions.scripting</groupId>
                          <artifactId>extscript-mojarra-bundle</artifactId>
-                         <version>1.0.5-SNAPSHOT</version>
+                         <version>1.0.6-SNAPSHOT</version>
                      </dependency>
 
                 </dependencies>
@@ -191,7 +191,7 @@
                     <dependency>
                         <groupId>org.apache.myfaces.extensions.scripting</groupId>
                         <artifactId>extscript-myfaces20-bundle</artifactId>
-                        <version>1.0.5</version>
+                        <version>1.0.6-SNAPSHOT</version>
                     </dependency>
 
                 </dependencies>
diff --git a/extscript-examples/cdi-example/src/main/webapp/WEB-INF/web.xml b/extscript-examples/cdi-example/src/main/webapp/WEB-INF/web.xml
index 161a759..d811e81 100644
--- a/extscript-examples/cdi-example/src/main/webapp/WEB-INF/web.xml
+++ b/extscript-examples/cdi-example/src/main/webapp/WEB-INF/web.xml
@@ -40,14 +40,13 @@
     </context-param>
 
 
-    <!--
     <context-param>
         <description>Additional comma separated loader paths to allow direct editing on the sources directory instead
             of the deployment dir
         </description>
         <param-name>org.apache.myfaces.extensions.scripting.groovy.LOADER_PATHS</param-name>
         <param-value>
-            /whatever/development/workspace/extensions-scripting3/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy
+            /Users/werpu2/development/workspace/extscript_trunk_svn/extscript-examples/cdi-example/src/main/webapp/WEB-INF/groovy
         </param-value>
     </context-param>
 
@@ -58,7 +57,7 @@
         </description>
         <param-name>org.apache.myfaces.extensions.scripting.java.LOADER_PATHS</param-name>
         <param-value>
-            /whatever/development/workspace/extensions-scripting3/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java
+            /Users/werpu2/development/workspace/extscript_trunk_svn/extscript-examples/cdi-example/src/main/webapp/WEB-INF/java
         </param-value>
     </context-param>
 
@@ -66,7 +65,7 @@
         <description>resource paths for our custom JSF2 resource resolver</description>
         <param-name>org.apache.myfaces.extensions.scripting.resources.LOADER_PATHS</param-name>
         <param-value>
-            /whatever/development/workspace/extensions-scripting3/extscript-examples/myfaces20-example/src/main/webapp
+            /Users/werpu2/development/workspace/extscript_trunk_svn/extscript-examples/cdi-example/src/main/webapp
         </param-value>
     </context-param>
 
@@ -77,7 +76,7 @@
         <param-name>facelets.RESOURCE_RESOLVER</param-name>
         <param-value>org.apache.myfaces.extensions.scripting.jsf.facelet.ReroutingResourceResolver</param-value>
     </context-param>
-    -->
+
     <!--
     <context-param>
         <description>a comma separated whitelist of root packages which are compiled those and nothing else
diff --git a/extscript-examples/myfaces20-example/pom.xml b/extscript-examples/myfaces20-example/pom.xml
index 034e961..e2cbc64 100644
--- a/extscript-examples/myfaces20-example/pom.xml
+++ b/extscript-examples/myfaces20-example/pom.xml
@@ -86,7 +86,7 @@
                  <dependency>
                      <groupId>org.apache.myfaces.extensions.scripting</groupId>
                      <artifactId>extscript-mojarra-bundle</artifactId>
-                     <version>1.0.5</version>
+                     <version>1.0.6-SNAPSHOT</version>
                  </dependency>
 
             </dependencies>
@@ -114,7 +114,7 @@
                 <dependency>
                     <groupId>org.apache.myfaces.extensions.scripting</groupId>
                     <artifactId>extscript-myfaces20-bundle</artifactId>
-                    <version>1.0.5</version>
+                    <version>1.0.6-SNAPSHOT</version>
                 </dependency>
 
             </dependencies>
diff --git a/extscript-examples/myfaces20-extscript-helloworld/pom.xml b/extscript-examples/myfaces20-extscript-helloworld/pom.xml
index 33a1d68..289db70 100644
--- a/extscript-examples/myfaces20-extscript-helloworld/pom.xml
+++ b/extscript-examples/myfaces20-extscript-helloworld/pom.xml
@@ -71,7 +71,7 @@
                 <dependency>
                     <groupId>org.apache.myfaces.extensions.scripting</groupId>
                     <artifactId>extscript-myfaces20-bundle</artifactId>
-                    <version>1.0.5</version>
+                    <version>1.0.6-SNAPSHOT</version>
                 </dependency>
                 <dependency>
                     <groupId>org.apache.myfaces.core</groupId>
@@ -101,12 +101,12 @@
                 <dependency>
                     <groupId>org.apache.myfaces.extensions.scripting</groupId>
                     <artifactId>extscript-core</artifactId>
-                    <version>1.0.5-SNAPSHOT</version>
+                    <version>1.0.6-SNAPSHOT</version>
                 </dependency>
                 <dependency>
                     <groupId>org.apache.myfaces.extensions.scripting</groupId>
                     <artifactId>extscript-mojarra</artifactId>
-                    <version>1.0.5-SNAPSHOT</version>
+                    <version>1.0.6-SNAPSHOT</version>
                 </dependency>
             </dependencies>
         </profile>
diff --git a/extscript-examples/weld-example/pom.xml b/extscript-examples/weld-example/pom.xml
index 53ae50b..3dba3c1 100644
--- a/extscript-examples/weld-example/pom.xml
+++ b/extscript-examples/weld-example/pom.xml
@@ -22,14 +22,14 @@
     <parent>
         <artifactId>extscript-examples</artifactId>
         <groupId>org.apache.myfaces.extensions.scripting</groupId>
-        <version>1.0.5-SNAPSHOT</version>
+        <version>1.0.6-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.apache.myfaces.extensions.scripting</groupId>
     <artifactId>myfaces21-extscript-weld-example</artifactId>
     <packaging>war</packaging>
     <name>A simple project for MyFaces 2.1 and Ext-Scripting 1.0 and Weld</name>
-    <version>1.0.5-SNAPSHOT</version>
+    <version>1.0.6-SNAPSHOT</version>
     <url>http://www.apache.org</url>
     <dependencies>
         <!--
@@ -67,13 +67,13 @@
         <dependency>
             <groupId>org.apache.myfaces.extensions.scripting</groupId>
             <artifactId>extscript-myfaces20-bundle</artifactId>
-            <version>1.0.5-SNAPSHOT</version>
+            <version>1.0.6-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>org.apache.myfaces.extensions.scripting</groupId>
             <artifactId>extscript-weld</artifactId>
-            <version>1.0.5-SNAPSHOT</version>
+            <version>1.0.6-SNAPSHOT</version>
         </dependency>
         <!-- weld dependencies -->
         <dependency>
diff --git a/pom.xml b/pom.xml
index 04c8b5d..eb29219 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,11 +28,11 @@
     
     <properties>
         <myfaces12.version>1.2.9</myfaces12.version>
-        <myfaces2.version>2.1.7</myfaces2.version>
+        <myfaces2.version>2.2.11</myfaces2.version>
         <extval.version>2.0.5</extval.version>
         <groovy.version>1.7.2</groovy.version>
         <maven-scala-plugin.scalaVersion>2.15.2</maven-scala-plugin.scalaVersion>
-        <scala-library.version>2.10.0-M2</scala-library.version>
+        <scala-library.version>2.11.1</scala-library.version>
         <deltaspike.version>0.2-incubating-SNAPSHOT</deltaspike.version>
         <openwebbeans.version>1.1.2</openwebbeans.version>
     </properties>
