diff --git a/framework.security/pom.xml b/framework.security/pom.xml
index d401403..603d252 100644
--- a/framework.security/pom.xml
+++ b/framework.security/pom.xml
@@ -40,7 +40,7 @@
     <dependency>
       <groupId>${pom.groupId}</groupId>
       <artifactId>org.apache.felix.framework</artifactId>
-      <version>3.0.2</version>
+      <version>3.1.0-SNAPSHOT</version>
       <scope>provided</scope>
     </dependency>
   </dependencies>
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 7414a74..3bef55e 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
@@ -54,7 +54,6 @@
 import org.apache.felix.framework.security.util.LocalPermissions;
 import org.apache.felix.framework.security.util.Permissions;
 import org.apache.felix.framework.security.util.PropertiesCache;
-import org.apache.felix.framework.util.IteratorToEnumeration;
 import org.apache.felix.framework.util.manifestparser.R4Library;
 
 /*
@@ -777,6 +776,12 @@
                     public void setSecurityContext(Object arg0)
                     {
                     }
+
+                    public URL getLocalURL(int arg0, String arg1)
+                    {
+                        // TODO Auto-generated method stub
+                        return null;
+                    }
                 }, permission, m_pai))
                 {
                     if (!posts.isEmpty())
@@ -818,8 +823,8 @@
     {
         synchronized (m_condPermInfos)
         {
-            return new IteratorToEnumeration((new ArrayList(m_condPermInfos
-                .values())).iterator());
+            return Collections.enumeration(new ArrayList(m_condPermInfos
+                .values()));
         }
     }
 
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 babbfbc..d4d8f76 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
@@ -24,12 +24,12 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Enumeration;
 import java.util.List;
 import java.util.jar.JarEntry;
 import java.util.jar.JarOutputStream;
 
-import org.apache.felix.framework.util.IteratorToEnumeration;
 //import org.apache.felix.moduleloader.IContent;
 import org.apache.felix.framework.resolver.Content;
 
@@ -77,7 +77,7 @@
         {
             manifest = "META-INF/MANIFEST.MF";
         }
-        m_content = new IteratorToEnumeration(entries.iterator());
+        m_content = Collections.enumeration(entries);
 
         try
         {
diff --git a/framework.security/src/main/java/org/apache/felix/framework/security/util/Permissions.java b/framework.security/src/main/java/org/apache/felix/framework/security/util/Permissions.java
index 651b2cd..4569594 100644
--- a/framework.security/src/main/java/org/apache/felix/framework/security/util/Permissions.java
+++ b/framework.security/src/main/java/org/apache/felix/framework/security/util/Permissions.java
@@ -34,6 +34,8 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Collections;
+import java.util.WeakHashMap;
 
 import org.apache.felix.framework.util.SecureAction;
 import org.osgi.framework.AdminPermission;
@@ -72,6 +74,8 @@
 
     private static final PermissionInfo[] IMPLICIT = new PermissionInfo[] { new PermissionInfo(
         FilePermission.class.getName(), "-", "read,write,delete") };
+		
+	private static volatile Map m_implicit = new WeakHashMap();
 
     Permissions(PermissionInfo[] permissionInfos, BundleContext context,
         SecureAction action)
@@ -105,14 +109,22 @@
 
     public PermissionInfo[] getImplicit(Bundle bundle)
     {
-        return new PermissionInfo[] {
-            IMPLICIT[0],
-            new PermissionInfo(AdminPermission.class.getName(), "(id="
-                + bundle.getBundleId() + ")", AdminPermission.METADATA),
-            new PermissionInfo(AdminPermission.class.getName(), "(id="
-                + bundle.getBundleId() + ")", AdminPermission.RESOURCE),
-            new PermissionInfo(AdminPermission.class.getName(), "(id="
-                + bundle.getBundleId() + ")", AdminPermission.CONTEXT) };
+	    PermissionInfo[] result = (PermissionInfo[]) m_implicit.get(bundle);
+		if (result == null)
+		{
+		    result = new PermissionInfo[] {
+                IMPLICIT[0],
+                new PermissionInfo(AdminPermission.class.getName(), "(id="
+                    + bundle.getBundleId() + ")", AdminPermission.METADATA),
+                new PermissionInfo(AdminPermission.class.getName(), "(id="
+                    + bundle.getBundleId() + ")", AdminPermission.RESOURCE),
+                new PermissionInfo(AdminPermission.class.getName(), "(id="
+                    + bundle.getBundleId() + ")", AdminPermission.CONTEXT) };
+			Map implicit = new WeakHashMap(m_implicit);
+		    implicit.put(bundle, result);
+			m_implicit = implicit;
+		}
+        return result;
     }
 
     public Permissions getPermissions(PermissionInfo[] permissionInfos)
@@ -230,31 +242,32 @@
 
         public boolean implies(Permission perm)
         {
-            Map perms = null;
+            Permission permission = null;
 
             synchronized (m_perms)
             {
-                perms = m_perms;
+                permission = (Permission) m_perms.get(perm);
             }
 
-            Permission permission = (Permission) perms.get(perm);
-
             if ((permission != null) && permission.implies(perm))
             {
                 return true;
             }
-
-            for (Iterator iter = perms.values().iterator(); iter.hasNext();)
-            {
-                Permission current = (Permission) iter.next();
-                if ((current != null) && (current != permission)
-                    && current.implies(perm))
+			
+			synchronized (m_perms) 
+			{
+                for (Iterator iter = m_perms.values().iterator(); iter.hasNext();)
                 {
-                    return true;
+                    Permission current = (Permission) iter.next();
+                    if ((current != null) && (current != permission)
+                        && current.implies(perm))
+                    {
+                        return true;
+                    }
                 }
+                return false;
             }
-            return false;
-        }
+		}
     }
 
     private void cleanUp(ReferenceQueue queue, Map cache)
