diff --git a/continuum-base/continuum-scm/pom.xml b/continuum-base/continuum-scm/pom.xml
index e00d512..e5632c9 100644
--- a/continuum-base/continuum-scm/pom.xml
+++ b/continuum-base/continuum-scm/pom.xml
@@ -26,9 +26,13 @@
       <groupId>org.springframework</groupId>
       <artifactId>spring-context</artifactId>
       <version>${spring.version}</version>
-      <scope>test</scope>
     </dependency>
     <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-spring</artifactId>
+      <scope>test</scope>
+    </dependency>    
+    <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
       <version>1.5.0</version>
diff --git a/continuum-base/continuum-scm/src/main/java/org/apache/continuum/scm/manager/spring/ScmProviderFactoryBean.java b/continuum-base/continuum-scm/src/main/java/org/apache/continuum/scm/manager/spring/ScmProviderFactoryBean.java
new file mode 100644
index 0000000..84f8abc
--- /dev/null
+++ b/continuum-base/continuum-scm/src/main/java/org/apache/continuum/scm/manager/spring/ScmProviderFactoryBean.java
@@ -0,0 +1,66 @@
+package org.apache.continuum.scm.manager.spring;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.maven.scm.provider.ScmProvider;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.BeanFactoryUtils;
+import org.springframework.beans.factory.BeanInitializationException;
+import org.springframework.beans.factory.FactoryBean;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+
+/**
+ * <p>
+ * Factory bean to inject all beans of type {@link ScmProvider}
+ * </p>
+ * <p>
+ * <code>&lt;bean id="scmProviders" class="org.apache.continuum.scm.manager.spring.ScmManagerFactoryBean"/>
+ </code>
+ * </p>
+ * 
+ * @author Carlos Sanchez <carlos@apache.org>
+ */
+public class ScmProviderFactoryBean
+    implements FactoryBean, ApplicationContextAware
+{
+    private ApplicationContext applicationContext;
+
+    public Object getObject()
+        throws Exception
+    {
+        Map<String, ScmProvider> providers = new HashMap<String, ScmProvider>();
+        Map<String, ScmProvider> beans =
+            BeanFactoryUtils.beansOfTypeIncludingAncestors( applicationContext, ScmProvider.class );
+        for ( ScmProvider provider : beans.values() )
+        {
+            if ( providers.containsKey( provider.getScmType() ) )
+            {
+                throw new BeanInitializationException(
+                                                       "There are to ScmProvider beans in the appllication context for Scm type " +
+                                                           provider.getScmType() +
+                                                           ". Probably two conflicting scm implementations are present in the classpath." );
+            }
+            providers.put( provider.getScmType(), provider );
+        }
+        return providers;
+    }
+
+    public Class getObjectType()
+    {
+        return Map.class;
+    }
+
+    public boolean isSingleton()
+    {
+        return true;
+    }
+
+    public void setApplicationContext( ApplicationContext applicationContext )
+        throws BeansException
+    {
+        this.applicationContext = applicationContext;
+    }
+
+}
diff --git a/continuum-base/continuum-scm/src/test/java/org/apache/continuum/scm/manager/ScmManagerTest.java b/continuum-base/continuum-scm/src/test/java/org/apache/continuum/scm/manager/ScmManagerTest.java
index 3aa79d3..8bef9ca 100644
--- a/continuum-base/continuum-scm/src/test/java/org/apache/continuum/scm/manager/ScmManagerTest.java
+++ b/continuum-base/continuum-scm/src/test/java/org/apache/continuum/scm/manager/ScmManagerTest.java
@@ -19,12 +19,12 @@
  * under the License.
  */
 
-import org.apache.maven.scm.manager.NoSuchScmProviderException;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
 import junit.framework.TestCase;
 
+import org.apache.maven.scm.manager.NoSuchScmProviderException;
+import org.codehaus.plexus.spring.PlexusClassPathXmlApplicationContext;
+import org.springframework.context.ApplicationContext;
+
 /**
  * @todo replace with a spring integration test
  */
@@ -38,7 +38,8 @@
     public void setUp()
     {
         context =
-            new ClassPathXmlApplicationContext( new String[] { "classpath*:META-INF/spring-context.xml",
+            new PlexusClassPathXmlApplicationContext( new String[] { "classpath*:META-INF/spring-context.xml",
+                "classpath*:META-INF/plexus/components.xml",
                 "classpath*:" + getClass().getName().replace( '.', '/' ) + ".xml" } );
         manager = (ScmManager) context.getBean( "scmManager" );
     }
@@ -47,6 +48,6 @@
         throws NoSuchScmProviderException
     {
         manager.getScmLogger().info( "Hello, World" );
-        assertNotNull( manager.getProviderByType( "svnexe" ) );
+        assertNotNull( manager.getProviderByType( "svn" ) );
     }
 }
diff --git a/continuum-base/continuum-scm/src/test/resources/org/apache/continuum/scm/manager/ScmManagerTest.xml b/continuum-base/continuum-scm/src/test/resources/org/apache/continuum/scm/manager/ScmManagerTest.xml
index 782680d..0b946d3 100644
--- a/continuum-base/continuum-scm/src/test/resources/org/apache/continuum/scm/manager/ScmManagerTest.xml
+++ b/continuum-base/continuum-scm/src/test/resources/org/apache/continuum/scm/manager/ScmManagerTest.xml
@@ -6,15 +6,9 @@
 
   <bean id="scmManager"
     class="org.apache.continuum.scm.manager.ScmManager">
-    <!--  TODO: better way to add the providers without having to redeclare all this? -->
     <property name="scmLogger" ref="scmLogger" />
     <property name="scmProviders">
-      <map>
-        <entry key="svnexe">
-          <bean
-            class="org.apache.maven.scm.provider.svn.svnexe.SvnExeScmProvider" />
-        </entry>
-      </map>
+      <bean class="org.apache.continuum.scm.manager.spring.ScmProviderFactoryBean"/>
     </property>
   </bean>
 </beans>
