diff --git a/proxy/proxy-impl/pom.xml b/proxy/proxy-impl/pom.xml
index 5ff8ab0..e35e757 100644
--- a/proxy/proxy-impl/pom.xml
+++ b/proxy/proxy-impl/pom.xml
@@ -57,7 +57,7 @@
         <aries.osgi.import.pkg>
             org.apache.aries.proxy.weavinghook;resolution:=optional;provide:=true,
             org.apache.aries.proxy*;provide:=true,
-            org.objectweb.asm*;resolution:=optional,
+            org.objectweb.asm*;resolution:=optional;version="[5,7)",
             sun.reflect*;resolution:=optional,
             org.osgi.framework;version="[1.5,2)",
             org.osgi.framework.hooks.weaving;resolution:=optional,
@@ -79,7 +79,7 @@
             <groupId>org.ow2.asm</groupId>
             <artifactId>asm-debug-all</artifactId>
             <optional>true</optional>
-            <version>5.0.3</version>
+            <version>6.0_ALPHA</version>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
diff --git a/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/AsmProxyManager.java b/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/AsmProxyManager.java
index da7328f..48b91f2 100644
--- a/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/AsmProxyManager.java
+++ b/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/AsmProxyManager.java
@@ -159,6 +159,12 @@
            // Ignore
          }
         }
+        try {
+          // use bootClassLoader as last fallback
+          return bootClassLoader.loadClass(name);
+        } catch (ClassNotFoundException e) {
+          // Ignore
+        }
         throw new ClassNotFoundException(name);
     }
 
diff --git a/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/ProxyUtils.java b/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/ProxyUtils.java
index 4b218a7..61de9f1 100644
--- a/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/ProxyUtils.java
+++ b/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/ProxyUtils.java
@@ -39,6 +39,10 @@
     	//In order to avoid an inconsistent stack error the version of the woven byte code needs to match
     	//the level of byte codes in the original class
     	switch(JAVA_CLASS_VERSION) {
+			case Opcodes.V1_9:
+				LOGGER.debug("Weaving to Java 9");
+				weavingJavaVersion = Opcodes.V1_9;
+				break;
     		case Opcodes.V1_8:
     			LOGGER.debug("Weaving to Java 8");
     			weavingJavaVersion = Opcodes.V1_8;
diff --git a/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/SystemModuleClassLoader.java b/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/SystemModuleClassLoader.java
new file mode 100644
index 0000000..9bc7611
--- /dev/null
+++ b/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/SystemModuleClassLoader.java
@@ -0,0 +1,77 @@
+/*
+ * 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.aries.proxy.impl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+public class SystemModuleClassLoader extends ClassLoader {
+
+    private static java.lang.reflect.Method method_Class_getModule;
+    private static java.lang.reflect.Method method_Module_getResourceAsStream ;
+    static {
+        try {
+            method_Class_getModule = Class.class.getMethod("getModule");
+            method_Module_getResourceAsStream = method_Class_getModule.getReturnType()
+                .getMethod("getResourceAsStream", String.class);
+        } catch (NoSuchMethodException e) {
+            //this isn't java9 with jigsaw
+
+        }
+    }
+
+
+    public SystemModuleClassLoader(ClassLoader parentLoader) {
+        super(parentLoader);
+    }
+
+    public SystemModuleClassLoader() {
+        super();
+    }
+
+    @Override
+    public InputStream getResourceAsStream(String name) {
+        URL url = getResource(name);
+        if (url == null) {
+            // try java9 module resource loader
+            if (method_Class_getModule == null || method_Module_getResourceAsStream == null) {
+                return null; // not Java 9 JIGSAW
+            }
+            try {
+                String className = name.replace('/', '.');
+                int lastDot = className.lastIndexOf('.');
+                className = className.substring(0, lastDot);
+                final Class<?> clazz = Class.forName(className, false, this);
+                final Object module = method_Class_getModule.invoke(clazz);
+                return (InputStream)method_Module_getResourceAsStream
+                    .invoke(module, name);
+            } catch (Exception e) {
+                return null; // not found
+            }
+        } else {
+            try {
+                return url.openStream();
+            } catch (IOException e) {
+                return null;
+            }
+        }
+    }
+}
diff --git a/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/AbstractWovenProxyAdapter.java b/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/AbstractWovenProxyAdapter.java
index 7dca9ca..1edc970 100644
--- a/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/AbstractWovenProxyAdapter.java
+++ b/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/AbstractWovenProxyAdapter.java
@@ -37,6 +37,7 @@
 import org.apache.aries.proxy.InvocationListener;
 import org.apache.aries.proxy.UnableToProxyException;
 import org.apache.aries.proxy.impl.NLS;
+import org.apache.aries.proxy.impl.SystemModuleClassLoader;
 import org.apache.aries.proxy.impl.gen.Constants;
 import org.apache.aries.proxy.weaving.WovenProxy;
 import org.objectweb.asm.ClassReader;
@@ -674,11 +675,15 @@
    * @throws IOException
    */
   public static void readClass(Class<?> c, ClassVisitor adapter) throws IOException {
-    String className = c.getName();
-    className = className.substring(className.lastIndexOf('.') + 1) + ".class";
-        
+    String className = c.getName().replace(".", "/") + ".class";
+
     //Load the class bytes and copy methods across
-    ClassReader cReader = new ClassReader(c.getResourceAsStream(className));
+    ClassLoader loader = c.getClassLoader();
+    if (loader == null) {
+      //system class, use SystemModuleClassLoader as fallback
+      loader = new SystemModuleClassLoader();
+    }
+    ClassReader cReader = new ClassReader(loader.getResourceAsStream(className));
 
     cReader.accept(adapter, ClassReader.SKIP_CODE | 
         ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
diff --git a/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassAdapter.java b/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassAdapter.java
index 1ec5ffe..e46aa36 100644
--- a/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassAdapter.java
+++ b/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassAdapter.java
@@ -19,12 +19,14 @@
 package org.apache.aries.proxy.impl.gen;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Modifier;
 
 import org.apache.aries.proxy.impl.NLS;
 import org.apache.aries.proxy.impl.ProxyUtils;
+import org.apache.aries.proxy.impl.SystemModuleClassLoader;
 import org.objectweb.asm.AnnotationVisitor;
 import org.objectweb.asm.Attribute;
 import org.objectweb.asm.ClassReader;
@@ -274,9 +276,17 @@
         if (loader == null) {
           loader = this.loader;
         }
-        ClassReader cr = new ClassReader(loader.getResourceAsStream(currentlyAnalysedClass
-            .getName().replaceAll("\\.", "/")
-            + ".class"));
+        InputStream is = loader.getResourceAsStream(currentlyAnalysedClass
+                                                    .getName().replaceAll("\\.", "/")
+                                                    + ".class");
+        if (is == null) {
+              //use SystemModuleClassLoader as fallback
+              ClassLoader classLoader = new SystemModuleClassLoader();
+              is = classLoader.getResourceAsStream(currentlyAnalysedClass
+                                              .getName().replaceAll("\\.", "/")
+                                              + ".class");
+        }
+        ClassReader cr = new ClassReader(is);
         ClassVisitor hierarchyAdapter = new ProxySubclassHierarchyAdapter(this, setOfFoundMethods);
         cr.accept(hierarchyAdapter, ClassReader.SKIP_DEBUG);
       } catch (IOException e) {
diff --git a/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceCombiningClassAdapter.java b/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceCombiningClassAdapter.java
index 0ec829a..55e5617 100644
--- a/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceCombiningClassAdapter.java
+++ b/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceCombiningClassAdapter.java
@@ -95,6 +95,9 @@
       else if(((access & (ACC_PRIVATE|ACC_SYNTHETIC)) == (ACC_PRIVATE|ACC_SYNTHETIC))) {
           // private, synthetic methods on interfaces don't need to be proxied.       
           return null;
+      } else if (((access & (ACC_STATIC)) == (ACC_STATIC))) {
+          //static methods on interfaces don't need to be proxied
+          return null;
       }
       else {//We're going to implement this method, so make it non abstract!
           return adapter.visitMethod(access, name, desc, null, arg4);
diff --git a/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/WovenProxyGeneratorTest.java b/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/WovenProxyGeneratorTest.java
index c708387..50af209 100644
--- a/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/WovenProxyGeneratorTest.java
+++ b/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/WovenProxyGeneratorTest.java
@@ -46,6 +46,7 @@
 import org.apache.aries.proxy.UnableToProxyException;
 import org.apache.aries.proxy.impl.AsmProxyManager;
 import org.apache.aries.proxy.impl.SingleInstanceDispatcher;
+import org.apache.aries.proxy.impl.SystemModuleClassLoader;
 import org.apache.aries.proxy.impl.gen.ProxySubclassMethodHashSet;
 import org.apache.aries.proxy.impl.weaving.WovenProxyGenerator;
 import org.apache.aries.proxy.weaving.WovenProxy;
@@ -95,7 +96,7 @@
  
   private static final Map<String, byte[]> rawClasses = new HashMap<String, byte[]>();
   
-  protected static final ClassLoader weavingLoader = new ClassLoader() {
+  protected static final ClassLoader weavingLoader = new SystemModuleClassLoader() {
     public Class<?> loadClass(String className)  throws ClassNotFoundException
     {
       return loadClass(className, false);
