diff --git a/client/tomcatconf/componentContext.xml.in b/client/tomcatconf/componentContext.xml.in
index d6ed25a3645..782dfe080e2 100644
--- a/client/tomcatconf/componentContext.xml.in
+++ b/client/tomcatconf/componentContext.xml.in
@@ -32,11 +32,24 @@
 
 
   
+  
+  
   
   
    
+  
+  
+  
+  
+  
+  
+  
+  
+  
+    
+   
   
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java
index 1276825acbc..2f6bd6cd5bc 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java
@@ -56,8 +56,10 @@ public class DataStoreProviderManagerImpl implements DataStoreProviderManager {
 
     @Override
     public boolean configure(String name, Map params)
-            throws ConfigurationException {
-        //TODO: hold global lock
+    		throws ConfigurationException {
+    	
+/*
+    	//TODO: hold global lock
         List providerVos = providerDao.listAll();
         for (DataStoreProvider provider : providers) {
             boolean existingProvider = false;
@@ -82,6 +84,7 @@ public class DataStoreProviderManagerImpl implements DataStoreProviderManager {
             provider.configure(params);
             providerMap.put(uuid, provider);
         }
+*/       
         return true;
     }
 
diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java
index 26370d75bff..364f8fb6dce 100755
--- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java
+++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java
@@ -140,7 +140,6 @@ import edu.emory.mathcs.backport.java.util.Collections;
  *         ping.interval before announcing an agent has timed out | float | 2.0x || || router.stats.interval | interval to
  *         report router statistics | seconds | 300s || * }
  **/
-@Component
 @Local(value = { AgentManager.class })
 public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager {
     private static final Logger s_logger = Logger.getLogger(AgentManagerImpl.class);
diff --git a/server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java b/server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java
index 25c71687bed..c33e0e13442 100755
--- a/server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java
+++ b/server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java
@@ -88,8 +88,6 @@ import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.nio.Link;
 import com.cloud.utils.nio.Task;
 
-@Component
-@Primary
 @Local(value = { AgentManager.class, ClusteredAgentRebalanceService.class })
 public class ClusteredAgentManagerImpl extends AgentManagerImpl implements ClusterManagerListener, ClusteredAgentRebalanceService {
     final static Logger s_logger = Logger.getLogger(ClusteredAgentManagerImpl.class);
@@ -117,8 +115,6 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust
     // @com.cloud.utils.component.Inject(adapter = AgentLoadBalancerPlanner.class)
     @Inject protected List _lbPlanners;
 
-    @Inject
-    protected AgentManager _agentMgr;
     @Inject ConfigurationDao _configDao;
 
     protected ClusteredAgentManagerImpl() {
diff --git a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java
index 7ddfe06eb07..19f8418237d 100755
--- a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java
+++ b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java
@@ -105,8 +105,6 @@ import com.cloud.vm.VirtualMachineName;
 import com.cloud.vm.VirtualMachineProfile;
 import com.cloud.vm.VirtualMachineProfile.Param;
 
-@Component
-@Primary
 @Local(value={BareMetalVmManager.class, BareMetalVmService.class})
 public class BareMetalVmManagerImpl extends UserVmManagerImpl implements BareMetalVmManager, BareMetalVmService, Manager,
 		StateListener {
diff --git a/server/src/com/cloud/cluster/ClusterManagerImpl.java b/server/src/com/cloud/cluster/ClusterManagerImpl.java
index f71a8665951..1ad98e8ef7e 100755
--- a/server/src/com/cloud/cluster/ClusterManagerImpl.java
+++ b/server/src/com/cloud/cluster/ClusterManagerImpl.java
@@ -88,8 +88,6 @@ import com.cloud.utils.mgmt.JmxUtil;
 import com.cloud.utils.net.NetUtils;
 import com.google.gson.Gson;
 
-@Component
-@Primary
 @Local(value = { ClusterManager.class })
 public class ClusterManagerImpl implements ClusterManager {
     private static final Logger s_logger = Logger.getLogger(ClusterManagerImpl.class);
diff --git a/server/src/com/cloud/cluster/DummyClusterManagerImpl.java b/server/src/com/cloud/cluster/DummyClusterManagerImpl.java
index 9c8aef4e825..ea4d9510cf5 100755
--- a/server/src/com/cloud/cluster/DummyClusterManagerImpl.java
+++ b/server/src/com/cloud/cluster/DummyClusterManagerImpl.java
@@ -32,7 +32,6 @@ import com.cloud.host.Status.Event;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.net.MacAddress;
 
-@Component
 @Local(value={ClusterManager.class})
 public class DummyClusterManagerImpl implements ClusterManager {
     private static final Logger s_logger = Logger.getLogger(DummyClusterManagerImpl.class);
diff --git a/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java b/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java
index a2399977ab0..15aa9f1906c 100755
--- a/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java
+++ b/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java
@@ -62,7 +62,6 @@ import com.cloud.vm.dao.ConsoleProxyDao;
 import com.cloud.vm.dao.UserVmDao;
 import com.cloud.vm.dao.VMInstanceDao;
 
-@Component
 @Local(value = { ConsoleProxyManager.class })
 public class AgentBasedConsoleProxyManager implements ConsoleProxyManager, VirtualMachineGuru, AgentHook {
     private static final Logger s_logger = Logger.getLogger(AgentBasedConsoleProxyManager.class);
diff --git a/server/src/com/cloud/consoleproxy/AgentBasedStandaloneConsoleProxyManager.java b/server/src/com/cloud/consoleproxy/AgentBasedStandaloneConsoleProxyManager.java
index 13aa3e6bb31..3cfdf22bf08 100644
--- a/server/src/com/cloud/consoleproxy/AgentBasedStandaloneConsoleProxyManager.java
+++ b/server/src/com/cloud/consoleproxy/AgentBasedStandaloneConsoleProxyManager.java
@@ -28,7 +28,6 @@ import com.cloud.host.HostVO;
 import com.cloud.info.ConsoleProxyInfo;
 import com.cloud.vm.UserVmVO;
 
-@Component
 @Local(value={ConsoleProxyManager.class})
 public class AgentBasedStandaloneConsoleProxyManager extends
 AgentBasedConsoleProxyManager {
diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
index 9e63d69b39e..52c90af70dc 100755
--- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
+++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
@@ -170,8 +170,6 @@ import com.google.gson.GsonBuilder;
 // Starting, HA, Migrating, Running state are all counted as "Open" for available capacity calculation
 // because sooner or later, it will be driven into Running state
 //
-@Component
-@Primary
 @Local(value = { ConsoleProxyManager.class, ConsoleProxyService.class })
 public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProxyService, Manager, AgentHook, VirtualMachineGuru, SystemVmLoadScanHandler, ResourceStateAdapter {
     private static final Logger s_logger = Logger.getLogger(ConsoleProxyManagerImpl.class);
diff --git a/server/src/com/cloud/consoleproxy/StaticConsoleProxyManager.java b/server/src/com/cloud/consoleproxy/StaticConsoleProxyManager.java
index 13d3112c827..3a4386f0acb 100755
--- a/server/src/com/cloud/consoleproxy/StaticConsoleProxyManager.java
+++ b/server/src/com/cloud/consoleproxy/StaticConsoleProxyManager.java
@@ -33,7 +33,6 @@ import com.cloud.resource.ResourceManager;
 import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.dao.ConsoleProxyDao;
 
-@Component
 @Local(value={ConsoleProxyManager.class})
 public class StaticConsoleProxyManager extends AgentBasedConsoleProxyManager implements ConsoleProxyManager {
     String _ip = null;
diff --git a/server/src/com/cloud/ha/HighAvailabilityManagerExtImpl.java b/server/src/com/cloud/ha/HighAvailabilityManagerExtImpl.java
index 09e65a02812..ae6fe4e00b3 100644
--- a/server/src/com/cloud/ha/HighAvailabilityManagerExtImpl.java
+++ b/server/src/com/cloud/ha/HighAvailabilityManagerExtImpl.java
@@ -32,8 +32,6 @@ import com.cloud.configuration.dao.ConfigurationDao;
 import com.cloud.usage.dao.UsageJobDao;
 import com.cloud.utils.db.Transaction;
 
-@Component
-@Primary
 @Local(value={HighAvailabilityManager.class})
 public class HighAvailabilityManagerExtImpl extends HighAvailabilityManagerImpl {
 	
diff --git a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
index 813728f78ca..7671f2d641f 100755
--- a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
+++ b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java
@@ -95,7 +95,6 @@ import com.cloud.vm.dao.VMInstanceDao;
  *         ha.retry.wait | time to wait before retrying the work item | seconds | 120 || || stop.retry.wait | time to wait
  *         before retrying the stop | seconds | 120 || * }
  **/
-@Component
 @Local(value = { HighAvailabilityManager.class })
 public class HighAvailabilityManagerImpl implements HighAvailabilityManager, ClusterManagerListener {
     protected static final Logger s_logger = Logger.getLogger(HighAvailabilityManagerImpl.class);
diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java
index 09378b45b48..307294cafc3 100644
--- a/server/src/com/cloud/network/NetworkModelImpl.java
+++ b/server/src/com/cloud/network/NetworkModelImpl.java
@@ -1778,8 +1778,9 @@ public class NetworkModelImpl  implements NetworkModel, Manager{
                 if (s_providerToNetworkElementMap.containsKey(implementedProvider.getName())) {
                     s_logger.error("Cannot start NetworkModel: Provider <-> NetworkElement must be a one-to-one map, " +
                             "multiple NetworkElements found for Provider: " + implementedProvider.getName());
-                    return false;
+                   continue;
                 }
+                s_logger.info("Add provider <-> element map entry. " + implementedProvider.getName() + "-" + element.getName() + "-" + element.getClass().getSimpleName());
                 s_providerToNetworkElementMap.put(implementedProvider.getName(), element.getName());
             }
             if (capabilities != null && implementedProvider != null) {
diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
index 361dedac47e..58505eeef26 100755
--- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
+++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
@@ -115,7 +115,6 @@ import com.cloud.vm.dao.VMInstanceDao;
 
 import edu.emory.mathcs.backport.java.util.Collections;
 
-@Component
 @Local(value = { SecurityGroupManager.class, SecurityGroupService.class })
 public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityGroupService, Manager, StateListener {
     public static final Logger s_logger = Logger.getLogger(SecurityGroupManagerImpl.class);
diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl2.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl2.java
index 0ea43943853..a3a0fc300f9 100644
--- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl2.java
+++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl2.java
@@ -47,8 +47,6 @@ import com.cloud.network.security.SecurityRule.SecurityRuleType;
  * Same as the base class -- except it uses the abstracted security group work queue
  *
  */
-@Component
-@Primary
 @Local(value={ SecurityGroupManager.class, SecurityGroupService.class })
 public class SecurityGroupManagerImpl2 extends SecurityGroupManagerImpl{
     SecurityGroupWorkQueue _workQueue = new LocalSecurityGroupWorkQueue();
diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java
index 0cc00aa3803..2934da3d1d3 100755
--- a/server/src/com/cloud/resource/ResourceManagerImpl.java
+++ b/server/src/com/cloud/resource/ResourceManagerImpl.java
@@ -235,7 +235,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService,
 
 	protected HashMap> _lifeCycleListeners = new HashMap>();
 	private HypervisorType _defaultSystemVMHypervisor;
-
+	
 	@PostConstruct
 	public void init() {
 		// TODO initialize pod allocators here instead
diff --git a/server/src/com/cloud/secstorage/PremiumSecondaryStorageManagerImpl.java b/server/src/com/cloud/secstorage/PremiumSecondaryStorageManagerImpl.java
index d4f44541c85..73015c11464 100755
--- a/server/src/com/cloud/secstorage/PremiumSecondaryStorageManagerImpl.java
+++ b/server/src/com/cloud/secstorage/PremiumSecondaryStorageManagerImpl.java
@@ -49,8 +49,6 @@ import com.cloud.vm.SystemVmLoadScanner.AfterScanAction;
 import com.cloud.vm.VirtualMachine.State;
 import com.cloud.vm.dao.SecondaryStorageVmDao;
 
-@Component
-@Primary
 @Local(value = { SecondaryStorageVmManager.class })
 public class PremiumSecondaryStorageManagerImpl extends SecondaryStorageManagerImpl {
     private static final Logger s_logger = Logger.getLogger(PremiumSecondaryStorageManagerImpl.class);
diff --git a/server/src/com/cloud/server/CloudStackComponentComposer.java b/server/src/com/cloud/server/CloudStackComponentComposer.java
deleted file mode 100644
index ae063259a53..00000000000
--- a/server/src/com/cloud/server/CloudStackComponentComposer.java
+++ /dev/null
@@ -1,184 +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 com.cloud.server;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-
-import org.springframework.stereotype.Component;
-
-import com.cloud.agent.AgentManager;
-import com.cloud.alert.AlertManagerImpl;
-import com.cloud.api.query.QueryManagerImpl;
-import com.cloud.async.AsyncJobManager;
-import com.cloud.async.SyncQueueManager;
-import com.cloud.capacity.CapacityManagerImpl;
-import com.cloud.cluster.ClusterFenceManagerImpl;
-import com.cloud.cluster.ClusterManagerImpl;
-import com.cloud.configuration.ConfigurationManager;
-import com.cloud.consoleproxy.ConsoleProxyManager;
-import com.cloud.dao.EntityManagerImpl;
-import com.cloud.ha.HighAvailabilityManager;
-import com.cloud.hypervisor.HypervisorGuruManagerImpl;
-import com.cloud.keystore.KeystoreManager;
-import com.cloud.maint.UpgradeManagerImpl;
-import com.cloud.network.ExternalLoadBalancerUsageManager;
-import com.cloud.network.NetworkManagerImpl;
-import com.cloud.network.StorageNetworkManager;
-import com.cloud.network.as.AutoScaleManagerImpl;
-import com.cloud.network.firewall.FirewallManagerImpl;
-import com.cloud.network.lb.LoadBalancingRulesManagerImpl;
-import com.cloud.network.router.VpcVirtualNetworkApplianceManager;
-import com.cloud.network.rules.RulesManagerImpl;
-import com.cloud.network.security.SecurityGroupManagerImpl2;
-import com.cloud.network.vpc.NetworkACLManagerImpl;
-import com.cloud.network.vpc.VpcManagerImpl;
-import com.cloud.network.vpn.RemoteAccessVpnManagerImpl;
-import com.cloud.network.vpn.Site2SiteVpnManagerImpl;
-import com.cloud.projects.ProjectManagerImpl;
-import com.cloud.resource.ResourceManagerImpl;
-import com.cloud.resourcelimit.ResourceLimitManagerImpl;
-import com.cloud.storage.OCFS2Manager;
-import com.cloud.storage.StorageManagerImpl;
-import com.cloud.storage.download.DownloadMonitor;
-import com.cloud.storage.s3.S3Manager;
-import com.cloud.storage.secondary.SecondaryStorageManagerImpl;
-import com.cloud.storage.snapshot.SnapshotManagerImpl;
-import com.cloud.storage.snapshot.SnapshotSchedulerImpl;
-import com.cloud.storage.swift.SwiftManager;
-import com.cloud.storage.upload.UploadMonitor;
-import com.cloud.tags.TaggedResourceManagerImpl;
-import com.cloud.template.TemplateManagerImpl;
-import com.cloud.user.AccountManagerImpl;
-import com.cloud.user.DomainManagerImpl;
-import com.cloud.utils.component.Manager;
-import com.cloud.vm.UserVmManagerImpl;
-import com.cloud.vm.VirtualMachineManager;
-
-@Component
-public class CloudStackComponentComposer {
-	// @Inject CheckPointManagerImpl _checkPointMgr;
-    @Inject ClusterManagerImpl _clusterMgr;
-    @Inject ClusterFenceManagerImpl _clusterFenceMgr;
-    @Inject AgentManager _AgentMgr;
-    @Inject SyncQueueManager _sycnQueueMgr;
-    @Inject AsyncJobManager _jobMgr;
-    @Inject ConfigurationManager _confMgr;
-    @Inject AccountManagerImpl _accountMgr;
-    @Inject DomainManagerImpl _domainMgr;
-    @Inject ResourceLimitManagerImpl _resLimitMgr;
-    @Inject NetworkManagerImpl _networkMgr;
-    @Inject DownloadMonitor _downloadMonitor;
-    @Inject UploadMonitor _uploadMonitor;
-    @Inject KeystoreManager _ksMgr;
-    @Inject SecondaryStorageManagerImpl _ssMgr;
-    @Inject UserVmManagerImpl _userVmMgr;
-    @Inject UpgradeManagerImpl _upgradeMgr;
-    @Inject StorageManagerImpl _storageMgr;
-    @Inject AlertManagerImpl _alertMgr;
-    @Inject TemplateManagerImpl _tmplMgr;
-    @Inject SnapshotManagerImpl _snpahsotMgr;
-    @Inject SnapshotSchedulerImpl _snapshotScheduleMgr;
-    @Inject SecurityGroupManagerImpl2 _sgMgr;
-    @Inject EntityManagerImpl _entityMgr;
-    @Inject LoadBalancingRulesManagerImpl _lbRuleMgr;
-    @Inject AutoScaleManagerImpl _asMgr;
-    @Inject RulesManagerImpl _rulesMgr;
-    @Inject RemoteAccessVpnManagerImpl _acVpnMgr;
-    @Inject CapacityManagerImpl _capacityMgr;
-    @Inject VirtualMachineManager _vmMgr;
-    @Inject HypervisorGuruManagerImpl _hvGuruMgr;
-    @Inject ResourceManagerImpl _resMgr;
-    @Inject OCFS2Manager _ocfsMgr;
-    @Inject FirewallManagerImpl _fwMgr;
-    @Inject ConsoleProxyManager _cpMgr;
-    @Inject ProjectManagerImpl _prjMgr;
-    @Inject SwiftManager _swiftMgr;
-    @Inject S3Manager _s3Mgr;
-    @Inject StorageNetworkManager _storageNetworkMgr;
-    @Inject ExternalLoadBalancerUsageManager _extlbUsageMgr;
-    @Inject HighAvailabilityManager _haMgr;
-    @Inject VpcManagerImpl _vpcMgr;
-    @Inject VpcVirtualNetworkApplianceManager _vpcNetApplianceMgr;
-    @Inject NetworkACLManagerImpl _networkAclMgr;
-    @Inject TaggedResourceManagerImpl _taggedResMgr;
-    @Inject Site2SiteVpnManagerImpl _s2sVpnMgr;
-    @Inject QueryManagerImpl _queryMgr;
-    
-    List _managers = new ArrayList();
-
-    public CloudStackComponentComposer() {
-    }
-    
-    @PostConstruct
-    void init() {
-    	// _managers.add(_checkPointMgr);
-        _managers.add(_clusterMgr);
-        _managers.add(_clusterFenceMgr);
-        _managers.add(_AgentMgr);
-        _managers.add(_sycnQueueMgr);
-        _managers.add(_jobMgr);
-        _managers.add(_confMgr);
-        _managers.add(_accountMgr);
-        _managers.add(_domainMgr);
-        _managers.add(_resLimitMgr);
-        _managers.add(_networkMgr);
-        _managers.add(_downloadMonitor);
-        _managers.add(_uploadMonitor);
-        _managers.add(_ksMgr);
-        _managers.add(_ssMgr);
-        _managers.add(_userVmMgr);
-        _managers.add(_upgradeMgr);
-        _managers.add(_storageMgr);
-        _managers.add(_alertMgr);
-        _managers.add(_tmplMgr);
-        _managers.add(_snpahsotMgr);
-        _managers.add(_snapshotScheduleMgr);
-        _managers.add(_sgMgr);
-        _managers.add(_entityMgr);
-        _managers.add(_lbRuleMgr);
-        _managers.add(_asMgr);
-        _managers.add(_rulesMgr);
-        _managers.add(_acVpnMgr);
-        _managers.add(_capacityMgr);
-        _managers.add(_vmMgr);
-        _managers.add(_hvGuruMgr);
-        _managers.add(_resMgr);
-        _managers.add(_ocfsMgr);
-        _managers.add(_fwMgr);
-        _managers.add(_cpMgr);
-        _managers.add(_prjMgr);
-        _managers.add(_swiftMgr);
-        _managers.add(_s3Mgr);
-        _managers.add(_storageNetworkMgr);
-        _managers.add(_extlbUsageMgr);
-        _managers.add(_haMgr);
-        _managers.add(_vpcMgr);
-        _managers.add(_vpcNetApplianceMgr);
-        _managers.add(_networkAclMgr);
-        _managers.add(_taggedResMgr);
-        _managers.add(_s2sVpnMgr);
-        _managers.add(_queryMgr);
-    }
-    
-    public List getManagers() {
-    	return _managers;
-    }
-}
diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java
index 342a2300a53..ede0ce81e7e 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -107,6 +107,7 @@ import com.cloud.capacity.Capacity;
 import com.cloud.capacity.CapacityVO;
 import com.cloud.capacity.dao.CapacityDao;
 import com.cloud.capacity.dao.CapacityDaoImpl.SummedCapacity;
+import com.cloud.cluster.ClusterManager;
 import com.cloud.configuration.Config;
 import com.cloud.configuration.Configuration;
 import com.cloud.configuration.ConfigurationManager;
@@ -396,6 +397,7 @@ public class ManagementServerImpl implements ManagementServer {
 
     @Inject List _userAuthenticators;
 
+    @Inject ClusterManager _clusterMgr;
     private String _hashKey = null;
 
     public ManagementServerImpl() {
@@ -429,8 +431,10 @@ public class ManagementServerImpl implements ManagementServer {
     private void initCloudStackComponents() {
         runCheckers();
         startDaos(); // daos should not be using managers and adapters.
-        startManagers();
-        startAdapters();
+        
+        Map avoidMap = new HashMap();
+        startManagers(avoidMap);
+        startAdapters(avoidMap);
     }
 
     private void runCheckers() {
@@ -464,12 +468,28 @@ public class ManagementServerImpl implements ManagementServer {
         }
     }
 
-    private void startManagers() {
+    private void startManagers(Map avoidMap) {
         Map params = new HashMap();
 
-        for(Manager manager : _componentRegistry.getManagers()) {
+        // make sure startup sequence is maintained
+        try {
+        	_clusterMgr.configure("ClusterMgr", params);
+        	_clusterMgr.start();
+        	
+        	avoidMap.put(ComponentContext.getTargetClass(_clusterMgr).getName(), _clusterMgr);
+        } catch(Exception e) {
+            s_logger.error("Problems to start manager:" + ComponentContext.getTargetClass(_clusterMgr).getName(), e);
+            System.exit(1);
+        }
+        
+        for(Manager manager : ComponentContext.getComponentsOfType(Manager.class).values()) {
             s_logger.info("Start manager: " + ComponentContext.getTargetClass(manager).getName() + "...");
             try {
+            	if(avoidMap.get(ComponentContext.getTargetClass(manager).getName()) != null) {
+                    s_logger.info("Skip manager: " + ComponentContext.getTargetClass(manager).getName() + " as it is already started");
+            		continue;
+            	}
+            	
                 if(!manager.configure(manager.getClass().getSimpleName(), params)) {
                     throw new CloudRuntimeException("Failed to start manager: " + ComponentContext.getTargetClass(manager).getName());
                 }
@@ -477,6 +497,7 @@ public class ManagementServerImpl implements ManagementServer {
                 if (!manager.start()) {
                     throw new CloudRuntimeException("Failed to start manager: " + ComponentContext.getTargetClass(manager).getName());
                 }
+                avoidMap.put(ComponentContext.getTargetClass(manager).getName(), manager);
 
                 if (manager instanceof ManagementBean) {
                     registerMBean((ManagementBean) manager);
@@ -488,7 +509,7 @@ public class ManagementServerImpl implements ManagementServer {
         }
     }
 
-    private void startAdapters() {
+    private void startAdapters(Map avoidMap) {
         @SuppressWarnings("rawtypes")
         Map adapters = ComponentContext.getApplicationContext().getBeansOfType(
                 Adapter.class);
@@ -497,22 +518,27 @@ public class ManagementServerImpl implements ManagementServer {
 
         for(Adapter adapter : adapters.values()) {
             try {
-                // we also skip Adapter class that is both a manager class and a adapter class
-                if(Manager.class.isAssignableFrom(ComponentContext.getTargetClass(adapter)))
-                    continue;
+                s_logger.info("Start adapter: " + ComponentContext.getTargetClass(adapter).getName() + "...");
+                
+            	if(avoidMap.get(ComponentContext.getTargetClass(adapter).getName()) != null) {
+                    s_logger.info("Skip adapter: " + ComponentContext.getTargetClass(adapter).getName() + " as it is already started");
+            		continue;
+            	}
 
                 if(!adapter.configure(adapter.getName(), params)) {
-                    throw new CloudRuntimeException("Failed to start adapter: " + ComponentContext.getTargetClass(adapter).getName());
+                    throw new CloudRuntimeException("Failed to configure adapter: " + ComponentContext.getTargetClass(adapter).getName());
                 }
                 if (!adapter.start()) {
                     throw new CloudRuntimeException("Failed to start adapter: " + ComponentContext.getTargetClass(adapter).getName());
                 }
+                
+                avoidMap.put(ComponentContext.getTargetClass(adapter).getName(), adapter);
 
                 if (adapter instanceof ManagementBean) {
                     registerMBean((ManagementBean) adapter);
                 }
             } catch (Exception e) {
-                s_logger.error("Problems to start manager:" + ComponentContext.getTargetClass(adapter).getName(), e);
+                s_logger.error("Problems to start adapter:" + ComponentContext.getTargetClass(adapter).getName(), e);
                 System.exit(1);
             }
         }
diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
index 90777d6fa74..aed514b28b7 100755
--- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
+++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
@@ -157,7 +157,6 @@ import com.cloud.vm.dao.VMInstanceDao;
 // Starting, HA, Migrating, Creating and Running state are all counted as "Open" for available capacity calculation
 // because sooner or later, it will be driven into Running state
 //
-@Component
 @Local(value = { SecondaryStorageVmManager.class })
 public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, VirtualMachineGuru, SystemVmLoadScanHandler, ResourceStateAdapter {
     private static final Logger s_logger = Logger.getLogger(SecondaryStorageManagerImpl.class);
diff --git a/server/src/com/cloud/upgrade/PremiumDatabaseUpgradeChecker.java b/server/src/com/cloud/upgrade/PremiumDatabaseUpgradeChecker.java
index 896cb5618ed..14a81439670 100755
--- a/server/src/com/cloud/upgrade/PremiumDatabaseUpgradeChecker.java
+++ b/server/src/com/cloud/upgrade/PremiumDatabaseUpgradeChecker.java
@@ -46,8 +46,6 @@ import com.cloud.upgrade.dao.VersionDaoImpl;
 
 import com.cloud.utils.component.SystemIntegrityChecker;
 
-@Component
-@Primary
 @Local(value = { SystemIntegrityChecker.class })
 public class PremiumDatabaseUpgradeChecker extends DatabaseUpgradeChecker {
     public PremiumDatabaseUpgradeChecker() {
diff --git a/server/src/com/cloud/vm/ClusteredVirtualMachineManagerImpl.java b/server/src/com/cloud/vm/ClusteredVirtualMachineManagerImpl.java
index 96c7446f8fd..42ff5d44bf4 100644
--- a/server/src/com/cloud/vm/ClusteredVirtualMachineManagerImpl.java
+++ b/server/src/com/cloud/vm/ClusteredVirtualMachineManagerImpl.java
@@ -28,8 +28,6 @@ import org.springframework.stereotype.Component;
 import com.cloud.cluster.ClusterManagerListener;
 import com.cloud.cluster.ManagementServerHostVO;
 
-@Component
-@Primary
 @Local(value=VirtualMachineManager.class)
 public class ClusteredVirtualMachineManagerImpl extends VirtualMachineManagerImpl implements ClusterManagerListener {
 
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java
index 4139013676d..0464420842b 100644
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -54,7 +54,6 @@ import org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntity;
 import org.apache.cloudstack.engine.service.api.OrchestrationService;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
 
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.Answer;
@@ -237,7 +236,6 @@ import com.cloud.vm.dao.UserVmDao;
 import com.cloud.vm.dao.UserVmDetailsDao;
 import com.cloud.vm.dao.VMInstanceDao;
 
-@Component
 @Local(value = { UserVmManager.class, UserVmService.class })
 public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager {
     private static final Logger s_logger = Logger
diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
index 45495ad2e2b..64c55cacf1d 100755
--- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -158,7 +158,6 @@ import com.cloud.vm.dao.SecondaryStorageVmDao;
 import com.cloud.vm.dao.UserVmDao;
 import com.cloud.vm.dao.VMInstanceDao;
 
-@Component
 @Local(value = VirtualMachineManager.class)
 public class VirtualMachineManagerImpl implements VirtualMachineManager, Listener {
     private static final Logger s_logger = Logger.getLogger(VirtualMachineManagerImpl.class);
diff --git a/server/src/com/cloud/vm/dao/RandomlyIncreasingVMInstanceDaoImpl.java b/server/src/com/cloud/vm/dao/RandomlyIncreasingVMInstanceDaoImpl.java
index 1e316678c81..cc5c5368a81 100644
--- a/server/src/com/cloud/vm/dao/RandomlyIncreasingVMInstanceDaoImpl.java
+++ b/server/src/com/cloud/vm/dao/RandomlyIncreasingVMInstanceDaoImpl.java
@@ -23,8 +23,6 @@ import org.apache.log4j.Logger;
 import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Component;
 
-@Component
-@Primary
 @Local(value = { UserVmDao.class })
 public class RandomlyIncreasingVMInstanceDaoImpl extends UserVmDaoImpl {
 
diff --git a/server/src/com/cloud/vm/dao/UserVmDaoImpl.java b/server/src/com/cloud/vm/dao/UserVmDaoImpl.java
index e2cf02e010c..f72f03e23e1 100755
--- a/server/src/com/cloud/vm/dao/UserVmDaoImpl.java
+++ b/server/src/com/cloud/vm/dao/UserVmDaoImpl.java
@@ -55,7 +55,6 @@ import com.cloud.vm.dao.UserVmData.NicData;
 import com.cloud.vm.dao.UserVmData.SecurityGroupData;
 
 
-@Component
 @Local(value={UserVmDao.class})
 public class UserVmDaoImpl extends GenericDaoBase implements UserVmDao {
     public static final Logger s_logger = Logger.getLogger(UserVmDaoImpl.class);
diff --git a/setup/db/4.1-new-db-schema.sql b/setup/db/4.1-new-db-schema.sql
index 6770214fac8..07564b6072b 100644
--- a/setup/db/4.1-new-db-schema.sql
+++ b/setup/db/4.1-new-db-schema.sql
@@ -23,7 +23,7 @@ alter table template_spool_ref add state varchar(255);
 alter table template_spool_ref add update_count bigint unsigned;
 alter table volumes add disk_type varchar(255);
 alter table volumes drop foreign key `fk_volumes__account_id`;
-CREATE TABLE `cloud`.`primary_data_store_provider` (
+CREATE TABLE `cloud`.`data_store_provider` (
   `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
   `name` varchar(255) NOT NULL COMMENT 'name of primary data store provider',
   PRIMARY KEY(`id`)
diff --git a/utils/test/com/cloud/utils/DummyPremiumImpl.java b/utils/test/com/cloud/utils/DummyPremiumImpl.java
index 111f08701e6..bf8bfea75e5 100644
--- a/utils/test/com/cloud/utils/DummyPremiumImpl.java
+++ b/utils/test/com/cloud/utils/DummyPremiumImpl.java
@@ -16,11 +16,6 @@
 // under the License.
 package com.cloud.utils;
 
-import org.springframework.context.annotation.Primary;
-import org.springframework.stereotype.Component;
-
-@Component
-@Primary
 public class DummyPremiumImpl implements DummyInterface {
 
 	@Override