diff --git a/framework.security/src/main/java/org/apache/felix/framework/SecurityProviderImpl.java b/framework.security/src/main/java/org/apache/felix/framework/SecurityProviderImpl.java
index 2d24fb3..5427a83 100644
--- a/framework.security/src/main/java/org/apache/felix/framework/SecurityProviderImpl.java
+++ b/framework.security/src/main/java/org/apache/felix/framework/SecurityProviderImpl.java
@@ -27,9 +27,8 @@
 import org.apache.felix.framework.security.util.TrustManager;
 import org.apache.felix.framework.security.verifier.BundleDNParser;
 import org.apache.felix.framework.util.SecureAction;
-//import org.apache.felix.moduleloader.IModule;
-import org.apache.felix.framework.resolver.Module;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.wiring.BundleRevision;
 
 /**
  * This class is the entry point to the security. It is used to determine
@@ -60,7 +59,7 @@
      */
     public void checkBundle(Bundle bundle) throws Exception
     {
-        Module module = ((BundleImpl) bundle).getCurrentModule();
+        BundleRevisionImpl module = (BundleRevisionImpl) bundle.adapt(BundleRevision.class);
         m_parser.checkDNChains(module, module.getContent(),
             Bundle.SIGNERS_TRUSTED);
     }
@@ -70,7 +69,7 @@
      */
     public Object getSignerMatcher(final Bundle bundle, int signersType)
     {
-        Module module = ((BundleImpl) bundle).getCurrentModule();
+        BundleRevisionImpl module = ((BundleRevisionImpl) bundle.adapt(BundleRevision.class));
         return m_parser.getDNChains(module, module.getContent(), signersType);
     }
 
@@ -85,7 +84,7 @@
     {
         BundleProtectionDomain pd = (BundleProtectionDomain) bundleProtectionDomain;
         BundleImpl bundle = pd.getBundle();
-        Module module = pd.getModule();
+        BundleRevisionImpl module = (BundleRevisionImpl) pd.getRevision();
 
         if (bundle.getBundleId() == 0)
         {
@@ -98,7 +97,7 @@
         if (m_pai != null)
         {
             result = m_pai.hasPermission(bundle._getLocation(), pd.getBundle(),
-                permission, m_cpai, pd, bundle.getCurrentModule().getContent());
+                permission, m_cpai, pd, module.getContent());
         }
 
         if (result != null)
diff --git a/framework.security/src/main/java/org/apache/felix/framework/security/condpermadmin/ConditionalPermissionAdminImpl.java b/framework.security/src/main/java/org/apache/felix/framework/security/condpermadmin/ConditionalPermissionAdminImpl.java
index 06aa6d3..aff71aa 100644
--- a/framework.security/src/main/java/org/apache/felix/framework/security/condpermadmin/ConditionalPermissionAdminImpl.java
+++ b/framework.security/src/main/java/org/apache/felix/framework/security/condpermadmin/ConditionalPermissionAdminImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.felix.framework.security.condpermadmin;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.math.BigInteger;
@@ -49,6 +50,7 @@
 import java.util.Map.Entry;
 
 import org.apache.felix.framework.BundleProtectionDomain;
+import org.apache.felix.framework.BundleRevisionImpl;
 import org.apache.felix.framework.security.permissionadmin.PermissionAdminImpl;
 import org.apache.felix.framework.security.util.Conditions;
 import org.apache.felix.framework.security.util.LocalPermissions;
@@ -63,11 +65,7 @@
 import org.apache.felix.moduleloader.IRequirement;
 import org.apache.felix.moduleloader.IWire;
 */
-import org.apache.felix.framework.capabilityset.Capability;
-import org.apache.felix.framework.capabilityset.Requirement;
-import org.apache.felix.framework.resolver.Content;
-import org.apache.felix.framework.resolver.Module;
-import org.apache.felix.framework.resolver.Wire;
+import org.apache.felix.framework.cache.Content;
 
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -457,6 +455,21 @@
         {
             return System.identityHashCode(this);
         }
+
+		public int compareTo(Bundle o) {
+			// TODO Auto-generated method stub
+			return 0;
+		}
+
+		public <A> A adapt(Class<A> arg0) {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public File getDataFile(String arg0) {
+			// TODO Auto-generated method stub
+			return null;
+		}
     }
 
     private static class FakeCert extends X509Certificate
@@ -662,132 +675,7 @@
                 {
                     return result.booleanValue();
                 }
-                if (eval(posts, new Module()
-                {
-
-                    public Bundle getBundle()
-                    {
-                        return fake;
-                    }
-
-                    public List<Capability> getCapabilities()
-                    {
-                        return null;
-                    }
-
-                    public Class getClassByDelegation(String arg0)
-                        throws ClassNotFoundException
-                    {
-                        return null;
-                    }
-
-                    public Content getContent()
-                    {
-                        return null;
-                    }
-
-                    public int getDeclaredActivationPolicy()
-                    {
-                        return 0;
-                    }
-
-                    public List<Requirement> getDynamicRequirements()
-                    {
-                        return null;
-                    }
-
-                    public URL getEntry(String arg0)
-                    {
-                        return null;
-                    }
-
-                    public Map getHeaders()
-                    {
-                        return null;
-                    }
-
-                    public String getId()
-                    {
-                        return null;
-                    }
-
-                    public InputStream getInputStream(int arg0, String arg1)
-                        throws IOException
-                    {
-                        return null;
-                    }
-
-                    public List<R4Library> getNativeLibraries()
-                    {
-                        return null;
-                    }
-
-                    public List<Requirement> getRequirements()
-                    {
-                        return null;
-                    }
-
-                    public URL getResourceByDelegation(String arg0)
-                    {
-                        return null;
-                    }
-
-                    public Enumeration getResourcesByDelegation(String arg0)
-                    {
-                        return null;
-                    }
-
-                    public Object getSecurityContext()
-                    {
-                        return null;
-                    }
-
-                    public String getSymbolicName()
-                    {
-                        return null;
-                    }
-
-                    public Version getVersion()
-                    {
-                        return null;
-                    }
-
-                    public List<Wire> getWires()
-                    {
-                        return null;
-                    }
-
-                    public boolean hasInputStream(int arg0, String arg1)
-                        throws IOException
-                    {
-                        return false;
-                    }
-
-                    public boolean isExtension()
-                    {
-                        return false;
-                    }
-
-                    public boolean isResolved()
-                    {
-                        return false;
-                    }
-
-                    public void setSecurityContext(Object arg0)
-                    {
-                    }
-
-                    public URL getLocalURL(int arg0, String arg1)
-                    {
-                        // TODO Auto-generated method stub
-                        return null;
-                    }
-
-                    public boolean isRemovalPending()
-                    {
-                        return false;
-                    }
-                }, permission, m_pai))
+                if (eval(posts, new BundleRevisionImpl(fake, Long.toString(fake.getBundleId())), permission, m_pai))
                 {
                     if (!posts.isEmpty())
                     {
@@ -940,7 +828,7 @@
      * @return true in case the permission is granted or there are postponed
      *         tuples false if not. Again, see the spec for more explanations.
      */
-    public boolean hasPermission(Module module, Content content,
+    public boolean hasPermission(BundleRevisionImpl module, Content content,
         ProtectionDomain pd, Permission permission, boolean direct, Object admin)
     {
         // System.out.println(felixBundle + "-" + permission);
@@ -1043,7 +931,7 @@
     // then we make sure their permissions imply the permission and add them
     // to the list of posts. Return true in case we pass or have posts
     // else falls and clear the posts first.
-    private boolean eval(List posts, Module module, Permission permission,
+    private boolean eval(List posts, BundleRevisionImpl module, Permission permission,
         Object admin)
     {
         List condPermInfos = null;
diff --git a/framework.security/src/main/java/org/apache/felix/framework/security/permissionadmin/PermissionAdminImpl.java b/framework.security/src/main/java/org/apache/felix/framework/security/permissionadmin/PermissionAdminImpl.java
index 07088ee..92617d8 100644
--- a/framework.security/src/main/java/org/apache/felix/framework/security/permissionadmin/PermissionAdminImpl.java
+++ b/framework.security/src/main/java/org/apache/felix/framework/security/permissionadmin/PermissionAdminImpl.java
@@ -32,7 +32,7 @@
 import org.apache.felix.framework.security.util.PropertiesCache;
 
 //import org.apache.felix.moduleloader.IContent;
-import org.apache.felix.framework.resolver.Content;
+import org.apache.felix.framework.cache.Content;
 
 import org.osgi.framework.Bundle;
 import org.osgi.service.permissionadmin.PermissionAdmin;
diff --git a/framework.security/src/main/java/org/apache/felix/framework/security/util/BundleInputStream.java b/framework.security/src/main/java/org/apache/felix/framework/security/util/BundleInputStream.java
index d4d8f76..c0eac02 100644
--- a/framework.security/src/main/java/org/apache/felix/framework/security/util/BundleInputStream.java
+++ b/framework.security/src/main/java/org/apache/felix/framework/security/util/BundleInputStream.java
@@ -31,7 +31,7 @@
 import java.util.jar.JarOutputStream;
 
 //import org.apache.felix.moduleloader.IContent;
-import org.apache.felix.framework.resolver.Content;
+import org.apache.felix.framework.cache.Content;
 
 /**
  * This class makes a given content available as a inputstream with a jar
diff --git a/framework.security/src/main/java/org/apache/felix/framework/security/util/Conditions.java b/framework.security/src/main/java/org/apache/felix/framework/security/util/Conditions.java
index 8c4ee37..485652c 100644
--- a/framework.security/src/main/java/org/apache/felix/framework/security/util/Conditions.java
+++ b/framework.security/src/main/java/org/apache/felix/framework/security/util/Conditions.java
@@ -28,12 +28,9 @@
 import java.util.Map;
 import java.util.WeakHashMap;
 
+import org.apache.felix.framework.BundleRevisionImpl;
 import org.apache.felix.framework.security.condpermadmin.ConditionalPermissionInfoImpl;
 import org.apache.felix.framework.util.SecureAction;
-
-//import org.apache.felix.moduleloader.IModule;
-import org.apache.felix.framework.resolver.Module;
-
 import org.osgi.framework.Bundle;
 import org.osgi.service.condpermadmin.Condition;
 import org.osgi.service.condpermadmin.ConditionInfo;
@@ -50,7 +47,7 @@
 
     private final Map m_cache = new WeakHashMap();
 
-    private final Module m_module;
+    private final BundleRevisionImpl m_module;
 
     private final ConditionInfo[] m_conditionInfos;
     private final Condition[] m_conditions;
@@ -61,7 +58,7 @@
         this(null, null, action);
     }
 
-    private Conditions(Module module, ConditionInfo[] conditionInfos,
+    private Conditions(BundleRevisionImpl module, ConditionInfo[] conditionInfos,
         SecureAction action)
     {
         m_module = module;
@@ -95,7 +92,7 @@
         m_action = action;
     }
 
-    public Conditions getConditions(Module key, ConditionInfo[] conditions)
+    public Conditions getConditions(BundleRevisionImpl key, ConditionInfo[] conditions)
     {
         Conditions result = null;
         Map index = null;
diff --git a/framework.security/src/main/java/org/apache/felix/framework/security/util/LocalPermissions.java b/framework.security/src/main/java/org/apache/felix/framework/security/util/LocalPermissions.java
index 18331d1..4f921c3 100644
--- a/framework.security/src/main/java/org/apache/felix/framework/security/util/LocalPermissions.java
+++ b/framework.security/src/main/java/org/apache/felix/framework/security/util/LocalPermissions.java
@@ -29,7 +29,7 @@
 import java.util.WeakHashMap;
 
 //import org.apache.felix.moduleloader.IContent;
-import org.apache.felix.framework.resolver.Content;
+import org.apache.felix.framework.cache.Content;
 import org.osgi.framework.Bundle;
 import org.osgi.service.permissionadmin.PermissionInfo;
 
diff --git a/framework.security/src/main/java/org/apache/felix/framework/security/verifier/BundleDNParser.java b/framework.security/src/main/java/org/apache/felix/framework/security/verifier/BundleDNParser.java
index da14faa..8eb555a 100644
--- a/framework.security/src/main/java/org/apache/felix/framework/security/verifier/BundleDNParser.java
+++ b/framework.security/src/main/java/org/apache/felix/framework/security/verifier/BundleDNParser.java
@@ -34,14 +34,14 @@
 import java.util.jar.JarEntry;
 import java.util.jar.JarInputStream;
 
+import org.apache.felix.framework.BundleRevisionImpl;
 import org.apache.felix.framework.security.util.BundleInputStream;
 import org.apache.felix.framework.security.util.TrustManager;
 /*
 import org.apache.felix.moduleloader.IContent;
 import org.apache.felix.moduleloader.IModule;
 */
-import org.apache.felix.framework.resolver.Content;
-import org.apache.felix.framework.resolver.Module;
+import org.apache.felix.framework.cache.Content;
 
 
 import org.osgi.framework.Bundle;
@@ -104,7 +104,7 @@
         }
     }
 
-    public void checkDNChains(Module root, Content content, int signersType)
+    public void checkDNChains(BundleRevisionImpl root, Content content, int signersType)
         throws Exception
     {
         if (signersType == Bundle.SIGNERS_TRUSTED)
@@ -171,7 +171,7 @@
         }
     }
 
-    public Map getDNChains(Module root, Content bundleRevision,
+    public Map getDNChains(BundleRevisionImpl root, Content bundleRevision,
         int signersType)
     {
         if (signersType == Bundle.SIGNERS_TRUSTED)
