diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/client/appc/ApplicationControllerClient.java b/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/client/appc/ApplicationControllerClient.java
index 3515aa9..4255df3 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/client/appc/ApplicationControllerClient.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/client/appc/ApplicationControllerClient.java
@@ -142,10 +142,17 @@
 		Properties properties = new Properties();
 		Map<String, String> globalProperties = PropertyConfiguration.getInstance()
 				.getProperties("mso.bpmn.urn.properties");
-		properties.put("topic.read", globalProperties.get("appc.client.topic.read"));
-		properties.put("topic.write", globalProperties.get("appc.client.topic.write"));
+		if (controllerType==null || controllerType.length()==0 || controllerType.equalsIgnoreCase("appc")) {
+			properties.put("topic.read", globalProperties.get("appc.client.topic.read"));
+			properties.put("topic.write", globalProperties.get("appc.client.topic.write"));
+		} else {
+			properties.put("topic.read", globalProperties.get("appc.client.topic." + controllerType + ".read"));
+			properties.put("topic.write", globalProperties.get("appc.client.topic." + controllerType + ".write"));
+		}
 		properties.put("topic.sdnc.read", globalProperties.get("appc.client.topic.sdnc.read"));
 		properties.put("topic.sdnc.write", globalProperties.get("appc.client.topic.sdnc.write"));
+		properties.put("sdnc-topic.read", globalProperties.get("appc.client.topic.sdnc.read"));
+		properties.put("sdnc-topic.write", globalProperties.get("appc.client.topic.sdnc.write"));
 		properties.put("topic.read.timeout", globalProperties.get("appc.client.topic.read.timeout"));
 		properties.put("client.response.timeout", globalProperties.get("appc.client.response.timeout"));
 		properties.put("poolMembers", globalProperties.get("appc.client.poolMembers"));
diff --git a/docs/BPMN_Subprocess_Process_Flows.rst b/docs/BPMN_Subprocess_Process_Flows.rst
index cf2da40..fc36cc5 100644
--- a/docs/BPMN_Subprocess_Process_Flows.rst
+++ b/docs/BPMN_Subprocess_Process_Flows.rst
@@ -22,7 +22,7 @@
 
     The current best practice for reporting errors from subprocess is described here:
 	
-	* The subprocess should create a WorkflowException object and store it in an execution called WorkflowException.
+    * The subprocess should create a WorkflowException object and store it in an execution called WorkflowException.
     * The WorkflowException object contains an error code and an error message.
     * The subprocess should then throw an MSOWorkflowException BPMN event which may be handled by the calling flow.
 	
diff --git a/docs/Install_Configure_SO.rst b/docs/Install_Configure_SO.rst
index 3f7b903..eb33b38 100644
--- a/docs/Install_Configure_SO.rst
+++ b/docs/Install_Configure_SO.rst
@@ -12,7 +12,7 @@
 Get VirtualBox and VirtualBox Guest Additions
 ---------------------------------------------
 Make sure you have the VirtualBox Guest Additions ISO for your version of VirtualBox.  I'm using VirtualBox 5.1.28.  Save the Guest Additions ISO on your host computer along with the Ubuntu ISO.  Get the Guest Additions ISO from here:
-	http://download.virtualbox.org/virtualbox
+    http://download.virtualbox.org/virtualbox
 *NOTE*: Guest Additions versions prior to 5.1 will not work with Ubuntu 16.04.3.  If you have an earlier version of VirtualBox, you should upgrade to the latest 5.1 version.
 
 Create a new VM in VirtualBox for Ubuntu
diff --git a/docs/SO_R1_Interface.rst b/docs/SO_R1_Interface.rst
index 8346e2b..bd65408 100644
--- a/docs/SO_R1_Interface.rst
+++ b/docs/SO_R1_Interface.rst
@@ -2,13 +2,13 @@
 .. http://creativecommons.org/licenses/by/4.0
 .. Copyright 2017 Huawei Technologies Co., Ltd.
 
-SO Amsterdam Interfaces
-================
+SO Interfaces
+================================
 
 .. image:: images/SO_R1_1.png
 
 SO APIs
-============
+=================================
 
 North Bound APIs
 ----------------
@@ -1026,7 +1026,7 @@
 +-------------------+---------+-----------+--------------------------+-------------------------------------------+
 |Attribute          |Qualifier|Cardinality|Content                   |Description                                |
 +===================+=========+===========+==========================+===========================================+
-|requestId          |M        |1          |String                    |Request Id.                                 |
+|requestId          |M        |1          |String                    |Request Id.                                |
 +-------------------+---------+-----------+--------------------------+-------------------------------------------+
 |startTime          |M        |1          |request Object            |Start time.                                |
 +-------------------+---------+-----------+--------------------------+-------------------------------------------+
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/camundabeans/CamundaVIDRequest.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/camundabeans/CamundaVIDRequest.java
index 9f30e67..faa6691 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/camundabeans/CamundaVIDRequest.java
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/camundabeans/CamundaVIDRequest.java
@@ -34,7 +34,7 @@
 	CommonConstants.REQUEST_ID_HEADER,
 	CommonConstants.IS_BASE_VF_MODULE_VARIABLE, CommonConstants.RECIPE_TIMEOUT_VARIABLE,
 	CommonConstants.REQUEST_ACTION_VARIABLE, CommonConstants.SERVICE_INSTANCE_ID_VARIABLE,
-	CommonConstants.CORRELATION_ID, CommonConstants.VNF_ID_VARIABLE, CommonConstants.VF_MODULE_ID_VARIABLE,
+	CommonConstants.VNF_ID_VARIABLE, CommonConstants.VF_MODULE_ID_VARIABLE,
 	CommonConstants.VOLUME_GROUP_ID_VARIABLE, CommonConstants.NETWORK_ID_VARIABLE,
 	CommonConstants.CONFIGURATION_ID_VARIABLE, CommonConstants.SERVICE_TYPE_VARIABLE, 
 	CommonConstants.VNF_TYPE_VARIABLE, CommonConstants.VF_MODULE_TYPE_VARIABLE, 
@@ -55,6 +55,7 @@
 	@JsonProperty(CommonConstants.REQUEST_ID_HEADER)
 	private CamundaInput msoRequestId;
 
+
 	@JsonProperty(CommonConstants.IS_BASE_VF_MODULE_VARIABLE)
 	private CamundaBooleanInput isBaseVfModule;
 
@@ -67,9 +68,6 @@
 	@JsonProperty(CommonConstants.SERVICE_INSTANCE_ID_VARIABLE)
 	private CamundaInput serviceInstanceId;
 
-	@JsonProperty(CommonConstants.CORRELATION_ID)
-	private CamundaInput correlationId;
-
 	@JsonProperty(CommonConstants.VNF_ID_VARIABLE)
 	private CamundaInput vnfId;
 
@@ -179,16 +177,6 @@
 		this.serviceInstanceId = serviceInstanceId;
 	}
 
-	@JsonProperty(CommonConstants.CORRELATION_ID)
-	public CamundaInput getCorrelationId() {
-		return correlationId;
-	}
-
-	@JsonProperty(CommonConstants.CORRELATION_ID)
-	public void setCorrelationId(CamundaInput correlationId) {
-		this.correlationId = correlationId;
-	}
-
 	@JsonProperty(CommonConstants.VNF_ID_VARIABLE)
 	public CamundaInput getVnfId() {
 		return vnfId;
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/BPELRestClient.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/BPELRestClient.java
index 85fe52f..1a086ac 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/BPELRestClient.java
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/BPELRestClient.java
@@ -85,10 +85,14 @@
     }
 
     @Override
-    public HttpResponse post(RequestClientParamater params) {
+    public HttpResponse post(String requestId, boolean isBaseVfModule,
+                             int recipeTimeout, String requestAction, String serviceInstanceId,
+                             String vnfId, String vfModuleId, String volumeGroupId, String networkId, String configurationId,
+                             String serviceType, String vnfType, String vfModuleType, String networkType,
+                             String requestDetails, String recipeParamXsd) {
         return null;
     }
-
+    
     @Override
     public HttpResponse get() {
         return null;
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CamundaClient.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CamundaClient.java
index d03aaef..9cc8953 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CamundaClient.java
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CamundaClient.java
@@ -20,12 +20,13 @@
 
 package org.openecomp.mso.apihandler.common;
 
+
 import java.io.IOException;
 
 import javax.xml.bind.DatatypeConverter;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpResponse;
+import org.apache.http.client.ClientProtocolException;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.entity.StringEntity;
 import org.openecomp.mso.apihandler.camundabeans.CamundaBooleanInput;
@@ -50,7 +51,8 @@
 
 	@Override
 	public HttpResponse post(String camundaReqXML, String requestId,
-			String requestTimeout, String schemaVersion, String serviceInstanceId, String action) throws IOException {
+			String requestTimeout, String schemaVersion, String serviceInstanceId, String action)
+					throws ClientProtocolException, IOException{
 		HttpPost post = new HttpPost(url);
 		msoLogger.debug(CAMUNDA_URL_MESAGE + url);
 		String jsonReq = wrapRequest(camundaReqXML, requestId, serviceInstanceId, requestTimeout,  schemaVersion);
@@ -75,7 +77,7 @@
 	}
 
 	@Override
-	public HttpResponse post(String jsonReq) throws IOException {
+	public HttpResponse post(String jsonReq) throws ClientProtocolException, IOException{
 		HttpPost post = new HttpPost(url);
 		msoLogger.debug(CAMUNDA_URL_MESAGE + url);
 
@@ -100,13 +102,21 @@
 	}
 
 	@Override
-	public HttpResponse post(RequestClientParamater params) throws IOException {
+	public HttpResponse post(String requestId, boolean isBaseVfModule,
+			int recipeTimeout, String requestAction, String serviceInstanceId,
+			String vnfId, String vfModuleId, String volumeGroupId, String networkId, String configurationId,
+			String serviceType, String vnfType, String vfModuleType, String networkType,
+			String requestDetails, String recipeParamXsd)
+					throws ClientProtocolException, IOException{
 		HttpPost post = new HttpPost(url);
 		msoLogger.debug(CAMUNDA_URL_MESAGE + url);
-		String jsonReq = wrapVIDRequest(params);
+		String jsonReq = wrapVIDRequest(requestId, isBaseVfModule, recipeTimeout, requestAction,
+				serviceInstanceId, vnfId, vfModuleId, volumeGroupId, networkId, configurationId,
+				serviceType, vnfType, vfModuleType, networkType, requestDetails, recipeParamXsd);
 
 		StringEntity input = new StringEntity(jsonReq);
 		input.setContentType(CommonConstants.CONTENT_TYPE_JSON);
+
 		String encryptedCredentials;
 		if(props!=null){
 			encryptedCredentials = props.getProperty(CommonConstants.CAMUNDA_AUTH,null);
@@ -118,10 +128,12 @@
 				}
 			}
 		}
+
 		post.setEntity(input);
+
         return client.execute(post);
 	}
-
+	
 	@Override
     public HttpResponse get() {
         return null;
@@ -138,6 +150,8 @@
 		if(schemaVersion == null){
 			schemaVersion = "";
 		}
+
+
 		try{
 			CamundaRequest camundaRequest = new CamundaRequest();
 			CamundaInput camundaInput = new CamundaInput();
@@ -169,8 +183,52 @@
 		return jsonReq;
 	}
 
-	private String wrapVIDRequest(RequestClientParamater requestClientParamater) {
+	private String wrapVIDRequest(String requestId, boolean isBaseVfModule,
+			int recipeTimeout, String requestAction, String serviceInstanceId,
+			String vnfId, String vfModuleId, String volumeGroupId, String networkId, String configurationId,
+			String serviceType, String vnfType, String vfModuleType, String networkType,
+			String requestDetails, String recipeParams){
 		String jsonReq = null;
+		if(requestId == null){
+			requestId ="";
+		}
+		if(requestAction == null){
+			requestAction ="";
+		}
+		if(serviceInstanceId == null){
+			serviceInstanceId ="";
+		}
+		if(vnfId == null){
+			vnfId ="";
+		}
+		if(vfModuleId == null){
+			vfModuleId ="";
+		}
+		if(volumeGroupId == null){
+			volumeGroupId ="";
+		}
+		if(networkId == null){
+			networkId ="";
+		}
+		if(configurationId == null){
+			configurationId ="";
+		}
+		if(serviceType == null){
+			serviceType ="";
+		}
+		if(vnfType == null){
+			vnfType ="";
+		}
+		if(vfModuleType == null){
+			vfModuleType ="";
+		}
+		if(networkType == null){
+			networkType ="";
+		}
+		if(requestDetails == null){
+			requestDetails ="";
+		}
+
 		try{
 			CamundaVIDRequest camundaRequest = new CamundaVIDRequest();
 			CamundaInput serviceInput = new CamundaInput();
@@ -180,7 +238,6 @@
 			CamundaIntegerInput recipeTimeoutInput = new CamundaIntegerInput();
 			CamundaInput requestActionInput = new CamundaInput();
 			CamundaInput serviceInstanceIdInput = new CamundaInput();
-			CamundaInput correlationIdInput = new CamundaInput();
 			CamundaInput vnfIdInput = new CamundaInput();
 			CamundaInput vfModuleIdInput = new CamundaInput();
 			CamundaInput volumeGroupIdInput = new CamundaInput();
@@ -191,23 +248,23 @@
 			CamundaInput vfModuleTypeInput = new CamundaInput();
 			CamundaInput networkTypeInput = new CamundaInput();
 			CamundaInput recipeParamsInput = new CamundaInput();
-			requestIdInput.setValue(StringUtils.defaultString(requestClientParamater.getRequestId()));
-			isBaseVfModuleInput.setValue(requestClientParamater.isBaseVfModule());
-			recipeTimeoutInput.setValue(requestClientParamater.getRecipeTimeout());
-			requestActionInput.setValue(StringUtils.defaultString(requestClientParamater.getRequestAction()));
-			serviceInstanceIdInput.setValue(StringUtils.defaultString(requestClientParamater.getServiceInstanceId()));
-			correlationIdInput.setValue(StringUtils.defaultString(requestClientParamater.getCorrelationId()));
-			vnfIdInput.setValue(StringUtils.defaultString(requestClientParamater.getVnfId()));
-			vfModuleIdInput.setValue(StringUtils.defaultString(requestClientParamater.getVfModuleId()));
-			volumeGroupIdInput.setValue(StringUtils.defaultString(requestClientParamater.getVolumeGroupId()));
-			networkIdInput.setValue(StringUtils.defaultString(requestClientParamater.getNetworkId()));
-			configurationIdInput.setValue(StringUtils.defaultString(requestClientParamater.getConfigurationId()));
-			serviceTypeInput.setValue(StringUtils.defaultString(requestClientParamater.getServiceType()));
-			vnfTypeInput.setValue(StringUtils.defaultString(requestClientParamater.getVnfType()));
-			vfModuleTypeInput.setValue(StringUtils.defaultString(requestClientParamater.getVfModuleType()));
-			networkTypeInput.setValue(StringUtils.defaultString(requestClientParamater.getNetworkType()));
-			recipeParamsInput.setValue(requestClientParamater.getRecipeParamXsd());
-			serviceInput.setValue(StringUtils.defaultString(requestClientParamater.getRequestDetails()));
+			host.setValue(parseURL());
+			requestIdInput.setValue(requestId);
+			isBaseVfModuleInput.setValue(isBaseVfModule);
+			recipeTimeoutInput.setValue(recipeTimeout);
+			requestActionInput.setValue(requestAction);
+			serviceInstanceIdInput.setValue(serviceInstanceId);
+			vnfIdInput.setValue(vnfId);
+			vfModuleIdInput.setValue(vfModuleId);
+			volumeGroupIdInput.setValue(volumeGroupId);
+			networkIdInput.setValue(networkId);
+			configurationIdInput.setValue(configurationId);
+			serviceTypeInput.setValue(serviceType);
+			vnfTypeInput.setValue(vnfType);
+			vfModuleTypeInput.setValue(vfModuleType);
+			networkTypeInput.setValue(networkType);
+			recipeParamsInput.setValue(recipeParams);
+			serviceInput.setValue(requestDetails);
 			camundaRequest.setServiceInput(serviceInput);
 			camundaRequest.setHost(host);
 			camundaRequest.setRequestId(requestIdInput);
@@ -216,7 +273,6 @@
 			camundaRequest.setRecipeTimeout(recipeTimeoutInput);
 			camundaRequest.setRequestAction(requestActionInput);
 			camundaRequest.setServiceInstanceId(serviceInstanceIdInput);
-			camundaRequest.setCorrelationId(correlationIdInput);
 			camundaRequest.setVnfId(vnfIdInput);
 			camundaRequest.setVfModuleId(vfModuleIdInput);
 			camundaRequest.setVolumeGroupId(volumeGroupIdInput);
@@ -250,4 +306,5 @@
 		return host;
 	}
 
+
 }
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CamundaTaskClient.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CamundaTaskClient.java
index 845b140..3941e1e 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CamundaTaskClient.java
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CamundaTaskClient.java
@@ -25,6 +25,7 @@
 import javax.xml.bind.DatatypeConverter;
 
 import org.apache.http.HttpResponse;
+import org.apache.http.client.ClientProtocolException;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.entity.StringEntity;
@@ -38,7 +39,8 @@
 	}
 	
 	@Override
-	public HttpResponse post(String jsonReq) throws IOException{
+	public HttpResponse post(String jsonReq)
+					throws ClientProtocolException, IOException{
 		HttpPost post = new HttpPost(url);
 		msoLogger.debug("Camunda Task url is: "+ url);		
 
@@ -63,18 +65,25 @@
 	
 	@Override
 	public HttpResponse post(String camundaReqXML, String requestId,
-			String requestTimeout, String schemaVersion, String serviceInstanceId, String action) {
+			String requestTimeout, String schemaVersion, String serviceInstanceId, String action)
+					throws ClientProtocolException, IOException{
 		msoLogger.debug("Method not supported");
 		return null;
 	}
-
+	
 	@Override
-	public HttpResponse post(RequestClientParamater params) {
+	public HttpResponse post(String requestId, boolean isBaseVfModule,
+			int recipeTimeout, String requestAction, String serviceInstanceId,
+			String vnfId, String vfModuleId, String volumeGroupId, String networkId, String configurationId,
+			String serviceType, String vnfType, String vfModuleType, String networkType,
+			String requestDetails, String recipeParamXsd)
+					throws ClientProtocolException, IOException{
+		msoLogger.debug("Method not supported");
 		return null;
 	}
-
+	
 	@Override
-	public HttpResponse get() throws IOException{
+	public HttpResponse get() throws ClientProtocolException, IOException{
 		HttpGet get = new HttpGet(url);
 		msoLogger.debug("Camunda Task url is: "+ url);	
 		String encryptedCredentials;
@@ -88,6 +97,7 @@
 				}
 			}
 		}
+		
 		return client.execute(get);
 	}
 
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CommonConstants.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CommonConstants.java
index daa411a..4dac998 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CommonConstants.java
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CommonConstants.java
@@ -25,11 +25,13 @@
 
     public static final String DEFAULT_BPEL_AUTH = "admin:admin";
     public static final String ENCRYPTION_KEY = "aa3871669d893c7fb8abbcda31b88b4f";
+
     public static final String REQUEST_ID_HEADER = "mso-request-id";
     public static final String REQUEST_TIMEOUT_HEADER = "mso-service-request-timeout";
     public static final String SCHEMA_VERSION_HEADER = "mso-schema-version";
     public static final String SERVICE_INSTANCE_ID_HEADER = "mso-service-instance-id";
     public static final String ACTION_HEADER = "mso-action";
+
     public static final String CAMUNDA_SERVICE_INPUT = "bpmnRequest";
 	public static final String CAMUNDA_ROOT_INPUT = "variables";
 	public static final String CONTENT_TYPE_JSON= "application/json";
@@ -45,12 +47,13 @@
 	public static final int CAMUNDA = 1;
 	public static final int CAMUNDATASK = 2;
 	public static final String CAMUNDA_HOST = "host";
+	public static final String SDNC_UUID_HEADER = "mso-sdnc-request-id";
+	
 	public static final String REQUEST_ID_VARIABLE = "requestId";
 	public static final String IS_BASE_VF_MODULE_VARIABLE = "isBaseVfModule";
 	public static final String RECIPE_TIMEOUT_VARIABLE = "recipeTimeout";
 	public static final String REQUEST_ACTION_VARIABLE = "requestAction";
 	public static final String SERVICE_INSTANCE_ID_VARIABLE = "serviceInstanceId";
-	public static final String CORRELATION_ID = "correlationId";
 	public static final String VNF_ID_VARIABLE = "vnfId";
 	public static final String VF_MODULE_ID_VARIABLE = "vfModuleId";
 	public static final String VOLUME_GROUP_ID_VARIABLE = "volumeGroupId";
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/RequestClient.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/RequestClient.java
index ed5d076..d702a63 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/RequestClient.java
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/RequestClient.java
@@ -67,11 +67,17 @@
 
 	public abstract HttpResponse post(String request, String requestId, String requestTimeout, String schemaVersion, String serviceInstanceId, String action) throws ClientProtocolException, IOException;
 
-	public abstract HttpResponse post(String request) throws IOException;
-
-	public abstract HttpResponse post(RequestClientParamater params) throws IOException;
+	public abstract HttpResponse post(String request) throws ClientProtocolException, IOException;
 	
-	public abstract HttpResponse get() throws  IOException;
+	public abstract HttpResponse post(String requestId, boolean isBaseVfModule,
+			int recipeTimeout, String requestAction, String serviceInstanceId,
+			String vnfId, String vfModuleId, String volumeGroupId, String networkId, String configurationId,
+			String serviceType, String vnfType, String vfModuleType, String networkType,
+			String requestDetails, String recipeParamXsd)
+					throws ClientProtocolException, IOException;
+	
+	public abstract HttpResponse get() 
+					throws ClientProtocolException, IOException;
 	
 	protected String getEncryptedPropValue (String prop, String defaultValue, String encryptionKey) {
 		 try {
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/RequestClientParamater.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/RequestClientParamater.java
deleted file mode 100644
index 4db6919..0000000
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/RequestClientParamater.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * Copyright (C) 2017 Huawei Technologies Co., Ltd. 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.mso.apihandler.common;
-
-public class RequestClientParamater {
-
-    private String requestId;
-    private boolean isBaseVfModule;
-    private int recipeTimeout;
-    private String requestAction;
-    private String serviceInstanceId;
-    private String correlationId;
-    private String vnfId;
-    private String vfModuleId;
-    private String volumeGroupId;
-    private String networkId;
-    private String configurationId;
-    private String serviceType;
-    private String vnfType;
-    private String vfModuleType;
-    private String networkType;
-    private String requestDetails;
-    private String recipeParamXsd;
-
-    private RequestClientParamater(Builder builder) {
-        requestId = builder.requestId;
-        isBaseVfModule = builder.isBaseVfModule;
-        recipeTimeout = builder.recipeTimeout;
-        requestAction = builder.requestAction;
-        serviceInstanceId = builder.serviceInstanceId;
-        correlationId = builder.correlationId;
-        vnfId = builder.vnfId;
-        vfModuleId = builder.vfModuleId;
-        volumeGroupId = builder.volumeGroupId;
-        networkId = builder.networkId;
-        configurationId = builder.configurationId;
-        serviceType = builder.serviceType;
-        vnfType = builder.vnfType;
-        vfModuleType = builder.vfModuleType;
-        networkType = builder.networkType;
-        requestDetails = builder.requestDetails;
-        recipeParamXsd = builder.recipeParamXsd;
-    }
-
-    public String getRequestId() {
-        return requestId;
-    }
-
-    public boolean isBaseVfModule() {
-        return isBaseVfModule;
-    }
-
-    public int getRecipeTimeout() {
-        return recipeTimeout;
-    }
-
-    public String getRequestAction() {
-        return requestAction;
-    }
-
-    public String getServiceInstanceId() {
-        return serviceInstanceId;
-    }
-
-    public String getCorrelationId() {
-        return correlationId;
-    }
-
-    public String getVnfId() {
-        return vnfId;
-    }
-
-    public String getVfModuleId() {
-        return vfModuleId;
-    }
-
-    public String getVolumeGroupId() {
-        return volumeGroupId;
-    }
-
-    public String getNetworkId() {
-        return networkId;
-    }
-
-    public String getConfigurationId() {
-        return configurationId;
-    }
-
-    public String getServiceType() {
-        return serviceType;
-    }
-
-    public String getVnfType() {
-        return vnfType;
-    }
-
-    public String getVfModuleType() {
-        return vfModuleType;
-    }
-
-    public String getNetworkType() {
-        return networkType;
-    }
-
-    public String getRequestDetails() {
-        return requestDetails;
-    }
-
-    public String getRecipeParamXsd() {
-        return recipeParamXsd;
-    }
-
-    public static class Builder {
-        private String requestId;
-        private boolean isBaseVfModule;
-        private int recipeTimeout;
-        private String requestAction;
-        private String serviceInstanceId;
-        private String correlationId;
-        private String vnfId;
-        private String vfModuleId;
-        private String volumeGroupId;
-        private String networkId;
-        private String configurationId;
-        private String serviceType;
-        private String vnfType;
-        private String vfModuleType;
-        private String networkType;
-        private String requestDetails;
-        private String recipeParamXsd;
-
-        public Builder setRequestId(String requestId) {
-            this.requestId = requestId;
-            return this;
-        }
-
-        public Builder setBaseVfModule(boolean baseVfModule) {
-            isBaseVfModule = baseVfModule;
-            return this;
-        }
-
-        public Builder setRecipeTimeout(int recipeTimeout) {
-            this.recipeTimeout = recipeTimeout;
-            return this;
-        }
-
-        public Builder setRequestAction(String requestAction) {
-            this.requestAction = requestAction;
-            return this;
-        }
-
-        public Builder setServiceInstanceId(String serviceInstanceId) {
-            this.serviceInstanceId = serviceInstanceId;
-            return this;
-        }
-
-        public Builder setCorrelationId(String correlationId) {
-            this.correlationId = correlationId;
-            return this;
-        }
-
-        public Builder setVnfId(String vnfId) {
-            this.vnfId = vnfId;
-            return this;
-        }
-
-        public Builder setVfModuleId(String vfModuleId) {
-            this.vfModuleId = vfModuleId;
-            return this;
-        }
-
-        public Builder setVolumeGroupId(String volumeGroupId) {
-            this.volumeGroupId = volumeGroupId;
-            return this;
-        }
-
-        public Builder setNetworkId(String networkId) {
-            this.networkId = networkId;
-            return this;
-        }
-
-        public Builder setConfigurationId(String configurationId) {
-            this.configurationId = configurationId;
-            return this;
-        }
-
-        public Builder setServiceType(String serviceType) {
-            this.serviceType = serviceType;
-            return this;
-        }
-
-        public Builder setVnfType(String vnfType) {
-            this.vnfType = vnfType;
-            return this;
-        }
-
-        public Builder setVfModuleType(String vfModuleType) {
-            this.vfModuleType = vfModuleType;
-            return this;
-        }
-
-        public Builder setNetworkType(String networkType) {
-            this.networkType = networkType;
-            return this;
-        }
-
-        public Builder setRequestDetails(String requestDetails) {
-            this.requestDetails = requestDetails;
-            return this;
-        }
-
-        public Builder setRecipeParamXsd(String recipeParamXsd) {
-            this.recipeParamXsd = recipeParamXsd;
-            return this;
-        }
-
-        public RequestClientParamater build(){
-            return new RequestClientParamater(this);
-        }
-    }
-
-
-}
diff --git a/mso-api-handlers/mso-api-handler-common/src/test/java/org/openecomp/mso/camunda/tests/CamundaClientTest.java b/mso-api-handlers/mso-api-handler-common/src/test/java/org/openecomp/mso/camunda/tests/CamundaClientTest.java
index 69927e2..8bfc4ce 100644
--- a/mso-api-handlers/mso-api-handler-common/src/test/java/org/openecomp/mso/camunda/tests/CamundaClientTest.java
+++ b/mso-api-handlers/mso-api-handler-common/src/test/java/org/openecomp/mso/camunda/tests/CamundaClientTest.java
@@ -24,6 +24,7 @@
 import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
+import java.util.UUID;
 
 import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
@@ -41,9 +42,12 @@
 import org.openecomp.mso.apihandler.common.CommonConstants;
 import org.openecomp.mso.apihandler.common.RequestClient;
 import org.openecomp.mso.apihandler.common.RequestClientFactory;
-import org.openecomp.mso.apihandler.common.RequestClientParamater;
 import org.openecomp.mso.properties.MsoJavaProperties;
 
+import com.fasterxml.jackson.core.JsonGenerationException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+
+
 /**
  * This class implements test methods of Camunda Beans.
  *
@@ -62,7 +66,8 @@
     }
 
     @Test
-    public void tesCamundaPost() throws IOException {
+    public void tesCamundaPost() throws JsonGenerationException,
+    JsonMappingException, IOException {
         String responseBody ="{\"links\":[{\"method\":\"GET\",\"href\":\"http://localhost:9080/engine-rest/process-instance/2047c658-37ae-11e5-9505-7a1020524153\",\"rel\":\"self\"}],\"id\":\"2047c658-37ae-11e5-9505-7a1020524153\",\"definitionId\":\"dummy:10:73298961-37ad-11e5-9505-7a1020524153\",\"businessKey\":null,\"caseInstanceId\":null,\"ended\":true,\"suspended\":false}";
 
         HttpResponse mockResponse = createResponse(200, responseBody);
@@ -101,6 +106,8 @@
         mockHttpClient = Mockito.mock(HttpClient.class);
         Mockito.when(mockHttpClient.execute(Mockito.any(HttpPost.class)))
                 .thenReturn(mockResponse);
+
+        String reqXML = "<xml>test</xml>";
         String orchestrationURI = "/engine-rest/process-definition/key/dummy/start";
 
         MsoJavaProperties props = new MsoJavaProperties();
@@ -108,7 +115,9 @@
 
         RequestClient requestClient = RequestClientFactory.getRequestClient(orchestrationURI, props);
         requestClient.setClient(mockHttpClient);
-        HttpResponse response = requestClient.post(createParams());
+        HttpResponse response = requestClient.post("mso-req-id", false, 180,
+                "createInstance", "svc-inst-id", "vnf-id", "vf-module-id", "vg-id", "nw-id", "conf-id", "svc-type",
+                "vnf-type", "vf-module-type", "nw-type", "", "");
         assertEquals(requestClient.getType(), CommonConstants.CAMUNDA);
         assertEquals(response.getStatusLine().getStatusCode(), HttpStatus.SC_OK);
     }
@@ -128,15 +137,6 @@
         return response;
     }
 
-    private RequestClientParamater createParams(){
-        return new RequestClientParamater.Builder().setRequestId("mso-req-id").setBaseVfModule(false).
-                setRecipeTimeout(180).setRequestAction("createInstance").setServiceInstanceId("svc-inst-id").
-                setVnfId("vnf-id").setVfModuleId("vf-module-id").setVolumeGroupId("vg-id").setNetworkId("nw-id").
-                setConfigurationId("conf-id").setServiceType("svc-type").setVnfType("vnf-type").
-                setVfModuleType("vf-module-type").setNetworkType("nw-type").setRequestDetails("").
-                setRecipeParamXsd("").build();
-    }
-
 
 
 
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/E2EServiceInstances.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/E2EServiceInstances.java
index dca2069..23adafd 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/E2EServiceInstances.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/E2EServiceInstances.java
@@ -43,7 +43,6 @@
 import org.openecomp.mso.apihandler.common.ErrorNumbers;
 import org.openecomp.mso.apihandler.common.RequestClient;
 import org.openecomp.mso.apihandler.common.RequestClientFactory;
-import org.openecomp.mso.apihandler.common.RequestClientParamater;
 import org.openecomp.mso.apihandler.common.ResponseHandler;
 import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.CompareModelsRequest;
 import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.E2EServiceInstanceDeleteRequest;
@@ -83,6 +82,8 @@
 	private ServiceInstancesRequest sir = null;
 
 	public static final String END_OF_THE_TRANSACTION = "End of the transaction, the final response is: ";
+	public static final String EXCEPTION_CREATING_DB_RECORD = "Exception while creating record in DB";
+	public static final String EXCEPTION_COMMUNICATE_BPMN_ENGINE = "Exception while communicate with BPMN engine";
 
 	/**
 	 * POST Requests for E2E Service create Instance on a version provided
@@ -227,6 +228,7 @@
 		
 		// Define RecipeLookupResult info here instead of query DB for efficiency
 		String workflowUrl = "/mso/async/services/CompareModelofE2EServiceInstance";
+		int recipeTimeout = 180;
 
 		RequestClient requestClient = null;
 		HttpResponse response = null;
@@ -237,15 +239,14 @@
 			requestClient = RequestClientFactory.getRequestClient(workflowUrl, MsoPropertiesUtils.loadMsoProperties());
 
 			JSONObject jjo = new JSONObject(requestJSON);
+			String bpmnRequest = jjo.toString();
 
 			// Capture audit event
 			msoLogger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
-			RequestClientParamater requestClientParamater = new RequestClientParamater.Builder().setRequestId(requestId).
-					setBaseVfModule(false).setRecipeTimeout(180).setRequestAction(action.name()).
-					setServiceInstanceId(instanceIdMap.get("serviceId")).setServiceType(e2eCompareModelReq.getServiceType()).
-					setRequestDetails(jjo.toString()).build();
-
-			response = requestClient.post(requestClientParamater);
+			String serviceId = instanceIdMap.get("serviceId");
+			String serviceType = e2eCompareModelReq.getServiceType();
+			response = requestClient.post(requestId, false, recipeTimeout, action.name(), serviceId, null, null, null,
+					null, null, serviceType, null, null, null, bpmnRequest, null);
 
 			msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
 					"Successfully received response from BPMN engine", "BPMN", workflowUrl, null);
@@ -439,6 +440,8 @@
 		HttpResponse response = null;
 
 		long subStartTime = System.currentTimeMillis();
+		// String sirRequestJson = mapReqJsonToSvcInstReq(e2eSir, requestJSON);
+
 		try {
 			requestClient = RequestClientFactory.getRequestClient(
 					recipeLookupResult.getOrchestrationURI(),
@@ -446,16 +449,19 @@
 
 			JSONObject jjo = new JSONObject(requestJSON);
 			jjo.put("operationId", UUIDChecker.generateUUID(msoLogger));
+
+			String bpmnRequest = jjo.toString();
+
 			// Capture audit event
 			msoLogger
 					.debug("MSO API Handler Posting call to BPEL engine for url: "
 							+ requestClient.getUrl());
-
-			RequestClientParamater requestClientParamater = new RequestClientParamater.Builder().setRequestId(requestId).
-					setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout()).
-					setRequestAction(action.name()).setServiceType(e2eDelReq.getServiceType()).
-					setRequestDetails(jjo.toString()).setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
-			response = requestClient.post(requestClientParamater);
+			String serviceId = instanceIdMap.get("serviceId");
+			String serviceInstanceType = e2eDelReq.getServiceType();
+			response = requestClient.post(requestId, false,
+					recipeLookupResult.getRecipeTimeout(), action.name(),
+					serviceId, null, null, null, null, null, serviceInstanceType,
+					null, null, null, bpmnRequest, recipeLookupResult.getRecipeParamXsd());
 
 			msoLogger.recordMetricEvent(subStartTime,
 					MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
@@ -558,6 +564,12 @@
 			return response;
 		}
 		
+		//check for the current operation status
+//		Response resp = checkE2ESvcInstStatus(action, serviceId, startTime, msoRequest);
+//		if(resp != null && resp.getStatus() != 200) {
+//			return resp;
+//		}
+		
 		CatalogDatabase db = null;
 		RecipeLookupResult recipeLookupResult = null;
 		try {
@@ -603,19 +615,18 @@
 		HttpResponse response = null;
 
 		long subStartTime = System.currentTimeMillis();
+		String sirRequestJson = mapReqJsonToSvcInstReq(e2eSir, requestJSON);
+
 		try {
 			requestClient = RequestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI(),
 					MsoPropertiesUtils.loadMsoProperties());
 
 			// Capture audit event
 			msoLogger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
-			RequestClientParamater requestClientParamater = new RequestClientParamater.Builder().setRequestId(requestId).
-					setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout()).setRequestAction(action.name()).
-					setServiceInstanceId(serviceId).setServiceType(serviceInstanceType).
-					setRequestDetails(mapReqJsonToSvcInstReq(e2eSir, requestJSON)).
-					setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
 
-			response = requestClient.post(requestClientParamater);
+			response = requestClient.post(requestId, false, recipeLookupResult.getRecipeTimeout(), action.name(),
+					serviceId, null, null, null, null, null, serviceInstanceType, null, null, null, sirRequestJson,
+					recipeLookupResult.getRecipeParamXsd());
 
 			msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
 					"Successfully received response from BPMN engine", "BPMN", recipeLookupResult.getOrchestrationURI(),
@@ -741,23 +752,25 @@
 			return response;
 		}
 
+		String serviceInstanceType = e2eSir.getService().getServiceType();
+
+		String serviceId = "";
 		RequestClient requestClient = null;
 		HttpResponse response = null;
 
 		long subStartTime = System.currentTimeMillis();
+		String sirRequestJson = mapReqJsonToSvcInstReq(e2eSir, requestJSON);
+
 		try {
 			requestClient = RequestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI(),
 					MsoPropertiesUtils.loadMsoProperties());
 
 			// Capture audit event
 			msoLogger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
-			RequestClientParamater requestClientParamater = new RequestClientParamater.Builder().setRequestId(requestId).
-					setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout()).setRequestAction(action.name()).
-					setServiceInstanceId("").setServiceType(e2eSir.getService().getServiceType()).
-					setRequestDetails(mapReqJsonToSvcInstReq(e2eSir, requestJSON)).
-					setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
 
-			response = requestClient.post(requestClientParamater);
+			response = requestClient.post(requestId, false, recipeLookupResult.getRecipeTimeout(), action.name(),
+					serviceId, null, null, null, null, null, serviceInstanceType, null, null, null, sirRequestJson,
+					recipeLookupResult.getRecipeParamXsd());
 
 			msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
 					"Successfully received response from BPMN engine", "BPMN", recipeLookupResult.getOrchestrationURI(),
@@ -884,6 +897,8 @@
         HttpResponse response = null;
 
         long subStartTime = System.currentTimeMillis();
+        // String sirRequestJson = mapReqJsonToSvcInstReq(e2eSir, requestJSON);
+
         try {
             requestClient = RequestClientFactory.getRequestClient(
                     recipeLookupResult.getOrchestrationURI(),
@@ -892,18 +907,18 @@
             JSONObject jjo = new JSONObject(requestJSON);
             jjo.put("operationId", UUIDChecker.generateUUID(msoLogger));
 
+            String bpmnRequest = jjo.toString();
+
             // Capture audit event
             msoLogger
                     .debug("MSO API Handler Posting call to BPEL engine for url: "
                             + requestClient.getUrl());
-			RequestClientParamater requestClientParamater = new RequestClientParamater.Builder().setRequestId(requestId).
-					setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout()).setRequestAction(action.name()).
-					setServiceInstanceId(instanceIdMap.get("serviceId")).
-					setServiceType(e2eScaleReq.getService().getServiceType()).
-					setRequestDetails(jjo.toString()).
-					setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
-
-            response = requestClient.post(requestClientParamater);
+            String serviceId = instanceIdMap.get("serviceId");
+            String serviceInstanceType = e2eScaleReq.getService().getServiceType();
+            response = requestClient.post(requestId, false,
+					recipeLookupResult.getRecipeTimeout(), action.name(),
+					serviceId, null, null, null, null, null, serviceInstanceType,
+					null, null, null, bpmnRequest, recipeLookupResult.getRecipeParamXsd());
 
             msoLogger.recordMetricEvent(subStartTime,
                     MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/MsoRequest.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/MsoRequest.java
index 3f6cc35..2f2ef31 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/MsoRequest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/MsoRequest.java
@@ -85,6 +85,7 @@
 
     private String requestId;
     private String requestXML;
+    private String requestJSON;
     private String requestUri;
     private VnfRequest vnfReq;
     private RequestInfo requestInfo;
@@ -117,6 +118,8 @@
     private OwningEntity owningEntity;
 
     private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH);
+    private static final String NOT_PROVIDED = "not provided";
+
     protected AbstractSessionFactoryManager requestsDbSessionFactoryManager = new RequestsDbSessionFactoryManager ();
 
     MsoRequest (String requestId) {
@@ -1150,7 +1153,7 @@
     	mapper.setSerializationInclusion(Include.NON_NULL);
     	//mapper.configure(Feature.WRAP_ROOT_VALUE, true);
     	msoLogger.debug ("building sir from object " + sir);
-    	String requestJSON = mapper.writeValueAsString(sir);
+    	requestJSON = mapper.writeValueAsString(sir);
     	
     	// Perform mapping from VID-style modelInfo fields to ASDC-style modelInfo fields
     	
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ServiceInstances.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ServiceInstances.java
index 581ad34..e16963d 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ServiceInstances.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ServiceInstances.java
@@ -20,7 +20,6 @@
  */
 package org.openecomp.mso.apihandlerinfra;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -43,7 +42,6 @@
 import org.openecomp.mso.apihandler.common.ErrorNumbers;
 import org.openecomp.mso.apihandler.common.RequestClient;
 import org.openecomp.mso.apihandler.common.RequestClientFactory;
-import org.openecomp.mso.apihandler.common.RequestClientParamater;
 import org.openecomp.mso.apihandler.common.ResponseHandler;
 import org.openecomp.mso.apihandler.common.ValidationException;
 import org.openecomp.mso.serviceinstancebeans.ModelInfo;
@@ -692,7 +690,37 @@
 		}
 
 		db.close();
-		msoLogger.debug ("requestId is: " + msoRequest.getRequestId());
+
+		String serviceInstanceId = "";
+		String vnfId = "";
+		String vfModuleId = "";
+		String volumeGroupId = "";
+		String networkId = "";
+		ServiceInstancesRequest siReq = msoRequest.getServiceInstancesRequest();
+
+		if(siReq.getServiceInstanceId () != null){
+			serviceInstanceId = siReq.getServiceInstanceId ();
+		}
+
+		if(siReq.getVnfInstanceId () != null){
+			vnfId = siReq.getVnfInstanceId ();
+		}
+
+		if(siReq.getVfModuleInstanceId () != null){
+			vfModuleId = siReq.getVfModuleInstanceId ();
+		}
+
+		if(siReq.getVolumeGroupInstanceId () != null){
+			volumeGroupId = siReq.getVolumeGroupInstanceId ();
+		}
+
+		if(siReq.getNetworkInstanceId () != null){
+			networkId = siReq.getNetworkInstanceId ();
+		}
+
+
+		requestId = msoRequest.getRequestId ();
+		msoLogger.debug ("requestId is: " + requestId);
 		msoLogger.debug ("About to insert a record");
 
 		try {
@@ -708,32 +736,15 @@
 			return response;
 		}
 		
-		return postBPELRequest(action, startTime, msoRequest, recipeLookupResult.getOrchestrationURI(),
-				recipeLookupResult.getRecipeTimeout(), isBaseVfModule);
+		return postBPELRequest(action, requestId, startTime, msoRequest, recipeLookupResult.getOrchestrationURI(), recipeLookupResult.getRecipeTimeout(), 
+								isBaseVfModule, serviceInstanceId, vnfId, vfModuleId, volumeGroupId, networkId, null,
+								msoRequest.getServiceInstanceType(), msoRequest.getVnfType(), msoRequest.getVfModuleType(), msoRequest.getNetworkType());
 	}
 
-	private RequestClientParamater buildRequestClientParameter(MsoRequest msoRequest, boolean isBaseVfModule,
-			int timeOut, String requestAction) throws IOException {
-		return new RequestClientParamater.Builder().
-				setRequestId(msoRequest.getRequestId()).
-				setBaseVfModule(isBaseVfModule).setRecipeTimeout(timeOut).
-				setRequestAction(requestAction).
-				setServiceInstanceId(msoRequest.getServiceInstancesRequest().getServiceInstanceId()).
-				setCorrelationId(msoRequest.getServiceInstancesRequest().getCorrelationId()).
-				setVnfId(msoRequest.getServiceInstancesRequest().getVnfInstanceId()).
-				setVfModuleId(msoRequest.getServiceInstancesRequest().getVfModuleInstanceId()).
-				setVolumeGroupId(msoRequest.getServiceInstancesRequest().getVolumeGroupInstanceId()).
-				setNetworkId(msoRequest.getServiceInstancesRequest().getNetworkInstanceId()).
-				setConfigurationId(msoRequest.getServiceInstancesRequest().getConfigurationId()).
-				setServiceType(msoRequest.getServiceInstanceType()).
-				setVnfType(msoRequest.getVnfType()).
-				setVfModuleType(msoRequest.getVfModuleType()).
-				setNetworkType(msoRequest.getNetworkType()).
-				setRequestDetails(msoRequest.getRequestJSON()).build();
-	}
-
-	private Response postBPELRequest(Action action, long startTime, MsoRequest msoRequest,
-			String orchestrationUri, int timeOut, Boolean isBaseVfModule) {
+	private Response postBPELRequest(Action action, String requestId, long startTime, MsoRequest msoRequest,
+									String orchestrationUri, int timeOut, Boolean isBaseVfModule,
+									String serviceInstanceId, String vnfId, String vfModuleId, String volumeGroupId, String networkId,
+									String configurationId, String serviceInstanceType, String vnfType, String vfModuleType, String networkType) {
 		RequestClient requestClient = null;
 		HttpResponse response = null;
 		long subStartTime = System.currentTimeMillis();
@@ -743,7 +754,12 @@
 
 			System.out.println("URL : " + requestClient.getUrl ());
 
-			response = requestClient.post(buildRequestClientParameter(msoRequest, isBaseVfModule, timeOut, action.name()));
+			response = requestClient.post(requestId, isBaseVfModule, timeOut, action.name (),
+					serviceInstanceId, vnfId, vfModuleId, volumeGroupId, networkId, configurationId,
+					msoRequest.getServiceInstanceType (),
+					msoRequest.getVnfType (), msoRequest.getVfModuleType (),
+					msoRequest.getNetworkType (), msoRequest.getRequestJSON(), null);
+
 			msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully received response from BPMN engine", "BPMN", orchestrationUri, null);
 		} catch (Exception e) {
 			msoLogger.recordMetricEvent (subStartTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN", orchestrationUri, null);
@@ -1175,6 +1191,7 @@
 		return new RecipeLookupResult (vnfRecipe.getOrchestrationUri(), vnfRecipe.getRecipeTimeout());		
 	}
 
+
 	private RecipeLookupResult getNetworkUri (CatalogDatabase db, MsoRequest msoRequest, Action action) throws Exception {
 
 		String defaultNetworkType = msoRequest.getRequestInfo().getSource() + "_DEFAULT";
@@ -1282,6 +1299,18 @@
 			return response;
 			
 		}
+		
+		String serviceInstanceId = "";
+		String configurationId = "";
+		ServiceInstancesRequest siReq = msoRequest.getServiceInstancesRequest();
+
+		if(siReq.getServiceInstanceId () != null){
+			serviceInstanceId = siReq.getServiceInstanceId ();
+		}
+
+		if(siReq.getConfigurationId() != null){
+			configurationId = siReq.getConfigurationId();
+		}
 
 		requestId = msoRequest.getRequestId ();
 		msoLogger.debug ("requestId is: " + requestId);
@@ -1299,6 +1328,7 @@
 			return response;
 		}
 
-		return postBPELRequest(action, startTime, msoRequest, orchestrationUri, Integer.parseInt(timeOut), false);
+		return postBPELRequest(action, requestId, startTime, msoRequest, orchestrationUri, Integer.parseInt(timeOut), false, 
+								serviceInstanceId, null, null, null, null, configurationId, null, null, null, null);
 	}
 }
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/openecomp/mso/apihandlerinfra/E2EServiceInstancesTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/openecomp/mso/apihandlerinfra/E2EServiceInstancesTest.java
index 901e03f..60ac6b9 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/openecomp/mso/apihandlerinfra/E2EServiceInstancesTest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/openecomp/mso/apihandlerinfra/E2EServiceInstancesTest.java
@@ -40,12 +40,12 @@
 import org.openecomp.mso.apihandler.common.CamundaClient;
 import org.openecomp.mso.apihandler.common.RequestClient;
 import org.openecomp.mso.apihandler.common.RequestClientFactory;
-import org.openecomp.mso.apihandler.common.RequestClientParamater;
 import org.openecomp.mso.apihandler.common.ValidationException;
 import org.openecomp.mso.db.AbstractSessionFactoryManager;
 import org.openecomp.mso.db.catalog.CatalogDatabase;
 import org.openecomp.mso.db.catalog.beans.Service;
 import org.openecomp.mso.db.catalog.beans.ServiceRecipe;
+import org.openecomp.mso.properties.MsoDatabaseException;
 import org.openecomp.mso.properties.MsoJavaProperties;
 import org.openecomp.mso.properties.MsoPropertiesFactory;
 import org.openecomp.mso.requestsdb.OperationStatus;
@@ -194,7 +194,12 @@
 
 		new MockUp<CamundaClient>() {
 			@Mock
-			public HttpResponse post(RequestClientParamater requestClientParamater) {
+			public HttpResponse post(String requestId, boolean isBaseVfModule,
+					int recipeTimeout, String requestAction,
+					String serviceInstanceId, String vnfId, String vfModuleId,
+					String volumeGroupId, String networkId, String configurationId, String serviceType,
+					String vnfType, String vfModuleType, String networkType,
+					String requestDetails, String recipeParamXsd) {
 				ProtocolVersion pv = new ProtocolVersion("HTTP", 1, 1);
 				HttpResponse resp = new BasicHttpResponse(pv, 202,
 						"test response");
@@ -253,7 +258,12 @@
 
 		new MockUp<CamundaClient>() {
 			@Mock
-			public HttpResponse post(RequestClientParamater requestClientParamater) {
+			public HttpResponse post(String requestId, boolean isBaseVfModule,
+					int recipeTimeout, String requestAction,
+					String serviceInstanceId, String vnfId, String vfModuleId,
+					String volumeGroupId, String networkId, String configurationId, String serviceType,
+					String vnfType, String vfModuleType, String networkType,
+					String requestDetails, String recipeParamXsd) {
 				ProtocolVersion pv = new ProtocolVersion("HTTP", 1, 1);
 				HttpResponse resp = new BasicHttpResponse(pv, 500,
 						"test response");
@@ -313,7 +323,12 @@
 
 		new MockUp<CamundaClient>() {
 			@Mock
-			public HttpResponse post(RequestClientParamater requestClientParamater) {
+			public HttpResponse post(String requestId, boolean isBaseVfModule,
+					int recipeTimeout, String requestAction,
+					String serviceInstanceId, String vnfId, String vfModuleId,
+					String volumeGroupId, String networkId, String configurationId, String serviceType,
+					String vnfType, String vfModuleType, String networkType,
+					String requestDetails, String recipeParamXsd) {
 				ProtocolVersion pv = new ProtocolVersion("HTTP", 1, 1);
 				HttpResponse resp = new BasicHttpResponse(pv, 500,
 						"test response");
@@ -373,7 +388,12 @@
 
 		new MockUp<CamundaClient>() {
 			@Mock
-			public HttpResponse post(RequestClientParamater requestClientParamater) {
+			public HttpResponse post(String requestId, boolean isBaseVfModule,
+					int recipeTimeout, String requestAction,
+					String serviceInstanceId, String vnfId, String vfModuleId,
+					String volumeGroupId, String networkId, String configurationId, String serviceType,
+					String vnfType, String vfModuleType, String networkType,
+					String requestDetails, String recipeParamXsd) {
 				HttpResponse resp = null;
 				return resp;
 			}
@@ -605,7 +625,12 @@
 
         final MockUp<CamundaClient> mockCmaundaClient = new MockUp<CamundaClient>() {
             @Mock
-            public HttpResponse post(RequestClientParamater requestClientParamater) {
+            public HttpResponse post(String requestId, boolean isBaseVfModule,
+                                     int recipeTimeout, String requestAction, String serviceInstanceId,
+                                     String vnfId, String vfModuleId, String volumeGroupId, String networkId, String configurationId,
+                                     String serviceType, String vnfType, String vfModuleType, String networkType,
+                                     String requestDetails, String recipeParamXsd)
+                    throws ClientProtocolException, IOException {
                 ProtocolVersion pv = new ProtocolVersion("HTTP", 1, 1);
                 HttpResponse resp = new BasicHttpResponse(pv, 200, "test response");
                 BasicHttpEntity entity = new BasicHttpEntity();
@@ -797,7 +822,12 @@
 
 		new MockUp<CamundaClient>() {
 			@Mock
-			public HttpResponse post(RequestClientParamater requestClientParamater) {
+			public HttpResponse post(String requestId, boolean isBaseVfModule,
+					int recipeTimeout, String requestAction,
+					String serviceInstanceId, String vnfId, String vfModuleId,
+					String volumeGroupId, String networkId, String configurationId, String serviceType,
+					String vnfType, String vfModuleType, String networkType,
+					String requestDetails, String recipeParamXsd) {
 				ProtocolVersion pv = new ProtocolVersion("HTTP", 1, 1);
 				HttpResponse resp = new BasicHttpResponse(pv, 202,
 						"test response");
@@ -858,7 +888,12 @@
 
 		new MockUp<CamundaClient>() {
 			@Mock
-			public HttpResponse post(RequestClientParamater requestClientParamater) {
+			public HttpResponse post(String requestId, boolean isBaseVfModule,
+					int recipeTimeout, String requestAction,
+					String serviceInstanceId, String vnfId, String vfModuleId,
+					String volumeGroupId, String networkId, String configurationId, String serviceType,
+					String vnfType, String vfModuleType, String networkType,
+					String requestDetails, String recipeParamXsd) {
 				ProtocolVersion pv = new ProtocolVersion("HTTP", 1, 1);
 				HttpResponse resp = new BasicHttpResponse(pv, 202,
 						"test response");
@@ -920,7 +955,12 @@
 
         new MockUp<CamundaClient>() {
             @Mock
-            public HttpResponse post(RequestClientParamater requestClientParamater) {
+            public HttpResponse post(String requestId, boolean isBaseVfModule,
+                                     int recipeTimeout, String requestAction,
+                                     String serviceInstanceId, String vnfId, String vfModuleId,
+                                     String volumeGroupId, String networkId, String configurationId, String serviceType,
+                                     String vnfType, String vfModuleType, String networkType,
+                                     String requestDetails, String recipeParamXsd) {
                 ProtocolVersion pv = new ProtocolVersion("HTTP", 1, 1);
                 HttpResponse resp = new BasicHttpResponse(pv, 202,
                         "test response");
@@ -987,7 +1027,12 @@
 
         new MockUp<CamundaClient>() {
             @Mock
-            public HttpResponse post(RequestClientParamater requestClientParamater) {
+            public HttpResponse post(String requestId, boolean isBaseVfModule,
+                                     int recipeTimeout, String requestAction,
+                                     String serviceInstanceId, String vnfId, String vfModuleId,
+                                     String volumeGroupId, String networkId, String configurationId, String serviceType,
+                                     String vnfType, String vfModuleType, String networkType,
+                                     String requestDetails, String recipeParamXsd) {
                 ProtocolVersion pv = new ProtocolVersion("HTTP", 1, 1);
                 HttpResponse resp = new BasicHttpResponse(pv, 202,
                         "test response");
@@ -1048,7 +1093,12 @@
 
         new MockUp<CamundaClient>() {
             @Mock
-            public HttpResponse post(RequestClientParamater requestClientParamater) {
+            public HttpResponse post(String requestId, boolean isBaseVfModule,
+                                     int recipeTimeout, String requestAction,
+                                     String serviceInstanceId, String vnfId, String vfModuleId,
+                                     String volumeGroupId, String networkId, String configurationId, String serviceType,
+                                     String vnfType, String vfModuleType, String networkType,
+                                     String requestDetails, String recipeParamXsd) {
                 ProtocolVersion pv = new ProtocolVersion("HTTP", 1, 1);
                 HttpResponse resp = new BasicHttpResponse(pv, 202,
                         "test response");
@@ -1110,7 +1160,12 @@
 
         MockUp<CamundaClient> client = new MockUp<CamundaClient>() {
             @Mock
-            public HttpResponse post(RequestClientParamater requestClientParamater) throws Exception {
+            public HttpResponse post(String requestId, boolean isBaseVfModule,
+                                     int recipeTimeout, String requestAction,
+                                     String serviceInstanceId, String vnfId, String vfModuleId,
+                                     String volumeGroupId, String networkId, String configurationId, String serviceType,
+                                     String vnfType, String vfModuleType, String networkType,
+                                     String requestDetails, String recipeParamXsd) throws Exception {
                 throw new Exception();
             }
         };
@@ -1137,7 +1192,13 @@
 
         new MockUp<CamundaClient>() {
             @Mock
-            public HttpResponse post(RequestClientParamater requestClientParamater) throws IOException {
+            public HttpResponse post(String requestId, boolean isBaseVfModule,
+                 int recipeTimeout, String requestAction, String serviceInstanceId,
+                 String vnfId, String vfModuleId, String volumeGroupId, String networkId, String configurationId,
+                 String serviceType, String vnfType, String vfModuleType, String networkType,
+                 String requestDetails, String recipeParamXsd)
+                    throws ClientProtocolException, IOException {
+
                 throw new ClientProtocolException();
             }
         };
@@ -1155,7 +1216,13 @@
 
         new MockUp<CamundaClient>() {
             @Mock
-            public HttpResponse post(RequestClientParamater requestClientParamater) {
+            public HttpResponse post(String requestId, boolean isBaseVfModule,
+                                     int recipeTimeout, String requestAction, String serviceInstanceId,
+                                     String vnfId, String vfModuleId, String volumeGroupId, String networkId, String configurationId,
+                                     String serviceType, String vnfType, String vfModuleType, String networkType,
+                                     String requestDetails, String recipeParamXsd)
+                    throws ClientProtocolException, IOException {
+
                 ProtocolVersion pv = new ProtocolVersion("HTTP", 1, 1);
                 HttpResponse resp = new BasicHttpResponse(pv, 202,
                         "compareModelwithTargetVersion, test response");
@@ -1224,7 +1291,12 @@
 
         final MockUp<CamundaClient> mockCamundaClient = new MockUp<CamundaClient>() {
             @Mock
-            public HttpResponse post(RequestClientParamater requestClientParamater) {
+            public HttpResponse post(String requestId, boolean isBaseVfModule,
+                                     int recipeTimeout, String requestAction,
+                                     String serviceInstanceId, String vnfId, String vfModuleId,
+                                     String volumeGroupId, String networkId, String configurationId, String serviceType,
+                                     String vnfType, String vfModuleType, String networkType,
+                                     String requestDetails, String recipeParamXsd) {
                 ProtocolVersion pv = new ProtocolVersion("HTTP", 1, 1);
                 HttpResponse resp = new BasicHttpResponse(pv, 202,
                         "test response");
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/openecomp/mso/apihandlerinfra/ServiceInstanceTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/openecomp/mso/apihandlerinfra/ServiceInstanceTest.java
index 938a103..50f00ef 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/openecomp/mso/apihandlerinfra/ServiceInstanceTest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/openecomp/mso/apihandlerinfra/ServiceInstanceTest.java
@@ -21,16 +21,6 @@
 package org.openecomp.mso.apihandlerinfra;
 
 
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import javax.ws.rs.core.Response;
-import mockit.Mock;
-import mockit.MockUp;
 import org.apache.http.HttpResponse;
 import org.apache.http.ProtocolVersion;
 import org.apache.http.entity.BasicHttpEntity;
@@ -40,23 +30,33 @@
 import org.junit.BeforeClass;
 import org.junit.Ignore;
 import org.junit.Test;
+
+import javax.ws.rs.core.Response;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+
 import org.openecomp.mso.apihandler.common.CamundaClient;
 import org.openecomp.mso.apihandler.common.RequestClient;
 import org.openecomp.mso.apihandler.common.RequestClientFactory;
-import org.openecomp.mso.apihandler.common.RequestClientParamater;
 import org.openecomp.mso.db.catalog.CatalogDatabase;
-import org.openecomp.mso.db.catalog.beans.Service;
-import org.openecomp.mso.db.catalog.beans.ServiceRecipe;
-import org.openecomp.mso.db.catalog.beans.VfModule;
-import org.openecomp.mso.db.catalog.beans.VfModuleCustomization;
-import org.openecomp.mso.db.catalog.beans.VnfComponentsRecipe;
-import org.openecomp.mso.db.catalog.beans.VnfRecipe;
-import org.openecomp.mso.db.catalog.beans.VnfResource;
+import org.openecomp.mso.db.catalog.beans.*;
 import org.openecomp.mso.properties.MsoJavaProperties;
+import org.openecomp.mso.properties.MsoPropertiesException;
 import org.openecomp.mso.properties.MsoPropertiesFactory;
 import org.openecomp.mso.requestsdb.InfraActiveRequests;
 import org.openecomp.mso.requestsdb.RequestsDatabase;
 
+import mockit.Mock;
+import mockit.MockUp;
+
 public class ServiceInstanceTest {
 
 	/*** Create Service Instance Test Cases ***/
@@ -225,7 +225,11 @@
         
         new MockUp<CamundaClient>() {
             @Mock
-            public HttpResponse post(RequestClientParamater requestClientParamater) {
+            public HttpResponse post(String requestId, boolean isBaseVfModule,
+        			int recipeTimeout, String requestAction, String serviceInstanceId,
+        			String vnfId, String vfModuleId, String volumeGroupId, String networkId, String configurationId,
+        			String serviceType, String vnfType, String vfModuleType, String networkType,
+        			String requestDetails, String recipeParamXsd){ 
             	ProtocolVersion pv = new ProtocolVersion("HTTP",1,1);
             	HttpResponse resp = new BasicHttpResponse(pv,200, "test response");
             	BasicHttpEntity entity = new BasicHttpEntity();
@@ -291,7 +295,11 @@
         
         new MockUp<CamundaClient>() {
             @Mock
-            public HttpResponse post(RequestClientParamater requestClientParamater) {
+            public HttpResponse post(String requestId, boolean isBaseVfModule,
+        			int recipeTimeout, String requestAction, String serviceInstanceId,
+        			String vnfId, String vfModuleId, String volumeGroupId, String networkId, String configurationId,
+        			String serviceType, String vnfType, String vfModuleType, String networkType,
+        			String requestDetails, String recipeParamXsd){ 
             	ProtocolVersion pv = new ProtocolVersion("HTTP",1,1);
             	HttpResponse resp = new BasicHttpResponse(pv,500, "test response");
             	BasicHttpEntity entity = new BasicHttpEntity();
@@ -358,7 +366,11 @@
         
         new MockUp<CamundaClient>() {
             @Mock
-            public HttpResponse post(RequestClientParamater requestClientParamater) {
+            public HttpResponse post(String requestId, boolean isBaseVfModule,
+        			int recipeTimeout, String requestAction, String serviceInstanceId,
+        			String vnfId, String vfModuleId, String volumeGroupId, String networkId, String configurationId,
+        			String serviceType, String vnfType, String vfModuleType, String networkType,
+        			String requestDetails, String recipeParamXsd){ 
             	ProtocolVersion pv = new ProtocolVersion("HTTP",1,1);
             	HttpResponse resp = new BasicHttpResponse(pv,500, "test response");
             	BasicHttpEntity entity = new BasicHttpEntity();
@@ -425,7 +437,11 @@
         
         new MockUp<CamundaClient>() {
             @Mock
-            public HttpResponse post(RequestClientParamater requestClientParamater){
+            public HttpResponse post(String requestId, boolean isBaseVfModule,
+        			int recipeTimeout, String requestAction, String serviceInstanceId,
+        			String vnfId, String vfModuleId, String volumeGroupId, String networkId, String configurationId,
+        			String serviceType, String vnfType, String vfModuleType, String networkType,
+        			String requestDetails, String recipeParamXsd){ 
             	return null;
             }
         };
@@ -907,7 +923,11 @@
 
 		new MockUp<CamundaClient>() {
 			@Mock
-			public HttpResponse post(RequestClientParamater requestClientParamater) {
+			public HttpResponse post(String requestId, boolean isBaseVfModule,
+									 int recipeTimeout, String requestAction, String serviceInstanceId,
+									 String vnfId, String vfModuleId, String volumeGroupId, String networkId, String configurationId,
+									 String serviceType, String vnfType, String vfModuleType, String networkType,
+									 String requestDetails, String recipeParamXsd){
 				ProtocolVersion pv = new ProtocolVersion("HTTP",1,1);
 				HttpResponse resp = new BasicHttpResponse(pv,200, "test response");
 				BasicHttpEntity entity = new BasicHttpEntity();
@@ -1072,7 +1092,11 @@
 
 		new MockUp<CamundaClient>() {
 			@Mock
-			public HttpResponse post(RequestClientParamater requestClientParamater){
+			public HttpResponse post(String requestId, boolean isBaseVfModule,
+									 int recipeTimeout, String requestAction, String serviceInstanceId,
+									 String vnfId, String vfModuleId, String volumeGroupId, String networkId, String configurationId,
+									 String serviceType, String vnfType, String vfModuleType, String networkType,
+									 String requestDetails, String recipeParamXsd){
 				ProtocolVersion pv = new ProtocolVersion("HTTP",1,1);
 				HttpResponse resp = new BasicHttpResponse(pv,200, "test response");
 				BasicHttpEntity entity = new BasicHttpEntity();
@@ -1119,7 +1143,11 @@
 
 		new MockUp<CamundaClient>() {
 			@Mock
-			public HttpResponse post(RequestClientParamater requestClientParamater) {
+			public HttpResponse post(String requestId, boolean isBaseVfModule,
+									 int recipeTimeout, String requestAction, String serviceInstanceId,
+									 String vnfId, String vfModuleId, String volumeGroupId, String networkId, String configurationId,
+									 String serviceType, String vnfType, String vfModuleType, String networkType,
+									 String requestDetails, String recipeParamXsd){
 				ProtocolVersion pv = new ProtocolVersion("HTTP",1,1);
 				HttpResponse resp = new BasicHttpResponse(pv,200, "test response");
 				BasicHttpEntity entity = new BasicHttpEntity();
