diff --git a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/SigilCore.java b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/SigilCore.java
index b2b3fa8..80d9db4 100644
--- a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/SigilCore.java
+++ b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/SigilCore.java
@@ -40,6 +40,7 @@
 import org.apache.felix.sigil.eclipse.internal.model.project.SigilProject;
 import org.apache.felix.sigil.eclipse.internal.model.repository.RepositoryConfiguration;
 import org.apache.felix.sigil.eclipse.internal.repository.eclipse.GlobalRepositoryManager;
+import org.apache.felix.sigil.eclipse.internal.repository.eclipse.RepositoryMap;
 import org.apache.felix.sigil.eclipse.internal.repository.eclipse.SigilRepositoryManager;
 import org.apache.felix.sigil.eclipse.internal.resources.ProjectResourceListener;
 import org.apache.felix.sigil.eclipse.internal.resources.SigilProjectManager;
@@ -132,14 +133,13 @@
     private ServiceTracker descriptorTracker;
     private ServiceTracker registryTracker;
     private ServiceTracker serializerTracker;
-
     private static IRepositoryConfiguration repositoryConfig;
     private static SigilProjectManager projectManager;
     private static OSGiInstallManager installs;
     private static ISigilModelRoot modelRoot;
     private static HashMap<Object, SigilRepositoryManager> repositoryManagers = new HashMap<Object, SigilRepositoryManager>();
     private static GlobalRepositoryManager globalRepositoryManager;
-
+    private static RepositoryMap repositoryMap;
 
     /**
      * Returns the shared instance
@@ -277,7 +277,8 @@
 
         installs = new OSGiInstallManager();
 
-        globalRepositoryManager = new GlobalRepositoryManager();
+        repositoryMap = new RepositoryMap();
+        globalRepositoryManager = new GlobalRepositoryManager(repositoryMap);
         globalRepositoryManager.initialise();
         
         projectManager = new SigilProjectManager();
@@ -449,7 +450,7 @@
             manager = repositoryManagers.get( NULL );
             if ( manager == null )
             {
-                manager = new SigilRepositoryManager( null );
+                manager = new SigilRepositoryManager( null, repositoryMap );
                 manager.initialise();
                 repositoryManagers.put( NULL, manager );
             }
@@ -460,7 +461,7 @@
 
             if ( manager == null )
             {
-                manager = new SigilRepositoryManager( set );
+                manager = new SigilRepositoryManager( set, repositoryMap );
                 manager.initialise();
                 repositoryManagers.put( set, manager );
             }
diff --git a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/GlobalRepositoryManager.java b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/GlobalRepositoryManager.java
index 25d84ef..1ca31c7 100644
--- a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/GlobalRepositoryManager.java
+++ b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/GlobalRepositoryManager.java
@@ -31,9 +31,9 @@
 public class GlobalRepositoryManager extends SigilRepositoryManager implements IRepositoryManager
 {
 
-    public GlobalRepositoryManager()
+    public GlobalRepositoryManager(RepositoryMap map)
     {
-        super( null );
+        super( null, map );
     }
 
 
diff --git a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/RepositoryMap.java b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/RepositoryMap.java
new file mode 100644
index 0000000..5f3a5e7
--- /dev/null
+++ b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/RepositoryMap.java
@@ -0,0 +1,70 @@
+/*
+ * 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.felix.sigil.eclipse.internal.repository.eclipse;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Properties;
+
+import org.apache.felix.sigil.repository.IBundleRepository;
+
+public class RepositoryMap
+{
+    static class RepositoryCache
+    {
+        final Properties pref;
+        final IBundleRepository repo;
+
+
+        RepositoryCache( Properties pref, IBundleRepository repo )
+        {
+            this.pref = pref;
+            this.repo = repo;
+        }
+    }
+    
+    private HashMap<String, RepositoryCache> cachedRepositories = new HashMap<String, RepositoryCache>();
+
+    synchronized void retainAll(Collection<String> ids)
+    {
+        for ( Iterator<String> i = cachedRepositories.keySet().iterator(); i.hasNext(); )
+        {
+            if ( !ids.contains( i.next() ) )
+            {
+                i.remove();
+            }
+        }
+    }
+
+    synchronized RepositoryCache get(String id)
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    synchronized void put(String id, RepositoryCache cache)
+    {
+        // TODO Auto-generated method stub
+        
+    }
+
+
+}
diff --git a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/SigilRepositoryManager.java b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/SigilRepositoryManager.java
index 8a29575..3116b2c 100644
--- a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/SigilRepositoryManager.java
+++ b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/SigilRepositoryManager.java
@@ -24,12 +24,11 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Properties;
 
 import org.apache.felix.sigil.eclipse.SigilCore;
+import org.apache.felix.sigil.eclipse.internal.repository.eclipse.RepositoryMap.RepositoryCache;
 import org.apache.felix.sigil.eclipse.model.repository.IRepositoryModel;
 import org.apache.felix.sigil.eclipse.model.repository.IRepositorySet;
 import org.apache.felix.sigil.eclipse.model.repository.IRepositoryType;
@@ -55,25 +54,12 @@
 
     private final String repositorySet;
 
-    private HashMap<String, RepositoryCache> cachedRepositories = new HashMap<String, RepositoryCache>();
+    private RepositoryMap cachedRepositories;
 
-    class RepositoryCache
-    {
-        private final Properties pref;
-        private final IBundleRepository repo;
-
-
-        RepositoryCache( Properties pref, IBundleRepository repo )
-        {
-            this.pref = pref;
-            this.repo = repo;
-        }
-    }
-
-
-    public SigilRepositoryManager( String repositorySet )
+    public SigilRepositoryManager( String repositorySet, RepositoryMap cachedRepositories )
     {
         this.repositorySet = repositorySet;
+        this.cachedRepositories = cachedRepositories;
     }
 
 
@@ -134,13 +120,7 @@
 
         setRepositories( repos.toArray( new IBundleRepository[repos.size()] ) );
 
-        for ( Iterator<String> i = cachedRepositories.keySet().iterator(); i.hasNext(); )
-        {
-            if ( !ids.contains( i.next() ) )
-            {
-                i.remove();
-            }
-        }
+        cachedRepositories.retainAll( ids );
     }
 
 
