diff --git a/geronimo-validation_2.0_spec/pom.xml b/geronimo-validation_2.0_spec/pom.xml
index cfaac6d..c86cd4b 100644
--- a/geronimo-validation_2.0_spec/pom.xml
+++ b/geronimo-validation_2.0_spec/pom.xml
@@ -59,15 +59,6 @@
         <url>http://svn.apache.org/viewcvs.cgi/geronimo/specs/trunk/geronimo-validation_1.1_spec/</url>
     </scm>
 
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-osgi-locator</artifactId>
-            <version>1.0</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
     <build>
         <pluginManagement>
             <plugins>
@@ -111,13 +102,14 @@
                         <Specification-Vendor>Sun Microsystems, Inc.</Specification-Vendor>
                         <Specification-Version>2.0</Specification-Version>
                         <Export-Package>javax.validation*;version=2.0</Export-Package>
-                        <Import-Package>org.apache.geronimo.osgi.registry.api;resolution:=optional,*</Import-Package>
-                        <Private-Package>org.apache.geronimo.osgi.locator</Private-Package>
-                        <Bundle-Activator>org.apache.geronimo.osgi.locator.Activator</Bundle-Activator>
                         <Automatic-Module-Name>java.validation</Automatic-Module-Name>
                         <Provide-Capability><![CDATA[
                            osgi.contract;osgi.contract=JavaBeanValidation;uses:="${packages;NAMED;javax.*}";version:List<Version>='2.0,1.1,1.0'
                         ]]></Provide-Capability>
+                        <Require-Capability><![CDATA[
+                          osgi.serviceloader;filter:="(osgi.serviceloader=javax.validation.spi.ValidationProvider)";cardinality:=multiple,
+                          osgi.extender;filter:="(osgi.extender=osgi.serviceloader.processor)"
+                        ]]></Require-Capability>
                     </instructions>
                 </configuration>
             </plugin>
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/Validation.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/Validation.java
index a73bea6..50afe52 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/Validation.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/Validation.java
@@ -16,8 +16,6 @@
  */
 package javax.validation;
 
-import org.apache.geronimo.osgi.locator.ProviderLocator;
-
 import javax.validation.bootstrap.GenericBootstrap;
 import javax.validation.bootstrap.ProviderSpecificBootstrap;
 import javax.validation.spi.BootstrapState;
@@ -26,6 +24,7 @@
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.ServiceLoader;
 import java.util.WeakHashMap;
 
 /**
@@ -200,23 +199,20 @@
             if (providers == null) {
                 // need to discover and load them for this class loader
                 providers = new ArrayList<>();
+                ClassLoader original = Thread.currentThread().getContextClassLoader();
                 try {
-                    List<Object> serviceProviders = ProviderLocator.getServices(ValidationProvider.class.getName(), this.getClass(), cl);
-                    for (Object provider : serviceProviders) {
-                        // create an instance to return
-                        providers.add((ValidationProvider<?>) provider);
+                    Thread.currentThread().setContextClassLoader(cl);
+                    for (ValidationProvider<?> validationProvider : ServiceLoader.load(ValidationProvider.class)) {
+                        providers.add(validationProvider);
                     }
-                } catch (ClassNotFoundException e) {
-                    throw new ValidationException("Failed to load provider", e);
-                } catch (InstantiationException e) {
-                    throw new ValidationException("Failed to instantiate provider", e);
-                } catch (IllegalAccessException e) {
-                    throw new ValidationException("Failed to access provider", e);
                 } catch (ClassCastException e) {
                     throw new ValidationException("Invalid provider definition", e);
                 } catch (Exception e) {
                     throw new ValidationException("Failed to instantiate provider", e);
                 }
+                finally {
+                    Thread.currentThread().setContextClassLoader(original);
+                }
 
                 // cache the discovered providers
                 providerCache.put(cl, providers);
