diff --git a/mso-api-handlers/mso-api-handler-common/pom.xml b/mso-api-handlers/mso-api-handler-common/pom.xml
index eb9b394..d35db00 100644
--- a/mso-api-handlers/mso-api-handler-common/pom.xml
+++ b/mso-api-handlers/mso-api-handler-common/pom.xml
@@ -18,6 +18,8 @@
 		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 		<swagger-version>1.3.0</swagger-version>
 		<jax-rs-version>1.1.1</jax-rs-version>
+		<json4s-jackson-version>3.6.0</json4s-jackson-version>
+		<json4s-core-version>3.6.0</json4s-core-version>
 		<reflections-version>0.9.9-RC1</reflections-version>
 		<paranamer-version>2.5.2</paranamer-version>
 		<scannotation-version>1.0.3</scannotation-version>
@@ -62,20 +64,18 @@
 		<dependency>
 			<groupId>org.json4s</groupId>
 			<artifactId>json4s-jackson_2.12</artifactId>
+			<version>${json4s-jackson-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.json4s</groupId>
 			<artifactId>json4s-core_2.12</artifactId>
+			<version>${json4s-core-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>javax.servlet</groupId>
 			<artifactId>servlet-api</artifactId>
 			<version>2.5</version>
-		</dependency>
-		<dependency>
-			<groupId>org.javassist</groupId>
-			<artifactId>javassist</artifactId>
-		</dependency>
+		</dependency>		
 		<dependency>
 			<groupId>org.json</groupId>
 			<artifactId>json</artifactId>
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaClient.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaClient.java
index 3ebad8b..3936cca 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaClient.java
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaClient.java
@@ -86,7 +86,7 @@
 		if(props!=null){
 			encryptedCredentials = props.getProperty(CommonConstants.CAMUNDA_AUTH);
 			if(encryptedCredentials != null){
-				String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, CommonConstants.ENCRYPTION_KEY);
+				String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, props.getProperty(CommonConstants.ENCRYPTION_KEY_PROP));
 				if(userCredentials != null){
 					post.addHeader("Authorization", "Basic " + new String(DatatypeConverter.printBase64Binary(userCredentials.getBytes())));
 				}
@@ -108,7 +108,7 @@
 		if(props!=null){
 			encryptedCredentials = props.getProperty(CommonConstants.CAMUNDA_AUTH);
 			if(encryptedCredentials != null){
-				String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, CommonConstants.ENCRYPTION_KEY);
+				String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, props.getProperty(CommonConstants.ENCRYPTION_KEY_PROP));
 				if(userCredentials != null){
 					post.addHeader("Authorization", "Basic " + new String(DatatypeConverter.printBase64Binary(userCredentials.getBytes())));
 				}
@@ -141,7 +141,7 @@
 		if(props!=null){
 			encryptedCredentials = props.getProperty(CommonConstants.CAMUNDA_AUTH);
 			if(encryptedCredentials != null){
-				String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, CommonConstants.ENCRYPTION_KEY);
+				String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, props.getProperty(CommonConstants.ENCRYPTION_KEY_PROP));
 				if(userCredentials != null){
 					post.addHeader("Authorization", "Basic " + new String(DatatypeConverter.printBase64Binary(userCredentials.getBytes())));
 				}
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaTaskClient.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaTaskClient.java
index 166a5c4..bb0a4b0 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaTaskClient.java
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaTaskClient.java
@@ -49,7 +49,7 @@
 		if(props!=null){
 			encryptedCredentials = props.getProperty(CommonConstants.CAMUNDA_AUTH);
 			if(encryptedCredentials != null){
-				String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, CommonConstants.ENCRYPTION_KEY);
+				String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, props.getProperty(CommonConstants.ENCRYPTION_KEY_PROP));
 				if(userCredentials != null){
 					post.addHeader("Authorization", "Basic " + DatatypeConverter
 						.printBase64Binary(userCredentials.getBytes()));
@@ -80,7 +80,7 @@
 		if(props!=null){
 			encryptedCredentials = props.getProperty(CommonConstants.CAMUNDA_AUTH);
 			if(encryptedCredentials != null){
-				String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, CommonConstants.ENCRYPTION_KEY);
+				String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, props.getProperty(CommonConstants.ENCRYPTION_KEY_PROP));
 				if(userCredentials != null){
 					get.addHeader("Authorization", "Basic " + new String(DatatypeConverter
 						.printBase64Binary(userCredentials.getBytes())));
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CommonConstants.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CommonConstants.java
index 400ce56..d1b629f 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CommonConstants.java
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CommonConstants.java
@@ -24,7 +24,7 @@
 public final class CommonConstants {
 
     public static final String DEFAULT_BPEL_AUTH = "admin:admin";
-    public static final String ENCRYPTION_KEY = "aa3871669d893c7fb8abbcda31b88b4f";
+    public static final String ENCRYPTION_KEY_PROP = "org.onap.so.adapters.network.encryptionKey";
 
     public static final String REQUEST_ID_HEADER = "mso-request-id";
     public static final String REQUEST_TIMEOUT_HEADER = "mso-service-request-timeout";
diff --git a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaClientTest.java b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaClientTest.java
index 7a4b587..247a62e 100644
--- a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaClientTest.java
+++ b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaClientTest.java
@@ -23,8 +23,11 @@
 package org.onap.so.apihandler.common;
 
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 
 import java.io.IOException;
 import java.nio.file.Files;
@@ -38,15 +41,13 @@
 import org.apache.http.entity.StringEntity;
 import org.apache.http.message.BasicHttpResponse;
 import org.apache.http.message.BasicStatusLine;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
-import org.onap.so.apihandler.common.CamundaClient;
-import org.onap.so.apihandler.common.CommonConstants;
-import org.onap.so.apihandler.common.RequestClient;
-import org.onap.so.apihandler.common.RequestClientFactory;
 import org.springframework.mock.env.MockEnvironment;
 
 import com.fasterxml.jackson.core.JsonGenerationException;
@@ -64,6 +65,7 @@
 
     @Mock
     private HttpClient mockHttpClient;
+    private static final String AUTHORIZATION_HEADER_NAME = "Authorization";
 
     @Before
     public void setUp() {
@@ -79,6 +81,7 @@
 
         HttpResponse mockResponse = createResponse(200, responseBody);
         mockHttpClient = Mockito.mock(HttpClient.class);
+        ArgumentCaptor<HttpPost> httpPostCaptor = ArgumentCaptor.forClass(HttpPost.class);
         Mockito.when(mockHttpClient.execute(Mockito.any(HttpPost.class)))
         .thenReturn(mockResponse);
 
@@ -87,6 +90,8 @@
         MockEnvironment environment = new MockEnvironment();
         
         environment.setProperty("mso.camundaUR", "yourValue1");
+        environment.setProperty("mso.camundaAuth", "E8E19DD16CC90D2E458E8FF9A884CC0452F8F3EB8E321F96038DE38D5C1B0B02DFAE00B88E2CF6E2A4101AB2C011FC161212EE");
+        environment.setProperty("org.onap.so.adapters.network.encryptionKey", "aa3871669d893c7fb8abbcda31b88b4f");
  
         
         RequestClientFactory reqClientFactory = new RequestClientFactory();
@@ -107,6 +112,9 @@
         response = requestClient.post(null, "reqId", null, null, null, null);
         assertEquals(requestClient.getType(), CommonConstants.CAMUNDA);
         assertEquals(statusCode, HttpStatus.SC_OK);
+        verify(mockHttpClient,times(2)).execute(httpPostCaptor.capture());
+        assertThat(httpPostCaptor.getValue().getHeaders(AUTHORIZATION_HEADER_NAME)).isNotEmpty();
+        Assert.assertEquals("Basic YXBpaEJwbW46Y2FtdW5kYS1SMTUxMiE=",httpPostCaptor.getValue().getHeaders(AUTHORIZATION_HEADER_NAME)[0].getValue());
     }
 
     private HttpResponse createResponse(int respStatus,
@@ -132,35 +140,35 @@
     
     @Test
     public void wrapVIDRequestTest() throws IOException{
-        CamundaClient testClient = new CamundaClient();
-        testClient.setUrl("/mso/async/services/CreateGenericALaCarteServiceInstance");
-        
-        String requestId = "f7ce78bb-423b-11e7-93f8-0050569a796";
-        boolean isBaseVfModule = true;
-        int recipeTimeout = 10000;
-        String requestAction = "createInstance";
-        String serviceInstanceId = "12345679";
-        String correlationId = "12345679";
-        String vnfId = "234567891";
-        String vfModuleId = "345678912";
-        String volumeGroupId = "456789123";
-        String networkId = "567891234";
-        String configurationId = "678912345";
-        String serviceType = "testService";
-        String vnfType = "testVnf";
-        String vfModuleType = "vfModuleType";
-        String networkType = "networkType";
-        String requestDetails = "{requestDetails: }";
-        String apiVersion = "6";
-        boolean aLaCarte = true;
-        String requestUri = "v7/serviceInstances/assign";
-        
-        String testResult = testClient.wrapVIDRequest(requestId, isBaseVfModule, recipeTimeout, requestAction, serviceInstanceId, correlationId,
-                            vnfId, vfModuleId, volumeGroupId, networkId, configurationId, serviceType, 
-                            vnfType, vfModuleType, networkType, requestDetails, apiVersion, aLaCarte, requestUri, "");
-        String expected = inputStream("/WrappedVIDRequest.json");
-        
-        assertEquals(expected, testResult);
+    	CamundaClient testClient = new CamundaClient();
+    	testClient.setUrl("/mso/async/services/CreateGenericALaCarteServiceInstance");
+
+    	String requestId = "f7ce78bb-423b-11e7-93f8-0050569a796";
+    	boolean isBaseVfModule = true;
+    	int recipeTimeout = 10000;
+    	String requestAction = "createInstance";
+    	String serviceInstanceId = "12345679";
+    	String correlationId = "12345679";
+    	String vnfId = "234567891";
+    	String vfModuleId = "345678912";
+    	String volumeGroupId = "456789123";
+    	String networkId = "567891234";
+    	String configurationId = "678912345";
+    	String serviceType = "testService";
+    	String vnfType = "testVnf";
+    	String vfModuleType = "vfModuleType";
+    	String networkType = "networkType";
+    	String requestDetails = "{requestDetails: }";
+    	String apiVersion = "6";
+    	boolean aLaCarte = true;
+    	String requestUri = "v7/serviceInstances/assign";
+    	
+    	String testResult = testClient.wrapVIDRequest(requestId, isBaseVfModule, recipeTimeout, requestAction, serviceInstanceId, correlationId,
+    						vnfId, vfModuleId, volumeGroupId, networkId, configurationId, serviceType, 
+    						vnfType, vfModuleType, networkType, requestDetails, apiVersion, aLaCarte, requestUri, "");
+    	String expected = inputStream("/WrappedVIDRequest.json");
+    	
+    	assertEquals(expected, testResult);
     }
 
     @Test
diff --git a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaTaskClientTest.java b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaTaskClientTest.java
index 69772ee..f1b46e7 100644
--- a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaTaskClientTest.java
+++ b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaTaskClientTest.java
@@ -35,15 +35,13 @@
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.client.methods.HttpRequestBase;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.onap.so.apihandler.common.CamundaTaskClient;
-import org.onap.so.apihandler.common.CommonConstants;
-import org.onap.so.apihandler.common.RequestClientParameter;
+import org.mockito.junit.MockitoJUnitRunner;
 import org.springframework.core.env.Environment;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -63,7 +61,8 @@
 
     @Before
     public void init() {
-    	when(env.getProperty(eq(CommonConstants.CAMUNDA_AUTH))).thenReturn("");
+    	when(env.getProperty(eq(CommonConstants.CAMUNDA_AUTH))).thenReturn("E8E19DD16CC90D2E458E8FF9A884CC0452F8F3EB8E321F96038DE38D5C1B0B02DFAE00B88E2CF6E2A4101AB2C011FC161212EE");
+        when(env.getProperty(eq(CommonConstants.ENCRYPTION_KEY_PROP))).thenReturn("aa3871669d893c7fb8abbcda31b88b4f");
         testedObject = new CamundaTaskClient();
         httpClientMock = mock(HttpClient.class);
         testedObject.setClient(httpClientMock);
@@ -88,6 +87,7 @@
         testedObject.post(JSON_REQUEST);
         verify(httpClientMock).execute(httpPostCaptor.capture());
         assertThat(httpPostCaptor.getValue().getHeaders(AUTHORIZATION_HEADER_NAME)).isNotEmpty();
+        Assert.assertEquals("Basic YXBpaEJwbW46Y2FtdW5kYS1SMTUxMiE=",httpPostCaptor.getValue().getHeaders(AUTHORIZATION_HEADER_NAME)[0].getValue());
     }
 
     @Test
@@ -106,6 +106,7 @@
         testedObject.get();
         verify(httpClientMock).execute(httpGetCaptor.capture());
         assertThat(httpGetCaptor.getValue().getHeaders(AUTHORIZATION_HEADER_NAME)).isNotEmpty();
+        Assert.assertEquals("Basic YXBpaEJwbW46Y2FtdW5kYS1SMTUxMiE=",httpGetCaptor.getValue().getHeaders(AUTHORIZATION_HEADER_NAME)[0].getValue());
     }
 
     @Test(expected = UnsupportedOperationException.class)
diff --git a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandlerinfra/exceptions/ApiExceptionMapperTest.java b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandlerinfra/exceptions/ApiExceptionMapperTest.java
index e666df3..06459a2 100644
--- a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandlerinfra/exceptions/ApiExceptionMapperTest.java
+++ b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandlerinfra/exceptions/ApiExceptionMapperTest.java
@@ -25,7 +25,7 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.StringStartsWith.startsWith;
 import static org.junit.Assert.assertEquals;
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Matchers.anyObject;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.doReturn;
@@ -33,6 +33,7 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+
 import java.io.IOException;
 import java.io.Writer;
 import java.util.Arrays;
@@ -48,10 +49,11 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.ArgumentMatchers;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.so.apihandler.common.ErrorNumbers;
 import org.onap.so.apihandlerinfra.exceptions.ApiException;
 import org.onap.so.apihandlerinfra.exceptions.ApiExceptionMapper;
@@ -147,14 +149,14 @@
         BPMNFailureException bpmnException = new BPMNFailureException.Builder("Test Message", HttpStatus.SC_NOT_FOUND, ErrorNumbers.SVC_BAD_PARAMETER).build();
 		when(headers.getAcceptableMediaTypes()).thenReturn(Arrays.asList(MediaType.APPLICATION_XML_TYPE.withCharset("UTF-8")));
     	mapperSpy.toResponse(bpmnException);
-    	verify(mapperSpy, times(1)).buildServiceErrorResponse(any(String.class), any(String.class), any(List.class), eq(MediaType.APPLICATION_XML_TYPE));
+    	verify(mapperSpy, times(1)).buildServiceErrorResponse(any(String.class), any(String.class), ArgumentMatchers.isNull(), eq(MediaType.APPLICATION_XML_TYPE));
 		when(headers.getAcceptableMediaTypes()).thenReturn(Arrays.asList(MediaType.APPLICATION_JSON_TYPE.withCharset("UTF-8")));
     	mapperSpy = Mockito.spy(mapper);
     	mapperSpy.toResponse(bpmnException);
-    	verify(mapperSpy, times(1)).buildServiceErrorResponse(any(String.class), any(String.class), any(List.class), eq(MediaType.APPLICATION_JSON_TYPE));
+    	verify(mapperSpy, times(1)).buildServiceErrorResponse(any(String.class), any(String.class), ArgumentMatchers.isNull(), eq(MediaType.APPLICATION_JSON_TYPE));
 		when(headers.getAcceptableMediaTypes()).thenReturn(null);
     	mapperSpy = Mockito.spy(mapper);
     	mapperSpy.toResponse(bpmnException);
-    	verify(mapperSpy, times(1)).buildServiceErrorResponse(any(String.class), any(String.class), any(List.class), eq(MediaType.APPLICATION_JSON_TYPE));
+    	verify(mapperSpy, times(1)).buildServiceErrorResponse(any(String.class), any(String.class),ArgumentMatchers.isNull(), eq(MediaType.APPLICATION_JSON_TYPE));
     }
 }
