diff --git a/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java b/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
index cf7daa0..211e5e2 100644
--- a/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
+++ b/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
@@ -40,7 +40,6 @@
 
 import org.apache.felix.resolver.util.ArrayMap;
 import org.apache.felix.resolver.util.OpenHashMap;
-
 import org.osgi.framework.namespace.BundleNamespace;
 import org.osgi.framework.namespace.ExecutionEnvironmentNamespace;
 import org.osgi.framework.namespace.HostNamespace;
@@ -1730,12 +1729,12 @@
         }
 
         Set<Capability> packageSources = sources.get(cap);
-        if(packageSources == null) 
+        if(packageSources == null)
         {
             return new HashSet<Capability>();
         }
 
-        return packageSources;  
+        return packageSources;
     }
 
     private static void getPackageSourcesInternal(
@@ -2074,7 +2073,7 @@
         }
     }
 
-    private static class Packages
+    public static class Packages
     {
         public final OpenHashMap<String, Blame> m_exportedPkgs;
         public final OpenHashMap<String, List<Blame>> m_importedPkgs;
diff --git a/resolver/src/test/java/org/apache/felix/resolver/test/ResolverTest.java b/resolver/src/test/java/org/apache/felix/resolver/test/ResolverTest.java
index 55580fd..11e518f 100644
--- a/resolver/src/test/java/org/apache/felix/resolver/test/ResolverTest.java
+++ b/resolver/src/test/java/org/apache/felix/resolver/test/ResolverTest.java
@@ -23,6 +23,7 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -30,6 +31,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.felix.resolver.Logger;
 import org.apache.felix.resolver.ResolverImpl;
@@ -42,6 +44,7 @@
 import org.apache.felix.resolver.test.util.ResolveContextImpl;
 import org.apache.felix.resolver.test.util.ResourceImpl;
 import org.junit.Test;
+import org.mockito.Mockito;
 import org.osgi.framework.Constants;
 import org.osgi.framework.namespace.BundleNamespace;
 import org.osgi.framework.namespace.HostNamespace;
@@ -577,6 +580,37 @@
         assertEquals(0, wireMap.size());
     }
 
+    @Test
+    public void testPackageSources() throws Exception {
+        Method m = ResolverImpl.class.getDeclaredMethod("getPackageSources",
+                Capability.class, Map.class);
+        m.setAccessible(true);
+
+        Capability cap = Mockito.mock(Capability.class);
+        assertEquals(Collections.emptySet(),
+                m.invoke(null, cap, new HashMap<Resource, ResolverImpl.Packages>()));
+
+        Capability cap2 = Mockito.mock(Capability.class);
+        Resource res2 = Mockito.mock(Resource.class);
+        Mockito.when(cap2.getResource()).thenReturn(res2);
+        Map<Resource, ResolverImpl.Packages> map2 = new HashMap<Resource, ResolverImpl.Packages>();
+        map2.put(res2, new ResolverImpl.Packages(res2));
+        assertEquals(Collections.emptySet(), m.invoke(null, cap2, map2));
+
+        Capability cap3 = Mockito.mock(Capability.class);
+        Resource res3 = Mockito.mock(Resource.class);
+        Mockito.when(cap3.getResource()).thenReturn(res3);
+        Map<Resource, ResolverImpl.Packages> map3 = new HashMap<Resource, ResolverImpl.Packages>();
+        ResolverImpl.Packages pkgs3 = new ResolverImpl.Packages(res3);
+        Set<Capability> srcCaps3 = Collections.singleton(Mockito.mock(Capability.class));
+        Map<Capability, Set<Capability>> srcMap3 = Collections.singletonMap(
+                cap3, srcCaps3);
+        pkgs3.m_sources.putAll(srcMap3);
+        map3.put(res3, pkgs3);
+        assertEquals(srcCaps3, m.invoke(null, cap3, map3));
+
+    }
+
     private static String getResourceName(Resource r)
     {
         return r.getCapabilities(IdentityNamespace.IDENTITY_NAMESPACE).get(0).getAttributes()
