diff --git a/core/pom.xml b/core/pom.xml
index 566b240..61a1231 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -135,11 +135,6 @@
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
             <artifactId>spring-aop</artifactId>
             <scope>provided</scope>
             <optional>true</optional>
diff --git a/core/src/main/java/org/apache/cxf/annotations/FactoryType.java b/core/src/main/java/org/apache/cxf/annotations/FactoryType.java
index e9a83b7..50e4436 100644
--- a/core/src/main/java/org/apache/cxf/annotations/FactoryType.java
+++ b/core/src/main/java/org/apache/cxf/annotations/FactoryType.java
@@ -24,6 +24,9 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
+
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.service.invoker.Factory;
 /**
  * Defines the factory used for the service.
  * 
@@ -45,16 +48,21 @@
      *    1) The Class for the service
      *    2) String[] of the args from above 
      */
-    Class<?> factoryClass() default DEFAULT.class;
+    Class<? extends Factory> factoryClass() default DEFAULT.class;
     
     enum Type {
         Singleton,
         Session,
         Pooled, //args[0] is the size of the pool
         PerRequest,
-        Spring, //args[0] is the Spring bean name
     };
     
-    static final class DEFAULT { }
+    static final class DEFAULT implements Factory {
+        public Object create(Exchange e) throws Throwable {
+            return null;
+        }
+        public void release(Exchange e, Object o) {
+        } 
+    }
 }
 
diff --git a/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java b/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
index 655eb68..05ee510 100644
--- a/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
+++ b/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
@@ -53,7 +53,6 @@
 import org.apache.cxf.service.invoker.PooledFactory;
 import org.apache.cxf.service.invoker.SessionFactory;
 import org.apache.cxf.service.invoker.SingletonFactory;
-import org.apache.cxf.service.invoker.SpringBeanFactory;
 import org.apache.cxf.service.model.BindingFaultInfo;
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.FaultInfo;
@@ -190,16 +189,13 @@
                     case Pooled:
                         f = new PooledFactory(cls, Integer.parseInt(scope.args()[0]));
                         break;
-                    case Spring:
-                        f = new SpringBeanFactory(scope.args()[0]);
-                        break;
                     default:
                         f = new SingletonFactory(cls);
                         break;
                     }
                 } else {
                     try {
-                        f = (Factory)scope.factoryClass().getConstructor(Class.class, String[].class)
+                        f = scope.factoryClass().getConstructor(Class.class, String[].class)
                             .newInstance(cls, scope.args());
                     } catch (Throwable t) {
                         throw new ServiceConstructionException(t);
diff --git a/core/src/main/java/org/apache/cxf/service/invoker/SpringBeanFactory.java b/rt/spring/src/main/java/org/apache/cxf/service/invoker/spring/SpringBeanFactory.java
similarity index 88%
rename from core/src/main/java/org/apache/cxf/service/invoker/SpringBeanFactory.java
rename to rt/spring/src/main/java/org/apache/cxf/service/invoker/spring/SpringBeanFactory.java
index f942019..74e7182 100644
--- a/core/src/main/java/org/apache/cxf/service/invoker/SpringBeanFactory.java
+++ b/rt/spring/src/main/java/org/apache/cxf/service/invoker/spring/SpringBeanFactory.java
@@ -17,9 +17,10 @@
  * under the License.
  */
 
-package org.apache.cxf.service.invoker;
+package org.apache.cxf.service.invoker.spring;
 
 import org.apache.cxf.message.Exchange;
+import org.apache.cxf.service.invoker.Factory;
 import org.springframework.beans.BeansException;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
@@ -34,12 +35,15 @@
  * to pool the beans or the SessionFactory or similar.
  */
 public class SpringBeanFactory implements Factory, ApplicationContextAware {
-    ApplicationContext ctx;
-    String beanName;
+    volatile ApplicationContext ctx;
+    final String beanName;
     
     public SpringBeanFactory(String name) {
         beanName = name;
     }
+    public SpringBeanFactory(Class<?> cls, String args[]) {
+        beanName = args[0];
+    }
     
     /** {@inheritDoc}*/
     public Object create(Exchange e) throws Throwable {
diff --git a/systests/transports/src/test/java/org/apache/cxf/systest/http/SpringAnnotationGreeterImpl.java b/systests/transports/src/test/java/org/apache/cxf/systest/http/SpringAnnotationGreeterImpl.java
index c9a9b8b..c7265e7 100644
--- a/systests/transports/src/test/java/org/apache/cxf/systest/http/SpringAnnotationGreeterImpl.java
+++ b/systests/transports/src/test/java/org/apache/cxf/systest/http/SpringAnnotationGreeterImpl.java
@@ -24,18 +24,18 @@
 import javax.xml.ws.AsyncHandler;
 import javax.xml.ws.Response;
 
-
 import org.apache.cxf.annotations.FactoryType;
 import org.apache.cxf.greeter_control.Greeter;
 import org.apache.cxf.greeter_control.types.GreetMeResponse;
 import org.apache.cxf.greeter_control.types.PingMeResponse;
 import org.apache.cxf.greeter_control.types.SayHiResponse;
+import org.apache.cxf.service.invoker.spring.SpringBeanFactory;
 
 @WebService(serviceName = "GreeterService",
             portName = "GreeterPort",
             endpointInterface = "org.apache.cxf.greeter_control.Greeter", 
             targetNamespace = "http://cxf.apache.org/greeter_control")
-@FactoryType(value = FactoryType.Type.Spring, args = { "SpringBean" })
+@FactoryType(factoryClass = SpringBeanFactory.class, args = { "SpringBean" })
 public class SpringAnnotationGreeterImpl implements Greeter {
     String name;
     
