diff --git a/core/src/test/java/org/apache/sling/testing/mock/osgi/MockServiceReferencesSortTest.java b/core/src/test/java/org/apache/sling/testing/mock/osgi/MockServiceReferencesSortTest.java
index d639f66..42d9c97 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/osgi/MockServiceReferencesSortTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/osgi/MockServiceReferencesSortTest.java
@@ -88,6 +88,46 @@
         assertEquals("D", bundleContext.getService(bundleContext.getServiceReference(String.class)));
     }
 
+    @Test
+    public void testVolatileCollectionReference() {
+        OsgiServiceUtilTest.RankedService rankedServiceTen = new OsgiServiceUtilTest.RankedServiceTen();
+        bundleContext.registerService(OsgiServiceUtilTest.RankedService.class.getName(), rankedServiceTen , null);
+        MockOsgi.activate(rankedServiceTen, bundleContext);
+
+        OsgiServiceUtilTest.RankedService rankedServiceFive = new OsgiServiceUtilTest.RankedServiceFive();
+        bundleContext.registerService(OsgiServiceUtilTest.RankedService.class.getName(), rankedServiceFive, null);
+        MockOsgi.activate(rankedServiceFive, bundleContext);
+
+        OsgiServiceUtilTest.Service6VolatileMultipleReferences service6VolatileMultipleReferences = new OsgiServiceUtilTest.Service6VolatileMultipleReferences();
+        bundleContext.registerService(OsgiServiceUtilTest.Service6VolatileMultipleReferences.class.getName(), service6VolatileMultipleReferences, null);
+        MockOsgi.injectServices(service6VolatileMultipleReferences, bundleContext);
+
+        assertEquals("Should get highest when getting one service", rankedServiceTen, bundleContext.getService(bundleContext.getServiceReference(OsgiServiceUtilTest.RankedService.class)));
+        assertEquals("Should have order from lowest to highest on sorted ranked services", "RankedServiceFive=5RankedServiceTen=10", getSortedRankedServices());
+        assertEquals("Should have order from lowest to highest on volatile reference list", "RankedServiceFive=5RankedServiceTen=10", service6VolatileMultipleReferences.getRanks());
+    }
+
+    private String getSortedRankedServices() {
+        ServiceReference<?>[] refs = null;
+        try {
+            refs = bundleContext.getServiceReferences(OsgiServiceUtilTest.RankedService.class.getName(), null);
+        }
+        catch (InvalidSyntaxException ise) {
+            fail("Unexpected InvalidSyntaxException");
+        }
+        assertNotNull("Expecting our service references", refs);
+        Arrays.sort(refs);
+
+        final StringBuilder sb = new StringBuilder();
+        for(ServiceReference<?> ref : refs) {
+            OsgiServiceUtilTest.RankedService rankedService = (OsgiServiceUtilTest.RankedService)bundleContext.getService(ref);
+            sb.append(rankedService.getClass().getSimpleName()).append("=").append(rankedService.getRanking());
+            bundleContext.ungetService(ref);
+        }
+
+        return sb.toString();
+    }
+
     private ServiceRegistration<?> registerStringServiceWithoutRanking(String serviceValue) {
         return bundleContext.registerService(String.class, serviceValue, new Hashtable<String, Object>());
     }
diff --git a/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilTest.java b/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilTest.java
index e5939b3..d25a6db 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilTest.java
@@ -624,5 +624,64 @@
     public static class ServiceFactory1 {
         
     }
-        
+
+    public interface RankedService {
+        int getRanking();
+    }
+
+    @Component(
+            properties = {
+                    "service.ranking:Integer=5"
+            }
+    )
+    public static class RankedServiceFive implements RankedService {
+
+        private int ranking;
+
+        @Activate
+        public void activate(Map<String, Object> properties) {
+            this.ranking = (Integer) properties.get("service.ranking");
+        }
+
+        @Override
+        public int getRanking() {
+            return ranking;
+        }
+    }
+
+    @Component(
+            properties = {
+                    "service.ranking:Integer=10"
+            }
+    )
+    public static class RankedServiceTen implements RankedService {
+
+        private int ranking;
+
+        @Activate
+        public void activate(Map<String, Object> properties) {
+            this.ranking = (Integer) properties.get("service.ranking");
+        }
+
+        @Override
+        public int getRanking() {
+            return ranking;
+        }
+    }
+
+    @Component(service = Service6VolatileMultipleReferences.class)
+    public static class Service6VolatileMultipleReferences {
+
+        @Reference
+        private volatile List<RankedService> rankedServices;
+
+        public String getRanks() {
+            StringBuilder builder = new StringBuilder();
+            for(RankedService rankedService : rankedServices) {
+                builder.append(rankedService.getClass().getSimpleName()).append("=").append(rankedService.getRanking());
+            }
+            return builder.toString();
+        }
+    }
+
 }
diff --git a/core/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml b/core/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml
index 751c55f..c8e44f1 100644
--- a/core/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml
+++ b/core/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml
@@ -83,4 +83,25 @@
     </service>
     <property name="service.pid" value="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$ServiceFactory1"/>
   </scr:component>
+  <scr:component name="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$RankedServiceFive" activate="activate">
+    <property name="service.ranking" type="Integer" value="5"/>
+    <service>
+      <provide interface="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$RankedService"/>
+    </service>
+    <implementation class="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$RankedServiceFive"/>
+  </scr:component>
+  <scr:component name="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$RankedServiceTen" activate="activate">
+    <property name="service.ranking" type="Integer" value="10"/>
+    <service>
+      <provide interface="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$RankedService"/>
+    </service>
+    <implementation class="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$RankedServiceTen"/>
+  </scr:component>
+  <scr:component name="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$Service6VolatileMultipleReferences">
+    <service>
+      <provide interface="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$Service6VolatileMultipleReferences"/>
+    </service>
+    <reference name="rankedServices" cardinality="0..n" policy="dynamic" interface="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$RankedService" field="rankedServices" field-collection-type="service"/>
+    <implementation class="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$Service6VolatileMultipleReferences"/>
+  </scr:component>
 </components>
