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 2264826..7b08d04 100644
--- a/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
+++ b/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
@@ -1798,32 +1798,20 @@
                         if (!cand.getNamespace().startsWith("osgi.wiring.")
                             || !resource.equals(cand.getResource()))
                         {
-                            // If we don't already have wires for the candidate,
-                            // then recursively populate them.
-                            if (!rc.getWirings().containsKey(cand.getResource()))
-                            {
-                                // Need to special case the candidate for identity
-                                // capabilities since it may be from a fragment and
-                                // we don't want to populate wires for the fragment,
-                                // but rather the host to which it is attached.
-                                Resource targetCand = cand.getResource();
-                                if (IdentityNamespace.IDENTITY_NAMESPACE.equals(cand.getNamespace())
-                                    && Util.isFragment(targetCand))
-                                {
-                                    targetCand = allCandidates.getFirstCandidate(
-                                            targetCand.getRequirements(HostNamespace.HOST_NAMESPACE).get(0))
-                                            .getResource();
-                                    targetCand = allCandidates.getWrappedHost(targetCand);
-                                }
-
-                                populateWireMap(rc, targetCand,
+                            // Populate wires for the candidate
+                            populateWireMap(rc, cand.getResource(),
                                     resourcePkgMap, wireMap, allCandidates);
-                            }
 
+                            Resource provider;
+                            if (req.getNamespace().equals(IdentityNamespace.IDENTITY_NAMESPACE)) {
+                                provider = getDeclaredCapability(cand).getResource();
+                            } else {
+                                provider = getDeclaredResource(cand.getResource());
+                            }
                             Wire wire = new WireImpl(
                                 unwrappedResource,
                                 getDeclaredRequirement(req),
-                                getDeclaredResource(cand.getResource()),
+                                provider,
                                 getDeclaredCapability(cand));
                             if (req.getNamespace().equals(PackageNamespace.PACKAGE_NAMESPACE))
                             {
diff --git a/resolver/src/main/java/org/apache/felix/resolver/WrappedResource.java b/resolver/src/main/java/org/apache/felix/resolver/WrappedResource.java
index e37d234..3f80ae3 100644
--- a/resolver/src/main/java/org/apache/felix/resolver/WrappedResource.java
+++ b/resolver/src/main/java/org/apache/felix/resolver/WrappedResource.java
@@ -70,13 +70,7 @@
                 {
                     for (Capability cap : fragment.getCapabilities(namespace))
                     {
-                        // Filter out identity capabilities, since they
-                        // are not part of the fragment payload.
-                        if (!cap.getNamespace()
-                            .equals(IdentityNamespace.IDENTITY_NAMESPACE))
-                        {
-                            caps.add(new WrappedCapability(this,  cap));
-                        }
+                        caps.add(new WrappedCapability(this,  cap));
                     }
                 }
             }
diff --git a/resolver/src/test/java/org/apache/felix/resolver/test/FELIX_4914_Test.java b/resolver/src/test/java/org/apache/felix/resolver/test/FELIX_4914_Test.java
index 043cb9a..6d6c4d2 100644
--- a/resolver/src/test/java/org/apache/felix/resolver/test/FELIX_4914_Test.java
+++ b/resolver/src/test/java/org/apache/felix/resolver/test/FELIX_4914_Test.java
@@ -33,7 +33,6 @@
 import org.apache.felix.resolver.test.util.JsonReader;
 import org.apache.felix.resolver.test.util.ResolveContextImpl;
 import org.apache.felix.resolver.test.util.SimpleFilter;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.osgi.framework.BundleException;
 import org.osgi.framework.Constants;
@@ -47,7 +46,6 @@
 public class FELIX_4914_Test extends TestCase {
 
     @Test
-    @Ignore
     public void testResolution() throws Exception {
         BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/felix-4914.json")));
         Map<String, Object> resolution = (Map<String, Object>) JsonReader.read(reader);
