diff --git a/framework.security/pom.xml b/framework.security/pom.xml
index feb016d..cd44ab3 100644
--- a/framework.security/pom.xml
+++ b/framework.security/pom.xml
@@ -34,12 +34,12 @@
      <dependency>
       <groupId>${pom.groupId}</groupId>
       <artifactId>org.osgi.core</artifactId>
-      <version>1.1.0-SNAPSHOT</version>
+      <version>1.2.0</version>
     </dependency>
     <dependency>
       <groupId>${pom.groupId}</groupId>
       <artifactId>org.apache.felix.framework</artifactId>
-      <version>1.0.4</version>
+      <version>1.5.0-SNAPSHOT</version>
       <scope>provided</scope>
     </dependency>
   </dependencies>
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 bb31fff..58efc4c 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
@@ -68,8 +68,8 @@
         BundleInfo info = ((FelixBundle) bundle).getInfo();
 
         m_parser.checkDNChains(
-            (Long.toString(bundle.getBundleId()) + "-" + info.getArchive()
-                .getLastModified()), info.getCurrentModule().getContentLoader());
+            (Long.toString(bundle.getBundleId()) + "-" + info.getLastModified()), 
+            info.getCurrentModule().getContentLoader());
     }
 
     /**
@@ -77,8 +77,10 @@
      */
     public Object getSignerMatcher(final Bundle bundle)
     {
-        return new SignerMatcher(Long.toString(bundle.getBundleId()),
-            ((FelixBundle) bundle).getInfo().getArchive(), m_parser);
+        return new SignerMatcher(Long.toString(bundle.getBundleId()), 
+            ((FelixBundle) bundle).getInfo().getLastModified(),
+            ((FelixBundle) bundle).getInfo().getCurrentModule().getContentLoader(), 
+            m_parser);
     }
 
     /**
@@ -122,7 +124,7 @@
                 return m_cpai.hasPermission(bundle, 
                     info.getCurrentModule().getContentLoader(), 
                     bundle.getBundleId() + "-" + 
-                    info.getArchive().getLastModified(),null, pd,
+                    info.getLastModified(),null, pd,
                     permission, direct, m_pai);
             }
             catch (Exception e)
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 917dedd..39f9a01 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
@@ -30,6 +30,8 @@
 import java.util.Map;
 import java.util.Map.Entry;
 
+import org.apache.felix.framework.security.util.Permissions;
+import org.apache.felix.framework.security.util.PropertiesCache;
 import org.apache.felix.moduleloader.IContent;
 import org.apache.felix.moduleloader.IContentLoader;
 import org.osgi.framework.Bundle;
@@ -95,8 +97,6 @@
                 {
                     content = loader.getContent();
 
-                    content.open();
-
                     in = content.getEntryAsStream("OSGI-INF/permissions.perm");
                     if (in != null)
                     {
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 c50dcfc..73a751e 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
@@ -135,7 +135,7 @@
         }
     }
 
-    public String[] getDNChains(String root, BundleRevision bundleRevision)
+    public String[] getDNChains(String root, IContentLoader bundleRevision)
     {
         synchronized (m_cache)
         {
@@ -156,7 +156,6 @@
         try
         {
             content = bundleRevision.getContent();
-            content.open();
             result = _getDNChains(root, content);
         }
         catch (Exception ex)
@@ -181,7 +180,7 @@
         }
 
         return result;
-    }
+    } 
 
     private String[] _getDNChains(String root, IContent content)
         throws IOException
diff --git a/framework.security/src/main/java/org/apache/felix/framework/security/verifier/SignerMatcher.java b/framework.security/src/main/java/org/apache/felix/framework/security/verifier/SignerMatcher.java
index 19924e1..a2d6915 100644
--- a/framework.security/src/main/java/org/apache/felix/framework/security/verifier/SignerMatcher.java
+++ b/framework.security/src/main/java/org/apache/felix/framework/security/verifier/SignerMatcher.java
@@ -22,14 +22,16 @@
 import java.util.Locale;
 import java.util.Map;
 
-import org.apache.felix.framework.cache.BundleArchive;
+import org.apache.felix.moduleloader.IContentLoader;
+import org.apache.felix.moduleloader.IModule;
 
 public final class SignerMatcher
 {
     private final String m_filter;
     private final String m_root;
-    private final BundleArchive m_archive;
+    private final IContentLoader m_archive;
     private final BundleDNParser m_parser;
+    private final long m_lastModified;
     
     public SignerMatcher(String filter)
     {
@@ -37,14 +39,16 @@
         m_root = null;
         m_archive = null;
         m_parser = null;
+        m_lastModified = 0;
     }
     
-    public SignerMatcher(String root, BundleArchive archive, BundleDNParser parser)
+    public SignerMatcher(String root, long lastModified, IContentLoader archive, BundleDNParser parser)
     {
         m_filter = null;
         m_root = root;
         m_archive = archive;
         m_parser = parser;
+        m_lastModified = lastModified;
     }
 
     public boolean equals(Object o)
@@ -69,8 +73,7 @@
         String[] dns;
         try
         {
-            dns = m_parser.getDNChains(m_root + "-" + m_archive.getLastModified(), 
-                m_archive.getRevision(m_archive.getRevisionCount() -1));
+            dns = m_parser.getDNChains(m_root + "-" + m_lastModified, m_archive);
         }
         catch (Exception ex)
         {
