diff --git a/readme/README.txt b/readme/README.txt
index 68f05fa..ef117f1 100644
--- a/readme/README.txt
+++ b/readme/README.txt
@@ -145,13 +145,13 @@
     [OWB-1041] - Session id changes in tomcat integration are not propagated to session context manager
     [OWB-1042] - dependent producer resolution needs to consider raw types
     [OWB-1045] - WebContextsService#destroySession
+    [OWB-1046] - Starting transient conversation fails with jetty
 
 Improvement
 
     [OWB-652] - Introduce HierarchicBeanManager
     [OWB-755] - Move the instance creation into Producer.produce
     [OWB-763] - move our remaining tests from TestContext to AbstractUnitTest
-    [OWB-798] - expensive check in EventUtil#checkEventBindings
     [OWB-820] - cleanup of el resolvers
     [OWB-932] - skip validation of the cdi-api
     [OWB-937] - unify startup detection
diff --git a/webbeans-el22/src/test/java/org/apache/webbeans/el/test/ELPerformanceTest.java b/webbeans-el22/src/test/java/org/apache/webbeans/el/test/ELPerformanceTest.java
index c7900f2..c1d69bf 100644
--- a/webbeans-el22/src/test/java/org/apache/webbeans/el/test/ELPerformanceTest.java
+++ b/webbeans-el22/src/test/java/org/apache/webbeans/el/test/ELPerformanceTest.java
@@ -28,10 +28,13 @@
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.el22.WebBeansELResolver;
 import org.apache.webbeans.logger.WebBeansLoggerFacade;
+import org.apache.webbeans.spi.ContextsService;
 import org.junit.Assert;
 import org.junit.Test;
 
 import javax.el.ELContext;
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.context.SessionScoped;
 
 public class ELPerformanceTest extends AbstractUnitTest
 {
@@ -94,8 +97,9 @@
         @Override
         public void run()
         {
-            WebBeansContext.currentInstance().getContextFactory().initRequestContext(null);
-            WebBeansContext.currentInstance().getContextFactory().initSessionContext(null);
+            ContextsService contextsService = WebBeansContext.currentInstance().getContextsService();
+            contextsService.startContext(RequestScoped.class, null);
+            contextsService.startContext(SessionScoped.class, null);
 
             try
             {
@@ -114,8 +118,8 @@
             }
             finally
             {
-                WebBeansContext.currentInstance().getContextFactory().destroyRequestContext(null);
-                WebBeansContext.currentInstance().getContextFactory().destroySessionContext(null);
+                contextsService.endContext(RequestScoped.class, null);
+                contextsService.endContext(SessionScoped.class, null);
             }
         }
     }
diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java b/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java
index 89368cc..d0a7dee 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContext.java
@@ -28,7 +28,6 @@
 import org.apache.webbeans.annotation.AnnotationManager;
 import org.apache.webbeans.container.BeanManagerImpl;
 import org.apache.webbeans.container.SerializableBeanVault;
-import org.apache.webbeans.context.ContextFactory;
 import org.apache.webbeans.context.creational.CreationalContextFactory;
 import org.apache.webbeans.conversation.ConversationManager;
 import org.apache.webbeans.decorator.DecoratorsManager;
@@ -69,7 +68,6 @@
     private final Map<Class<?>, Object> serviceMap = new HashMap<Class<?>, Object>();
 
     private final WebBeansUtil webBeansUtil = new WebBeansUtil(this);
-    private final ContextFactory contextFactory = new ContextFactory(this);
     private final AlternativesManager alternativesManager = new AlternativesManager(this);
     private final AnnotatedElementFactory annotatedElementFactory = new AnnotatedElementFactory(this);
     private final BeanManagerImpl beanManagerImpl = new BeanManagerImpl(this);
@@ -243,12 +241,6 @@
         return webBeansUtil;
     }
 
-    @Deprecated
-    public ContextFactory getContextFactory()
-    {
-        return contextFactory;
-    }
-
     public AnnotationManager getAnnotationManager()
     {
         return annotationManager;
diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java b/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
index 372c0bd..3281a45 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
@@ -38,6 +38,7 @@
 import javax.enterprise.context.ContextNotActiveException;
 import javax.enterprise.context.Dependent;
 import javax.enterprise.context.NormalScope;
+import javax.enterprise.context.spi.AlterableContext;
 import javax.enterprise.context.spi.Context;
 import javax.enterprise.context.spi.Contextual;
 import javax.enterprise.context.spi.CreationalContext;
@@ -73,6 +74,8 @@
 import org.apache.webbeans.component.third.PassivationCapableThirdpartyBeanImpl;
 import org.apache.webbeans.component.third.ThirdpartyBeanImpl;
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.context.CustomAlterablePassivatingContextImpl;
+import org.apache.webbeans.context.CustomPassivatingContextImpl;
 import org.apache.webbeans.context.creational.CreationalContextImpl;
 import org.apache.webbeans.decorator.DecoratorComparator;
 import org.apache.webbeans.event.EventMetadataImpl;
@@ -416,13 +419,35 @@
 
     public BeanManager addContext(Context context)
     {
-        addContext(context.getScope(), webBeansContext.getContextFactory().getCustomContext(context));
+        addContext(context.getScope(), wrapCustomContext(context));
 
         return this;
 
     }
 
     /**
+     * If the context is passivating then we need to wrap it into a version which
+     * uses the {@link SerializableBeanVault }
+     */
+    public Context wrapCustomContext(Context context)
+    {
+        if (isPassivatingScope(context.getScope()))
+        {
+            if (context instanceof AlterableContext)
+            {
+                return new CustomAlterablePassivatingContextImpl(webBeansContext.getSerializableBeanVault(), (AlterableContext) context);
+            }
+            else
+            {
+                return new CustomPassivatingContextImpl(webBeansContext.getSerializableBeanVault(), context);
+            }
+        }
+
+        return context;
+    }
+
+
+    /**
      * {@inheritDoc}
      */
     @Override
diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java b/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
deleted file mode 100644
index 57f4928..0000000
--- a/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.webbeans.context;
-
-import java.lang.annotation.Annotation;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.context.ConversationScoped;
-import javax.enterprise.context.RequestScoped;
-import javax.enterprise.context.SessionScoped;
-import javax.enterprise.context.spi.AlterableContext;
-import javax.enterprise.context.spi.Context;
-import javax.inject.Singleton;
-import org.apache.webbeans.logger.WebBeansLoggerFacade;
-import org.apache.webbeans.spi.ContextsService;
-import org.apache.webbeans.config.WebBeansContext;
-
-/**
- * JSR-299 based standard context
- * related operations.
- * @deprecated user should use the ContextsService directly.
- */
-public final class ContextFactory
-{
-    /**Logger instance*/
-    private static final Logger logger = WebBeansLoggerFacade.getLogger(ContextFactory.class);
-    private final WebBeansContext webBeansContext;
-
-    private ContextsService contextsService = null;
-
-    public ContextFactory(WebBeansContext webBeansContext)
-    {
-        this.webBeansContext = webBeansContext;
-    }
-
-    /**
-     * @return the ContextService for the current ClassLoader
-     */
-    private ContextsService getContextsService()
-    {
-        if (contextsService == null)
-        {
-            contextsService = webBeansContext.getService(ContextsService.class);
-        }
-        return contextsService;
-    }
-
-    public void initRequestContext(Object request)
-    {
-        try
-        {
-            ContextsService contextService = getContextsService();
-            contextService.startContext(RequestScoped.class, request);
-        }
-        catch (Exception e)
-        {
-            logger.log(Level.SEVERE, e.getMessage(), e);
-        }
-    }
-
-    public Context getCustomContext(Context context)
-    {
-        if (webBeansContext.getBeanManagerImpl().isPassivatingScope(context.getScope()))
-        {
-            if (context instanceof AlterableContext)
-            {
-                return new CustomAlterablePassivatingContextImpl(webBeansContext.getSerializableBeanVault(), (AlterableContext) context);
-            }
-            else
-            {
-                return new CustomPassivatingContextImpl(webBeansContext.getSerializableBeanVault(), context);
-            }
-        }
-
-        return context;
-    }
-
-    public void destroyRequestContext(Object request)
-    {
-        ContextsService contextService = getContextsService();
-        contextService.endContext(RequestScoped.class, request);
-    }
-
-    public void initSessionContext(Object session)
-    {
-        try
-        {
-            ContextsService contextService = getContextsService();
-            contextService.startContext(SessionScoped.class, session);
-        }
-        catch (Exception e)
-        {
-            logger.log(Level.SEVERE, e.getMessage(), e);
-        }
-    }
-
-    public void destroySessionContext(Object session)
-    {
-        ContextsService contextService = getContextsService();
-        contextService.endContext(SessionScoped.class, session);
-    }
-
-    public void initApplicationContext(Object parameter)
-    {
-        try
-        {
-            ContextsService contextService = getContextsService();
-            contextService.startContext(ApplicationScoped.class, parameter);
-        }
-        catch (Exception e)
-        {
-            logger.log(Level.SEVERE, e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Destroys the application context and all of its components at the end of
-     * the application.
-     *
-     * @param parameter parameter object
-     */
-    public void destroyApplicationContext(Object parameter)
-    {
-        ContextsService contextService = getContextsService();
-        contextService.endContext(ApplicationScoped.class, parameter);
-    }
-
-    public void initSingletonContext(Object parameter)
-    {
-        try
-        {
-            ContextsService contextService = getContextsService();
-            contextService.startContext(Singleton.class, parameter);
-        }
-        catch (Exception e)
-        {
-            logger.log(Level.SEVERE, e.getMessage(), e);
-        }
-    }
-
-    public void destroySingletonContext(Object parameter)
-    {
-        ContextsService contextService = getContextsService();
-        contextService.endContext(Singleton.class, parameter);
-    }
-
-    public void initConversationContext(Object context)
-    {
-        try
-        {
-            ContextsService contextService = getContextsService();
-            contextService.startContext(ConversationScoped.class, context);
-        }
-        catch (Exception e)
-        {
-            logger.log(Level.SEVERE, e.getMessage(), e);
-        }
-    }
-
-    public void destroyConversationContext()
-    {
-        ContextsService contextService = getContextsService();
-        contextService.endContext(ConversationScoped.class, null);
-    }
-
-    /**
-     * Gets the standard context with given scope type.
-     *
-     * @return the current context, or <code>null</code> if no standard context exists for the given scopeType
-     */
-    public Context getStandardContext(Class<? extends Annotation> scopeType)
-    {
-        ContextsService contextService = getContextsService();
-
-        return contextService.getCurrentContext(scopeType);
-    }
-
-
-}
diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/context/CustomAlterablePassivatingContextImpl.java b/webbeans-impl/src/main/java/org/apache/webbeans/context/CustomAlterablePassivatingContextImpl.java
index 0cb873c..a2e12e4 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/context/CustomAlterablePassivatingContextImpl.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/context/CustomAlterablePassivatingContextImpl.java
@@ -28,7 +28,7 @@
  */
 public class CustomAlterablePassivatingContextImpl extends CustomPassivatingContextImpl implements AlterableContext
 {
-    CustomAlterablePassivatingContextImpl(SerializableBeanVault sbv, AlterableContext context)
+    public CustomAlterablePassivatingContextImpl(SerializableBeanVault sbv, AlterableContext context)
     {
         super(sbv, context);
     }
diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/context/CustomPassivatingContextImpl.java b/webbeans-impl/src/main/java/org/apache/webbeans/context/CustomPassivatingContextImpl.java
index 2f48c0b..b104c05 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/context/CustomPassivatingContextImpl.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/context/CustomPassivatingContextImpl.java
@@ -34,7 +34,7 @@
     protected final Context context;
 
 
-    CustomPassivatingContextImpl(SerializableBeanVault sbv, Context context)
+    public CustomPassivatingContextImpl(SerializableBeanVault sbv, Context context)
     {
         this.sbv = sbv;
         this.context = context;
diff --git a/webbeans-impl/src/test/java/org/apache/webbeans/test/contexts/SerializationTest.java b/webbeans-impl/src/test/java/org/apache/webbeans/test/contexts/SerializationTest.java
index 05c24a2..e7478f9 100644
--- a/webbeans-impl/src/test/java/org/apache/webbeans/test/contexts/SerializationTest.java
+++ b/webbeans-impl/src/test/java/org/apache/webbeans/test/contexts/SerializationTest.java
@@ -141,7 +141,7 @@
         
         // first we need to actually create a few instances
 
-        Context sessionContext = webBeansContext.getContextFactory().getStandardContext(SessionScoped.class);
+        Context sessionContext = webBeansContext.getBeanManagerImpl().getContext(SessionScoped.class);
         Assert.assertNotNull(sessionContext);
         byte[] ba = serializeObject(sessionContext);
         Assert.assertNotNull(ba);
diff --git a/webbeans-impl/src/test/java/org/apache/webbeans/test/decorators/tests/DecoratorAndInterceptorStackTests.java b/webbeans-impl/src/test/java/org/apache/webbeans/test/decorators/tests/DecoratorAndInterceptorStackTests.java
index 8bd1a46..bc17b9d 100644
--- a/webbeans-impl/src/test/java/org/apache/webbeans/test/decorators/tests/DecoratorAndInterceptorStackTests.java
+++ b/webbeans-impl/src/test/java/org/apache/webbeans/test/decorators/tests/DecoratorAndInterceptorStackTests.java
@@ -23,6 +23,7 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import javax.enterprise.context.RequestScoped;
 import javax.enterprise.inject.Default;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.util.AnnotationLiteral;
@@ -30,6 +31,7 @@
 import junit.framework.Assert;
 
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.ContextsService;
 import org.apache.webbeans.test.AbstractUnitTest;
 import org.apache.webbeans.test.decorators.multiple.Decorator1;
 import org.apache.webbeans.test.decorators.multiple.Decorator2;
@@ -132,10 +134,11 @@
         @Override
         public void run()
         {
+            ContextsService contextsService = WebBeansContext.currentInstance().getContextsService();
             try
             {
                 // this starts the RequestContext for this very thread
-                WebBeansContext.currentInstance().getContextFactory().initRequestContext(null);
+                contextsService.startContext(RequestScoped.class, null);
 
                 for (int i=0; i < 10; i++)
                 {
@@ -147,6 +150,7 @@
                 log.log(Level.SEVERE, "Error while executing Decorators in parallel!", e);
                 failed = true;
             }
+            contextsService.endContext(RequestScoped.class, null);
         }
 
         public boolean isFailed()
diff --git a/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/business/tests/DependingInterceptorTest.java b/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/business/tests/DependingInterceptorTest.java
index dd4673a..672f9f6 100644
--- a/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/business/tests/DependingInterceptorTest.java
+++ b/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/business/tests/DependingInterceptorTest.java
@@ -22,12 +22,13 @@
 import java.util.Collection;
 import java.util.Set;
 
+import javax.enterprise.context.RequestScoped;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
 
 import junit.framework.Assert;
 
-import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.ContextsService;
 import org.apache.webbeans.test.AbstractUnitTest;
 import org.apache.webbeans.test.interceptors.beans.ApplicationScopedBean;
 import org.apache.webbeans.test.interceptors.beans.DependentScopedBean;
@@ -80,9 +81,9 @@
 
         TransactionInterceptor.ECHO = false;
 
-        WebBeansContext webBeansContext = WebBeansContext.getInstance();
-        webBeansContext.getContextFactory().destroyRequestContext(null);
-        webBeansContext.getContextFactory().initRequestContext(null);
+        ContextsService contextsService = getWebBeansContext().getContextsService();
+        contextsService.endContext(RequestScoped.class, null);
+        contextsService.startContext(RequestScoped.class, null);
 
         CreationalContext<RequestScopedBean> ctx2 = getBeanManager().createCreationalContext(bean);
         Object reference2 = getBeanManager().getReference(bean, RequestScopedBean.class, ctx2);
diff --git a/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/business/tests/InterceptorPerformanceTest.java b/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/business/tests/InterceptorPerformanceTest.java
index 578331f..d8cfe6c 100644
--- a/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/business/tests/InterceptorPerformanceTest.java
+++ b/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/business/tests/InterceptorPerformanceTest.java
@@ -21,6 +21,7 @@
 import junit.framework.Assert;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.logger.WebBeansLoggerFacade;
+import org.apache.webbeans.spi.ContextsService;
 import org.apache.webbeans.test.AbstractUnitTest;
 import org.apache.webbeans.test.interceptors.beans.ApplicationScopedBean;
 import org.apache.webbeans.test.interceptors.beans.DependentScopedBean;
@@ -28,6 +29,7 @@
 import org.apache.webbeans.test.interceptors.common.TransactionInterceptor;
 import org.junit.Test;
 
+import javax.enterprise.context.RequestScoped;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
 import java.util.ArrayList;
@@ -119,9 +121,10 @@
         {
             try
             {
+                ContextsService contextsService = WebBeansContext.currentInstance().getContextsService();
                 for (int req = 0; req < 5; req++)
                 {
-                    WebBeansContext.currentInstance().getContextFactory().initRequestContext(null);
+                    contextsService.startContext(RequestScoped.class, null);
 
                     Set<Bean<?>> beans = getBeanManager().getBeans(RequestScopedBean.class);
                     Assert.assertNotNull(beans);
@@ -146,7 +149,7 @@
                         beanInstance1.getMyService().getJ();
                     }
 
-                    WebBeansContext.currentInstance().getContextFactory().destroyRequestContext(null);
+                    contextsService.endContext(RequestScoped.class, null);
                 }
             }
             catch (Exception e)
diff --git a/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/business/tests/WithInheritedBindingTypeTest.java b/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/business/tests/WithInheritedBindingTypeTest.java
index d568b3c..0d7b480 100644
--- a/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/business/tests/WithInheritedBindingTypeTest.java
+++ b/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/business/tests/WithInheritedBindingTypeTest.java
@@ -22,12 +22,14 @@
 import java.util.Collection;
 import java.util.Set;
 
+import javax.enterprise.context.RequestScoped;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
 
 import junit.framework.Assert;
 
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.ContextsService;
 import org.apache.webbeans.test.AbstractUnitTest;
 import org.apache.webbeans.test.interceptors.business.common.WithInheritedBindingTypeBean;
 import org.apache.webbeans.test.interceptors.common.SecureInterceptor;
@@ -73,9 +75,9 @@
         Assert.assertTrue(TransactionInterceptor.ECHO);
         Assert.assertTrue(SecureInterceptor.ECHO);
 
-        WebBeansContext webBeansContext = WebBeansContext.getInstance();
-        webBeansContext.getContextFactory().destroyRequestContext(null);
-        webBeansContext.getContextFactory().initRequestContext(null);
+        ContextsService contextsService = WebBeansContext.currentInstance().getContextsService();
+        contextsService.endContext(RequestScoped.class, null);
+        contextsService.startContext(RequestScoped.class, null);
 
         reference = getBeanManager().getReference(bean, WithInheritedBindingTypeBean.class, ctx);
         beanInstance = (WithInheritedBindingTypeBean)reference;
diff --git a/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/ExtensionTest.java b/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/ExtensionTest.java
index b6f7ce9..2ce7cdd 100644
--- a/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/ExtensionTest.java
+++ b/webbeans-impl/src/test/java/org/apache/webbeans/test/portable/ExtensionTest.java
@@ -20,6 +20,7 @@
 
 import java.util.Set;
 
+import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.PassivationCapable;
 
@@ -66,7 +67,7 @@
         startContainer(ExternalTestScopedBean.class);
 
         WebBeansContext webBeansContext = WebBeansContext.getInstance();
-        webBeansContext.getContextFactory().initApplicationContext(null);
+        webBeansContext.getContextsService().startContext(ApplicationScoped.class, null);
 
         @SuppressWarnings("unchecked")
         Bean<ExternalTestScopedBean> bean = (Bean<ExternalTestScopedBean>) getBeanManager().getBeans(ExternalTestScopedBean.class, 
@@ -82,7 +83,7 @@
         //Fire shut down
         BeanManagerImpl.class.cast(getBeanManager()).fireEvent(new BeforeShutdownImpl(), true);
 
-        webBeansContext.getContextFactory().destroyApplicationContext(null);
+        webBeansContext.getContextsService().endContext(ApplicationScoped.class, null);
 
         shutDownContainer();
     }
diff --git a/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/WebBeansPhaseListener.java b/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/WebBeansPhaseListener.java
index 4443ae9..07537e3 100644
--- a/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/WebBeansPhaseListener.java
+++ b/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/WebBeansPhaseListener.java
@@ -20,6 +20,7 @@
 
 import javax.enterprise.context.BusyConversationException;
 import javax.enterprise.context.Conversation;
+import javax.enterprise.context.ConversationScoped;
 import javax.enterprise.context.NonexistentConversationException;
 import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
@@ -28,11 +29,11 @@
 import javax.faces.event.PhaseListener;
 
 import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.context.ContextFactory;
 import org.apache.webbeans.context.ConversationContext;
 import org.apache.webbeans.conversation.ConversationImpl;
 import org.apache.webbeans.conversation.ConversationManager;
 import org.apache.webbeans.logger.WebBeansLoggerFacade;
+import org.apache.webbeans.spi.ContextsService;
 
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -52,6 +53,11 @@
 
     private Boolean owbApplication = null;
 
+    private WebBeansContext webBeansContext = WebBeansContext.getInstance();
+    private ConversationManager conversationManager = webBeansContext.getConversationManager();
+    private ContextsService contextsService = webBeansContext.getContextsService();
+
+
     /**
      * {@inheritDoc}
      */
@@ -66,7 +72,6 @@
                 return;
             }
 
-            WebBeansContext webBeansContext = WebBeansContext.getInstance();
             ConversationManager conversationManager = webBeansContext.getConversationManager();
             Conversation conversation = conversationManager.getConversationBeanReference();
 
@@ -76,8 +81,7 @@
                 {
                     logger.log(Level.FINE, "Destroying the conversation context with cid : [{0}]", conversation.getId());
                 }
-                ContextFactory contextFactory = webBeansContext.getContextFactory();
-                contextFactory.destroyConversationContext();
+                contextsService.endContext(ConversationScoped.class, null);
             }
             else
             {
@@ -101,17 +105,14 @@
             //It looks for cid parameter in the JSF request.
             //If request contains cid, then it must restore conversation
             //Otherwise create NonexistentException
-            WebBeansContext webBeansContext = WebBeansContext.getInstance();
-            ConversationManager conversationManager = webBeansContext.getConversationManager();
             Conversation conversation = conversationManager.getConversationBeanReference();
-            ContextFactory contextFactory = webBeansContext.getContextFactory();
 
             String propagation = JSFUtil.getConversationPropagation();
             boolean createNew = "none".equals(propagation);
 
             if (createNew)
             {
-                contextFactory.initConversationContext(getRequest(phaseEvent));
+                contextsService.startContext(ConversationScoped.class, getRequest(phaseEvent));
             }
             else if (conversation.isTransient())
             {
@@ -119,7 +120,7 @@
                 {
                     logger.log(Level.FINE, "Creating a new transitional conversation with cid : [{0}]", conversation.getId());
                 }
-                contextFactory.initConversationContext(getRequest(phaseEvent));
+                contextsService.startContext(ConversationScoped.class, getRequest(phaseEvent));
 
                 //Not restore, throw exception
                 String cid = JSFUtil.getConversationId();
@@ -139,7 +140,7 @@
                 ConversationImpl owbConversation = (ConversationImpl)conversation;
                 if(owbConversation.iUseIt() > 1)
                 {
-                    contextFactory.initConversationContext(getRequest(phaseEvent));
+                    contextsService.startContext(ConversationScoped.class, getRequest(phaseEvent));
                     //Throw Busy exception
                     throw new BusyConversationException(
                             "Propogated conversation with cid=" + JSFUtil.getConversationId() + " is used by other request. It creates a new transient conversation");
@@ -147,7 +148,7 @@
                 else
                 {
                     ConversationContext conversationContext = conversationManager.getConversationContext(conversation);
-                    contextFactory.initConversationContext(conversationContext);
+                    contextsService.startContext(ConversationScoped.class, conversationContext);
                 }
             }
         }
diff --git a/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/WebBeansPhaseListener.java b/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/WebBeansPhaseListener.java
index d1d2289..2286ad6 100644
--- a/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/WebBeansPhaseListener.java
+++ b/webbeans-jsf12/src/main/java/org/apache/webbeans/jsf12/WebBeansPhaseListener.java
@@ -20,17 +20,18 @@
 
 import javax.enterprise.context.BusyConversationException;
 import javax.enterprise.context.Conversation;
+import javax.enterprise.context.ConversationScoped;
 import javax.enterprise.context.NonexistentConversationException;
 import javax.faces.event.PhaseEvent;
 import javax.faces.event.PhaseId;
 import javax.faces.event.PhaseListener;
 
 import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.context.ContextFactory;
 import org.apache.webbeans.context.ConversationContext;
 import org.apache.webbeans.conversation.ConversationImpl;
 import org.apache.webbeans.conversation.ConversationManager;
 import org.apache.webbeans.logger.WebBeansLoggerFacade;
+import org.apache.webbeans.spi.ContextsService;
 
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -50,6 +51,10 @@
 
     private Boolean owbApplication = null;
 
+    private WebBeansContext webBeansContext = WebBeansContext.getInstance();
+    private ConversationManager conversationManager = webBeansContext.getConversationManager();
+    private ContextsService contextsService = webBeansContext.getContextsService();
+
     /**
      * {@inheritDoc}
      */
@@ -64,10 +69,7 @@
         if (phaseEvent.getPhaseId().equals(PhaseId.RENDER_RESPONSE) ||
                 phaseEvent.getFacesContext().getResponseComplete())
         {
-            WebBeansContext webBeansContext = WebBeansContext.getInstance();
-            ConversationManager conversationManager = webBeansContext.getConversationManager();
             Conversation conversation = conversationManager.getConversationBeanReference();
-            ContextFactory contextFactory = webBeansContext.getContextFactory();
 
             if (conversation.isTransient())
             {
@@ -75,7 +77,7 @@
                 {
                     logger.log(Level.FINE, "Destroying the conversation context with cid : [{0}]", conversation.getId());
                 }
-                contextFactory.destroyConversationContext();
+                contextsService.endContext(ConversationScoped.class, null);
             }
             else
             {
@@ -108,7 +110,6 @@
             ConversationManager conversationManager = webBeansContext.getConversationManager();
             Conversation conversation = conversationManager.getConversationBeanReference();
             String cid = JSFUtil.getConversationId();
-            ContextFactory contextFactory = webBeansContext.getContextFactory();
 
             if (conversation.isTransient())
             {
@@ -116,7 +117,7 @@
                 {
                     logger.log(Level.FINE, "Creating a new transitional conversation with cid : [{0}]", conversation.getId());
                 }
-                contextFactory.initConversationContext(null);
+                contextsService.startContext(ConversationScoped.class, null);
 
                 //Not restore, throw exception
                 if(cid != null && !cid.equals(""))
@@ -135,14 +136,14 @@
                 ConversationImpl owbConversation = (ConversationImpl)conversation;
                 if(owbConversation.iUseIt() > 1)
                 {
-                    contextFactory.initConversationContext(null);
+                    contextsService.startContext(ConversationScoped.class, null);
                     //Throw Busy exception
                     throw new BusyConversationException("Propogated conversation with cid=" + cid + " is used by other request. It creates a new transient conversation");
                 }
                 else
                 {
                     ConversationContext conversationContext = conversationManager.getConversationContext(conversation);
-                    contextFactory.initConversationContext(conversationContext);
+                    contextsService.startContext(ConversationScoped.class, conversationContext);
                 }
             }
         }
diff --git a/webbeans-porting/src/main/java/org/apache/webbeans/test/tck/ContextsImpl.java b/webbeans-porting/src/main/java/org/apache/webbeans/test/tck/ContextsImpl.java
index d8ee33c..0939e69 100644
--- a/webbeans-porting/src/main/java/org/apache/webbeans/test/tck/ContextsImpl.java
+++ b/webbeans-porting/src/main/java/org/apache/webbeans/test/tck/ContextsImpl.java
@@ -23,7 +23,6 @@
 
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.context.AbstractContext;
-import org.apache.webbeans.context.ContextFactory;
 import org.apache.webbeans.context.RequestContext;
 import org.jboss.cdi.tck.spi.Contexts;
 
@@ -34,16 +33,16 @@
     public AbstractContext getRequestContext()
     {
         WebBeansContext webBeansContext = WebBeansContext.getInstance();
-        ContextFactory contextFactory = webBeansContext.getContextFactory();
 
-        RequestContext ctx =  (RequestContext)contextFactory.getStandardContext(RequestScoped.class);
+        RequestContext ctx =  (RequestContext)webBeansContext.getBeanManagerImpl().getContext(RequestScoped.class);
         
         if(ctx == null)
         {
-            contextFactory.initRequestContext(null);
+            webBeansContext.getContextsService().startContext(RequestScoped.class, null);
+            ctx =  (RequestContext)webBeansContext.getBeanManagerImpl().getContext(RequestScoped.class);
         }
         
-        return (AbstractContext) contextFactory.getStandardContext(RequestScoped.class);
+        return ctx;
     }
 
     @Override
@@ -63,9 +62,8 @@
     public AbstractContext getDependentContext()
     {
         WebBeansContext webBeansContext = WebBeansContext.getInstance();
-        ContextFactory contextFactory = webBeansContext.getContextFactory();
 
-        return (AbstractContext) contextFactory.getStandardContext(Dependent.class);
+        return (AbstractContext) webBeansContext.getBeanManagerImpl().getContext(Dependent.class);
     }
 
     @Override
diff --git a/webbeans-spi/src/main/java/org/apache/webbeans/spi/FailOverService.java b/webbeans-spi/src/main/java/org/apache/webbeans/spi/FailOverService.java
index 0de42e2..d6536ea 100644
--- a/webbeans-spi/src/main/java/org/apache/webbeans/spi/FailOverService.java
+++ b/webbeans-spi/src/main/java/org/apache/webbeans/spi/FailOverService.java
@@ -30,6 +30,7 @@
 
 /**
  * Container provided failover and passivation service.
+ * @deprecated in the future we will simply store all SessionScoped stuff in the native http session. This will render this service useless.
  */
 public interface FailOverService
 {
diff --git a/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java b/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
index 3e0085c..d16718a 100644
--- a/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
+++ b/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
@@ -288,23 +288,23 @@
     @Override
     public void startContext(Class<? extends Annotation> scopeType, Object startParameter) throws ContextException
     {
-        if(scopeType.equals(RequestScoped.class))
+        if (scopeType.equals(RequestScoped.class))
         {
             initRequestContext((ServletRequestEvent)startParameter);
         }
-        else if(scopeType.equals(SessionScoped.class))
+        else if (scopeType.equals(SessionScoped.class))
         {
             initSessionContext((HttpSession)startParameter);
         }
-        else if(scopeType.equals(ApplicationScoped.class))
+        else if (scopeType.equals(ApplicationScoped.class))
         {
             initApplicationContext((ServletContext)startParameter);
         }
-        else if(supportsConversation && scopeType.equals(ConversationScoped.class))
+        else if (supportsConversation && scopeType.equals(ConversationScoped.class))
         {
-            initConversationContext((ConversationContext)startParameter);
+            initConversationContext(startParameter);
         }
-        else if(scopeType.equals(Dependent.class))
+        else if (scopeType.equals(Dependent.class))
         {
             //Do nothing
         }
@@ -320,12 +320,12 @@
     @Override
     public boolean supportsContext(Class<? extends Annotation> scopeType)
     {
-        if(scopeType.equals(RequestScoped.class) ||
-                scopeType.equals(SessionScoped.class) ||
-                scopeType.equals(ApplicationScoped.class) ||
-                scopeType.equals(Dependent.class) ||
-                scopeType.equals(Singleton.class) ||
-                (scopeType.equals(ConversationScoped.class) && supportsConversation))
+        if (scopeType.equals(RequestScoped.class) ||
+            scopeType.equals(SessionScoped.class) ||
+            scopeType.equals(ApplicationScoped.class) ||
+            scopeType.equals(Dependent.class) ||
+            scopeType.equals(Singleton.class) ||
+            (scopeType.equals(ConversationScoped.class) && supportsConversation))
         {
             return true;
         }
@@ -366,6 +366,8 @@
                 //Init thread local singleton context
                 initSingletonContext(event.getServletContext());
 
+                initConversationContext(request);
+
                 webBeansContext.getBeanManagerImpl().fireEvent(request, InitializedLiteral.INSTANCE_REQUEST_SCOPED);
             }
         }
@@ -725,15 +727,24 @@
 
     /**
      * Initialize conversation context.
-     * @param context context
+     * @param startObject either a ServletRequest or a ConversationContext
      */
-    private void initConversationContext(ConversationContext context)
+    private void initConversationContext(Object startObject)
     {
-        if (context == null)
+
+        if (startObject != null && startObject instanceof ConversationContext)
+        {
+            ConversationContext context = (ConversationContext) startObject;
+            context.setActive(true);
+            conversationContexts.set(context);
+        }
+        else
         {
             if(conversationContexts.get() == null)
             {
                 ConversationContext newContext = new ConversationContext();
+                webBeansContext.getBeanManagerImpl().fireEvent(new Object(), InitializedLiteral.INSTANCE_CONVERSATION_SCOPED);
+
                 newContext.setActive(true);
                 
                 conversationContexts.set(newContext);
@@ -742,13 +753,6 @@
             {
                 conversationContexts.get().setActive(true);
             }
-
-            webBeansContext.getBeanManagerImpl().fireEvent(new Object(), InitializedLiteral.INSTANCE_SINGLETON_SCOPED);
-        }
-        else
-        {
-            context.setActive(true);
-            conversationContexts.set(context);
         }
     }
 
diff --git a/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/test/EnterpriseTestLifeCycle.java b/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/test/EnterpriseTestLifeCycle.java
index 8305b7f..caebab8 100644
--- a/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/test/EnterpriseTestLifeCycle.java
+++ b/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/test/EnterpriseTestLifeCycle.java
@@ -18,13 +18,17 @@
  */
 package org.apache.webbeans.web.lifecycle.test;
 
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.ConversationScoped;
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.context.SessionScoped;
 import java.util.Properties;
 
 import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.context.ContextFactory;
 import org.apache.webbeans.corespi.se.DefaultScannerService;
 import org.apache.webbeans.el.ELContextStore;
 import org.apache.webbeans.lifecycle.StandaloneLifeCycle;
+import org.apache.webbeans.spi.ContextsService;
 
 /**
  * Ease the writing of the tests. Simulates container
@@ -49,11 +53,11 @@
         this.mockHttpSession = new MockHttpSession();
         this.servletContextEvent = new MockServletContextEvent();
         WebBeansContext webBeansContext = getWebBeansContext();
-        ContextFactory contextFactory = webBeansContext.getContextFactory();
-        contextFactory.initRequestContext(null);
-        contextFactory.initSessionContext(mockHttpSession);
-        contextFactory.initConversationContext(null);
-        contextFactory.initApplicationContext(this.servletContextEvent.getServletContext());
+        ContextsService contextsService = webBeansContext.getContextsService();
+        contextsService.startContext(RequestScoped.class, null);
+        contextsService.startContext(SessionScoped.class, mockHttpSession);
+        contextsService.startContext(ConversationScoped.class, null);
+        contextsService.startContext(ApplicationScoped.class, this.servletContextEvent.getServletContext());
     }
     
     @Override
@@ -66,11 +70,11 @@
     public void beforeStopApplication(Object endObject)
     {
         WebBeansContext webBeansContext = getWebBeansContext();
-        ContextFactory contextFactory = webBeansContext.getContextFactory();
-        contextFactory.destroyRequestContext(null);
-        contextFactory.destroySessionContext(this.mockHttpSession);
-        contextFactory.destroyConversationContext();
-        contextFactory.destroyApplicationContext(this.servletContextEvent.getServletContext());
+        ContextsService contextsService = webBeansContext.getContextsService();
+        contextsService.endContext(RequestScoped.class, null);
+        contextsService.endContext(SessionScoped.class, this.mockHttpSession);
+        contextsService.endContext(ConversationScoped.class, null);
+        contextsService.endContext(ApplicationScoped.class, this.servletContextEvent.getServletContext());
 
         //Comment out for OWB-502
         //ContextFactory.cleanUpContextFactory();
