diff --git a/framework/src/main/java/org/apache/felix/framework/StatefulResolver.java b/framework/src/main/java/org/apache/felix/framework/StatefulResolver.java
index cea167e..c099f15 100644
--- a/framework/src/main/java/org/apache/felix/framework/StatefulResolver.java
+++ b/framework/src/main/java/org/apache/felix/framework/StatefulResolver.java
@@ -1021,7 +1021,19 @@
 
         synchronized Set<BundleRevision> getFragments()
         {
-            return new HashSet(m_fragments);
+            Set<BundleRevision> fragments = new HashSet(m_fragments);
+            // Filter out any fragments that are not the current revision.
+            for (Iterator<BundleRevision> it = fragments.iterator(); it.hasNext(); )
+            {
+                BundleRevision fragment = it.next();
+                BundleRevision currentFragmentRevision =
+                    fragment.getBundle().adapt(BundleRevision.class);
+                if (fragment != currentFragmentRevision)
+                {
+                    it.remove();
+                }
+            }
+            return fragments;
         }
 
         synchronized boolean isSelectedSingleton(BundleRevision br)
@@ -1278,12 +1290,16 @@
 
                 // Find the matching candidates.
                 Set<BundleCapability> matches = capSet.match(sf, obeyMandatory);
+                // Filter matching candidates.
                 for (BundleCapability cap : matches)
                 {
+                    // Filter according to security.
                     if (filteredBySecurity(req, cap))
                     {
                         continue;
                     }
+                    // Filter already resolved hosts, since we don't support
+                    // dynamic attachment of fragments.
                     if (req.getNamespace().equals(BundleRevision.HOST_NAMESPACE)
                         && (cap.getRevision().getWiring() != null))
                     {
@@ -1331,7 +1347,8 @@
             return result;
         }
 
-        private boolean filteredBySecurity(BundleRequirement req, BundleCapability cap) {
+        private boolean filteredBySecurity(BundleRequirement req, BundleCapability cap)
+        {
             if (System.getSecurityManager() != null)
             {
                 BundleRevisionImpl reqRevision = (BundleRevisionImpl) req.getRevision();
diff --git a/framework/src/main/java/org/apache/felix/framework/resolver/Candidates.java b/framework/src/main/java/org/apache/felix/framework/resolver/Candidates.java
index 0d0b032..a411bcb 100644
--- a/framework/src/main/java/org/apache/felix/framework/resolver/Candidates.java
+++ b/framework/src/main/java/org/apache/felix/framework/resolver/Candidates.java
@@ -646,14 +646,10 @@
                 {
                     for (BundleRequirement hostReq : versionEntry.getValue())
                     {
-                        // Select the highest version of the fragment that
-                        // is not removal pending. If the fragment revision
-                        // is removal pending, then its current revision will
-                        // be null or won't match the existing revision.
-                        BundleRevision currentFragmentRevision =
-                            hostReq.getRevision().getBundle()
-                                .adapt(BundleRevision.class);
-                        if (isFirst && (currentFragmentRevision == hostReq.getRevision()))
+                        // Selecting the first fragment in each entry, which
+                        // is equivalent to selecting the highest version of
+                        // each fragment with a given symbolic name.
+                        if (isFirst)
                         {
                             selectedFragments.add(hostReq.getRevision());
                             isFirst = false;
