Merge of new rebased code

Change-Id: I9b8d1f69eb3e0af1935ed8304fea4bf54c1aac47
Signed-off-by: Patrick Brady <pb071s@att.com>
diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-api/pom.xml b/appc-dispatcher/appc-command-executor/appc-command-executor-api/pom.xml
index 6841b82..7e6f01b 100644
--- a/appc-dispatcher/appc-command-executor/appc-command-executor-api/pom.xml
+++ b/appc-dispatcher/appc-command-executor/appc-command-executor-api/pom.xml
@@ -30,13 +30,13 @@
           <groupId>org.openecomp.appc</groupId>
           <artifactId>appc-common</artifactId>
           <version>${project.version}</version>
+          <scope>compile</scope>
       </dependency>
       <!--<dependency>-->
           <!--<groupId>org.apache.commons</groupId>-->
           <!--<artifactId>commons-lang3</artifactId>-->
           <!--<version>3.4</version>-->
           <!--<scope>provided</scope>-->
-          <!--<type>bundle</type>-->
       <!--</dependency>-->
   </dependencies>
     <build>
@@ -49,9 +49,13 @@
                         <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                         <Bundle-Version>${project.version}</Bundle-Version>
                         <Export-Package>org.openecomp.appc.executor,org.openecomp.appc.executor.objects,org.openecomp.appc.executor.conv,org.openecomp.appc.executor.helper</Export-Package>
-                        <Embed-Dependency>appc-common,eelf-core,logback-core,logback-classic,javax.json;scope=compile|runtime;inline=false</Embed-Dependency>
+                        <Embed-Dependency>
+                            javax.json;scope=compile|runtime;inline=false
+                        </Embed-Dependency>
                         <Embed-Transitive>true</Embed-Transitive>
-                        <Import-Package>!groovy.lang,!javax.*,!org.apache.log,!org.apache.log4j.*,!org.codehaus.jackson.*,!org.codehaus.jackson.map.*,!org.codehaus.commons.compiler,!org.codehaus.groovy.*,!org.codehaus.janino,!org.jasypt.*,!com.ibm.icu.*,!com.sun.faces.*,*</Import-Package>
+                        <Import-Package>
+                            *;resolution:=optional
+                        </Import-Package>
                     </instructions>
                 </configuration>
             </plugin>
diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-api/src/main/java/org/openecomp/appc/executor/objects/LCMCommandStatus.java b/appc-dispatcher/appc-command-executor/appc-command-executor-api/src/main/java/org/openecomp/appc/executor/objects/LCMCommandStatus.java
index 14bd815..6b1b674 100644
--- a/appc-dispatcher/appc-command-executor/appc-command-executor-api/src/main/java/org/openecomp/appc/executor/objects/LCMCommandStatus.java
+++ b/appc-dispatcher/appc-command-executor/appc-command-executor-api/src/main/java/org/openecomp/appc/executor/objects/LCMCommandStatus.java
@@ -41,7 +41,7 @@
     MISSING_MANDATORY_PARAMETER(302,"MISSING MANDATORY PARAMETER - Parameter/s ${paramName} is/are missing" ),
     REQUEST_PARSING_FAILED(303,"REQUEST PARSING FAILED - ${errorMsg}"),
     NO_TRANSITION_DEFINE(304,"ACTION IS NOT ALLOWED - Action ${actionName} is not allowed for VNF in state ${currentState}"),
-    ACTION_NOT_SUPPORTED(305,"ACTION NOT SUPPORTED - ${actionName} action is not supported" ),
+    INVALID_VNF_STATE(305,"Request rejected because VNF status in A&AI is - ${currentState}" ),
     VNF_NOT_FOUND(306,"VNF NOT FOUND - VNF with ID ${vnfId} was not found" ),
     DG_WORKFLOW_NOT_FOUND(307,"DG WORKFLOW NOT FOUND - No DG workflow found for the combination of ${dgModule} module ${dgName} name and ${dgVersion} version"),//TODO need to support it
     WORKFLOW_NOT_FOUND(308,"WORKFLOW NOT FOUND - No workflow found for VNF type ${vnfTypeVersion} and ${actionName} action"),
@@ -49,6 +49,7 @@
     LOCKING_FAILURE(310,"LOCKING FAILURE - ${errorMsg}" ),
 	EXPIRED_REQUEST(311,"EXPIRED REQUEST"),
     DUPLICATE_REQUEST(312,"DUPLICATE REQUEST"),
+    MISSING_VNF_DATA_IN_AAI(313,"MISSING VNF DATA IN A&AI - ${attributeName} not found for VNF ID = ${vnfId}"),
 
     SUCCESS(400,"SUCCESS - request has been processed successfully"),
 
diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/pom.xml b/appc-dispatcher/appc-command-executor/appc-command-executor-core/pom.xml
index ef73055..d827fba 100644
--- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/pom.xml
+++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/pom.xml
@@ -40,7 +40,6 @@
         <dependency>
         	<groupId>org.openecomp.appc</groupId>
         	<artifactId>appc-command-executor-api</artifactId>
-        	<version>${project.version}</version>
         </dependency>
         <dependency>
         	<groupId>org.openecomp.appc</groupId>
@@ -92,14 +91,28 @@
                     <instructions>
                         <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                         <Bundle-Version>${project.version}</Bundle-Version>
-                        <Embed-Dependency>appc-common,eelf-core,logback-core,logback-classic;scope=compile|runtime;inline=false</Embed-Dependency>
+                        <Embed-Dependency>eelf-core,logback-core,logback-classic;scope=compile|runtime;inline=false</Embed-Dependency>
                         <Embed-Transitive>true</Embed-Transitive>
                         <Export-Service>org.openecomp.appc.executor.CommandExecutor</Export-Service>
-                        <Import-Package>org.openecomp.appc.executionqueue.*,org.openecomp.appc.executor,org.openecomp.appc.executor.objects,!groovy.lang,!javax.jms,!org.apache.log,!org.apache.log4j.*,!org.codehaus.jackson.*,!org.codehaus.jackson.map.*,!org.codehaus.commons.compiler,!org.codehaus.groovy.*,!org.codehaus.janino,!org.jasypt.*,!com.ibm.icu.*,!com.sun.faces.*,*;resolution:=optional</Import-Package>
+                        <Import-Package>
+                            org.openecomp.appc.executionqueue.*,
+                            org.openecomp.appc.executor,
+                            org.openecomp.appc.executor.objects,
+                            *;resolution:=optional
+                        </Import-Package>
                     </instructions>
                 </configuration>
             </plugin>
         </plugins>
     </build>
 
+    <dependencyManagement>
+    	<dependencies>
+    		<dependency>
+    			<groupId>org.openecomp.appc</groupId>
+    			<artifactId>appc-command-executor-api</artifactId>
+    			<version>${project.version}</version>
+    		</dependency>
+    	</dependencies>
+    </dependencyManagement>
 </project>
diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandExecutorImpl.java b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandExecutorImpl.java
index fcc4f91..7e1281a 100644
--- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandExecutorImpl.java
+++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandExecutorImpl.java
@@ -87,6 +87,34 @@
         }
     }
 
+    private RuntimeContext getCommandRequest(RuntimeContext commandExecutorInput){
+        if (logger.isTraceEnabled()) {
+            logger.trace("Entering to getCommandRequest with CommandExecutorInput = "+ ObjectUtils.toString(commandExecutorInput));
+        }
+        RuntimeContext commandRequest;
+        commandRequest = commandExecutorInput;
+        /*
+        CommandRequest commandRequest;
+
+        switch(commandExecutorInput.getRequestContext().getAction()){
+            case Sync:
+            case Audit:
+            case ConfigBackup:
+            case ConfigBackupDelete:
+            case ConfigExport:
+                commandRequest = new LCMReadOnlyCommandRequest(commandExecutorInput);
+                break;
+            default:
+                commandRequest = new LCMCommandRequest(commandExecutorInput);
+                break;
+        }
+        */
+        if (logger.isTraceEnabled()) {
+            logger.trace("Exiting from getCommandRequest with (CommandRequest = "+ ObjectUtils.toString(commandRequest)+")");
+        }
+        return commandRequest;
+    }
+
     @SuppressWarnings("unchecked")
     private void enqueRequest(RuntimeContext request) throws APPCException{
         if (logger.isTraceEnabled()) {
diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandTask.java b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandTask.java
index 21a0086..66b98bb 100644
--- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandTask.java
+++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandTask.java
@@ -21,29 +21,17 @@
 
 package org.openecomp.appc.executor.impl;
 
-import static com.att.eelf.configuration.Configuration.MDC_ALERT_SEVERITY;
-import static com.att.eelf.configuration.Configuration.MDC_INSTANCE_UUID;
-import static com.att.eelf.configuration.Configuration.MDC_KEY_REQUEST_ID;
-import static com.att.eelf.configuration.Configuration.MDC_SERVER_FQDN;
-import static com.att.eelf.configuration.Configuration.MDC_SERVER_IP_ADDRESS;
-import static com.att.eelf.configuration.Configuration.MDC_SERVICE_INSTANCE_ID;
-import static com.att.eelf.configuration.Configuration.MDC_SERVICE_NAME;
-
-import java.net.InetAddress;
-
-import org.openecomp.appc.domainmodel.lcm.RuntimeContext;
 import org.openecomp.appc.domainmodel.lcm.Status;
 import org.openecomp.appc.executor.objects.CommandResponse;
 import org.openecomp.appc.executor.objects.LCMCommandStatus;
 import org.openecomp.appc.executor.objects.Params;
-import org.openecomp.appc.logging.LoggingConstants;
 import org.openecomp.appc.requesthandler.RequestHandler;
+import org.openecomp.appc.domainmodel.lcm.RuntimeContext;
 import org.openecomp.appc.workflow.WorkFlowManager;
 import org.openecomp.appc.workflow.objects.WorkflowRequest;
 import org.openecomp.appc.workflow.objects.WorkflowResponse;
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
-import org.slf4j.MDC;
 
 /**
  * This abstract class is base class for all Command tasks. All command task must inherit this class.
@@ -80,19 +68,6 @@
 
     public void execute() {
         final RuntimeContext runtimeContext = commandRequest;
-        MDC.put(MDC_KEY_REQUEST_ID, runtimeContext.getRequestContext().getCommonHeader().getRequestId());
-        if (runtimeContext.getRequestContext().getActionIdentifiers().getServiceInstanceId() != null)
-            MDC.put(MDC_SERVICE_INSTANCE_ID, runtimeContext.getRequestContext().getActionIdentifiers().getServiceInstanceId());
-        MDC.put(LoggingConstants.MDCKeys.PARTNER_NAME, runtimeContext.getRequestContext().getCommonHeader().getOriginatorId());
-        MDC.put(MDC_SERVICE_NAME, runtimeContext.getRequestContext().getAction().name());
-        try {
-            MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getCanonicalHostName()); //Don't change it to a .getLocalHostName() again please. It's wrong!
-            MDC.put(MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress());
-        }catch(Exception e){
-            logger.debug(e.getMessage());
-        }
-        MDC.put(MDC_INSTANCE_UUID, ""); //TODO make instanse_UUID generation once during APPC-instanse deploying
-
         WorkflowRequest workflowRequest = new WorkflowRequest();
         workflowRequest.setRequestContext(runtimeContext.getRequestContext());
         workflowRequest.setResponseContext(runtimeContext.getResponseContext());
diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandTaskFactory.java b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandTaskFactory.java
index 2f9d2c9..5e47860 100644
--- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandTaskFactory.java
+++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandTaskFactory.java
@@ -51,7 +51,8 @@
 
 
     public synchronized CommandTask getExecutionTask(String action, RuntimeContext commandRequest){
-        if (VNFOperation.Sync.toString().equals(action) || VNFOperation.Audit.toString().equals(action)){
+        if (VNFOperation.Sync.toString().equals(action) || VNFOperation.Audit.toString().equals(action) || VNFOperation.ConfigBackup.toString().equals(action) ||
+                VNFOperation.ConfigBackupDelete.toString().equals(action) || VNFOperation.ConfigExport.toString().equals(action)){
             return new LCMReadonlyCommandTask(commandRequest, requestHandler,workflowManager);
         }else {
             return new LCMCommandTask(commandRequest, requestHandler,workflowManager,
diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/LCMCommandTask.java b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/LCMCommandTask.java
index ef25c67..be9f94f 100644
--- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/LCMCommandTask.java
+++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/LCMCommandTask.java
@@ -28,6 +28,7 @@
 import org.apache.commons.lang3.StringUtils;
 import org.openecomp.appc.domainmodel.lcm.CommonHeader;
 import org.openecomp.appc.domainmodel.lcm.RuntimeContext;
+import org.openecomp.appc.domainmodel.lcm.Status;
 import org.openecomp.appc.domainmodel.lcm.VNFOperation;
 import org.openecomp.appc.executor.UnstableVNFException;
 import org.openecomp.appc.executor.objects.CommandResponse;
@@ -38,6 +39,7 @@
 import org.openecomp.appc.lifecyclemanager.objects.LifecycleException;
 import org.openecomp.appc.lifecyclemanager.objects.NoTransitionDefinedException;
 import org.openecomp.appc.lifecyclemanager.objects.VNFOperationOutcome;
+import org.openecomp.appc.logging.LoggingConstants;
 import org.openecomp.appc.requesthandler.RequestHandler;
 import org.openecomp.appc.workflow.WorkFlowManager;
 import org.openecomp.appc.workflow.objects.WorkflowResponse;
@@ -48,10 +50,16 @@
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.FrameworkUtil;
 import org.osgi.framework.ServiceReference;
+import org.slf4j.MDC;
 
+import java.net.InetAddress;
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 
+import static com.att.eelf.configuration.Configuration.*;
+import static com.att.eelf.configuration.Configuration.MDC_SERVICE_INSTANCE_ID;
+import static com.att.eelf.configuration.Configuration.MDC_SERVICE_NAME;
+
 
 public class LCMCommandTask extends CommandTask {
 
@@ -103,9 +111,15 @@
 				isAAIUpdated = updateAAI(request.getVnfContext().getId() , false, isSuccess);
 			}
 			logger.debug("isAAIUpdated = " + isAAIUpdated);
+			if(!isAAIUpdated){
+				throw new Exception();
+			}
 		}
 		catch(Exception e1) {
 			logger.error("Exception = " + e1);
+			// In case of any errors we are updating the response status code and message
+			Status updatedStatus = new Status(401, "Fail to update VNF status in A&AI");
+			request.getResponseContext().setStatus(updatedStatus);
 			throw new RuntimeException(e1);
 		}
 		finally {
@@ -115,8 +129,9 @@
 
 	@Override
 	public void run() {
-        final RuntimeContext request = commandRequest;
-        boolean isAAIUpdated = false;
+		final RuntimeContext request = commandRequest;
+		setInitialLogProperties(request);
+		boolean isAAIUpdated = false;
 		final String vnfId = request.getVnfContext().getId();
 		final String vnfType = request.getVnfContext().getType();
 		try {
@@ -163,11 +178,12 @@
 			CommandResponse commandResponse = super.buildCommandResponse(response);
 			this.onRequestCompletion(commandResponse);
 		}
-	}
+
+        clearRequestLogProperties();
+    }
 
 
-
-	private boolean updateAAI(String vnf_id , boolean isTTLEnd , boolean executionStatus)
+	private boolean updateAAI(String vnf_id, boolean isTTLEnd, boolean executionStatus)
 	{
 		String orchestrationStatus = null;
 		String nextState;
@@ -203,7 +219,7 @@
 
 
 	private SvcLogicContext getVnfdata(String vnf_id, String prefix,SvcLogicContext ctx) {
-		String key="vnf-id = '"+ vnf_id+"'";
+		String key="generic-vnf.vnf-id = '"+ vnf_id+"'"+" AND http-header.Real-Time = 'true'";
 		logger.debug("inside getVnfdata=== "+key);
 		try {
 			SvcLogicResource.QueryStatus response = aaiService.query("generic-vnf", false, null, key,prefix, null, ctx);
@@ -245,4 +261,31 @@
 		return false;
 	}
 
+    protected void setInitialLogProperties(RuntimeContext request)
+    {
+        MDC.put(MDC_KEY_REQUEST_ID, request.getRequestContext().getCommonHeader().getRequestId());
+        if (request.getRequestContext().getActionIdentifiers().getServiceInstanceId() != null)
+            MDC.put(MDC_SERVICE_INSTANCE_ID, request.getRequestContext().getActionIdentifiers().getServiceInstanceId());
+        MDC.put(LoggingConstants.MDCKeys.PARTNER_NAME, request.getRequestContext().getCommonHeader().getOriginatorId());
+        MDC.put(MDC_SERVICE_NAME, request.getRequestContext().getAction().name());
+        try {
+            MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getCanonicalHostName());
+            MDC.put(MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress());
+        } catch (Exception e) {
+            logger.debug(e.getMessage());
+        }
+        MDC.put(MDC_INSTANCE_UUID, ""); //TODO make instanse_UUID generation once during APPC-instanse deploying
+    }
+
+    protected void clearRequestLogProperties()
+    {
+        try {
+            MDC.remove(MDC_KEY_REQUEST_ID);
+            MDC.remove(MDC_SERVICE_INSTANCE_ID);
+            MDC.remove(MDC_SERVICE_NAME);
+            MDC.remove(LoggingConstants.MDCKeys.PARTNER_NAME);
+        } catch (Exception e) {
+
+        }
+    }
 }
diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/resources/org/openecomp/appc/default.properties b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/resources/org/openecomp/appc/default.properties
index 2e5f26a..b4cdae5 100644
--- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/resources/org/openecomp/appc/default.properties
+++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/resources/org/openecomp/appc/default.properties
@@ -24,25 +24,12 @@
 org.openecomp.appc.bootstrap.file=appc.properties
 org.openecomp.appc.bootstrap.path=/opt/openecomp/appc/data/properties,${user.home},.
 
-
 #Property below provided by appc.properties
-#dmaap.poolMembers=<DMAAP_IP>:3904
+appc.LCM.provider.url=https://localhost:8443/restconf/operations/appc-provider-lcm
+appc.LCM.poolMembers=<DMAAP_IP>:3904
+appc.LCM.service=dmaap
+appc.LCM.topic.write=APPC-TEST2
+appc.LCM.client.name=APPC-TEST-CLIENT-CMD-EXECUTOR-MAIN
+appc.LCM.provider.user=test
+appc.LCM.provider.pass=test
 
-dmaap.topic.read=APPC-TEST2
-dmaap.topic.write=APPC-TEST2
-dmaap.topic.read.filter={"class": "And","filters": [{"class": "Assigned","field": "request"},{"class": "Unassigned","field": "response"}]}
-dmaap.client.name=APPC-TEST-CLIENT-CMD-EXECUTOR-MAIN
-dmaap.client.name.id=0
-#dmaap.client.key=random
-#dmaap.client.secret=random
-
-dmaap.threads.queuesize.min=1
-dmaap.threads.queuesize.max=1000
-dmaap.threads.poolsize.min=2
-dmaap.threads.poolsize.max=2
-
-# 
-# This needs to be changed so that the action can be appended to the end of the URL path 
-#
-#provider.urls.topology=https://admin:password@<IP_ADDRESS>:8443/restconf/operations/appc-provider:topology-service
-#provider.urls.topology=https://admin:password@<IP_ADDRESS>:8443/restconf/operations/appc-provider:
diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/resources/org/openecomp/appc/default.properties b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/resources/org/openecomp/appc/default.properties
index 74552a9..fc0330d 100644
--- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/resources/org/openecomp/appc/default.properties
+++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/resources/org/openecomp/appc/default.properties
@@ -76,27 +76,13 @@
 org.openecomp.appc.db.user.%s", schema), "");
 org.openecomp.appc.db.pass.%s", schema), "");
 
-
 #Property below provided by appc.properties
-#dmaap.poolMembers=<DMAAP_IP>:3904
-
-dmaap.topic.read=APPC-TEST2
-dmaap.topic.write=APPC-TEST2
-#dmaap.topic.read.filter={"class":"Assigned","field":"request"}
-dmaap.topic.read.filter={"class": "And","filters": [{"class": "Assigned","field": "request"},{"class": "Unassigned","field": "response"}]}
-dmaap.client.name=APPC-TEST-CLIENT-CMD-EXECUTOR-TEST
-dmaap.client.name.id=0
-#dmaap.client.key=random
-#dmaap.client.secret=random
-
-dmaap.threads.queuesize.min=1
-dmaap.threads.queuesize.max=1000
-dmaap.threads.poolsize.min=2
-dmaap.threads.poolsize.max=2
+appc.LCM.provider.url=https://localhost:8443/restconf/operations/appc-provider-lcm
+appc.LCM.poolMembers=<DMAAP_IP>:3904
+appc.LCM.service=dmaap
+appc.LCM.topic.write=APPC-TEST2
+appc.LCM.client.name=APPC-TEST-CLIENT-CMD-EXECUTOR-TEST
+appc.LCM.provider.user=test
+appc.LCM.provider.pass=test
 
 
-#
-# This needs to be changed so that the action can be appended to the end of the URL path
-#
-#provider.urls.topology=https://admin:password@<IP_ADDRESS>:8443/restconf/operations/appc-provider:topology-service
-#provider.urls.topology=https://admin:password@<IP_ADDRESS>:8443/restconf/operations/appc-provider:
diff --git a/appc-dispatcher/appc-dispatcher-common/appc-data-access-lib/pom.xml b/appc-dispatcher/appc-dispatcher-common/appc-data-access-lib/pom.xml
index cae7eed..94a45e3 100644
--- a/appc-dispatcher/appc-dispatcher-common/appc-data-access-lib/pom.xml
+++ b/appc-dispatcher/appc-dispatcher-common/appc-data-access-lib/pom.xml
@@ -6,7 +6,7 @@
         <version>1.1.0-SNAPSHOT</version>
     </parent>
   <artifactId>appc-data-access-lib</artifactId>
-  <packaging>jar</packaging>
+  <packaging>bundle</packaging>
 
   <name>appc-data-access-lib</name>
   <url>http://maven.apache.org</url>
@@ -35,7 +35,24 @@
           <groupId>org.openecomp.appc</groupId>
           <artifactId>appc-common</artifactId>
           <version>${project.version}</version>
-          <scope>compile</scope>
       </dependency>
   </dependencies>
+  <build>
+    <plugins>
+        <plugin>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>maven-bundle-plugin</artifactId>
+            <extensions>true</extensions>
+            <configuration>
+                <instructions>
+                    <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+                    <Export-Package>org.openecomp.appc.dao.util</Export-Package>
+                    <Import-Package>org.openecomp.appc.configuration,*;resolution:=optional</Import-Package>
+                    <Embed-Dependency>mysql-connector-java</Embed-Dependency>
+                    <Embed-Transitive>true</Embed-Transitive>
+                </instructions>
+            </configuration>
+        </plugin>
+    </plugins>
+  </build>
 </project>
diff --git a/appc-dispatcher/appc-dispatcher-common/domain-model-lib/src/main/java/org/openecomp/appc/domainmodel/lcm/VNFOperation.java b/appc-dispatcher/appc-dispatcher-common/domain-model-lib/src/main/java/org/openecomp/appc/domainmodel/lcm/VNFOperation.java
index c61901e..904722f 100644
--- a/appc-dispatcher/appc-dispatcher-common/domain-model-lib/src/main/java/org/openecomp/appc/domainmodel/lcm/VNFOperation.java
+++ b/appc-dispatcher/appc-dispatcher-common/domain-model-lib/src/main/java/org/openecomp/appc/domainmodel/lcm/VNFOperation.java
@@ -23,8 +23,9 @@
 
 public enum VNFOperation {
 
-	Configure, Test, HealthCheck, Start, Terminate, Restart, Rebuild, Stop, ModifyConfig, Backup, Snapshot,
-	SoftwareUpload, LiveUpgrade, Rollback, Sync, Audit, Test_lic, Migrate, Evacuate,
+	Configure, Test, HealthCheck, Start, Terminate, Restart, Rebuild, Stop, ConfigModify,
+	ConfigScaleOut,ConfigRestore,Backup, Snapshot,
+	SoftwareUpload, LiveUpgrade, Rollback, Sync, Audit, Test_lic, Migrate, Evacuate,ConfigBackup,ConfigBackupDelete,ConfigExport,
 	Lock(true), Unlock(true), CheckLock(true);
 
 	private boolean builtIn;
diff --git a/appc-dispatcher/appc-dispatcher-common/execution-queue-management-lib/pom.xml b/appc-dispatcher/appc-dispatcher-common/execution-queue-management-lib/pom.xml
index f8b1e56..d20759f 100644
--- a/appc-dispatcher/appc-dispatcher-common/execution-queue-management-lib/pom.xml
+++ b/appc-dispatcher/appc-dispatcher-common/execution-queue-management-lib/pom.xml
@@ -26,7 +26,7 @@
       <artifactId>eelf-core</artifactId>
       </dependency>
   </dependencies>
-  
+
       <build>
         <plugins>
             <plugin>
@@ -36,10 +36,11 @@
                     <instructions>
                         <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                         <Bundle-Version>${project.version}</Bundle-Version>
-			            <Embed-Dependency>appc-common,eelf-core,logback-core,logback-classic;scope=compile|runtime;inline=false</Embed-Dependency>
                         <Embed-Transitive>true</Embed-Transitive>
                         <Export-Package>org.openecomp.appc.executionqueue,org.openecomp.appc.executionqueue.impl</Export-Package>
-                        <Import-Package>!groovy.lang,!javax.*,!org.apache.log,!org.apache.log4j.*,!org.codehaus.jackson.*,!org.codehaus.jackson.map.*,!org.codehaus.commons.compiler,!org.codehaus.groovy.*,!org.apache.commons.lang3,!org.codehaus.janino,!org.jasypt.*,!com.ibm.icu.*,!com.sun.faces.*,*</Import-Package>
+                        <Import-Package>
+                            *;resolution:=optional
+                        </Import-Package>
                     </instructions>
                 </configuration>
             </plugin>
diff --git a/appc-dispatcher/appc-dispatcher-common/execution-queue-management-lib/src/main/java/org/openecomp/appc/executionqueue/impl/ExecutionQueueServiceFactory.java b/appc-dispatcher/appc-dispatcher-common/execution-queue-management-lib/src/main/java/org/openecomp/appc/executionqueue/impl/ExecutionQueueServiceFactory.java
index 01e4358..29de597 100644
--- a/appc-dispatcher/appc-dispatcher-common/execution-queue-management-lib/src/main/java/org/openecomp/appc/executionqueue/impl/ExecutionQueueServiceFactory.java
+++ b/appc-dispatcher/appc-dispatcher-common/execution-queue-management-lib/src/main/java/org/openecomp/appc/executionqueue/impl/ExecutionQueueServiceFactory.java
@@ -25,16 +25,11 @@
 
 public class ExecutionQueueServiceFactory {
 
-    private static ExecutionQueueService executionQueueService =null;
-
-    public static ExecutionQueueService getExecutionQueueService(){
-        if(executionQueueService == null){
-            synchronized (ExecutionQueueServiceFactory.class){
-                if(executionQueueService == null)
-                    executionQueueService = new ExecutionQueueServiceImpl();
-            }
-        }
-        return executionQueueService;
+    private static class ExecutionQueueServiceHolder {
+        public static final ExecutionQueueService executionQueueService = new ExecutionQueueServiceImpl();
     }
 
+    public static ExecutionQueueService getExecutionQueueService() {
+        return ExecutionQueueServiceHolder.executionQueueService;
+    }
 }
diff --git a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-features/src/main/resources/features.xml b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-features/src/main/resources/features.xml
index ed51ca7..8b21318 100644
--- a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-features/src/main/resources/features.xml
+++ b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-features/src/main/resources/features.xml
@@ -26,6 +26,10 @@
     xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0  http://karaf.apache.org/xmlns/features/v1.2.0">     
         
     <feature name='lock-manager' description="lock-manager" version='${project.version}'>
+        <!-- appc-common and appc-data-access-lib bundles are flagged as being a dependency -->
+        <bundle dependency="true">mvn:org.openecomp.appc/appc-common/${project.version}</bundle>
+        <bundle dependency="true">mvn:org.openecomp.appc/appc-data-access-lib/${project.version}</bundle>
+
     	<bundle start-level="80" start="true">mvn:org.openecomp.appc/lock-manager-api/${project.version}</bundle>
         <bundle start-level="85" start="true">mvn:org.openecomp.appc/lock-manager-impl/${project.version}</bundle>
     </feature>
diff --git a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/pom.xml b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/pom.xml
index 48befce..8da6519 100644
--- a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/pom.xml
+++ b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/pom.xml
@@ -28,7 +28,6 @@
             <groupId>org.openecomp.appc</groupId>
             <artifactId>appc-data-access-lib</artifactId>
             <version>${project.version}</version>
-            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>com.att.eelf</groupId>
@@ -49,16 +48,16 @@
                 <configuration>
                     <instructions>
                         <Export-Service>org.openecomp.appc.lockmanager.api.LockManager</Export-Service>
-                        <Import-Package>org.openecomp.appc.lockmanager.api.*,*</Import-Package>
+                        <Import-Package>
+                            org.openecomp.appc.lockmanager.api.*,
+                            org.openecomp.appc.dao.util,com.att.eelf.configuration, *;resolution:=optional
+                        </Import-Package>
                         <Private-Package>org.openecomp.appc.lockmanager.impl.*</Private-Package>
                         <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                         <Bundle-Version>${project.version}</Bundle-Version>
-                        <Import-Package>!org.apache.log,!org.apache.commons.logging,!groovy.lang,!javax.jms,!javax.mail.*,!org.codehaus.commons.compiler,!org.codehaus.groovy.*,!org.codehaus.janino,!com.ibm.icu.*,!com.sun.faces.*,!org.jasypt.*,*</Import-Package>
-                        <Embed-Dependency>appc-common,appc-data-access-lib,eelf-core,logback-core,logback-classic;scope=compile|runtime;inline=false</Embed-Dependency>
-                        <Embed-Transitive>true</Embed-Transitive>
                     </instructions>
                 </configuration>
             </plugin>
         </plugins>
     </build>
-</project>
\ No newline at end of file
+</project>
diff --git a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/main/java/org/openecomp/appc/lockmanager/impl/sql/Messages.java b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/main/java/org/openecomp/appc/lockmanager/impl/sql/Messages.java
index 0399726..62181d4 100644
--- a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/main/java/org/openecomp/appc/lockmanager/impl/sql/Messages.java
+++ b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/main/java/org/openecomp/appc/lockmanager/impl/sql/Messages.java
@@ -28,6 +28,7 @@
     ERR_UNLOCK_NOT_LOCKED("Error unlocking resource [%s]: resource is not locked"),
     ERR_UNLOCK_LOCKED_BY_OTHER("Error unlocking resource [%s] by [%s]: resource is locked by [%s]"),
     EXP_LOCK("Error locking resource [%s]."),
+    EXP_CHECK_LOCK("Error check locking resource [%s]."),//for checklock operation
     EXP_UNLOCK("Error unlocking resource [%s]."),
     ;
 
diff --git a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/main/java/org/openecomp/appc/lockmanager/impl/sql/optimistic/SqlLockManager.java b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/main/java/org/openecomp/appc/lockmanager/impl/sql/optimistic/SqlLockManager.java
index 52c75d2..54622c4 100644
--- a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/main/java/org/openecomp/appc/lockmanager/impl/sql/optimistic/SqlLockManager.java
+++ b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/main/java/org/openecomp/appc/lockmanager/impl/sql/optimistic/SqlLockManager.java
@@ -91,7 +91,7 @@
                 }
 			}
 		} catch (SQLException e) {
-			throw new LockRuntimeException(Messages.EXP_LOCK.format(resource));
+			throw new LockRuntimeException(Messages.EXP_CHECK_LOCK.format(resource));
 		}finally {
             closeDbConnection(connection);
         }
diff --git a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/main/java/org/openecomp/appc/lockmanager/impl/sql/pessimistic/LockRecord.java b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/main/java/org/openecomp/appc/lockmanager/impl/sql/pessimistic/LockRecord.java
new file mode 100644
index 0000000..7d53737
--- /dev/null
+++ b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/main/java/org/openecomp/appc/lockmanager/impl/sql/pessimistic/LockRecord.java
@@ -0,0 +1,62 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ * 						reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.lockmanager.impl.sql.pessimistic;
+
+class LockRecord {
+
+	private String resource;
+	private String owner;
+	private long updated;
+	private long timeout;
+
+	LockRecord(String resource) {
+		this.resource = resource;
+	}
+
+	public String getResource() {
+		return resource;
+	}
+
+	public String getOwner() {
+		return owner;
+	}
+
+	public void setOwner(String owner) {
+		this.owner = owner;
+	}
+
+	public long getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(long updated) {
+		this.updated = updated;
+	}
+
+	public long getTimeout() {
+		return timeout;
+	}
+
+	public void setTimeout(long timeout) {
+		this.timeout = timeout;
+	}
+}
diff --git a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/main/java/org/openecomp/appc/lockmanager/impl/sql/pessimistic/MySqlLockManager.java b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/main/java/org/openecomp/appc/lockmanager/impl/sql/pessimistic/MySqlLockManager.java
new file mode 100644
index 0000000..79d0f6c
--- /dev/null
+++ b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/main/java/org/openecomp/appc/lockmanager/impl/sql/pessimistic/MySqlLockManager.java
@@ -0,0 +1,85 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ * 						reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.lockmanager.impl.sql.pessimistic;
+
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.openecomp.appc.lockmanager.api.LockRuntimeException;
+
+public class MySqlLockManager extends SqlLockManager {
+
+	private static final int DEF_CRITICAL_SECTION_WAIT_TIMEOUT = 3;
+
+	protected int criticalSectionWaitTimeoutSecs = DEF_CRITICAL_SECTION_WAIT_TIMEOUT;
+
+	public void setCriticalSectionWaitTimeoutSecs(int criticalSectionWaitTimeoutSecs) {
+		this.criticalSectionWaitTimeoutSecs = criticalSectionWaitTimeoutSecs;
+	}
+
+	@Override
+	protected void enterCriticalSection(Connection connection, String resource) {
+		try {
+			CallableStatement statement = connection.prepareCall("SELECT COALESCE(GET_LOCK(?,?),0)");
+			try {
+				statement.setString(1, resource);
+				statement.setInt(2, criticalSectionWaitTimeoutSecs);
+				boolean execRes = statement.execute();
+				int result = 0;
+				if(execRes) {
+					ResultSet resultSet = statement.getResultSet();
+					try {
+						if(resultSet.next()) {
+							result = resultSet.getInt(1);
+						}
+					} finally {
+						resultSet.close();
+					}
+				}
+				if(result != 1) { // lock is not obtained
+					throw new LockRuntimeException("Cannot obtain critical section lock for resource [" + resource + "].");
+				}
+			} finally {
+				statement.close();
+			}
+		} catch(SQLException e) {
+            throw new LockRuntimeException("Cannot obtain critical section lock for resource [" + resource + "].", e);
+		}
+	}
+
+	@Override
+	protected void leaveCriticalSection(Connection connection, String resource) {
+		try {
+			CallableStatement statement = connection.prepareCall("SELECT RELEASE_LOCK(?)");
+			try {
+				statement.setString(1, resource);
+				statement.execute();
+			} finally {
+				statement.close();
+			}
+		} catch(SQLException e) {
+			throw new LockRuntimeException("Error releasing critical section lock.", e);
+		}
+	}
+}
diff --git a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/main/java/org/openecomp/appc/lockmanager/impl/sql/pessimistic/SqlLockManager.java b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/main/java/org/openecomp/appc/lockmanager/impl/sql/pessimistic/SqlLockManager.java
new file mode 100644
index 0000000..71f6492
--- /dev/null
+++ b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/main/java/org/openecomp/appc/lockmanager/impl/sql/pessimistic/SqlLockManager.java
@@ -0,0 +1,251 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ * 						reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.lockmanager.impl.sql.pessimistic;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.openecomp.appc.lockmanager.api.LockException;
+import org.openecomp.appc.lockmanager.api.LockRuntimeException;
+import org.openecomp.appc.lockmanager.impl.sql.JdbcLockManager;
+import org.openecomp.appc.lockmanager.impl.sql.Messages;
+
+abstract class SqlLockManager extends JdbcLockManager {
+
+	private static final String SQL_LOAD_LOCK_RECORD = "SELECT * FROM %s WHERE RESOURCE_ID=?";
+	private static final String SQL_INSERT_LOCK_RECORD = "INSERT INTO %s (RESOURCE_ID, OWNER_ID, UPDATED, TIMEOUT) VALUES (?, ?, ?, ?)";
+	private static final String SQL_UPDATE_LOCK_RECORD = "UPDATE %s SET OWNER_ID=?, UPDATED=?, TIMEOUT=? WHERE RESOURCE_ID=?";
+	private static final String SQL_CURRENT_TIMESTAMP = "SELECT CURRENT_TIMESTAMP()";
+
+	private String sqlLoadLockRecord;
+	private String sqlInsertLockRecord;
+	private String sqlUpdateLockRecord;
+
+	@Override
+	public boolean acquireLock(String resource, String owner) throws LockException {
+		return acquireLock(resource, owner, 0);
+	}
+
+	@Override
+	public boolean acquireLock(String resource, String owner, long timeout) throws LockException {
+		if(owner == null) {
+			throw new LockRuntimeException(Messages.ERR_NULL_LOCK_OWNER.format(resource));
+		}
+		boolean res = false;
+		Connection connection = openDbConnection();
+		try {
+			enterCriticalSection(connection, resource);
+			try {
+				res = lockResource(connection, resource, owner, timeout);
+			} finally {
+				leaveCriticalSection(connection, resource);
+			}
+		} finally {
+			closeDbConnection(connection);
+		}
+		return res;
+	}
+
+	@Override
+	public void releaseLock(String resource, String owner) throws LockException {
+		Connection connection = openDbConnection();
+		try {
+			enterCriticalSection(connection, resource);
+			try {
+				unlockResource(connection, resource, owner);
+			} finally {
+				leaveCriticalSection(connection, resource);
+			}
+		} finally {
+			closeDbConnection(connection);
+		}
+	}
+
+	@Override
+	public boolean isLocked(String resource) {
+		Connection connection=openDbConnection();
+		try {
+			LockRecord lockRecord=loadLockRecord(connection,resource);
+			if(lockRecord==null){
+				return false;
+			}else{
+				if(lockRecord.getOwner()==null){
+					return false;
+				}else if(isLockExpired(lockRecord, connection)){
+					return false;
+				}else{
+					return true;
+				}
+			}
+		} catch (SQLException e) {
+			throw new LockRuntimeException(Messages.EXP_CHECK_LOCK.format(resource));
+		}finally {
+			closeDbConnection(connection);
+		}
+	}
+
+	private boolean lockResource(Connection connection, String resource, String owner, long timeout) throws LockException {
+		try {
+			boolean res = false;
+			LockRecord lockRecord = loadLockRecord(connection, resource);
+			if(lockRecord != null) {
+				// lock record already exists
+				String currentOwner = lockRecord.getOwner();
+				if(currentOwner != null) {
+					if(isLockExpired(lockRecord, connection)) {
+						currentOwner = null;
+					} else if(!owner.equals(currentOwner)) {
+						throw new LockException(Messages.ERR_LOCK_LOCKED_BY_OTHER.format(resource, owner, currentOwner));
+					}
+				}
+				// set new owner on the resource lock record
+				updateLockRecord(connection, resource, owner, timeout);
+				if(currentOwner == null) {
+					// no one locked the resource before
+					res = true;
+				}
+			} else {
+				// resource record does not exist in lock table => create new record
+				addLockRecord(connection, resource, owner, timeout);
+				res = true;
+			}
+			return res;
+		} catch(SQLException e) {
+			throw new LockRuntimeException(Messages.EXP_LOCK.format(resource), e);
+		}
+	}
+
+	private void unlockResource(Connection connection, String resource, String owner) throws LockException {
+		try {
+			LockRecord lockRecord = loadLockRecord(connection, resource);
+			if(lockRecord != null) {
+				// check if expired
+				if(isLockExpired(lockRecord, connection)) {
+					// lock is expired => no lock
+					lockRecord = null;
+				}
+			}
+			if((lockRecord == null) || (lockRecord.getOwner() == null)) {
+				// resource is not locked
+				throw new LockException(Messages.ERR_UNLOCK_NOT_LOCKED.format(resource));
+			}
+			String currentOwner = lockRecord.getOwner();
+			if(!owner.equals(currentOwner)) {
+				throw new LockException(Messages.ERR_UNLOCK_LOCKED_BY_OTHER.format(resource, owner, currentOwner));
+			}
+			updateLockRecord(connection, resource, null, 0);
+			// TODO delete record from table on lock release?
+//			deleteLockRecord(connection, resource);
+		} catch(SQLException e) {
+			throw new LockRuntimeException(Messages.EXP_UNLOCK.format(resource), e);
+		}
+	}
+
+	protected abstract void enterCriticalSection(Connection connection, String resource);
+
+	protected abstract void leaveCriticalSection(Connection connection, String resource);
+
+	protected LockRecord loadLockRecord(Connection connection, String resource) throws SQLException {
+		LockRecord res = null;
+		if(sqlLoadLockRecord == null) {
+			sqlLoadLockRecord = String.format(SQL_LOAD_LOCK_RECORD, tableName);
+		}
+		try(PreparedStatement statement = connection.prepareStatement(sqlLoadLockRecord)) {
+			statement.setString(1, resource);
+			try(ResultSet resultSet = statement.executeQuery()) {
+				if(resultSet.next()) {
+					res = new LockRecord(resource);
+					res.setOwner(resultSet.getString(2));
+					res.setUpdated(resultSet.getLong(3));
+					res.setTimeout(resultSet.getLong(4));
+				}
+			}
+		}
+		return res;
+	}
+
+	protected void addLockRecord(Connection connection, String resource, String owner, long timeout) throws SQLException {
+		if(sqlInsertLockRecord == null) {
+			sqlInsertLockRecord = String.format(SQL_INSERT_LOCK_RECORD, tableName);
+		}
+		try(PreparedStatement statement = connection.prepareStatement(sqlInsertLockRecord)) {
+			statement.setString(1, resource);
+			statement.setString(2, owner);
+			statement.setLong(3, getCurrentTime(connection));
+			statement.setLong(4, timeout);
+			statement.executeUpdate();
+		}
+	}
+
+	protected void updateLockRecord(Connection connection, String resource, String owner, long timeout) throws SQLException {
+		if(sqlUpdateLockRecord == null) {
+			sqlUpdateLockRecord = String.format(SQL_UPDATE_LOCK_RECORD, tableName);
+		}
+		try(PreparedStatement statement = connection.prepareStatement(sqlUpdateLockRecord)) {
+			statement.setString(1, owner);
+			statement.setLong(2, getCurrentTime(connection));
+			statement.setLong(3, timeout);
+			statement.setString(4, resource);
+			statement.executeUpdate();
+		}
+	}
+
+//	protected void deleteLockRecord(Connection connection, String resource) throws SQLException {
+//		if(sqlDeleteLockRecord == null) {
+//			sqlDeleteLockRecord = String.format(SQL_DELETE_LOCK_RECORD, tableName);
+//		}
+//		try(PreparedStatement statement = connection.prepareStatement(sqlDeleteLockRecord)) {
+//			statement.setString(1, resource);
+//			statement.executeUpdate();
+//		}
+//	}
+
+	private boolean isLockExpired(LockRecord lockRecord, Connection connection) throws SQLException {
+		long timeout = lockRecord.getTimeout();
+		if(timeout == 0) {
+			return false;
+		}
+		long updated = lockRecord.getUpdated();
+		long now = getCurrentTime(connection);
+		long expiration = updated + timeout;
+		return (now > expiration);
+	}
+
+	private long getCurrentTime(Connection connection) throws SQLException {
+		long res = -1;
+		if(connection != null) {
+			try(PreparedStatement statement = connection.prepareStatement(SQL_CURRENT_TIMESTAMP)) {
+				try(ResultSet resultSet = statement.executeQuery()) {
+					if(resultSet.next()) {
+						res = resultSet.getTimestamp(1).getTime();
+					}
+				}
+			}
+		}
+		if(res == -1) {
+			res = System.currentTimeMillis();
+		}
+		return res;
+	}
+}
diff --git a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/openecomp/appc/lockmanager/impl/sql/pessimistic/MySqlLockManagerMock.java b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/openecomp/appc/lockmanager/impl/sql/pessimistic/MySqlLockManagerMock.java
new file mode 100644
index 0000000..a94dc18
--- /dev/null
+++ b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/openecomp/appc/lockmanager/impl/sql/pessimistic/MySqlLockManagerMock.java
@@ -0,0 +1,150 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ * 						reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.lockmanager.impl.sql.pessimistic;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.openecomp.appc.lockmanager.api.LockRuntimeException;
+import org.openecomp.appc.lockmanager.impl.sql.Synchronizer;
+import org.openecomp.appc.lockmanager.impl.sql.SynchronizerReceiver;
+import org.openecomp.appc.lockmanager.impl.sql.pessimistic.LockRecord;
+import org.openecomp.appc.lockmanager.impl.sql.pessimistic.MySqlLockManager;
+
+class MySqlLockManagerMock extends MySqlLockManager implements SynchronizerReceiver {
+
+	private final Map<String, LockRecord> locks = new HashMap<>();
+	private final Lock lock = new ReentrantLock();
+	private boolean useReal;
+	private Synchronizer synchronizer;
+
+	MySqlLockManagerMock(boolean useReal) {
+		this.useReal = useReal;
+	}
+
+	@Override
+	public void setSynchronizer(Synchronizer synchronizer) {
+		this.synchronizer = synchronizer;
+	}
+
+	@Override
+	protected Connection openDbConnection() {
+		if(useReal) {
+			return super.openDbConnection();
+		}
+		return null;
+	}
+
+	@Override
+	protected void closeDbConnection(Connection connection) {
+		if(useReal) {
+			super.closeDbConnection(connection);
+		}
+	}
+
+	@Override
+	protected LockRecord loadLockRecord(Connection connection, String resource) throws SQLException {
+		LockRecord res;
+		if(useReal) {
+			res = super.loadLockRecord(connection, resource);
+		} else {
+			res = locks.get(resource);
+		}
+		if(synchronizer != null) {
+			synchronizer.postLoadLockRecord(resource, (res == null) ? null : res.getOwner());
+		}
+		return res;
+	}
+
+	@Override
+	protected void addLockRecord(Connection connection, String resource, String owner, long timeout) throws SQLException {
+		if(synchronizer != null) {
+			synchronizer.preAddLockRecord(resource, owner);
+		}
+		try {
+			if(useReal) {
+				super.addLockRecord(connection, resource, owner, timeout);
+				return;
+			}
+			LockRecord lockRecord = new LockRecord(resource);
+			lockRecord.setOwner(owner);
+			lockRecord.setUpdated(System.currentTimeMillis());
+			lockRecord.setTimeout(timeout);
+			locks.put(resource, lockRecord);
+		} finally {
+			if(synchronizer != null) {
+				synchronizer.postAddLockRecord(resource, owner);
+			}
+		}
+	}
+
+	@Override
+	protected void updateLockRecord(Connection connection, String resource, String owner, long timeout) throws SQLException {
+		if(synchronizer != null) {
+			synchronizer.preUpdateLockRecord(resource, owner);
+		}
+		try {
+			if(useReal) {
+				super.updateLockRecord(connection, resource, owner, timeout);
+				return;
+			}
+			LockRecord lockRecord = loadLockRecord(connection, resource);
+			lockRecord.setOwner(owner);
+			lockRecord.setUpdated(System.currentTimeMillis());
+			lockRecord.setTimeout(timeout);
+			locks.put(resource, lockRecord);
+		} finally {
+			if(synchronizer != null) {
+				synchronizer.postUpdateLockRecord(resource, owner);
+			}
+		}
+	}
+
+	@Override
+	protected void enterCriticalSection(Connection connection, String resource) {
+		if(useReal) {
+			super.enterCriticalSection(connection, resource);
+			return;
+		}
+		try {
+			if(!lock.tryLock(criticalSectionWaitTimeoutSecs, TimeUnit.SECONDS)) {
+                throw new LockRuntimeException("Cannot obtain critical section lock for resource [" + resource + "].");
+			}
+		} catch(InterruptedException e) {
+			throw new LockRuntimeException("Cannot obtain critical section lock.", e);
+		}
+	}
+
+	@Override
+	protected void leaveCriticalSection(Connection connection, String resource) {
+		if(useReal) {
+			super.leaveCriticalSection(connection, resource);
+			return;
+		}
+		lock.unlock();
+	}
+}
diff --git a/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/openecomp/appc/lockmanager/impl/sql/pessimistic/TestMySqlLockManager.java b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/openecomp/appc/lockmanager/impl/sql/pessimistic/TestMySqlLockManager.java
new file mode 100644
index 0000000..cf8781b
--- /dev/null
+++ b/appc-dispatcher/appc-dispatcher-common/lock-manager-lib/lock-manager-impl/src/test/java/org/openecomp/appc/lockmanager/impl/sql/pessimistic/TestMySqlLockManager.java
@@ -0,0 +1,121 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ * 						reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.lockmanager.impl.sql.pessimistic;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openecomp.appc.lockmanager.api.LockException;
+import org.openecomp.appc.lockmanager.api.LockRuntimeException;
+import org.openecomp.appc.lockmanager.impl.sql.JdbcLockManager;
+import org.openecomp.appc.lockmanager.impl.sql.MySqlLockManagerBaseTests;
+import org.openecomp.appc.lockmanager.impl.sql.Synchronizer;
+import org.openecomp.appc.lockmanager.impl.sql.pessimistic.MySqlLockManager;
+
+import java.util.concurrent.*;
+
+public class TestMySqlLockManager extends MySqlLockManagerBaseTests {
+
+    private static int CRITICAL_SECTION_WAIT_TIMEOUT = 1; // in secs
+
+	@Override
+	protected JdbcLockManager createJdbcLockManager(boolean useReal) {
+		return new MySqlLockManagerMock(useReal);
+	}
+
+	@Test
+	public void testConcurrentLock() throws LockException, InterruptedException, ExecutionException, TimeoutException {
+        try {
+            callConcurrentTest(new Callable<Boolean>() {
+                @Override
+                public Boolean call() throws Exception {
+                    try {
+                        Assert.assertTrue(lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name()));
+                        return true;
+                    } catch(LockRuntimeException e) {
+                        Assert.assertEquals("Cannot obtain critical section lock for resource [" + Resource.Resource1.name() + "].", e.getMessage());
+                        return false;
+                    }
+                }
+            });
+        } finally {
+            lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
+		}
+	}
+
+	@Test
+    public void testConcurrentUnlock() throws LockException, InterruptedException, ExecutionException, TimeoutException {
+        lockManager.acquireLock(Resource.Resource1.name(), Owner.A.name());
+        callConcurrentTest(new Callable<Boolean>() {
+            @Override
+            public Boolean call() throws Exception {
+                try {
+                    lockManager.releaseLock(Resource.Resource1.name(), Owner.A.name());
+                    return true;
+                } catch(LockRuntimeException e) {
+                    Assert.assertEquals("Cannot obtain critical section lock for resource [" + Resource.Resource1.name() + "].", e.getMessage());
+                    return false;
+                }
+            }
+        });
+    }
+
+    private void callConcurrentTest(Callable<Boolean> callable) throws LockException, InterruptedException, ExecutionException, TimeoutException {
+        final int participantsNo = 2;
+        Synchronizer synchronizer = new Synchronizer(participantsNo) {
+
+            @Override
+            protected void waitForAllParticipants(Object waitObj, int totalParticipantsNo, int currentParticipantsNo) {
+                waitOn(this, TimeUnit.MILLISECONDS.convert(1 + CRITICAL_SECTION_WAIT_TIMEOUT, TimeUnit.SECONDS)); // add 1 sec to make sure timeout occured
+            }
+        };
+        if(!setSynchronizer(synchronizer)) {
+            return;
+        }
+        ((MySqlLockManager)lockManager).setCriticalSectionWaitTimeoutSecs(CRITICAL_SECTION_WAIT_TIMEOUT);
+        ExecutorService executor = Executors.newFixedThreadPool(participantsNo);
+        Future<Boolean> future1 = executor.submit(callable);
+        try {
+            for(int i = 0; i < 10; i++) {
+                Thread.sleep(100);
+                if(synchronizer.getParticipantCount() > 0) {
+                    break;
+                }
+            }
+            // make sure 1st thread gets inside critical section
+            if(synchronizer.getParticipantCount() < 1) {
+                Assert.fail(getClass().getName() + " first thread failed to acquireLock()");
+            }
+            Future<Boolean> future2 = executor.submit(callable);
+            try {
+                // 1st thread should acquire the lock
+                Assert.assertTrue(future1.get(3 + CRITICAL_SECTION_WAIT_TIMEOUT, TimeUnit.SECONDS));
+                // 2nd thread should fail waiting for critical section
+                Assert.assertFalse(future2.get(2 + CRITICAL_SECTION_WAIT_TIMEOUT, TimeUnit.SECONDS));
+            } finally {
+                future2.cancel(true);
+            }
+        } finally {
+            future1.cancel(true);
+            setSynchronizer(null);
+        }
+    }
+}
diff --git a/appc-dispatcher/appc-dispatcher-installer/pom.xml b/appc-dispatcher/appc-dispatcher-installer/pom.xml
index a900045..29b09f4 100644
--- a/appc-dispatcher/appc-dispatcher-installer/pom.xml
+++ b/appc-dispatcher/appc-dispatcher-installer/pom.xml
@@ -17,7 +17,7 @@
 	<features.boot.licenseManager>appc-license-manager</features.boot.licenseManager>
     <!--<features.repositories>mvn:org.openecomp.appc/appc-dispatcher-features/${project.version}/xml/features,mvn:org.openecomp.appc/appc-request-handler-features/${project.version}/xml/features,mvn:org.openecomp.appc/appc-command-executor-features/${project.version}/xml/features,mvn:org.openecomp.appc/appc-lifecycle-management-features/${project.version}/xml/features,mvn:org.openecomp.appc/appc-license-manager-features/${project.version}/xml/features,mvn:org.openecomp.appc/appc-workflow-management-features/${project.version}/xml/features,mvn:org.openecomp.appc/lock-manager-features/${project.version}/xml/features</features.repositories>-->
 	
-	<!-- SEPARATING FEATURE INSTALLS -->
+	<!-- SEPARATED FEATURE INSTALLS -->
 	<features.repo.dispatcher>mvn:org.openecomp.appc/appc-dispatcher-features/${project.version}/xml/features</features.repo.dispatcher>
 	<features.repo.requestHandler>mvn:org.openecomp.appc/appc-request-handler-features/${project.version}/xml/features</features.repo.requestHandler>
 	<features.repo.commandExecutor>mvn:org.openecomp.appc/appc-command-executor-features/${project.version}/xml/features</features.repo.commandExecutor>
diff --git a/appc-dispatcher/appc-license-manager/appc-license-manager-api/pom.xml b/appc-dispatcher/appc-license-manager/appc-license-manager-api/pom.xml
index d4da507..635e1fc 100644
--- a/appc-dispatcher/appc-license-manager/appc-license-manager-api/pom.xml
+++ b/appc-dispatcher/appc-license-manager/appc-license-manager-api/pom.xml
@@ -17,11 +17,6 @@
 
   <dependencies>
       <dependency>
-          <groupId>org.openecomp.appc</groupId>
-          <artifactId>appc-common</artifactId>
-          <version>${project.version}</version>
-      </dependency>
-      <dependency>
           <groupId>org.openecomp.sdnc.core</groupId>
           <artifactId>dblib-provider</artifactId>
       </dependency>
@@ -36,9 +31,6 @@
                         <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                         <Bundle-Version>${project.version}</Bundle-Version>
                         <Export-Package>org.openecomp.appc.licmgr,org.openecomp.appc.licmgr.exception,org.openecomp.appc.licmgr.objects</Export-Package>
-                        <Embed-Dependency>!dblib-provider,appc-common,eelf-core,logback-core,logback-classic;scope=compile|runtime;inline=false</Embed-Dependency>
-                        <Embed-Transitive>true</Embed-Transitive>
-                        <Import-Package>!groovy.lang,!javax.*,!org.apache.log,!org.apache.log4j.*,!org.codehaus.jackson.*,!org.codehaus.jackson.map.*,!org.codehaus.commons.compiler,!org.codehaus.groovy.*,!org.codehaus.janino,!org.jasypt.*,!com.ibm.icu.*,!com.sun.faces.*,*</Import-Package>
                     </instructions>
                 </configuration>
             </plugin>
diff --git a/appc-dispatcher/appc-license-manager/appc-license-manager-api/src/main/java/org/openecomp/appc/licmgr/Constants.java b/appc-dispatcher/appc-license-manager/appc-license-manager-api/src/main/java/org/openecomp/appc/licmgr/Constants.java
index 81ce0e7..5f758e7 100644
--- a/appc-dispatcher/appc-license-manager/appc-license-manager-api/src/main/java/org/openecomp/appc/licmgr/Constants.java
+++ b/appc-dispatcher/appc-license-manager/appc-license-manager-api/src/main/java/org/openecomp/appc/licmgr/Constants.java
@@ -68,7 +68,6 @@
     public static final String VNF_HOST_IP_ADDRESS_FIELD_NAME = "vnf-host-ip-address";
     public static final String UPGRADE_VERSION = "upgrade-version";
     public static final String DG_ERROR_FIELD_NAME = "org.openecomp.appc.dg.error";
-    public static final String DG_OUTPUT_STATUS_MESSAGE = "output.status.message";
     public static final String RESOURCEKEY = "resourceKey";
     public static final String REQ_ID_FIELD_NAME = "org.openecomp.appc.reqid";
     public static final String API_VERSION_FIELD_NAME = "org.openecomp.appc.apiversion";
diff --git a/appc-dispatcher/appc-license-manager/appc-license-manager-api/src/main/java/org/openecomp/appc/licmgr/LicenseManager.java b/appc-dispatcher/appc-license-manager/appc-license-manager-api/src/main/java/org/openecomp/appc/licmgr/LicenseManager.java
index 40c7d8b..547b8c4 100644
--- a/appc-dispatcher/appc-license-manager/appc-license-manager-api/src/main/java/org/openecomp/appc/licmgr/LicenseManager.java
+++ b/appc-dispatcher/appc-license-manager/appc-license-manager-api/src/main/java/org/openecomp/appc/licmgr/LicenseManager.java
@@ -27,6 +27,7 @@
 import org.openecomp.appc.licmgr.objects.LicenseModel;
 
 
+@SuppressWarnings("JavaDoc")
 public interface LicenseManager {
 
     /**
diff --git a/appc-dispatcher/appc-license-manager/appc-license-manager-core/pom.xml b/appc-dispatcher/appc-license-manager/appc-license-manager-core/pom.xml
index 66b3147..99ab538 100644
--- a/appc-dispatcher/appc-license-manager/appc-license-manager-core/pom.xml
+++ b/appc-dispatcher/appc-license-manager/appc-license-manager-core/pom.xml
@@ -58,10 +58,18 @@
                     <instructions>
                         <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                         <Bundle-Version>${project.version}</Bundle-Version>
-                        <Embed-Dependency>!dblib-provider,appc-common,eelf-core,logback-core,logback-classic,javax.mail;scope=compile|runtime;inline=false</Embed-Dependency>
-                        <Embed-Transitive>true</Embed-Transitive>
                         <Export-Service>org.openecomp.appc.licmgr.LicenseManager</Export-Service>
-                        <Import-Package>org.openecomp.appc.licmgr,org.openecomp.appc.licmgr.exception,org.openecomp.appc.licmgr.objects,javax.mail.internet,!javax.mail,!groovy.lang,!javax.jms,!org.apache.log,!org.apache.log4j.*,!org.codehaus.jackson.*,!org.codehaus.jackson.map.*,!org.codehaus.commons.compiler,!org.codehaus.groovy.*,!org.codehaus.janino,!org.jasypt.*,!com.ibm.icu.*,!com.sun.faces.*,*</Import-Package>
+
+                        <Embed-Dependency>
+                            artifactId=!dblib-provider|slf4j-api|jcl-over-slf4j;scope=compile|runtime;inline=false
+                        </Embed-Dependency>
+
+                        <Import-Package>
+                            org.openecomp.appc.licmgr,org.openecomp.appc.licmgr.exception,org.openecomp.appc.licmgr.objects,
+                            *;resolution:=optional
+                        </Import-Package>
+
+                        <Embed-Transitive>true</Embed-Transitive>
                     </instructions>
                 </configuration>
             </plugin>
diff --git a/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/openecomp/appc/licmgr/impl/LicenseDataAccessServiceImpl.java b/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/openecomp/appc/licmgr/impl/LicenseDataAccessServiceImpl.java
index 2aff1ff..2eaf790 100644
--- a/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/openecomp/appc/licmgr/impl/LicenseDataAccessServiceImpl.java
+++ b/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/openecomp/appc/licmgr/impl/LicenseDataAccessServiceImpl.java
@@ -21,17 +21,14 @@
 
 package org.openecomp.appc.licmgr.impl;
 
+import javax.sql.rowset.CachedRowSet;
+
 import org.openecomp.appc.licmgr.Constants;
 import org.openecomp.appc.licmgr.LicenseDataAccessService;
 import org.openecomp.appc.licmgr.exception.DataAccessException;
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import org.openecomp.sdnc.sli.resource.dblib.DbLibService;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.framework.ServiceReference;
-
-import javax.sql.rowset.CachedRowSet;
 
 import static org.openecomp.appc.licmgr.Constants.ASDC_ARTIFACTS_FIELDS;
 
@@ -42,7 +39,7 @@
 
 
 @SuppressWarnings("JavaDoc")
-class LicenseDataAccessServiceImpl implements LicenseDataAccessService {
+public class LicenseDataAccessServiceImpl implements LicenseDataAccessService {
 
     private static EELFLogger logger = EELFManager.getInstance().getLogger(LicenseDataAccessServiceImpl.class);
 
@@ -52,17 +49,12 @@
 
     private String schema;
 
+    public void setDbLibService(DbLibService dbLibService) {
+        this.dbLibService = dbLibService;
+    }
+
     private DbLibService dbLibService;
 
-    private void checkDbLibService() throws DataAccessException {
-        if (null != dbLibService) {return;}
-
-        //get dblib service and send it to DAService
-        BundleContext bctx = FrameworkUtil.getBundle(LicenseManagerImpl.class).getBundleContext();
-        ServiceReference sref = bctx.getServiceReference(DbLibService.class.getName());
-        dbLibService  = (DbLibService)bctx.getService(sref);
-
-    }
 
     /**
      * empty constructor
@@ -73,8 +65,6 @@
     public Map<String,String> retrieveLicenseModelData(String vnfType, String vnfVersion, String... fields) throws
                     DataAccessException {
 
-        checkDbLibService();
-
         Map<String,String> result = new HashMap<>();
         if (null == fields || 0 == fields.length) fields = new String[]{ASDC_ARTIFACTS_FIELDS.ARTIFACT_CONTENT.name()};
 
@@ -119,8 +109,6 @@
     @Override
     public void storeArtifactPayload(Map<String, String> parameters) throws RuntimeException {
 
-        checkDbLibService();
-
         if(parameters == null || parameters.isEmpty()) {
             throw new RuntimeException("No parameters for insert are provided");
         }
diff --git a/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/openecomp/appc/licmgr/impl/LicenseManagerImpl.java b/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/openecomp/appc/licmgr/impl/LicenseManagerImpl.java
index 815bb02..86d1edd 100644
--- a/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/openecomp/appc/licmgr/impl/LicenseManagerImpl.java
+++ b/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/java/org/openecomp/appc/licmgr/impl/LicenseManagerImpl.java
@@ -25,7 +25,6 @@
 
 import java.util.Map;
 
-import org.openecomp.appc.licmgr.Constants;
 import org.openecomp.appc.licmgr.LicenseDataAccessService;
 import org.openecomp.appc.licmgr.LicenseManager;
 import org.openecomp.appc.licmgr.exception.DataAccessException;
@@ -42,8 +41,6 @@
     }
 
     public LicenseManagerImpl() {
-        DAService = new LicenseDataAccessServiceImpl();
-        DAService.setSchema(Constants.SDNCTL_SCHEMA);
     }
 
     @Override
diff --git a/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index c8efb83..45ef4f1 100644
--- a/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ b/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -27,7 +27,15 @@
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
 
-    <bean id="licenseServiceBean" class="org.openecomp.appc.licmgr.impl.LicenseManagerImpl" scope="singleton" activation="lazy"/>
-    <service id="licenseService" interface="org.openecomp.appc.licmgr.LicenseManager" ref="licenseServiceBean"/>
+    <reference id="dbLibServiceRef" availability="mandatory" activation="eager" interface="org.openecomp.sdnc.sli.resource.dblib.DbLibService" />
 
+    <bean id="licenseDataServiceBean" class="org.openecomp.appc.licmgr.impl.LicenseDataAccessServiceImpl" scope="singleton" activation="eager">
+        <property name="dbLibService" ref="dbLibServiceRef" />
+        <property name="schema" value="sdnctl" />
+    </bean>
+
+    <bean id="licenseServiceBean" class="org.openecomp.appc.licmgr.impl.LicenseManagerImpl" scope="singleton" activation="lazy">
+        <property name="DAService" ref="licenseDataServiceBean"/>
+    </bean>
+    <service id="licenseService" interface="org.openecomp.appc.licmgr.LicenseManager" ref="licenseServiceBean"/>
 </blueprint>
diff --git a/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/resources/org/openecomp/appc/default.properties b/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/resources/org/openecomp/appc/default.properties
index 9d9e1d7..a3b064f 100644
--- a/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/resources/org/openecomp/appc/default.properties
+++ b/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/main/resources/org/openecomp/appc/default.properties
@@ -23,27 +23,12 @@
 # to supply configuration options 
 org.openecomp.appc.bootstrap.file=appc.properties
 org.openecomp.appc.bootstrap.path=/opt/openecomp/appc/data/properties,${user.home},.
-
-
 #Property below provided by appc.properties
-#dmaap.poolMembers=<DMAAP_IP>:3904
+appc.LCM.provider.url=https://localhost:8443/restconf/operations/appc-provider-lcm
+appc.LCM.poolMembers=<DMAAP_IP>:3904
+appc.LCM.service=dmaap
+appc.LCM.topic.write=APPC-TEST2
+appc.LCM.client.name=APPC-TEST-CLIENT-LIC-MGR-TEST
+appc.LCM.provider.user=test
+appc.LCM.provider.pass=test
 
-dmaap.topic.read=APPC-TEST2
-dmaap.topic.write=APPC-TEST2
-#dmaap.topic.read.filter={"class":"Assigned","field":"request"}
-dmaap.topic.read.filter={"class": "And","filters": [{"class": "Assigned","field": "request"},{"class": "Unassigned","field": "response"}]}
-dmaap.client.name=APPC-TEST-CLIENT-LIC-MGR-MAIN
-dmaap.client.name.id=0
-#dmaap.client.key=random
-#dmaap.client.secret=random
-
-dmaap.threads.queuesize.min=1
-dmaap.threads.queuesize.max=1000
-dmaap.threads.poolsize.min=2
-dmaap.threads.poolsize.max=2
-
-# 
-# This needs to be changed so that the action can be appended to the end of the URL path 
-#
-#provider.urls.topology=https://admin:password@<IP_ADDRESS>:8443/restconf/operations/appc-provider:topology-service
-#provider.urls.topology=https://admin:password@<IP_ADDRESS>:8443/restconf/operations/appc-provider:
diff --git a/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/test/java/org/openecomp/appc/licmgr/LicenseServiceMock.java b/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/test/java/org/openecomp/appc/licmgr/LicenseServiceMock.java
index e496da7..9760cef 100644
--- a/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/test/java/org/openecomp/appc/licmgr/LicenseServiceMock.java
+++ b/appc-dispatcher/appc-license-manager/appc-license-manager-core/src/test/java/org/openecomp/appc/licmgr/LicenseServiceMock.java
@@ -20,7 +20,6 @@
  */
 
 package org.openecomp.appc.licmgr;
-
 import java.util.HashMap;
 import java.util.Map;
 
diff --git a/appc-dispatcher/appc-lifecycle-management/appc-lifecycle-management-core/pom.xml b/appc-dispatcher/appc-lifecycle-management/appc-lifecycle-management-core/pom.xml
index e2231e8..859e4a5 100644
--- a/appc-dispatcher/appc-lifecycle-management/appc-lifecycle-management-core/pom.xml
+++ b/appc-dispatcher/appc-lifecycle-management/appc-lifecycle-management-core/pom.xml
@@ -25,7 +25,6 @@
 	    <artifactId>appc-lifecycle-management</artifactId>
 	    <version>1.1.0-SNAPSHOT</version>
 	  </parent>
-    <groupId>org.openecomp.appc</groupId>
     <artifactId>appc-lifecycle-management-core</artifactId>
     <packaging>bundle</packaging>
 
@@ -69,10 +68,12 @@
                     <instructions>
                         <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                         <Bundle-Version>${project.version}</Bundle-Version>
-                        <Embed-Dependency>appc-common,eelf-core,logback-core,logback-classic;scope=compile|runtime;inline=false</Embed-Dependency>
                         <Embed-Transitive>true</Embed-Transitive>
                         <Export-Service>org.openecomp.appc.lifecyclemanager.LifecycleManager</Export-Service>
-                        <Import-Package>org.openecomp.appc.lifecyclemanager.*,!groovy.lang,!javax.*,!org.apache.log,!org.apache.log4j.*,!org.codehaus.jackson.*,!org.codehaus.jackson.map.*,!org.codehaus.commons.compiler,!org.codehaus.groovy.*,!org.apache.commons.lang3,!org.codehaus.janino,!org.jasypt.*,!com.ibm.icu.*,!com.sun.faces.*,*</Import-Package>
+                        <Import-Package>
+                            org.openecomp.appc.lifecyclemanager.*,
+                            *;resolution:=optional
+                        </Import-Package>
                     </instructions>
                 </configuration>
             </plugin>
diff --git a/appc-dispatcher/appc-lifecycle-management/appc-lifecycle-management-core/src/main/java/org/openecomp/appc/lifecyclemanager/helper/MetadataReader.java b/appc-dispatcher/appc-lifecycle-management/appc-lifecycle-management-core/src/main/java/org/openecomp/appc/lifecyclemanager/helper/MetadataReader.java
index 82c497d..965d61a 100644
--- a/appc-dispatcher/appc-lifecycle-management/appc-lifecycle-management-core/src/main/java/org/openecomp/appc/lifecyclemanager/helper/MetadataReader.java
+++ b/appc-dispatcher/appc-lifecycle-management/appc-lifecycle-management-core/src/main/java/org/openecomp/appc/lifecyclemanager/helper/MetadataReader.java
@@ -32,8 +32,22 @@
 public class MetadataReader {
 
     private enum VNFStates {
-        Not_Instantiated, Instantiated, Configuring, Configured, Testing, Tested, Rebuilding, Restarting, Error, Running, Unknown, Terminating, Stopping, Stopped,
-        Backing_Up, Snapshotting, Software_Uploading, Upgrading, Rollbacking, Licensing, Migrating, Evacuating;
+        Not_Instantiated, Instantiated, Configuring, Configured, Testing, Tested, Rebuilding, Restarting, Starting, Error, Running, Unknown, Terminating, Stopping, Stopped,
+        Backing_Up, Snapshotting, Software_Uploading, Upgrading, Rollbacking, Licensing, Migrating, Evacuating , NOT_ORCHESTRATED("NOT ORCHESTRATED");
+
+        String stateName;
+
+        VNFStates(String name){
+            this.stateName = name;
+        }
+
+        VNFStates(){
+            this.stateName = name();
+        }
+
+        public String toString(){
+            return this.stateName;
+        }
     }
 
     @SuppressWarnings("unused")
@@ -46,12 +60,14 @@
         State TESTED = new State(VNFStates.Tested.toString());
         State REBUILDING = new State(VNFStates.Rebuilding.toString());
         State RESTARTING = new State(VNFStates.Restarting.toString());
+        State STARTING = new State(VNFStates.Starting.toString());
         State ERROR = new State(VNFStates.Error.toString());
         State RUNNING = new State(VNFStates.Running.toString());
         State UNKNOWN = new State(VNFStates.Unknown.toString());
         State TERMINATING = new State(VNFStates.Terminating.toString());
         State STOPPING = new State(VNFStates.Stopping.toString());
         State STOPPED = new State(VNFStates.Stopped.toString());
+        State NOT_ORCHESTRATED = new State(VNFStates.NOT_ORCHESTRATED.toString());
 
         State BACKING_UP = new State(VNFStates.Backing_Up.toString());
         State SNAPSHOTTING = new State(VNFStates.Snapshotting.toString());
@@ -70,7 +86,9 @@
         Event RESTART = new Event(VNFOperation.Restart.toString());
         Event REBUILD = new Event(VNFOperation.Rebuild.toString());
         Event STOP = new Event(VNFOperation.Stop.toString());
-        Event MODIFY_CONFIG = new Event(VNFOperation.ModifyConfig.toString());
+        Event CONFIG_MODIFY = new Event(VNFOperation.ConfigModify.toString());
+        Event CONFIG_SCALEOUT = new Event(VNFOperation.ConfigScaleOut.toString());
+        Event CONFIG_RESTORE = new Event(VNFOperation.ConfigRestore.toString());
         Event BACKUP = new Event(VNFOperation.Backup.toString());
         Event SNAPSHOT = new Event(VNFOperation.Snapshot.toString());
         Event SOFTWARE_UPLOAD = new Event(VNFOperation.SoftwareUpload.toString());
@@ -80,6 +98,9 @@
         Event AUDIT = new Event(VNFOperation.Audit.toString());
         Event MIGRATE = new Event(VNFOperation.Migrate.toString());
         Event EVACUATE = new Event(VNFOperation.Evacuate.toString());
+        Event CONFIG_BACKUP = new Event(VNFOperation.ConfigBackup.toString());
+        Event CONFIG_BACKUP_DELETE = new Event(VNFOperation.ConfigBackupDelete.toString());
+        Event CONFIG_EXPORT = new Event(VNFOperation.ConfigExport.toString());
 
         Event LOCK = new Event(VNFOperation.Lock.toString());
         Event UNLOCK = new Event(VNFOperation.Unlock.toString());
@@ -99,6 +120,7 @@
         builder = builder.addState(TESTED);
         builder = builder.addState(REBUILDING);
         builder = builder.addState(RESTARTING);
+        builder = builder.addState(STARTING);
         builder = builder.addState(ERROR);
         builder = builder.addState(RUNNING);
         builder = builder.addState(UNKNOWN);
@@ -112,6 +134,7 @@
         builder = builder.addState(ROLLBACKING);
         builder = builder.addState(MIGRATING);
         builder = builder.addState(EVACUATING);
+        builder = builder.addState(NOT_ORCHESTRATED);
 
         builder = builder.addEvent(CONFIGURE);
         builder = builder.addEvent(TEST);
@@ -122,7 +145,9 @@
         builder = builder.addEvent(SUCCESS);
         builder = builder.addEvent(FAILURE);
         builder = builder.addEvent(STOP);
-        builder = builder.addEvent(MODIFY_CONFIG);
+        builder = builder.addEvent(CONFIG_MODIFY);
+        builder = builder.addEvent(CONFIG_SCALEOUT);
+        builder = builder.addEvent(CONFIG_RESTORE);
         builder = builder.addEvent(HEALTHCHECK);
         builder = builder.addEvent(BACKUP);
         builder = builder.addEvent(SNAPSHOT);
@@ -136,15 +161,22 @@
         builder = builder.addEvent(LOCK);
         builder = builder.addEvent(UNLOCK);
         builder = builder.addEvent(CHECKLOCK);
+        builder = builder.addEvent(CONFIG_BACKUP);
+        builder = builder.addEvent(CONFIG_BACKUP_DELETE);
+        builder = builder.addEvent(CONFIG_EXPORT);
+
+        builder = builder.addTransition(NOT_ORCHESTRATED,CONFIGURE,CONFIGURING);
 
         builder = builder.addTransition(INSTANTIATED,CONFIGURE,CONFIGURING);
         builder = builder.addTransition(INSTANTIATED,TEST,TESTING);
-        builder = builder.addTransition(INSTANTIATED,START,RESTARTING);
+        builder = builder.addTransition(INSTANTIATED,START,STARTING);
         builder = builder.addTransition(INSTANTIATED,TERMINATE,TERMINATING);
         builder = builder.addTransition(INSTANTIATED,RESTART,RESTARTING);
         builder = builder.addTransition(INSTANTIATED,REBUILD,REBUILDING);
         builder = builder.addTransition(INSTANTIATED,STOP,STOPPING);
-        builder = builder.addTransition(INSTANTIATED,MODIFY_CONFIG,CONFIGURING);
+        builder = builder.addTransition(INSTANTIATED,CONFIG_MODIFY,CONFIGURING);
+        builder = builder.addTransition(INSTANTIATED,CONFIG_SCALEOUT,CONFIGURING);
+        builder = builder.addTransition(INSTANTIATED,CONFIG_RESTORE,CONFIGURING);
         builder = builder.addTransition(INSTANTIATED,HEALTHCHECK,TESTING);
         builder = builder.addTransition(INSTANTIATED,BACKUP,BACKING_UP);
         builder = builder.addTransition(INSTANTIATED,SNAPSHOT,SNAPSHOTTING);
@@ -159,12 +191,14 @@
 
         builder = builder.addTransition(CONFIGURED,CONFIGURE,CONFIGURING);
         builder = builder.addTransition(CONFIGURED,TEST,TESTING);
-        builder = builder.addTransition(CONFIGURED,START,RESTARTING);
+        builder = builder.addTransition(CONFIGURED,START,STARTING);
         builder = builder.addTransition(CONFIGURED,TERMINATE,TERMINATING);
         builder = builder.addTransition(CONFIGURED,RESTART,RESTARTING);
         builder = builder.addTransition(CONFIGURED,REBUILD,REBUILDING);
         builder = builder.addTransition(CONFIGURED,STOP,STOPPING);
-        builder = builder.addTransition(CONFIGURED,MODIFY_CONFIG,CONFIGURING);
+        builder = builder.addTransition(CONFIGURED,CONFIG_MODIFY,CONFIGURING);
+        builder = builder.addTransition(CONFIGURED,CONFIG_SCALEOUT,CONFIGURING);
+        builder = builder.addTransition(CONFIGURED,CONFIG_RESTORE,CONFIGURING);
         builder = builder.addTransition(CONFIGURED,HEALTHCHECK,TESTING);
         builder = builder.addTransition(CONFIGURED,BACKUP,BACKING_UP);
         builder = builder.addTransition(CONFIGURED,SNAPSHOT,SNAPSHOTTING);
@@ -178,15 +212,20 @@
         builder = builder.addTransition(CONFIGURED,LOCK,CONFIGURED);
         builder = builder.addTransition(CONFIGURED,UNLOCK,CONFIGURED);
         builder = builder.addTransition(CONFIGURED,CHECKLOCK,CONFIGURED);
+        builder = builder.addTransition(CONFIGURED,CONFIG_BACKUP,CONFIGURED);
+        builder = builder.addTransition(CONFIGURED,CONFIG_BACKUP_DELETE,CONFIGURED);
+        builder = builder.addTransition(CONFIGURED,CONFIG_EXPORT,CONFIGURED);
 
         builder = builder.addTransition(TESTED,CONFIGURE,CONFIGURING);
         builder = builder.addTransition(TESTED,TEST,TESTING);
-        builder = builder.addTransition(TESTED,START,RESTARTING);
+        builder = builder.addTransition(TESTED,START,STARTING);
         builder = builder.addTransition(TESTED,TERMINATE,TERMINATING);
         builder = builder.addTransition(TESTED,RESTART,RESTARTING);
         builder = builder.addTransition(TESTED,REBUILD,REBUILDING);
         builder = builder.addTransition(TESTED,STOP,STOPPING);
-        builder = builder.addTransition(TESTED,MODIFY_CONFIG,CONFIGURING);
+        builder = builder.addTransition(TESTED,CONFIG_MODIFY,CONFIGURING);
+        builder = builder.addTransition(TESTED,CONFIG_SCALEOUT,CONFIGURING);
+        builder = builder.addTransition(TESTED,CONFIG_RESTORE,CONFIGURING);
         builder = builder.addTransition(TESTED,HEALTHCHECK,TESTING);
         builder = builder.addTransition(TESTED,BACKUP,BACKING_UP);
         builder = builder.addTransition(TESTED,SNAPSHOT,SNAPSHOTTING);
@@ -200,15 +239,20 @@
         builder = builder.addTransition(TESTED,LOCK,TESTED);
         builder = builder.addTransition(TESTED,UNLOCK,TESTED);
         builder = builder.addTransition(TESTED,CHECKLOCK,TESTED);
+        builder = builder.addTransition(TESTED,CONFIG_BACKUP,TESTED);
+        builder = builder.addTransition(TESTED,CONFIG_BACKUP_DELETE,TESTED);
+        builder = builder.addTransition(TESTED,CONFIG_EXPORT,TESTED);
 
         builder = builder.addTransition(RUNNING,CONFIGURE,CONFIGURING);
         builder = builder.addTransition(RUNNING,TEST,TESTING);
-        builder = builder.addTransition(RUNNING,START,RESTARTING);
+        builder = builder.addTransition(RUNNING,START,STARTING);
         builder = builder.addTransition(RUNNING,TERMINATE,TERMINATING);
         builder = builder.addTransition(RUNNING,RESTART,RESTARTING);
         builder = builder.addTransition(RUNNING,REBUILD,REBUILDING);
         builder = builder.addTransition(RUNNING,STOP,STOPPING);
-        builder = builder.addTransition(RUNNING,MODIFY_CONFIG,CONFIGURING);
+        builder = builder.addTransition(RUNNING,CONFIG_MODIFY,CONFIGURING);
+        builder = builder.addTransition(RUNNING,CONFIG_SCALEOUT,CONFIGURING);
+        builder = builder.addTransition(RUNNING,CONFIG_RESTORE,CONFIGURING);
         builder = builder.addTransition(RUNNING,HEALTHCHECK,TESTING);
         builder = builder.addTransition(RUNNING,BACKUP,BACKING_UP);
         builder = builder.addTransition(RUNNING,SNAPSHOT,SNAPSHOTTING);
@@ -222,15 +266,20 @@
         builder = builder.addTransition(RUNNING,LOCK,RUNNING);
         builder = builder.addTransition(RUNNING,UNLOCK,RUNNING);
         builder = builder.addTransition(RUNNING,CHECKLOCK,RUNNING);
+        builder = builder.addTransition(RUNNING,CONFIG_BACKUP,RUNNING);
+        builder = builder.addTransition(RUNNING,CONFIG_BACKUP_DELETE,RUNNING);
+        builder = builder.addTransition(RUNNING,CONFIG_EXPORT,RUNNING);
 
         builder = builder.addTransition(ERROR,CONFIGURE,CONFIGURING);
         builder = builder.addTransition(ERROR,TEST,TESTING);
-        builder = builder.addTransition(ERROR,START,RESTARTING);
+        builder = builder.addTransition(ERROR,START,STARTING);
         builder = builder.addTransition(ERROR,TERMINATE,TERMINATING);
         builder = builder.addTransition(ERROR,RESTART,RESTARTING);
         builder = builder.addTransition(ERROR,REBUILD,REBUILDING);
         builder = builder.addTransition(ERROR,STOP,STOPPING);
-        builder = builder.addTransition(ERROR,MODIFY_CONFIG,CONFIGURING);
+        builder = builder.addTransition(ERROR,CONFIG_MODIFY,CONFIGURING);
+        builder = builder.addTransition(ERROR,CONFIG_SCALEOUT,CONFIGURING);
+        builder = builder.addTransition(ERROR,CONFIG_RESTORE,CONFIGURING);
         builder = builder.addTransition(ERROR,HEALTHCHECK,TESTING);
         builder = builder.addTransition(ERROR,BACKUP,BACKING_UP);
         builder = builder.addTransition(ERROR,SNAPSHOT,SNAPSHOTTING);
@@ -244,15 +293,20 @@
         builder = builder.addTransition(ERROR,LOCK,ERROR);
         builder = builder.addTransition(ERROR,UNLOCK,ERROR);
         builder = builder.addTransition(ERROR,CHECKLOCK,ERROR);
+        builder = builder.addTransition(ERROR,CONFIG_BACKUP,ERROR);
+        builder = builder.addTransition(ERROR,CONFIG_BACKUP_DELETE,ERROR);
+        builder = builder.addTransition(ERROR,CONFIG_EXPORT,ERROR);
 
         builder = builder.addTransition(UNKNOWN,CONFIGURE,CONFIGURING);
         builder = builder.addTransition(UNKNOWN,TEST,TESTING);
-        builder = builder.addTransition(UNKNOWN,START,RESTARTING);
+        builder = builder.addTransition(UNKNOWN,START,STARTING);
         builder = builder.addTransition(UNKNOWN,TERMINATE,TERMINATING);
         builder = builder.addTransition(UNKNOWN,RESTART,RESTARTING);
         builder = builder.addTransition(UNKNOWN,REBUILD,REBUILDING);
         builder = builder.addTransition(UNKNOWN,STOP,STOPPING);
-        builder = builder.addTransition(UNKNOWN,MODIFY_CONFIG,CONFIGURING);
+        builder = builder.addTransition(UNKNOWN,CONFIG_MODIFY,CONFIGURING);
+        builder = builder.addTransition(UNKNOWN,CONFIG_SCALEOUT,CONFIGURING);
+        builder = builder.addTransition(UNKNOWN,CONFIG_RESTORE,CONFIGURING);
         builder = builder.addTransition(UNKNOWN,HEALTHCHECK,TESTING);
         builder = builder.addTransition(UNKNOWN,BACKUP,BACKING_UP);
         builder = builder.addTransition(UNKNOWN,SNAPSHOT,SNAPSHOTTING);
@@ -266,14 +320,19 @@
         builder = builder.addTransition(UNKNOWN,LOCK,UNKNOWN);
         builder = builder.addTransition(UNKNOWN,UNLOCK,UNKNOWN);
         builder = builder.addTransition(UNKNOWN,CHECKLOCK,UNKNOWN);
+        builder = builder.addTransition(UNKNOWN,CONFIG_BACKUP,UNKNOWN);
+        builder = builder.addTransition(UNKNOWN,CONFIG_BACKUP_DELETE,UNKNOWN);
+        builder = builder.addTransition(UNKNOWN,CONFIG_EXPORT,UNKNOWN);
 
         builder = builder.addTransition(STOPPED,CONFIGURE,CONFIGURING);
         builder = builder.addTransition(STOPPED,TEST,TESTING);
-        builder = builder.addTransition(STOPPED,START,RESTARTING);
+        builder = builder.addTransition(STOPPED,START,STARTING);
         builder = builder.addTransition(STOPPED,TERMINATE,TERMINATING);
         builder = builder.addTransition(STOPPED,RESTART,RESTARTING);
         builder = builder.addTransition(STOPPED,REBUILD,REBUILDING);
-        builder = builder.addTransition(STOPPED,MODIFY_CONFIG,CONFIGURING);
+        builder = builder.addTransition(STOPPED,CONFIG_MODIFY,CONFIGURING);
+        builder = builder.addTransition(STOPPED,CONFIG_SCALEOUT,CONFIGURING);
+        builder = builder.addTransition(STOPPED,CONFIG_RESTORE,CONFIGURING);
         builder = builder.addTransition(STOPPED,HEALTHCHECK,TESTING);
         builder = builder.addTransition(STOPPED,BACKUP,BACKING_UP);
         builder = builder.addTransition(STOPPED,SNAPSHOT,SNAPSHOTTING);
@@ -295,6 +354,9 @@
         builder = builder.addTransition(RESTARTING,SUCCESS,RUNNING);
         builder = builder.addTransition(RESTARTING,FAILURE,ERROR);
 
+        builder = builder.addTransition(STARTING,SUCCESS,RUNNING);
+        builder = builder.addTransition(STARTING,FAILURE,ERROR);
+
         builder = builder.addTransition(TERMINATING,SUCCESS,NOT_INSTANTIATED);
         builder = builder.addTransition(TERMINATING,FAILURE,ERROR);
 
diff --git a/appc-dispatcher/appc-lifecycle-management/appc-lifecycle-management-core/src/main/resources/org/openecomp/appc/default.properties b/appc-dispatcher/appc-lifecycle-management/appc-lifecycle-management-core/src/main/resources/org/openecomp/appc/default.properties
index 63711c2..2fbb0da 100644
--- a/appc-dispatcher/appc-lifecycle-management/appc-lifecycle-management-core/src/main/resources/org/openecomp/appc/default.properties
+++ b/appc-dispatcher/appc-lifecycle-management/appc-lifecycle-management-core/src/main/resources/org/openecomp/appc/default.properties
@@ -25,24 +25,12 @@
 org.openecomp.appc.bootstrap.path=/opt/openecomp/appc/data/properties,${user.home},.
 
 #Property below provided by appc.properties
-#dmaap.poolMembers=<DMAAP_IP>:3904
+appc.LCM.provider.url=https://localhost:8443/restconf/operations/appc-provider-lcm
+appc.LCM.poolMembers=<DMAAP_IP>:3904
+appc.LCM.service=dmaap
+appc.LCM.topic.write=APPC-TEST2
+appc.LCM.client.name=APPC-TEST-CLIENT-LC-MGMT-MAIN
+appc.LCM.provider.user=test
+appc.LCM.provider.pass=test
 
-dmaap.topic.read=APPC-TEST2
-dmaap.topic.write=APPC-TEST2
-#dmaap.topic.read.filter={"class":"Assigned","field":"request"}
-dmaap.topic.read.filter={"class": "And","filters": [{"class": "Assigned","field": "request"},{"class": "Unassigned","field": "response"}]}
-dmaap.client.name=APPC-TEST-CLIENT-LC-MGMT-MAIN
-dmaap.client.name.id=0
-#dmaap.client.key=random
-#dmaap.client.secret=random
 
-dmaap.threads.queuesize.min=1
-dmaap.threads.queuesize.max=1000
-dmaap.threads.poolsize.min=1
-dmaap.threads.poolsize.max=2
-
-# 
-# This needs to be changed so that the action can be appended to the end of the URL path 
-#
-#provider.urls.topology=https://admin:password@<IP_ADDRESS>:8443/restconf/operations/appc-provider:topology-service
-#provider.urls.topology=https://admin:password@<IP_ADDRESS>:8443/restconf/operations/appc-provider:
diff --git a/appc-dispatcher/appc-lifecycle-management/appc-lifecycle-management-core/src/test/java/org/openecomp/appc/TestLifecycleManager.java b/appc-dispatcher/appc-lifecycle-management/appc-lifecycle-management-core/src/test/java/org/openecomp/appc/TestLifecycleManager.java
index 4c14e90..50b4349 100644
--- a/appc-dispatcher/appc-lifecycle-management/appc-lifecycle-management-core/src/test/java/org/openecomp/appc/TestLifecycleManager.java
+++ b/appc-dispatcher/appc-lifecycle-management/appc-lifecycle-management-core/src/test/java/org/openecomp/appc/TestLifecycleManager.java
@@ -103,6 +103,19 @@
         }
     }
 
+    @Test
+    public void testNotOrchestratedState() throws LifecycleException, NoTransitionDefinedException {
+        LifecycleManager lifecycleManager = new LifecycleManagerImpl();
+        String nextState = lifecycleManager.getNextState(null,"NOT ORCHESTRATED",VNFOperation.Configure.toString());
+        Assert.assertEquals(nextState,"Configuring");
+    }
+
+    @Test(expected = NoTransitionDefinedException.class)
+    public void testBakckingUpState() throws LifecycleException, NoTransitionDefinedException {
+        LifecycleManager lifecycleManager = new LifecycleManagerImpl();
+        String nextState = lifecycleManager.getNextState(null,"Software_Uploading",VNFOperation.Configure.toString());
+    }
+
     private List<Event> getNegativeEvents(State state,Set<Event> events) {
         List<Event> negativeEventList = new ArrayList<>();
         negativeEventList.addAll(events);
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-api/pom.xml b/appc-dispatcher/appc-request-handler/appc-request-handler-api/pom.xml
index 62d0465..e4008a6 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-api/pom.xml
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-api/pom.xml
@@ -17,9 +17,8 @@
 
 	<dependencies>
 		<dependency>
-			<groupId>com.fasterxml.jackson.core</groupId>
+			<groupId>com.fasterxml.jackson.core</groupId>	
 			<artifactId>jackson-annotations</artifactId>
-<!-- 			<version>${jackson.version}</version> -->
 		</dependency>
 
 		<dependency>
@@ -48,9 +47,14 @@
                         <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                         <Bundle-Version>${project.version}</Bundle-Version>
                         <Export-Package>org.openecomp.appc.requesthandler,org.openecomp.appc.requesthandler.objects,org.openecomp.appc.transactionrecorder,org.openecomp.appc.message</Export-Package>
-						<Embed-Dependency>appc-common,eelf-core,logback-core,logback-classic,appc-data-access-lib,javax.json;scope=compile|runtime;inline=false</Embed-Dependency>
+						<Embed-Dependency>
+							javax.json;scope=compile|runtime;inline=false
+						</Embed-Dependency>
 						<Embed-Transitive>true</Embed-Transitive>
-						<Import-Package>com.fasterxml.jackson.annotation,org.apache.commons.lang3,!groovy.lang,!javax.*,!org.apache.log,!org.apache.log4j.*,!org.codehaus.jackson.*,!org.codehaus.jackson.map.*,!org.codehaus.commons.compiler,!org.codehaus.groovy.*,!org.codehaus.janino,!org.jasypt.*,!com.ibm.icu.*,!com.sun.faces.*,*</Import-Package>
+						<Import-Package>
+							org.openecomp.appc.domainmodel.lcm,
+							*;resolution:=optional
+						</Import-Package>
                     </instructions>
                 </configuration>
             </plugin>
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-api/src/main/java/org/openecomp/appc/requesthandler/LCMStateManager.java b/appc-dispatcher/appc-request-handler/appc-request-handler-api/src/main/java/org/openecomp/appc/requesthandler/LCMStateManager.java
new file mode 100644
index 0000000..6a63b10
--- /dev/null
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-api/src/main/java/org/openecomp/appc/requesthandler/LCMStateManager.java
@@ -0,0 +1,42 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ * 						reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.requesthandler;
+
+/**
+ */
+public interface LCMStateManager {
+    /**
+     * This method checks if the LCM operations are enabled or not
+     * * @return true if enabled else false
+     */
+    boolean isLCMOperationEnabled();
+
+    /**
+     * This method disables the LCM operations
+     */
+    void disableLCMOperations();
+
+    /**
+     * This method disables the LCM operations
+     */
+    void enableLCMOperations();
+}
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-api/src/main/java/org/openecomp/appc/requesthandler/RequestHandler.java b/appc-dispatcher/appc-request-handler/appc-request-handler-api/src/main/java/org/openecomp/appc/requesthandler/RequestHandler.java
index d0d54c9..23b5d37 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-api/src/main/java/org/openecomp/appc/requesthandler/RequestHandler.java
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-api/src/main/java/org/openecomp/appc/requesthandler/RequestHandler.java
@@ -74,4 +74,10 @@
      * @param updateAAI boolean flag which indicate AAI upodate status after request completion.
      */
      void onRequestTTLEnd(RuntimeContext runtimeContext, boolean updateAAI);
+
+    /**
+     * This method returns the count of in progress requests
+     * * @return in progress requests count
+     */
+     int getInprogressRequestCount();
 }
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/pom.xml b/appc-dispatcher/appc-request-handler/appc-request-handler-core/pom.xml
index dcc73f2..da22308 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/pom.xml
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/pom.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
 	<!-- Licensed to the Apache Software Foundation (ASF) under one or more 
 		contributor license agreements. See the NOTICE file distributed with this 
@@ -40,6 +39,19 @@
 			<groupId>org.openecomp.appc</groupId>
 			<artifactId>appc-dmaap-adapter-bundle</artifactId>
 			<version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.appc</groupId>
+            <artifactId>appc-message-adapter-api</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+		</dependency>
+        <dependency>
+            <groupId>org.openecomp.appc</groupId>
+            <artifactId>appc-message-adapter-factory</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
 		</dependency>
 
 		<dependency>
@@ -97,6 +109,11 @@
 			<artifactId>transaction-recorder</artifactId>
 			<version>${project.version}</version>
 		</dependency>
+   		<dependency>
+			<groupId>equinoxSDK381</groupId>
+			<artifactId>org.eclipse.osgi</artifactId>
+			<scope>test</scope>
+		</dependency>        
 	</dependencies>
 
 	<build>
@@ -108,10 +125,15 @@
 					<instructions>
 						<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
 						<Bundle-Version>${project.version}</Bundle-Version>
-						<Embed-Dependency>appc-provider-model,appc-dmaap-adapter-bundle,appc-metric-bundle,appc-common,eelf-core,logback-core,logback-classic,appc-data-access-lib;scope=compile|runtime;inline=false</Embed-Dependency>
-						<Embed-Transitive>true</Embed-Transitive>
 						<Export-Service>org.openecomp.appc.requesthandler.RequestHandler</Export-Service>
-						<Import-Package>org.openecomp.appc.lockmanager.api.*,org.openecomp.appc.requesthandler,org.openecomp.appc.requesthandler.objects,org.openecomp.appc.transactionrecorder,org.openecomp.appc.transactionrecorder.objects,!groovy.lang,!org.apache.log,!org.apache.log4j.*,!org.codehaus.jackson.*,!org.codehaus.jackson.map.*,!org.codehaus.commons.compiler,!org.codehaus.groovy.*,!org.apache.commons.lang3,!org.codehaus.janino,!org.jasypt.*,!com.ibm.icu.*,!com.sun.faces.*,*;resolution:=optional</Import-Package>
+                        <Import-Package>
+                            org.openecomp.appc.adapter.messaging.*,
+                            org.openecomp.appc.adapter.message.*,
+                            org.openecomp.appc.adapter.factory.*,
+                            org.openecomp.appc.lockmanager.api.*,org.openecomp.appc.requesthandler,org.openecomp.appc.requesthandler.objects,org.openecomp.appc.transactionrecorder,
+                            org.openecomp.appc.transactionrecorder.objects, org.openecomp.appc.dao.util,
+                            *;resolution:=optional
+                        </Import-Package>
 					</instructions>
 				</configuration>
 			</plugin>
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/messageadapter/impl/MessageAdapterDmaapImpl.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/messageadapter/impl/MessageAdapterImpl.java
similarity index 68%
rename from appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/messageadapter/impl/MessageAdapterDmaapImpl.java
rename to appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/messageadapter/impl/MessageAdapterImpl.java
index 21c21db..676c628 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/messageadapter/impl/MessageAdapterDmaapImpl.java
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/messageadapter/impl/MessageAdapterImpl.java
@@ -21,26 +21,33 @@
 
 package org.openecomp.appc.messageadapter.impl;
 
-import java.util.HashSet;
-import java.util.Properties;
 
-import org.apache.commons.lang.ObjectUtils;
-import org.openecomp.appc.adapter.dmaap.Producer;
-import org.openecomp.appc.adapter.dmaap.DmaapProducer;
+import org.openecomp.appc.adapter.factory.DmaapMessageAdapterFactoryImpl;
+import org.openecomp.appc.adapter.factory.MessageService;
+import org.openecomp.appc.adapter.message.MessageAdapterFactory;
+import org.openecomp.appc.adapter.message.Producer;
 import org.openecomp.appc.configuration.Configuration;
 import org.openecomp.appc.configuration.ConfigurationFactory;
-import org.openecomp.appc.domainmodel.lcm.ResponseContext;
-import org.openecomp.appc.domainmodel.lcm.VNFOperation;
-import org.openecomp.appc.messageadapter.MessageAdapter;
-import org.openecomp.appc.requesthandler.conv.Converter;
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
+import org.apache.commons.lang.ObjectUtils;
+import org.openecomp.appc.domainmodel.lcm.ResponseContext;
+import org.openecomp.appc.domainmodel.lcm.VNFOperation;
+import org.openecomp.appc.messageadapter.MessageAdapter;
+import org.openecomp.appc.requesthandler.conv.Converter;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.ServiceReference;
 
-public class MessageAdapterDmaapImpl implements MessageAdapter{
+import java.util.HashSet;
+import java.util.Properties;
 
-    private Producer dmaapProducer;
+public class MessageAdapterImpl implements MessageAdapter{
+
+    private MessageService messageService;
+    private Producer producer;
     private String partition ;
     private Configuration configuration;
     private HashSet<String> pool;
@@ -48,21 +55,28 @@
     private String apiKey;
     private String apiSecret;
 
-    private static final EELFLogger logger = EELFManager.getInstance().getLogger(MessageAdapterDmaapImpl.class);
+    private static final EELFLogger logger = EELFManager.getInstance().getLogger(MessageAdapterImpl.class);
 
     /**
-     * Initialize dmaapProducer client to post messages using configuration properties
+     * Initialize producer client to post messages using configuration properties
      */
     @Override
     public void init(){
-        this.dmaapProducer = getDmaapProducer();
+        this.producer = getProducer();
     }
-    private Producer getDmaapProducer() {
+
+    private Producer getProducer() {
         configuration = ConfigurationFactory.getConfiguration();
         Properties properties=configuration.getProperties();
         updateProperties(properties);
-        Producer producer=new DmaapProducer(pool,writeTopic);
-        producer.updateCredentials(apiKey, apiSecret);
+        
+        BundleContext ctx = FrameworkUtil.getBundle(MessageAdapterImpl.class).getBundleContext();
+        if (ctx != null) {
+        	ServiceReference svcRef = ctx.getServiceReference(MessageAdapterFactory.class.getName());
+        	if (svcRef != null) {
+        		producer = ((MessageAdapterFactory) ctx.getService(svcRef)).createProducer(pool, writeTopic,apiKey, apiSecret);
+        	}
+        }
         return producer;
     }
 
@@ -73,10 +87,13 @@
         }
         pool = new HashSet<>();
         if (props != null) {
-            writeTopic = props.getProperty("dmaap.topic.write");
-            apiKey = props.getProperty("dmaap.client.key");
-            apiSecret = props.getProperty("dmaap.client.secret");
-            String hostnames = props.getProperty("dmaap.poolMembers");
+            // readTopic = props.getProperty("dmaap.topic.read");
+            writeTopic = props.getProperty("appc.LCM.topic.write");
+            apiKey = props.getProperty("appc.LCM.client.key");
+            apiSecret = props.getProperty("appc.LCM.client.secret");
+            messageService = MessageService.parse(props.getProperty("message.service.type"));
+            //  READ_TIMEOUT = Integer.valueOf(props.getProperty("dmaap.topic.read.timeout", String.valueOf(READ_TIMEOUT)));
+            String hostnames = props.getProperty("appc.LCM.poolMembers");
             if (hostnames != null && !hostnames.isEmpty()) {
                 for (String name : hostnames.split(",")) {
                     pool.add(name);
@@ -103,9 +120,9 @@
             if (logger.isDebugEnabled()) {
                 logger.debug("DMaaP Response = " + jsonMessage);
             }
-            success  = dmaapProducer.post(this.partition, jsonMessage);
+            success  = producer.post(this.partition, jsonMessage);
         } catch (JsonProcessingException e1) {
-            logger.error("Error generating Jason from DMaaP message "+ e1.getMessage());
+            logger.error("Error generating Json from DMaaP message "+ e1.getMessage());
             success= false;
         }catch (Exception e){
             logger.error("Error sending message to DMaaP "+e.getMessage());
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/conv/Converter.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/conv/Converter.java
index 3513516..272e02b 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/conv/Converter.java
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/conv/Converter.java
@@ -21,38 +21,6 @@
 
 package org.openecomp.appc.requesthandler.conv;
 
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.TimeZone;
-
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.Action;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.AuditOutputBuilder;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.HealthCheckOutputBuilder;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.LiveUpgradeOutputBuilder;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.LockOutputBuilder;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.ModifyConfigOutputBuilder;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.Payload;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.RollbackOutputBuilder;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.SnapshotOutputBuilder;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.SoftwareUploadOutputBuilder;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.StopOutputBuilder;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.SyncOutputBuilder;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.TerminateOutputBuilder;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.TestOutputBuilder;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.UnlockOutputBuilder;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.ZULU;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.common.header.CommonHeader;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.common.header.CommonHeaderBuilder;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.common.header.common.header.Flags;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.common.header.common.header.FlagsBuilder;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.status.Status;
-import org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.status.StatusBuilder;
-import org.opendaylight.yangtools.concepts.Builder;
-import org.opendaylight.yangtools.yang.binding.DataContainer;
-import org.openecomp.appc.domainmodel.lcm.ResponseContext;
-import org.openecomp.appc.domainmodel.lcm.VNFOperation;
-import org.openecomp.appc.requesthandler.impl.DmaapOutgoingMessage;
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 
@@ -65,6 +33,23 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectWriter;
 import com.fasterxml.jackson.databind.SerializationFeature;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.*;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.common.header.CommonHeader;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.common.header.CommonHeaderBuilder;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.common.header.common.header.Flags;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.common.header.common.header.FlagsBuilder;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.status.Status;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.status.StatusBuilder;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
+import org.openecomp.appc.domainmodel.lcm.ResponseContext;
+import org.openecomp.appc.domainmodel.lcm.VNFOperation;
+import org.openecomp.appc.requesthandler.impl.DmaapOutgoingMessage;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
 
 
 public class Converter {
@@ -90,6 +75,7 @@
         Action action = Action.valueOf(vnfOperation.name());
         CommonHeader commonHeader = convAsyncResponseTorev160108CommonHeader(response);
         Status status = convAsyncResponseTorev160108Status(response);
+        Payload payload = convAsyncResponseTorev160108Payload(response);
         switch (action){
             case Rollback:
                 outObj = new RollbackOutputBuilder();
@@ -110,6 +96,7 @@
                 outObj = new AuditOutputBuilder();
                 ((AuditOutputBuilder)outObj).setCommonHeader(commonHeader);
                 ((AuditOutputBuilder)outObj).setStatus(status);
+                ((AuditOutputBuilder)outObj).setPayload(payload);
                 return outObj;
             case HealthCheck:
                 outObj = new HealthCheckOutputBuilder();
@@ -126,10 +113,29 @@
                 ((LockOutputBuilder)outObj).setCommonHeader(commonHeader);
                 ((LockOutputBuilder)outObj).setStatus(status);
                 return outObj;
-            case ModifyConfig:
-                outObj = new ModifyConfigOutputBuilder();
-                ((ModifyConfigOutputBuilder)outObj).setCommonHeader(commonHeader);
-                ((ModifyConfigOutputBuilder)outObj).setStatus(status);
+            case Configure:
+                outObj = new ConfigureOutputBuilder();
+                ((ConfigureOutputBuilder)outObj).setCommonHeader(commonHeader);
+                ((ConfigureOutputBuilder)outObj).setStatus(status);
+                ((ConfigureOutputBuilder)outObj).setPayload(payload);
+                return outObj;
+            case ConfigModify:
+                outObj = new ConfigModifyOutputBuilder();
+                ((ConfigModifyOutputBuilder)outObj).setCommonHeader(commonHeader);
+                ((ConfigModifyOutputBuilder)outObj).setStatus(status);
+                ((ConfigModifyOutputBuilder)outObj).setPayload(payload);
+                return outObj;
+            case ConfigScaleOut:
+                outObj = new ConfigScaleoutOutputBuilder();
+                ((ConfigScaleoutOutputBuilder)outObj).setCommonHeader(commonHeader);
+                ((ConfigScaleoutOutputBuilder)outObj).setStatus(status);
+                ((ConfigScaleoutOutputBuilder)outObj).setPayload(payload);
+                return outObj;
+            case ConfigRestore:
+                outObj = new ConfigRestoreOutputBuilder();
+                ((ConfigRestoreOutputBuilder)outObj).setCommonHeader(commonHeader);
+                ((ConfigRestoreOutputBuilder)outObj).setStatus(status);
+                ((ConfigRestoreOutputBuilder)outObj).setPayload(payload);
                 return outObj;
             case SoftwareUpload:
                 outObj = new SoftwareUploadOutputBuilder();
@@ -145,6 +151,7 @@
                 outObj = new SyncOutputBuilder();
                 ((SyncOutputBuilder)outObj).setCommonHeader(commonHeader);
                 ((SyncOutputBuilder)outObj).setStatus(status);
+                ((SyncOutputBuilder)outObj).setPayload(payload);
                 return outObj;
             case Terminate:
                 outObj = new TerminateOutputBuilder();
@@ -161,12 +168,54 @@
                 ((UnlockOutputBuilder)outObj).setCommonHeader(commonHeader);
                 ((UnlockOutputBuilder)outObj).setStatus(status);
                 return outObj;
+            case Restart:
+                outObj = new RestartOutputBuilder();
+                ((RestartOutputBuilder)outObj).setCommonHeader(commonHeader);
+                ((RestartOutputBuilder)outObj).setStatus(status);
+                return outObj;
+            case Rebuild:
+                outObj = new RebuildOutputBuilder();
+                ((RebuildOutputBuilder)outObj).setCommonHeader(commonHeader);
+                ((RebuildOutputBuilder)outObj).setStatus(status);
+                return outObj;
+            case Migrate:
+                outObj = new MigrateOutputBuilder();
+                ((MigrateOutputBuilder)outObj).setCommonHeader(commonHeader);
+                ((MigrateOutputBuilder)outObj).setStatus(status);
+                return outObj;
+            case Evacuate:
+                outObj = new EvacuateOutputBuilder();
+                ((EvacuateOutputBuilder)outObj).setCommonHeader(commonHeader);
+                ((EvacuateOutputBuilder)outObj).setStatus(status);
+                return outObj;
+            case ConfigBackup:
+                outObj = new ConfigBackupOutputBuilder();
+                ((ConfigBackupOutputBuilder)outObj).setCommonHeader(commonHeader);
+                ((ConfigBackupOutputBuilder)outObj).setStatus(status);
+                ((ConfigBackupOutputBuilder)outObj).setPayload(payload);
+                return outObj;
+            case ConfigBackupDelete:
+                outObj = new ConfigBackupDeleteOutputBuilder();
+                ((ConfigBackupDeleteOutputBuilder)outObj).setCommonHeader(commonHeader);
+                ((ConfigBackupDeleteOutputBuilder)outObj).setStatus(status);
+                ((ConfigBackupDeleteOutputBuilder)outObj).setPayload(payload);
+                return outObj;
+            case ConfigExport:
+                outObj = new ConfigExportOutputBuilder();
+                ((ConfigExportOutputBuilder)outObj).setCommonHeader(commonHeader);
+                ((ConfigExportOutputBuilder)outObj).setStatus(status);
+                return outObj;
+            case Start:
+                outObj = new StartOutputBuilder();
+                ((StartOutputBuilder)outObj).setCommonHeader(commonHeader);
+                ((StartOutputBuilder)outObj).setStatus(status);
+                return outObj;
             default:
                 throw new IllegalArgumentException(action+" action is not supported");
         }
     }
 
-    public static Payload convAsyncResponseTorev160108Payload(ResponseContext inObj) throws ParseException {
+    public static Payload convAsyncResponseTorev160108Payload(ResponseContext inObj)  {
         Payload payload = null;
         if(inObj.getPayload() != null) {
             payload = new Payload(inObj.getPayload());
@@ -208,7 +257,7 @@
         }
 
         CommonHeaderBuilder commonHeaderBuilder = new CommonHeaderBuilder();
-        org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.common.header.common.header.Flags commonHeaderFlags = null;
+        org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.common.header.common.header.Flags commonHeaderFlags = null;
         if(inObj.getCommonHeader().getFlags() != null){
             commonHeaderFlags = Converter.convFlagsMapTorev160108Flags(inObj.getCommonHeader().getFlags());
             commonHeaderBuilder.setFlags(commonHeaderFlags);
@@ -239,7 +288,7 @@
         return isoFormatter.format(timeStamp);
     }
 
-    public static org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.common.header.common.header.Flags
+    public static org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.common.header.common.header.Flags
     convFlagsMapTorev160108Flags(org.openecomp.appc.domainmodel.lcm.Flags flags) {
         Flags rev160108flags = null;
         boolean anyFlag = false;
@@ -249,14 +298,14 @@
          */
         /*
         if(flags.containsKey(FORCE_FLAG)){
-            org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.common.header.common.header.Flags.Force force =
-                    org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.common.header.common.header.Flags.Force.valueOf(flags.get(FORCE_FLAG).toString());
+            org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.common.header.common.header.Flags.Force force =
+                    org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.common.header.common.header.Flags.Force.valueOf(flags.get(FORCE_FLAG).toString());
             flagsBuilder.setForce(force);
             anyFlag = true;
         }
         if(flags.containsKey(MODE_FLAG)){
-            org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.common.header.common.header.Flags.Mode mode =
-                    org.opendaylight.yang.gen.v1.org.openecomp.appc.rev160108.common.header.common.header.Flags.Mode.valueOf(flags.get(MODE_FLAG).toString());
+            org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.common.header.common.header.Flags.Mode mode =
+                    org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.common.header.common.header.Flags.Mode.valueOf(flags.get(MODE_FLAG).toString());
             flagsBuilder.setMode(mode);
             anyFlag = true;
         }
@@ -307,6 +356,9 @@
 
     public static DmaapOutgoingMessage convAsyncResponseToDmaapOutgoingMessage(VNFOperation vnfOperation, String rpcName, ResponseContext asyncResponse) throws JsonProcessingException {
         DmaapOutgoingMessage outObj = new DmaapOutgoingMessage();
+        String correlationID = getCorrelationID(asyncResponse);
+        outObj.setCorrelationID(correlationID);
+        outObj.setType("response");
         outObj.setRpcName(rpcName);
         Builder<?> builder = Converter.convAsyncResponseToBuilder(vnfOperation, rpcName, asyncResponse);
         Object messageBody = builder.build();
@@ -315,6 +367,12 @@
         return outObj;
     }
 
+    private static String getCorrelationID(ResponseContext context) {
+        return context.getCommonHeader().getRequestId()
+                + (context.getCommonHeader().getSubRequestId() == null ?
+                    "":"-" + context.getCommonHeader().getSubRequestId());
+    }
+
     abstract class MixIn {
         @JsonIgnore
         abstract Class<? extends DataContainer> getImplementedInterface(); // to be removed during serialization
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/exceptions/LCMOperationsDisabledException.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/exceptions/LCMOperationsDisabledException.java
new file mode 100644
index 0000000..c067f30
--- /dev/null
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/exceptions/LCMOperationsDisabledException.java
@@ -0,0 +1,36 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ * 						reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.requesthandler.exceptions;
+
+/**
+ */
+public class LCMOperationsDisabledException extends Exception {
+
+    /**
+     * Constructs a new exception with the specified detail message.
+     *
+     * @param message the detail message.
+     */
+    public LCMOperationsDisabledException(String message) {
+        super(message);
+    }
+}
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/exceptions/MissingVNFDataInAAIException.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/exceptions/MissingVNFDataInAAIException.java
new file mode 100644
index 0000000..7ffdb38
--- /dev/null
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/exceptions/MissingVNFDataInAAIException.java
@@ -0,0 +1,33 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ * 						reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.requesthandler.exceptions;
+
+public class MissingVNFDataInAAIException extends Exception {
+	String missingAttributeName;
+    public MissingVNFDataInAAIException(String attributeName) {
+        this.missingAttributeName = attributeName;
+    }
+
+    public String getMissingAttributeName() {
+        return missingAttributeName;
+    }
+}
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/helper/RequestRegistry.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/helper/RequestRegistry.java
index 874626c..e51d4b9 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/helper/RequestRegistry.java
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/helper/RequestRegistry.java
@@ -76,4 +76,15 @@
         set.remove(requestIdentifier);
     }
 
+    /**
+     * This method returns the count of currently registered requests
+     * in the request registry
+     * * @return currently registered requests count
+     */
+    public int getRegisteredRequestCount() {
+        if (logger.isTraceEnabled()) {
+            logger.trace("Entering to getRegisteredRequestCount");
+        }
+        return set.size();
+    }
 }
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/helper/RequestValidator.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/helper/RequestValidator.java
index 4f2986d..a4a2bee 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/helper/RequestValidator.java
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/helper/RequestValidator.java
@@ -28,10 +28,12 @@
 import org.openecomp.appc.requesthandler.exceptions.DGWorkflowNotFoundException;
 import org.openecomp.appc.requesthandler.exceptions.DuplicateRequestException;
 import org.openecomp.appc.requesthandler.exceptions.InvalidInputException;
+import org.openecomp.appc.requesthandler.exceptions.LCMOperationsDisabledException;
+import org.openecomp.appc.requesthandler.exceptions.MissingVNFDataInAAIException;
 import org.openecomp.appc.requesthandler.exceptions.RequestExpiredException;
 import org.openecomp.appc.requesthandler.exceptions.VNFNotFoundException;
 import org.openecomp.appc.requesthandler.exceptions.WorkflowNotFoundException;
 
 public interface RequestValidator {
-    public void validateRequest(RuntimeContext runtimeContext) throws VNFNotFoundException, RequestExpiredException, UnstableVNFException, InvalidInputException, DuplicateRequestException, NoTransitionDefinedException, LifecycleException, WorkflowNotFoundException,DGWorkflowNotFoundException;
+    public void validateRequest(RuntimeContext runtimeContext) throws VNFNotFoundException, RequestExpiredException, UnstableVNFException, InvalidInputException, DuplicateRequestException, NoTransitionDefinedException, LifecycleException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException;
 }
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/impl/DmaapOutgoingMessage.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/impl/DmaapOutgoingMessage.java
index 4546726..c2455a3 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/impl/DmaapOutgoingMessage.java
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/impl/DmaapOutgoingMessage.java
@@ -36,6 +36,15 @@
 @JsonIgnoreProperties(ignoreUnknown = true)
 public class DmaapOutgoingMessage {
 
+    @JsonProperty("version")
+    private String version;
+
+    @JsonProperty("type")
+    private String type;
+
+    @JsonProperty("correlation-id")
+    private String correlationID;
+
     private final static String defaultCambriaPartition = "MSO";
     @JsonProperty("cambria.partition")
     private String cambriaPartition = defaultCambriaPartition;
@@ -49,6 +58,30 @@
     public DmaapOutgoingMessage() {
     }
 
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getCorrelationID() {
+        return correlationID;
+    }
+
+    public void setCorrelationID(String correlationID) {
+        this.correlationID = correlationID;
+    }
+
     public String getCambriaPartition() {
         return cambriaPartition;
     }
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/impl/LCMStateManagerImpl.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/impl/LCMStateManagerImpl.java
new file mode 100644
index 0000000..0c97ebc
--- /dev/null
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/impl/LCMStateManagerImpl.java
@@ -0,0 +1,62 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ * 						reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.requesthandler.impl;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.openecomp.appc.requesthandler.LCMStateManager;
+
+public class LCMStateManagerImpl implements LCMStateManager {
+    private static final EELFLogger logger = EELFManager.getInstance().getLogger(LCMStateManagerImpl.class);
+    private static AtomicBoolean isLCMEnabled = new AtomicBoolean(true);
+
+    /**
+     * This method checks if the LCM operations are enabled or not
+     * * @return true if enabled else false
+     */
+    public boolean isLCMOperationEnabled() {
+        return isLCMEnabled.get();
+    }
+
+    /**
+     * This method disables the LCM operations
+     */
+    public void disableLCMOperations() {
+        if (logger.isTraceEnabled()) {
+            logger.trace("Entering to disableLCMOperations");
+        }
+        isLCMEnabled.set(false);
+    }
+
+    /**
+     * This method enables the LCM operations
+     */
+    public void enableLCMOperations() {
+        if (logger.isTraceEnabled()) {
+            logger.trace("Entering to enableLCMOperations");
+        }
+        isLCMEnabled.set(true);
+    }
+}
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/impl/RequestHandlerImpl.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/impl/RequestHandlerImpl.java
index d63cb8b..e6f7452 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/impl/RequestHandlerImpl.java
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/impl/RequestHandlerImpl.java
@@ -40,7 +40,7 @@
 import org.openecomp.appc.logging.LoggingConstants;
 import org.openecomp.appc.logging.LoggingUtils;
 import org.openecomp.appc.messageadapter.MessageAdapter;
-import org.openecomp.appc.messageadapter.impl.MessageAdapterDmaapImpl;
+import org.openecomp.appc.messageadapter.impl.MessageAdapterImpl;
 import org.openecomp.appc.metricservice.MetricRegistry;
 import org.openecomp.appc.metricservice.MetricService;
 import org.openecomp.appc.metricservice.metric.DispatchingFuntionMetric;
@@ -133,7 +133,7 @@
 
     public RequestHandlerImpl() {
         requestRegistry = new RequestRegistry();
-        messageAdapter = new MessageAdapterDmaapImpl();
+        messageAdapter = new MessageAdapterImpl();
         messageAdapter.init();
         Properties properties = configuration.getProperties();
         if (properties != null && properties.getProperty("metric.enabled") != null) {
@@ -215,7 +215,7 @@
         } catch (LifecycleException e) {
             errorMessage = e.getMessage();
             params = new Params().addParam("actionName", input.getRequestContext().getAction()).addParam("currentState", e.currentState);
-            output = buildRequestHandlerOutput(LCMCommandStatus.ACTION_NOT_SUPPORTED, params);
+            output = buildRequestHandlerOutput(LCMCommandStatus.INVALID_VNF_STATE, params);
         } catch (UnstableVNFException e) {
             errorMessage = e.getMessage();
             params = new Params().addParam("vnfId", vnfId);
@@ -246,6 +246,15 @@
         } catch (DuplicateRequestException e) {
             errorMessage = e.getMessage();
             output = buildRequestHandlerOutput(LCMCommandStatus.DUPLICATE_REQUEST, null);
+        } catch (MissingVNFDataInAAIException e) {
+            params = new Params().addParam("attributeName",e.getMissingAttributeName())
+                    .addParam("vnfId",vnfId);
+            output = buildRequestHandlerOutput(LCMCommandStatus.MISSING_VNF_DATA_IN_AAI,params);
+            errorMessage = output.getResponseContext().getStatus().getMessage();
+        } catch (LCMOperationsDisabledException e) {
+            errorMessage = e.getMessage();
+            params = new Params().addParam("errorMsg", errorMessage);
+            output = buildRequestHandlerOutput(LCMCommandStatus.REJECTED, params);
         } catch (Exception e) {
             storeErrorMessageToLog(runtimeContext, "", "", "Exception = " + e.getMessage());
             errorMessage = e.getMessage() != null ? e.getMessage() : e.toString();
@@ -261,7 +270,11 @@
                 runtimeContext.setResponseContext(output.getResponseContext());
                 if ((null == output) || !(output.getResponseContext().getStatus().getCode() == LCMCommandStatus.ACCEPTED.getResponseCode())) {
                     if (isMetricEnabled) {
-                        ((DispatchingFuntionMetric) metricRegistry.metric("DISPATCH_FUNCTION")).incrementRejectedRequest();
+                        if((output.getResponseContext().getStatus().getCode() == LCMCommandStatus.SUCCESS.getResponseCode())) {
+                            ((DispatchingFuntionMetric) metricRegistry.metric("DISPATCH_FUNCTION")).incrementAcceptedRequest();
+                        }else {
+                            ((DispatchingFuntionMetric) metricRegistry.metric("DISPATCH_FUNCTION")).incrementRejectedRequest();
+                        }
                     }
                     removeRequestFromRegistry(input.getRequestContext().getCommonHeader());
                 }
@@ -580,14 +593,18 @@
         if (logger.isTraceEnabled()) {
             logger.trace("Entering to onRequestExecutionStart with vnfId = " + vnfId + "and requestIdentifierString = " + requestIdentifierString);
         }
-        try {
-            boolean updated = workingStateManager.setWorkingState(vnfId, VNFWorkingState.UNSTABLE, requestIdentifierString, forceFlag);
+
+        if(!readOnlyActivity || !forceFlag || workingStateManager.isVNFStable(vnfId)) {
+            boolean updated = false;
+            try {
+                updated = workingStateManager.setWorkingState(vnfId, VNFWorkingState.UNSTABLE, requestIdentifierString, forceFlag);
+            }  catch (Exception e) {
+                logger.error("Error updating working state for vnf " + vnfId + e);
+                throw new RuntimeException(e);
+            }
             if (!updated) {
                 throw new UnstableVNFException("VNF is not stable for vnfID = " + vnfId);
             }
-        } catch (Exception e) {
-            logger.error("Error updating working state for vnf " + vnfId + e);
-            throw new RuntimeException(e);
         }
 
         if (logger.isTraceEnabled())
@@ -805,4 +822,16 @@
             return null;
         }
     }
+
+    /**
+     * This method returns the count of in progress requests
+     * * @return in progress requests count
+     */
+    @Override
+    public int getInprogressRequestCount() {
+        if (logger.isTraceEnabled()) {
+            logger.trace("Entering to getInprogressRequestCount");
+        }
+        return requestRegistry.getRegisteredRequestCount();
+    }
 }
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/impl/RequestValidatorImpl.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/impl/RequestValidatorImpl.java
index 509c351..8499937 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/impl/RequestValidatorImpl.java
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/impl/RequestValidatorImpl.java
@@ -24,6 +24,7 @@
 import java.time.Instant;
 
 import org.apache.commons.lang.ObjectUtils;
+import org.apache.commons.lang.StringUtils;
 import org.openecomp.appc.common.constant.Constants;
 import org.openecomp.appc.configuration.Configuration;
 import org.openecomp.appc.configuration.ConfigurationFactory;
@@ -40,6 +41,8 @@
 import org.openecomp.appc.lifecyclemanager.objects.NoTransitionDefinedException;
 import org.openecomp.appc.logging.LoggingConstants;
 import org.openecomp.appc.logging.LoggingUtils;
+import org.openecomp.appc.requesthandler.LCMStateManager;
+import org.openecomp.appc.requesthandler.exceptions.*;
 import org.openecomp.appc.requesthandler.exceptions.DGWorkflowNotFoundException;
 import org.openecomp.appc.requesthandler.exceptions.DuplicateRequestException;
 import org.openecomp.appc.requesthandler.exceptions.InvalidInputException;
@@ -74,6 +77,7 @@
     private WorkFlowManager workflowManager;
 
     private WorkingStateManager workingStateManager;
+    private LCMStateManager lcmStateManager;
 
     private final RequestRegistry requestRegistry = new RequestRegistry();
 
@@ -93,14 +97,26 @@
         this.workingStateManager = workingStateManager;
     }
 
+    public void setLcmStateManager(LCMStateManager lcmStateManager) {
+        this.lcmStateManager = lcmStateManager;
+    }
+
     public RequestValidatorImpl() {
     }
 
     @Override
-    public void validateRequest(RuntimeContext runtimeContext) throws VNFNotFoundException, RequestExpiredException, UnstableVNFException, InvalidInputException, DuplicateRequestException, NoTransitionDefinedException, LifecycleException, WorkflowNotFoundException,DGWorkflowNotFoundException {
+    public void validateRequest(RuntimeContext runtimeContext) throws VNFNotFoundException, RequestExpiredException, UnstableVNFException, InvalidInputException, DuplicateRequestException, NoTransitionDefinedException, LifecycleException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
         if (logger.isTraceEnabled()){
             logger.trace("Entering to validateRequest with RequestHandlerInput = "+ ObjectUtils.toString(runtimeContext));
         }
+        if(!lcmStateManager.isLCMOperationEnabled()) {
+            LoggingUtils.logErrorMessage(
+                    LoggingConstants.TargetNames.REQUEST_VALIDATOR,
+                    EELFResourceManager.format(Msg.LCM_OPERATIONS_DISABLED),
+                    this.getClass().getCanonicalName());
+            throw new LCMOperationsDisabledException("APPC LCM operations have been administratively disabled");
+        }
+
         getAAIservice();
         validateInput(runtimeContext.getRequestContext());
         checkVNFWorkingState(runtimeContext);
@@ -114,9 +130,9 @@
             // for built-in operations skip WF presence check
             queryWFM(vnfContext, runtimeContext.getRequestContext());
         }
-        }
+    }
 
-     private boolean isValidTTL(String ttl) {
+    private boolean isValidTTL(String ttl) {
         if (logger.isTraceEnabled()){
             logger.trace("Entering to isValidTTL where ttl = "+ ObjectUtils.toString(ttl));
         }
@@ -206,7 +222,7 @@
         }
     }
 
-    private VNFContext queryAAI(String vnfId) throws VNFNotFoundException {
+    private VNFContext queryAAI(String vnfId) throws VNFNotFoundException, MissingVNFDataInAAIException {
         SvcLogicContext ctx = new SvcLogicContext();
         ctx = getVnfdata(vnfId, "vnf", ctx);
 
@@ -267,9 +283,17 @@
         }
     }
 
-    private void populateVnfContext(VNFContext vnfContext, SvcLogicContext ctx) {
-        vnfContext.setType(ctx.getAttribute("vnf.vnf-type"));
-        vnfContext.setStatus(ctx.getAttribute("vnf.orchestration-status"));
+    private void populateVnfContext(VNFContext vnfContext, SvcLogicContext ctx) throws MissingVNFDataInAAIException {
+        String vnfType = ctx.getAttribute("vnf.vnf-type");
+        String orchestrationStatus = ctx.getAttribute("vnf.orchestration-status");
+        if(StringUtils.isEmpty(vnfType)){
+            throw new MissingVNFDataInAAIException("vnf-type");
+        }
+        else if(StringUtils.isEmpty(orchestrationStatus)){
+            throw new MissingVNFDataInAAIException("orchestration-status");
+        }
+        vnfContext.setType(vnfType);
+        vnfContext.setStatus(orchestrationStatus);
         vnfContext.setId(ctx.getAttribute("vnf.vnf-id"));
         // TODO: Uncomment once A&AI supports VNF version
         //vnfContext.setVersion(ctx.getAttribute("vnf.vnf-version"));
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index 785b6cb..984de98 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -39,9 +39,13 @@
         <property name="lifecyclemanager" ref="lifecyclemanagerRef" />
         <property name="workflowManager" ref="workflowManagerRef" />
         <property name="workingStateManager" ref="workingStateManagerBean" />
+        <property name="lcmStateManager" ref="lcmStateManagerBean" />
     </bean>
 
+    <bean id="lcmStateManagerBean" class="org.openecomp.appc.requesthandler.impl.LCMStateManagerImpl" scope="singleton" />
+
     <service id="requestHandlerService" interface="org.openecomp.appc.requesthandler.RequestHandler" ref="requestHandlerBean"/>
+    <service id="lcmStateManagerService" interface="org.openecomp.appc.requesthandler.LCMStateManager" ref="lcmStateManagerBean"/>
     <reference id="lifecyclemanagerRef" availability="mandatory" activation="eager" interface="org.openecomp.appc.lifecyclemanager.LifecycleManager" />
     <reference id="workflowManagerRef" availability="mandatory" activation="eager" interface="org.openecomp.appc.workflow.WorkFlowManager" />
     <reference id="commandExecutorRef" availability="optional" activation="eager" interface="org.openecomp.appc.executor.CommandExecutor" />
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/resources/org/openecomp/appc/default.properties b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/resources/org/openecomp/appc/default.properties
index 2e2763f..ba24304 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/resources/org/openecomp/appc/default.properties
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/resources/org/openecomp/appc/default.properties
@@ -25,21 +25,14 @@
 org.openecomp.appc.bootstrap.path=/opt/openecomp/appc/data/properties,${user.home},.
 
 #Property below provided by appc.properties
-#dmaap.poolMembers=<DMAAP_IP>:3904
+appc.LCM.provider.url=https://localhost:8443/restconf/operations/appc-provider-lcm
+appc.LCM.poolMembers=<DMAAP_IP>:3904
+appc.LCM.service=dmaap
+appc.LCM.topic.write=APPC-TEST2
+appc.LCM.client.name=APPC-TEST-CLIENT-REQ-HLDR-MAIN
+appc.LCM.provider.user=test
+appc.LCM.provider.pass=test
 
-dmaap.topic.read=APPC-TEST2
-dmaap.topic.write=APPC-TEST2
-#dmaap.topic.read.filter={"class":"Assigned","field":"request"}
-dmaap.topic.read.filter={"class": "And","filters": [{"class": "Assigned","field": "request"},{"class": "Unassigned","field": "response"}]}
-dmaap.client.name=APPC-TEST-CLIENT-REQ-HDLR-MAIN
-dmaap.client.name.id=0
-#dmaap.client.key=random
-#dmaap.client.secret=random
-
-dmaap.threads.queuesize.min=1
-dmaap.threads.queuesize.max=1000
-dmaap.threads.poolsize.min=1
-dmaap.threads.poolsize.max=2
 
 org.openecomp.appc.db.url.sdnctl=jdbc:mysql://127.0.0.1:3306/test
 org.openecomp.appc.db.user.sdnctl=test
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/openecomp/appc/requesthandler/LCMStateManagerImplTest.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/openecomp/appc/requesthandler/LCMStateManagerImplTest.java
new file mode 100644
index 0000000..2c8d56e
--- /dev/null
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/openecomp/appc/requesthandler/LCMStateManagerImplTest.java
@@ -0,0 +1,55 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ * 						reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.requesthandler;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.openecomp.appc.requesthandler.impl.LCMStateManagerImpl;
+
+public class LCMStateManagerImplTest {
+
+    LCMStateManager lcmStateManager;
+
+    @Before
+    public void init() throws Exception {
+        lcmStateManager = new LCMStateManagerImpl();
+    }
+
+    /**
+     * Test to check the disable LCM operations method
+     */
+    @Test
+    public void disableLCMOperations() throws Exception {
+        lcmStateManager.disableLCMOperations();
+        Assert.assertFalse(lcmStateManager.isLCMOperationEnabled());
+    }
+
+    /**
+     * Test to check the enable LCM operations method
+     */
+    @Test
+    public void enableLCMOperations() throws Exception {
+        lcmStateManager.enableLCMOperations();
+        Assert.assertTrue(lcmStateManager.isLCMOperationEnabled());
+    }
+}
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/openecomp/appc/requesthandler/TestConverter.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/openecomp/appc/requesthandler/TestConverter.java
index c54f947..17a62b1 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/openecomp/appc/requesthandler/TestConverter.java
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/openecomp/appc/requesthandler/TestConverter.java
@@ -28,7 +28,6 @@
 import org.openecomp.appc.executor.objects.LCMCommandStatus;
 import org.openecomp.appc.requesthandler.conv.Converter;
 
-import javax.ws.rs.container.AsyncResponse;
 import java.text.ParseException;
 import java.time.Instant;
 import java.util.Date;
@@ -37,19 +36,20 @@
 
 public class TestConverter {
 	private String expectedJsonBodyStr ="{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}}";
-	private String expectedDmaapOutgoingMessageJsonStringTest ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"rpc-name\":\"test\"}";
-	private String expectedDmaapOutgoingMessageJsonStringRollback ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"rpc-name\":\"rollback\"}";
-	private String expectedDmaapOutgoingMessageJsonStringSnapshot ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"rpc-name\":\"snapshot\"}";
-	private String expectedDmaapOutgoingMessageJsonStringAudit ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"rpc-name\":\"audit\"}";
-	private String expectedDmaapOutgoingMessageJsonStringHealthCheck ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"rpc-name\":\"health-check\"}";
-	private String expectedDmaapOutgoingMessageJsonStringLiveUpgrade ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"rpc-name\":\"live-upgrade\"}";
-	private String expectedDmaapOutgoingMessageJsonStringLock ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"rpc-name\":\"lock\"}";
-	private String expectedDmaapOutgoingMessageJsonStringModifyConfig ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"rpc-name\":\"modify-config\"}";
-	private String expectedDmaapOutgoingMessageJsonStringSoftwareUpload ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"rpc-name\":\"software-upload\"}";
-	private String expectedDmaapOutgoingMessageJsonStringStop ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"rpc-name\":\"stop\"}";
-	private String expectedDmaapOutgoingMessageJsonStringSync ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"rpc-name\":\"sync\"}";
-	private String expectedDmaapOutgoingMessageJsonStringTerminate ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"rpc-name\":\"terminate\"}";
-	private String expectedDmaapOutgoingMessageJsonStringUnlock ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"rpc-name\":\"unlock\"}";
+	private String expectedDmaapOutgoingMessageJsonStringTest ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"correlation-id\":\"reqid\",\"rpc-name\":\"test\",\"type\":\"response\"}";
+	private String expectedDmaapOutgoingMessageJsonStringRollback ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"correlation-id\":\"reqid\",\"rpc-name\":\"rollback\",\"type\":\"response\"}";
+	private String expectedDmaapOutgoingMessageJsonStringSnapshot ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"correlation-id\":\"reqid\",\"rpc-name\":\"snapshot\",\"type\":\"response\"}";
+	private String expectedDmaapOutgoingMessageJsonStringAudit ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"payload\":\"{}\",\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"correlation-id\":\"reqid\",\"rpc-name\":\"audit\",\"type\":\"response\"}";
+	private String expectedDmaapOutgoingMessageJsonStringHealthCheck ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"correlation-id\":\"reqid\",\"rpc-name\":\"health-check\",\"type\":\"response\"}";
+	private String expectedDmaapOutgoingMessageJsonStringLiveUpgrade ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"correlation-id\":\"reqid\",\"rpc-name\":\"live-upgrade\",\"type\":\"response\"}";
+	private String expectedDmaapOutgoingMessageJsonStringLock ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"correlation-id\":\"reqid\",\"rpc-name\":\"lock\",\"type\":\"response\"}";
+	private String expectedDmaapOutgoingMessageJsonStringModifyConfig ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"payload\":\"{}\",\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"correlation-id\":\"reqid\",\"rpc-name\":\"config-modify\",\"type\":\"response\"}";
+	private String expectedDmaapOutgoingMessageJsonStringSoftwareUpload ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"correlation-id\":\"reqid\",\"rpc-name\":\"software-upload\",\"type\":\"response\"}";
+	private String expectedDmaapOutgoingMessageJsonStringStop ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"correlation-id\":\"reqid\",\"rpc-name\":\"stop\",\"type\":\"response\"}";
+	private String expectedDmaapOutgoingMessageJsonStringSync ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"payload\":\"{}\",\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"correlation-id\":\"reqid\",\"rpc-name\":\"sync\",\"type\":\"response\"}";
+	private String expectedDmaapOutgoingMessageJsonStringTerminate ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"correlation-id\":\"reqid\",\"rpc-name\":\"terminate\",\"type\":\"response\"}";
+	private String expectedDmaapOutgoingMessageJsonStringUnlock ="{\"body\":{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}},\"cambria.partition\":\"MSO\",\"correlation-id\":\"reqid\",\"rpc-name\":\"unlock\",\"type\":\"response\"}";
+	private String expectedJsonBodyStrwithPayload ="{\"output\":{\"common-header\":{\"api-ver\":\"2.0.0\",\"flags\":{},\"originator-id\":\"oid\",\"request-id\":\"reqid\",\"timestamp\":\"1970-01-01T00:00:01.000Z\"},\"payload\":\"{}\",\"status\":{\"code\":400,\"message\":\"SUCCESS - request has been processed successfully\"}}}";
 
 	@Test
 	public void convDateToZuluStringTest(){
@@ -126,16 +126,16 @@
 	}
 	@Test
 	public void convAsyncResponseToBuilderAuditTest() throws JsonProcessingException {
-		ResponseContext asyncResponse = buildAsyncResponse();
+		ResponseContext asyncResponse = buildAsyncResponsewithPayload();
 		VNFOperation action = VNFOperation.Audit;
 		String rpcName = action.name().toLowerCase();
 		String jsonStr = Converter.convAsyncResponseToJsonStringBody(action, rpcName, asyncResponse);
-		Assert.assertEquals(expectedJsonBodyStr,jsonStr);
+		Assert.assertEquals(expectedJsonBodyStrwithPayload,jsonStr);
 	}
 
 	@Test
 	public void convAsyncResponseToDmaapOutgoingMessageJsonStringAuditTest() throws JsonProcessingException {
-		ResponseContext asyncResponse = buildAsyncResponse();
+		ResponseContext asyncResponse = buildAsyncResponsewithPayload();
 		VNFOperation action = VNFOperation.Audit;
 		String rpcName = action.name().toLowerCase();
 		String jsonStr = Converter.convAsyncResponseToDmaapOutgoingMessageJsonString(action, rpcName, asyncResponse);
@@ -199,17 +199,17 @@
 	}
 	@Test
 	public void convAsyncResponseToBuilderModifyConfigTest() throws JsonProcessingException {
-		ResponseContext asyncResponse = buildAsyncResponse();
-		VNFOperation action = VNFOperation.ModifyConfig;
+		ResponseContext asyncResponse = buildAsyncResponsewithPayload();
+		VNFOperation action = VNFOperation.ConfigModify;
 		String rpcName = convertActionNameToUrl(action.name());
 		String jsonStr = Converter.convAsyncResponseToJsonStringBody(action, rpcName, asyncResponse);
-		Assert.assertEquals(expectedJsonBodyStr,jsonStr);
+		Assert.assertEquals(expectedJsonBodyStrwithPayload,jsonStr);
 	}
 
 	@Test
 	public void convAsyncResponseToDmaapOutgoingMessageJsonStringModifyConfigTest() throws JsonProcessingException {
-		ResponseContext asyncResponse = buildAsyncResponse();
-		VNFOperation action = VNFOperation.ModifyConfig;
+		ResponseContext asyncResponse = buildAsyncResponsewithPayload();
+		VNFOperation action = VNFOperation.ConfigModify;
 		String rpcName = convertActionNameToUrl(action.name());
 		String jsonStr = Converter.convAsyncResponseToDmaapOutgoingMessageJsonString(action, rpcName, asyncResponse);
 		System.out.println("jsonStr = " + jsonStr);
@@ -254,17 +254,17 @@
 	}
 	@Test
 	public void convAsyncResponseToBuilderSync() throws JsonProcessingException {
-		ResponseContext asyncResponse = buildAsyncResponse();
+		ResponseContext asyncResponse = buildAsyncResponsewithPayload();
 		VNFOperation action = VNFOperation.Sync;
 		String rpcName = convertActionNameToUrl(action.name());
 
 		String jsonStr = Converter.convAsyncResponseToJsonStringBody(action, rpcName, asyncResponse);
-		Assert.assertEquals(expectedJsonBodyStr,jsonStr);
+		Assert.assertEquals(expectedJsonBodyStrwithPayload,jsonStr);
 	}
 
 	@Test
 	public void convAsyncResponseToDmaapOutgoingMessageJsonStringSync() throws JsonProcessingException {
-		ResponseContext asyncResponse = buildAsyncResponse();
+		ResponseContext asyncResponse = buildAsyncResponsewithPayload();
 		VNFOperation action = VNFOperation.Sync;
 		String rpcName = convertActionNameToUrl(action.name());
 		String jsonStr = Converter.convAsyncResponseToDmaapOutgoingMessageJsonString(action, rpcName, asyncResponse);
@@ -273,11 +273,11 @@
 	}
 	@Test
 	public void convAsyncResponseToBuilderTerminateTest() throws JsonProcessingException {
-		ResponseContext asyncResponse = buildAsyncResponse();
+		ResponseContext asyncResponse = buildAsyncResponsewithPayload();
 		VNFOperation action = VNFOperation.Sync;
 		String rpcName = convertActionNameToUrl(action.name());
 		String jsonStr = Converter.convAsyncResponseToJsonStringBody(action, rpcName, asyncResponse);
-		Assert.assertEquals(expectedJsonBodyStr,jsonStr);
+		Assert.assertEquals(expectedJsonBodyStrwithPayload,jsonStr);
 	}
 
 	@Test
@@ -334,6 +334,17 @@
 		return asyncResponse;
 	}
 
+	private ResponseContext buildAsyncResponsewithPayload() {
+		ResponseContext asyncResponse = createResponseContextWithSubObjects();
+		asyncResponse.setStatus(LCMCommandStatus.SUCCESS.toStatus(null));
+		asyncResponse.getCommonHeader().setOriginatorId("oid");
+		asyncResponse.getCommonHeader().setApiVer("2.0.0");
+		asyncResponse.getCommonHeader().setRequestId("reqid");
+		asyncResponse.getCommonHeader().setTimestamp(Instant.ofEpochMilli(1000L));
+		asyncResponse.setPayload("{}");
+		return asyncResponse;
+	}
+
 	private ResponseContext createResponseContextWithSubObjects() {
 
 		ResponseContext responseContext = new ResponseContext();
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/openecomp/appc/requesthandler/TestRequestHandler.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/openecomp/appc/requesthandler/TestRequestHandler.java
index 1af658f..1129655 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/openecomp/appc/requesthandler/TestRequestHandler.java
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/openecomp/appc/requesthandler/TestRequestHandler.java
@@ -38,6 +38,13 @@
 import org.junit.runner.RunWith;
 import org.mockito.Matchers;
 import org.mockito.Mockito;
+import org.openecomp.appc.adapter.factory.DmaapMessageAdapterFactoryImpl;
+import org.openecomp.appc.adapter.message.MessageAdapterFactory;
+import org.openecomp.appc.adapter.messaging.dmaap.impl.DmaapProducerImpl;
+import org.openecomp.appc.configuration.Configuration;
+import org.openecomp.appc.configuration.ConfigurationFactory;
+import org.openecomp.appc.domainmodel.lcm.*;
+import org.openecomp.appc.domainmodel.lcm.Flags.Mode;
 import org.openecomp.appc.domainmodel.lcm.ActionIdentifiers;
 import org.openecomp.appc.domainmodel.lcm.CommonHeader;
 import org.openecomp.appc.domainmodel.lcm.Flags;
@@ -56,6 +63,8 @@
 import org.openecomp.appc.lockmanager.api.LockException;
 import org.openecomp.appc.lockmanager.api.LockManager;
 import org.openecomp.appc.messageadapter.MessageAdapter;
+import org.openecomp.appc.messageadapter.impl.MessageAdapterImpl;
+import org.openecomp.appc.requesthandler.exceptions.*;
 import org.openecomp.appc.requesthandler.exceptions.DGWorkflowNotFoundException;
 import org.openecomp.appc.requesthandler.exceptions.DuplicateRequestException;
 import org.openecomp.appc.requesthandler.exceptions.InvalidInputException;
@@ -73,7 +82,15 @@
 import org.openecomp.appc.workflow.objects.WorkflowRequest;
 import org.openecomp.appc.workingstatemanager.WorkingStateManager;
 import org.openecomp.appc.workingstatemanager.objects.VNFWorkingState;
+import org.openecomp.sdnc.sli.aai.AAIService;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
 import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.ServiceReference;
 import org.powermock.api.mockito.PowerMockito;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
@@ -82,7 +99,7 @@
 import com.att.eelf.configuration.EELFManager;
 
 @RunWith(PowerMockRunner.class)
-@PrepareForTest( {WorkingStateManager.class,FrameworkUtil.class, TransactionRecorder.class, RequestHandlerImpl.class,RequestValidatorImpl.class, TransactionRecorder.class})
+@PrepareForTest( {WorkingStateManager.class,FrameworkUtil.class, TransactionRecorder.class, RequestHandlerImpl.class,RequestValidatorImpl.class, TransactionRecorder.class, MessageAdapterImpl.class})
 public class TestRequestHandler {
 
 	private static final EELFLogger logger = EELFManager.getInstance().getLogger(TestRequestHandler.class);
@@ -92,10 +109,29 @@
 	private WorkFlowManager workflowManager;
 	private WorkingStateManager workingStateManager ;
 	private LockManager lockManager;
+    private Configuration configuration;
 
+	private final BundleContext bundleContext=Mockito.mock(BundleContext.class);
+	private final Bundle bundleService=Mockito.mock(Bundle.class);
+	private final ServiceReference sref=Mockito.mock(ServiceReference.class);
+    MessageAdapterFactory factory = new DmaapMessageAdapterFactoryImpl();
+
+	
 	@Before
 	public void init() throws Exception {
-
+	    configuration = ConfigurationFactory.getConfiguration();
+	    	    
+	    configuration.setProperty("appc.LCM.topic.write" , "TEST");
+	    configuration.setProperty("appc.LCM.client.key" , "TEST");
+	    configuration.setProperty("appc.LCM.client.secret" , "TEST");
+	    
+		PowerMockito.mockStatic(FrameworkUtil.class);
+		PowerMockito.when(FrameworkUtil.getBundle(MessageAdapterImpl.class)).thenReturn(bundleService);
+		PowerMockito.when(bundleService.getBundleContext()).thenReturn(bundleContext);
+		PowerMockito.when(bundleContext.getServiceReference(MessageAdapterFactory.class.getName())).thenReturn(sref);
+		PowerMockito.when(bundleContext.getService(sref)).thenReturn(factory);
+	    
+	
 		requestHandler = new RequestHandlerImpl();
 		LifecycleManager lifecyclemanager= mock(LifecycleManager.class);
 		workflowManager= mock(WorkFlowManager.class);
@@ -161,7 +197,7 @@
 	}
 
 	@Test
-	public void testInvalidVNFExceptionRequest() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException,DGWorkflowNotFoundException {
+	public void testInvalidVNFExceptionRequest() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
 		String originatorID = UUID.randomUUID().toString();
 		String requestID = UUID.randomUUID().toString();
 		String subRequestID = UUID.randomUUID().toString();
@@ -174,7 +210,7 @@
 	}
 
 	@Test
-	public void testLifecycleException() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException,DGWorkflowNotFoundException {
+	public void testLifecycleException() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
 		String originatorID = UUID.randomUUID().toString();
 		String requestID = UUID.randomUUID().toString();
 		String subRequestID = UUID.randomUUID().toString();
@@ -183,12 +219,12 @@
 		RequestHandlerInput input = this.getRequestHandlerInput("3009", VNFOperation.Configure,0,false,originatorID, requestID, subRequestID, Instant.now());
 		PowerMockito.doThrow(new LifecycleException(new Exception(),"Configured","test event")).when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
 		RequestHandlerOutput output = requestHandler.handleRequest(input);
-		Assert.assertEquals(LCMCommandStatus.ACTION_NOT_SUPPORTED.getResponseCode(), output.getResponseContext().getStatus().getCode());
+		Assert.assertEquals(LCMCommandStatus.INVALID_VNF_STATE.getResponseCode(), output.getResponseContext().getStatus().getCode());
 	}
 
 
 	@Test
-	public void testRequestExpiredException() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException,DGWorkflowNotFoundException {
+	public void testRequestExpiredException() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
 		String originatorID = UUID.randomUUID().toString();
 		String requestID = UUID.randomUUID().toString();
 		String subRequestID = UUID.randomUUID().toString();
@@ -200,7 +236,19 @@
 	}
 
 	@Test
-	public void testWorkflowNotFoundException() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException,DGWorkflowNotFoundException {
+	public void testMissingVNFdata() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
+		String originatorID = UUID.randomUUID().toString();
+		String requestID = UUID.randomUUID().toString();
+		String subRequestID = UUID.randomUUID().toString();
+
+		RequestHandlerInput input = this.getRequestHandlerInput("3009", VNFOperation.Configure,0,false,originatorID, requestID, subRequestID,Instant.now());
+		PowerMockito.doThrow(new MissingVNFDataInAAIException("vnf-type")).when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
+		RequestHandlerOutput output = requestHandler.handleRequest(input);
+		Assert.assertEquals(LCMCommandStatus.MISSING_VNF_DATA_IN_AAI.getResponseCode(), output.getResponseContext().getStatus().getCode());
+	}
+
+	@Test
+	public void testWorkflowNotFoundException() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
 		String originatorID = UUID.randomUUID().toString();
 		String requestID = UUID.randomUUID().toString();
 		String subRequestID = UUID.randomUUID().toString();
@@ -224,7 +272,7 @@
 	}
 
 	@Test
-	public void testInvalidInputException() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException,DGWorkflowNotFoundException {
+	public void testInvalidInputException() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
 		String originatorID1 = UUID.randomUUID().toString();
 		String requestID1 = UUID.randomUUID().toString();
 		String subRequestID1 = UUID.randomUUID().toString();
@@ -236,7 +284,7 @@
 	}
 
 	@Test
-	public void testNoTransitionDefinedException() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException,DGWorkflowNotFoundException {
+	public void testNoTransitionDefinedException() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
 		String originatorID = UUID.randomUUID().toString();
 		String requestID = UUID.randomUUID().toString();
 		String subRequestID = UUID.randomUUID().toString();
@@ -249,7 +297,7 @@
 	}
 
 	@Test
-	public void rejectInvalidRequest() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException,DGWorkflowNotFoundException {
+	public void rejectInvalidRequest() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
 		String originatorID = UUID.randomUUID().toString();
 		String requestID = UUID.randomUUID().toString();
 		String subRequestID = UUID.randomUUID().toString();
@@ -331,7 +379,6 @@
 
 	}
 
-
 	@Test
 	public void testOnRequestExecutionEndFailureForWorkingState() throws Exception {
 		logger.debug("=====================testOnRequestExecutionEndFailureForWorkingState=============================");
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/openecomp/appc/requesthandler/TestRequestValidator.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/openecomp/appc/requesthandler/TestRequestValidator.java
index 16caf58..6d2b4a1 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/openecomp/appc/requesthandler/TestRequestValidator.java
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/openecomp/appc/requesthandler/TestRequestValidator.java
@@ -34,31 +34,17 @@
 import java.util.UUID;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
-import org.openecomp.appc.domainmodel.lcm.ActionIdentifiers;
-import org.openecomp.appc.domainmodel.lcm.CommonHeader;
-import org.openecomp.appc.domainmodel.lcm.Flags;
-import org.openecomp.appc.domainmodel.lcm.RequestContext;
-import org.openecomp.appc.domainmodel.lcm.ResponseContext;
-import org.openecomp.appc.domainmodel.lcm.RuntimeContext;
-import org.openecomp.appc.domainmodel.lcm.Status;
-import org.openecomp.appc.domainmodel.lcm.VNFContext;
-import org.openecomp.appc.domainmodel.lcm.VNFOperation;
+import org.openecomp.appc.domainmodel.lcm.*;
 import org.openecomp.appc.executor.UnstableVNFException;
 import org.openecomp.appc.lifecyclemanager.LifecycleManager;
 import org.openecomp.appc.lifecyclemanager.objects.LifecycleException;
 import org.openecomp.appc.lifecyclemanager.objects.NoTransitionDefinedException;
-import org.openecomp.appc.requesthandler.exceptions.DGWorkflowNotFoundException;
-import org.openecomp.appc.requesthandler.exceptions.DuplicateRequestException;
-import org.openecomp.appc.requesthandler.exceptions.InvalidInputException;
-import org.openecomp.appc.requesthandler.exceptions.RequestExpiredException;
-import org.openecomp.appc.requesthandler.exceptions.VNFNotFoundException;
-import org.openecomp.appc.requesthandler.exceptions.WorkflowNotFoundException;
+import org.openecomp.appc.requesthandler.exceptions.*;
 import org.openecomp.appc.requesthandler.impl.RequestHandlerImpl;
 import org.openecomp.appc.requesthandler.impl.RequestValidatorImpl;
 import org.openecomp.appc.requesthandler.objects.RequestHandlerInput;
@@ -84,7 +70,6 @@
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest( {WorkingStateManager.class,FrameworkUtil.class, TransactionRecorder.class, RequestHandlerImpl.class,RequestValidatorImpl.class, TransactionRecorder.class})
-@Ignore
 public class TestRequestValidator {
 
     private static final EELFLogger logger = EELFManager.getInstance().getLogger(TestRequestHandler.class);
@@ -97,6 +82,7 @@
     LifecycleManager lifecyclemanager;
     WorkFlowManager workflowManager;
     WorkingStateManager workingStateManager ;
+    LCMStateManager lcmStateManager;
 //    AppcDAOImpl dao ;
 
     private final BundleContext bundleContext= Mockito.mock(BundleContext.class);
@@ -147,6 +133,7 @@
         lifecyclemanager= Mockito.mock(LifecycleManager.class);
         workflowManager= Mockito.mock(WorkFlowManager.class);
         workingStateManager = Mockito.mock(WorkingStateManager.class);
+        lcmStateManager = Mockito.mock(LCMStateManager.class);
 
         //  transactionRecorder= spy(TransactionRecorder.class);
         requestValidator = new RequestValidatorImpl();
@@ -154,8 +141,9 @@
         requestValidator.setWorkflowManager(workflowManager);
         requestValidator.setLifecyclemanager(lifecyclemanager);
         requestValidator.setWorkingStateManager(workingStateManager);
+        requestValidator.setLcmStateManager(lcmStateManager);
 
-
+        Mockito.when(lcmStateManager.isLCMOperationEnabled()).thenReturn(true);
        /* Mockito.when(workingStateManager.isVNFStable("1")).thenReturn(true);
         Mockito.when(aaiAdapter.requestGenericVnfData("1")).thenReturn(getGenericVnf("FIREWALL","INSTNATIATED"));*/
         // Mockito.when(workflowManager.workflowExists((WorkflowRequest)anyObject())).thenReturn(true);
@@ -254,7 +242,7 @@
         return input;
     }
     @Test
-    public void testNullVnfID() throws  NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException,DGWorkflowNotFoundException {
+    public void testNullVnfID() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
         logger.debug("=====================testNullVnfID=============================");
         Mockito.when(workflowManager.workflowExists((WorkflowRequest)anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
         RequestHandlerInput input = this.getRequestHandlerInput(null, VNFOperation.Configure, 30,
@@ -309,8 +297,8 @@
 
 
 
-   @Test
-    public void testNullCommand() throws  NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException,DGWorkflowNotFoundException {
+    @Test
+    public void testNullCommand() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
         logger.debug("=====================testNullCommand=============================");
         Mockito.when(workflowManager.workflowExists((WorkflowRequest)anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
         RequestHandlerInput input = this.getRequestHandlerInput("7", null,30,
@@ -327,7 +315,7 @@
     }
 
     @Test
-    public void testNullVnfIDAndCommand() throws  NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException,DGWorkflowNotFoundException {
+    public void testNullVnfIDAndCommand() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, UnstableVNFException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
         logger.debug("=====================testNullVnfIDAndCommand=============================");
         Mockito.when(workflowManager.workflowExists((WorkflowRequest)anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
         RequestHandlerInput input = this.getRequestHandlerInput(null, null,30,
@@ -545,45 +533,50 @@
     }
 
     @Test
-    public void testLockOperation() throws RequestExpiredException, DuplicateRequestException, DGWorkflowNotFoundException, VNFNotFoundException, WorkflowNotFoundException, LifecycleException, UnstableVNFException, NoTransitionDefinedException, InvalidInputException {
+    public void testLockOperation() throws RequestExpiredException, DuplicateRequestException, DGWorkflowNotFoundException, VNFNotFoundException, WorkflowNotFoundException, LifecycleException, UnstableVNFException, NoTransitionDefinedException, InvalidInputException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
         Mockito.when(workingStateManager.isVNFStable("no-matter")).thenReturn(true);
         testOperation("no-matter", VNFOperation.Lock);
     }
 
     @Test
-    public void testUnlockOperation() throws RequestExpiredException, DuplicateRequestException, DGWorkflowNotFoundException, VNFNotFoundException, WorkflowNotFoundException, LifecycleException, UnstableVNFException, NoTransitionDefinedException, InvalidInputException {
+    public void testUnlockOperation() throws RequestExpiredException, DuplicateRequestException, DGWorkflowNotFoundException, VNFNotFoundException, WorkflowNotFoundException, LifecycleException, UnstableVNFException, NoTransitionDefinedException, InvalidInputException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
         Mockito.when(workingStateManager.isVNFStable("no-matter")).thenReturn(true);
         testOperation("no-matter", VNFOperation.Unlock);
     }
 
     @Test
-    public void testCheckLockOperation() throws RequestExpiredException, DuplicateRequestException, DGWorkflowNotFoundException, VNFNotFoundException, WorkflowNotFoundException, LifecycleException, UnstableVNFException, NoTransitionDefinedException, InvalidInputException {
+    public void testCheckLockOperation() throws RequestExpiredException, DuplicateRequestException, DGWorkflowNotFoundException, VNFNotFoundException, WorkflowNotFoundException, LifecycleException, UnstableVNFException, NoTransitionDefinedException, InvalidInputException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
         Mockito.when(workingStateManager.isVNFStable("no-matter")).thenReturn(true);
         testOperation("no-matter", VNFOperation.CheckLock);
     }
 
     @Test(expected = NoTransitionDefinedException.class)
-    public void testLockOperationNegative() throws RequestExpiredException, DuplicateRequestException, DGWorkflowNotFoundException, VNFNotFoundException, WorkflowNotFoundException, LifecycleException, UnstableVNFException, NoTransitionDefinedException, InvalidInputException {
+    public void testLockOperationNegative() throws RequestExpiredException, DuplicateRequestException, DGWorkflowNotFoundException, VNFNotFoundException, WorkflowNotFoundException, LifecycleException, UnstableVNFException, NoTransitionDefinedException, InvalidInputException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
         Mockito.when(lifecyclemanager.getNextState(anyString(), anyString(), eq(VNFOperation.Lock.toString()))).thenThrow(new NoTransitionDefinedException("", "", ""));
         Mockito.when(workingStateManager.isVNFStable("no-matter")).thenReturn(true);
         testOperation("no-matter", VNFOperation.Lock);
     }
 
     @Test(expected = NoTransitionDefinedException.class)
-    public void testUnlockOperationNegative() throws RequestExpiredException, DuplicateRequestException, DGWorkflowNotFoundException, VNFNotFoundException, WorkflowNotFoundException, LifecycleException, UnstableVNFException, NoTransitionDefinedException, InvalidInputException {
+    public void testUnlockOperationNegative() throws RequestExpiredException, DuplicateRequestException, DGWorkflowNotFoundException, VNFNotFoundException, WorkflowNotFoundException, LifecycleException, UnstableVNFException, NoTransitionDefinedException, InvalidInputException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
         Mockito.when(lifecyclemanager.getNextState(anyString(), anyString(), eq(VNFOperation.Unlock.toString()))).thenThrow(new NoTransitionDefinedException("", "", ""));
         Mockito.when(workingStateManager.isVNFStable("no-matter")).thenReturn(true);
         testOperation("no-matter", VNFOperation.Unlock);
     }
 
     @Test(expected = NoTransitionDefinedException.class)
-    public void testCheckLockOperationNegative() throws RequestExpiredException, DuplicateRequestException, DGWorkflowNotFoundException, VNFNotFoundException, WorkflowNotFoundException, LifecycleException, UnstableVNFException, NoTransitionDefinedException, InvalidInputException {
+    public void testCheckLockOperationNegative() throws RequestExpiredException, DuplicateRequestException, DGWorkflowNotFoundException, VNFNotFoundException, WorkflowNotFoundException, LifecycleException, UnstableVNFException, NoTransitionDefinedException, InvalidInputException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
         Mockito.when(lifecyclemanager.getNextState(anyString(), anyString(), eq(VNFOperation.CheckLock.toString()))).thenThrow(new NoTransitionDefinedException("", "", ""));
         Mockito.when(workingStateManager.isVNFStable("no-matter")).thenReturn(true);
         testOperation("no-matter", VNFOperation.CheckLock);
     }
 
-    private void testOperation(String resource, VNFOperation operation) throws WorkflowNotFoundException, DuplicateRequestException, DGWorkflowNotFoundException, VNFNotFoundException, InvalidInputException, LifecycleException, UnstableVNFException, NoTransitionDefinedException, RequestExpiredException {
+    @Test(expected = LCMOperationsDisabledException.class)
+    public void testLCMOperationsDisabled() throws RequestExpiredException, DuplicateRequestException, DGWorkflowNotFoundException, VNFNotFoundException, WorkflowNotFoundException, LifecycleException, UnstableVNFException, NoTransitionDefinedException, InvalidInputException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
+        Mockito.when(lcmStateManager.isLCMOperationEnabled()).thenReturn(false);
+        testOperation("no-matter", VNFOperation.Configure);
+    }
+    private void testOperation(String resource, VNFOperation operation) throws WorkflowNotFoundException, DuplicateRequestException, DGWorkflowNotFoundException, VNFNotFoundException, InvalidInputException, LifecycleException, UnstableVNFException, NoTransitionDefinedException, RequestExpiredException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
         String originatorID = UUID.randomUUID().toString();
         String requestID = UUID.randomUUID().toString();
         String subRequestID = UUID.randomUUID().toString();
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/resources/org/openecomp/appc/default.properties b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/resources/org/openecomp/appc/default.properties
index 2d75df4..0659d4d 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/resources/org/openecomp/appc/default.properties
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/resources/org/openecomp/appc/default.properties
@@ -77,27 +77,15 @@
 
 
 #Property below provided by appc.properties
-#dmaap.poolMembers=<DMAAP_IP>:3904
+appc.LCM.provider.url=https://localhost:8443/restconf/operations/appc-provider-lcm
+appc.LCM.poolMembers=<DMAAP_IP>:3904
+appc.LCM.service=dmaap
+appc.LCM.topic.write=APPC-TEST2
+appc.LCM.client.name=APPC-TEST-CLIENT-REQ-HDLR-TEST
+appc.LCM.provider.user=test
+appc.LCM.provider.pass=test
 
-dmaap.topic.read=APPC-TEST2
-dmaap.topic.write=APPC-TEST2
-#dmaap.topic.read.filter={"class":"Assigned","field":"request"}
-dmaap.topic.read.filter={"class": "And","filters": [{"class": "Assigned","field": "request"},{"class": "Unassigned","field": "response"}]}
-dmaap.client.name=APPC-TEST-CLIENT-REQ-HDLR-TEST
-dmaap.client.name.id=0
-#dmaap.client.key=random
-#dmaap.client.secret=random
 
-dmaap.threads.queuesize.min=1
-dmaap.threads.queuesize.max=1000
-dmaap.threads.poolsize.min=1
-dmaap.threads.poolsize.max=2
-
-#
-# This needs to be changed so that the action can be appended to the end of the URL path
-#
-#provider.urls.topology=https://admin:password@<IP_ADDRESS>:8443/restconf/operations/appc-provider:topology-service
-#provider.urls.topology=https://admin:password@<IP_ADDRESS>:8443/restconf/operations/appc-provider:
 
 mysqlIp=127.0.0.1
 org.openecomp.appc.db.url.sdnctl=jdbc:mysql://${mysqlIp}:3306/test
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-features/src/main/resources/features.xml b/appc-dispatcher/appc-request-handler/appc-request-handler-features/src/main/resources/features.xml
index cc8fe11..f2e79ed 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-features/src/main/resources/features.xml
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-features/src/main/resources/features.xml
@@ -27,10 +27,15 @@
         
     <feature name='appc-request-handler' description="appc-request-handler" version='${project.version}'>
         <bundle>mvn:org.openecomp.appc/transaction-recorder/${project.version}</bundle>
+
+        <!-- appc-data-access-lib bundle is flagged as being a dependency -->
+        <bundle dependency="true">mvn:org.openecomp.appc/appc-data-access-lib/${project.version}</bundle>
+
         <bundle dependency="true">mvn:org.openecomp.appc/domain-model-lib/${project.version}</bundle>
         <bundle start-level="75" start="true">mvn:org.openecomp.appc/appc-command-executor-api/${project.version}</bundle>
     	<bundle start-level="80" start="true">mvn:org.openecomp.appc/appc-request-handler-api/${project.version}</bundle>
         <bundle start-level="85" start="true">mvn:org.openecomp.appc/appc-request-handler-core/${project.version}</bundle>
+
     </feature>
 
 </features>
diff --git a/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/pom.xml b/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/pom.xml
index 33c8397..c3ced21 100644
--- a/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/pom.xml
+++ b/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/pom.xml
@@ -52,6 +52,11 @@
         	<artifactId>appc-ranking-framework-lib</artifactId>
         	<version>${project.version}</version>
         </dependency>
+   		<dependency>
+			<groupId>equinoxSDK381</groupId>
+			<artifactId>org.eclipse.osgi</artifactId>
+			<scope>test</scope>
+		</dependency>        
     </dependencies>
 
     <build>
@@ -63,10 +68,14 @@
                     <instructions>
                         <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                         <Bundle-Version>${project.version}</Bundle-Version>
-                        <Embed-Dependency>appc-common,eelf-core,logback-core,logback-classic,appc-data-access-lib,javax.json;scope=compile|runtime;inline=false</Embed-Dependency>
+                        <Embed-Dependency>javax.json;scope=compile|runtime;inline=false</Embed-Dependency>
                         <Embed-Transitive>true</Embed-Transitive>
                         <Export-Service>org.openecomp.appc.workflow.WorkFlowManager</Export-Service>
-                        <Import-Package>org.openecomp.appc.workflow,org.openecomp.appc.workflow.objects,!groovy.lang,!javax.*,!org.apache.log,!org.apache.log4j.*,!org.codehaus.jackson.*,!org.codehaus.jackson.map.*,!org.codehaus.commons.compiler,!org.codehaus.groovy.*,!org.codehaus.janino,!org.jasypt.*,!com.ibm.icu.*,!com.sun.faces.*,*</Import-Package>
+                        <Import-Package>
+                            org.openecomp.appc.workflow,org.openecomp.appc.workflow.objects, org.openecomp.appc.configuration,
+                            org.openecomp.appc.util,com.att.eelf.configuration, org.openecomp.appc.dao.util,
+                            *;resolution:=optional
+                        </Import-Package>
                     </instructions>
                 </configuration>
             </plugin>
diff --git a/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/src/main/java/org/openecomp/appc/workflow/impl/WorkFlowManagerImpl.java b/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/src/main/java/org/openecomp/appc/workflow/impl/WorkFlowManagerImpl.java
index 4ed5755..e40dc62 100644
--- a/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/src/main/java/org/openecomp/appc/workflow/impl/WorkFlowManagerImpl.java
+++ b/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/src/main/java/org/openecomp/appc/workflow/impl/WorkFlowManagerImpl.java
@@ -21,11 +21,6 @@
 
 package org.openecomp.appc.workflow.impl;
 
-import java.text.SimpleDateFormat;
-import java.util.Enumeration;
-import java.util.Map;
-import java.util.Properties;
-
 import org.apache.commons.lang.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.openecomp.appc.common.constant.Constants;
@@ -44,6 +39,11 @@
 import org.openecomp.sdnc.sli.SvcLogicException;
 import org.openecomp.sdnc.sli.provider.SvcLogicService;
 
+import java.text.SimpleDateFormat;
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.Properties;
+
 
 public class WorkFlowManagerImpl implements WorkFlowManager{
 	private SvcLogicService svcLogic = null;
@@ -166,7 +166,7 @@
         workflowParams.put("input.common-header.api-ver",workflowRequest.getRequestContext().getCommonHeader().getApiVer());
         workflowParams.put("input.common-header.request-id",workflowRequest.getRequestContext().getCommonHeader().getRequestId());
         workflowParams.put("input.common-header.originator-id",workflowRequest.getRequestContext().getCommonHeader().getOriginatorId());
-        workflowParams.put("input.common-header.sub-request-id",workflowRequest.getRequestContext().getCommonHeader().getSubRequestId());
+        workflowParams.put("input.common-header.sub-request-id",workflowRequest.getRequestContext().getCommonHeader().getSubRequestId()!=null ? workflowRequest.getRequestContext().getCommonHeader().getSubRequestId():"");
         workflowParams.put("input.action",workflowRequest.getRequestContext().getAction().toString());
         workflowParams.put("input.payload",null != workflowRequest.getRequestContext().getPayload() ? workflowRequest.getRequestContext().getPayload() : "");
         workflowParams.put("input.action-identifiers.vnf-id",workflowRequest.getVnfContext().getId());
diff --git a/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/src/main/resources/org/openecomp/appc/default.properties b/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/src/main/resources/org/openecomp/appc/default.properties
index 44745d0..947e81c 100644
--- a/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/src/main/resources/org/openecomp/appc/default.properties
+++ b/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/src/main/resources/org/openecomp/appc/default.properties
@@ -24,29 +24,17 @@
 org.openecomp.appc.bootstrap.file=appc.properties
 org.openecomp.appc.bootstrap.path=/opt/openecomp/appc/data/properties,${user.home},.
 
-
 #Property below provided by appc.properties
-#dmaap.poolMembers=<DMAAP_IP>:3904
+appc.LCM.provider.url=https://localhost:8443/restconf/operations/appc-provider-lcm
+appc.LCM.poolMembers=<DMAAP_IP>:3904
+appc.LCM.service=dmaap
+appc.LCM.topic.write=APPC-TEST2
+appc.LCM.client.name=APPC-TEST-CLIENT-WF-MGMT-MAIN
+appc.LCM.provider.user=test
+appc.LCM.provider.pass=test
 
-dmaap.topic.read=APPC-TEST2
-dmaap.topic.write=APPC-TEST2
-#dmaap.topic.read.filter={"class":"Assigned","field":"request"}
-dmaap.topic.read.filter={"class": "And","filters": [{"class": "Assigned","field": "request"},{"class": "Unassigned","field": "response"}]}
-dmaap.client.name=APPC-TEST-CLIENT-WF-MGMT-MAIN
-dmaap.client.name.id=0
-#dmaap.client.key=random
-#dmaap.client.secret=random
 
-dmaap.threads.queuesize.min=1
-dmaap.threads.queuesize.max=1000
-dmaap.threads.poolsize.min=1
-dmaap.threads.poolsize.max=2
 
 # Tolerance interval (in seconds) between invalidation of DG resolver configuration
 org.openecomp.appc.workflow.resolver.refresh_interval=300
 
-# 
-# This needs to be changed so that the action can be appended to the end of the URL path 
-#
-#provider.urls.topology=https://admin:password@<IP_ADDRESS>:8443/restconf/operations/appc-provider:topology-service
-#provider.urls.topology=https://admin:password@<IP_ADDRESS>:8443/restconf/operations/appc-provider:
diff --git a/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/src/test/resources/org/openecomp/appc/default.properties b/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/src/test/resources/org/openecomp/appc/default.properties
index 713e034..14200d6 100644
--- a/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/src/test/resources/org/openecomp/appc/default.properties
+++ b/appc-dispatcher/appc-workflow-management/appc-workflow-management-core/src/test/resources/org/openecomp/appc/default.properties
@@ -76,25 +76,12 @@
 org.openecomp.appc.db.user.%s", schema), "");
 org.openecomp.appc.db.pass.%s", schema), "");
 
-# This value is provided in appc.properties
-#dmaap.poolMembers=<DMAAP_IP>:3904
+#Property below provided by appc.properties
+appc.LCM.provider.url=https://localhost:8443/restconf/operations/appc-provider-lcm
+appc.LCM.poolMembers=<DMAAP_IP>:3904
+appc.LCM.service=dmaap
+appc.LCM.topic.write=APPC-TEST2
+appc.LCM.client.name=APPC-TEST-CLIENT-WF-MGMT-MAIN
+appc.LCM.provider.user=test
+appc.LCM.provider.pass=test
 
-dmaap.topic.read=APPC-TEST2
-dmaap.topic.write=APPC-TEST2
-#dmaap.topic.read.filter={"class":"Assigned","field":"request"}
-dmaap.topic.read.filter={"class": "And","filters": [{"class": "Assigned","field": "request"},{"class": "Unassigned","field": "response"}]}
-dmaap.client.name=APPC-TEST-CLIENT
-dmaap.client.name.id=0
-#dmaap.client.key=random
-#dmaap.client.secret=random
-
-dmaap.threads.queuesize.min=1
-dmaap.threads.queuesize.max=1000
-dmaap.threads.poolsize.min=2
-dmaap.threads.poolsize.max=2
-
-#
-# This needs to be changed so that the action can be appended to the end of the URL path
-#
-#provider.urls.topology=https://admin:password@<IP_ADDRESS>:8443/restconf/operations/appc-provider:topology-service
-#provider.urls.topology=https://admin:password@<IP_ADDRESS>:8443/restconf/operations/appc-provider:
diff --git a/appc-dispatcher/appc-workflow-management/appc-workflow-management-features/src/main/resources/features.xml b/appc-dispatcher/appc-workflow-management/appc-workflow-management-features/src/main/resources/features.xml
index ae1105d..dc50a4c 100644
--- a/appc-dispatcher/appc-workflow-management/appc-workflow-management-features/src/main/resources/features.xml
+++ b/appc-dispatcher/appc-workflow-management/appc-workflow-management-features/src/main/resources/features.xml
@@ -23,9 +23,11 @@
 
 <features name="appc-workflow-management-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0  http://karaf.apache.org/xmlns/features/v1.2.0">     
-    
+    xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0  http://karaf.apache.org/xmlns/features/v1.2.0">
+
     <feature name='appc-workflow-management' description="application executor" version='${project.version}'>
+        <bundle dependency="true">mvn:org.openecomp.appc/appc-data-access-lib/${project.version}</bundle>
+
         <bundle>mvn:org.openecomp.appc/appc-workflow-management-api/${project.version}</bundle>
         <bundle>mvn:org.openecomp.appc/appc-workflow-management-core/${project.version}</bundle>
         <bundle start="true" dependency="true">mvn:org.openecomp.appc/appc-ranking-framework-lib/${project.version}</bundle>
diff --git a/appc-dispatcher/pom.xml b/appc-dispatcher/pom.xml
index 58bfd5b..e54c5a7 100644
--- a/appc-dispatcher/pom.xml
+++ b/appc-dispatcher/pom.xml
@@ -55,7 +55,6 @@
 	    	<plugin>
 	            <groupId>org.apache.felix</groupId>
 	            <artifactId>maven-bundle-plugin</artifactId>
-	            <version>2.3.7</version>
 	            <extensions>true</extensions>
 	      </plugin>
 	    </plugins>