diff --git a/adapters/mso-requests-db-adapter/src/main/resources/application-local.yaml b/adapters/mso-requests-db-adapter/src/main/resources/application-local.yaml
index 414c552..41b72ba 100644
--- a/adapters/mso-requests-db-adapter/src/main/resources/application-local.yaml
+++ b/adapters/mso-requests-db-adapter/src/main/resources/application-local.yaml
@@ -12,10 +12,9 @@
       endpoint: http://localhost:8081
   logPath: logs
   site-name: localSite
-  adapters:
-    requestDb:
-      auth: Basic YnBlbDptc28tZGItMTUwNyE=
-      endpoint: http://localhost:8081
+  infra-requests:
+    archived:
+      period: 180
 spring:
   datasource:
     url: jdbc:mariadb://localhost:3306/requestdb
@@ -50,6 +49,6 @@
 flyway:
   baseline-on-migrate: false
   url: jdbc:mariadb://localhost:3306/requestdb
-  user: mso
-  password: mso123
+  user: catalog
+  password: catalog123
       
\ No newline at end of file
diff --git a/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/ArchiveInfraRequestsSchedulerTest.java b/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/ArchiveInfraRequestsSchedulerTest.java
index 54debac..f05a301 100644
--- a/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/ArchiveInfraRequestsSchedulerTest.java
+++ b/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/ArchiveInfraRequestsSchedulerTest.java
@@ -28,6 +28,7 @@
 import java.util.Date;
 import java.util.List;
 
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.onap.so.adapters.requestsdb.application.MSORequestDBApplication;
@@ -61,6 +62,7 @@
 	private int archivedPeriod;
 	
 	@Test 
+	@Transactional
 	public void testArchiveInfraRequests() {
 		String requestId1 = "requestId1";
 		String requestId2 = "requestId2";
@@ -85,7 +87,8 @@
 		assertEquals(requestId2, archivedRepo.findOne(requestId2).getRequestId());
 	}
 
-	@Test
+	@Test	
+	@Ignore
 	public void testInfraRequestsScheduledTask() {
 		Date currentDate= new Date();
 		Calendar calendar = Calendar.getInstance();
diff --git a/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/adapters/MSORequestDBImplTest.java b/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/adapters/MSORequestDBImplTest.java
index 03fd062..571a2c0 100644
--- a/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/adapters/MSORequestDBImplTest.java
+++ b/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/adapters/MSORequestDBImplTest.java
@@ -87,7 +87,7 @@
         jaxWsProxyFactory.setServiceClass(MsoRequestsDbAdapter.class);
         jaxWsProxyFactory.setAddress("http://localhost:" + port + "/services/RequestsDbAdapter");
         jaxWsProxyFactory.setUsername("bpel");
-        jaxWsProxyFactory.setPassword("password1$");
+        jaxWsProxyFactory.setPassword("mso-db-1507!");
         dbAdapter = (MsoRequestsDbAdapter) jaxWsProxyFactory.create();
 	}
 
diff --git a/adapters/mso-requests-db-adapter/src/test/resources/application-test.yaml b/adapters/mso-requests-db-adapter/src/test/resources/application-test.yaml
index 812fd23..35b3ec9 100644
--- a/adapters/mso-requests-db-adapter/src/test/resources/application-test.yaml
+++ b/adapters/mso-requests-db-adapter/src/test/resources/application-test.yaml
@@ -10,7 +10,7 @@
 mso:
   adapters:
     requestDb:
-      auth: Basic YnBlbDpwYXNzd29yZDEk
+      auth: Basic YnBlbDptc28tZGItMTUwNyE=
       endpoint: http://localhost:8081
   logPath: logs
   site-name: localSite
@@ -35,10 +35,6 @@
     database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
   security:
     usercredentials:
-    -  
-      username: bpel
-      password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke'
-      role: BPEL-Client
     -
       username: bpel
       password: '$2a$12$1xyutEZNfjGewIZRfKaE8eZE99f5sYFUmmM80BobI65KNjmcK0JuO'
diff --git a/common/src/main/java/org/onap/so/client/RestTemplateConfig.java b/common/src/main/java/org/onap/so/client/RestTemplateConfig.java
new file mode 100644
index 0000000..e71510e
--- /dev/null
+++ b/common/src/main/java/org/onap/so/client/RestTemplateConfig.java
@@ -0,0 +1,15 @@
+package org.onap.so.client;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
+import org.springframework.web.client.RestTemplate;
+
+@Configuration
+public class RestTemplateConfig {
+
+	@Bean
+	public RestTemplate restTemplate() {
+		return new RestTemplate( new HttpComponentsClientHttpRequestFactory());
+	}
+}
diff --git a/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/client/RequestsDbClient.java b/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/client/RequestsDbClient.java
index 2a61a31..5eb2add 100644
--- a/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/client/RequestsDbClient.java
+++ b/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/client/RequestsDbClient.java
@@ -33,15 +33,19 @@
 import org.onap.so.db.request.beans.WatchdogDistributionStatus;
 import org.onap.so.db.request.beans.WatchdogServiceModVerIdLookup;
 import org.onap.so.db.request.data.controller.InstanceNameDuplicateCheckRequest;
+import org.onap.so.logging.jaxrs.filter.SpringClientFilter;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Primary;
 import org.springframework.core.ParameterizedTypeReference;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
 import org.springframework.http.HttpRequest;
+import org.springframework.http.client.BufferingClientHttpRequestFactory;
 import org.springframework.http.client.ClientHttpRequestExecution;
+import org.springframework.http.client.ClientHttpRequestFactory;
 import org.springframework.http.client.ClientHttpRequestInterceptor;
 import org.springframework.http.client.ClientHttpResponse;
 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
@@ -116,8 +120,8 @@
 
 	private String findBySoRequestIdOrderByGroupingIdDesc = "/requestProcessingData/search/findBySoRequestIdOrderByGroupingIdDesc/";
 
-	protected HttpHeaders headers;
 
+	@Autowired
 	protected RestTemplate restTemplate;
 	
 	@Autowired
@@ -135,26 +139,19 @@
 		operationalEnvDistributionStatusURI = endpoint + operationalEnvDistributionStatusURI;
 		findOneByOperationalEnvIdAndServiceModelVersionIdURI = endpoint + OPERATIONAL_ENV_SERVICE_MODEL_STATUS_SEARCH + findOneByOperationalEnvIdAndServiceModelVersionIdURI;
 		findAllByOperationalEnvIdAndRequestIdURI = endpoint + OPERATIONAL_ENV_SERVICE_MODEL_STATUS_SEARCH + findAllByOperationalEnvIdAndRequestIdURI;
-		headers = new HttpHeaders();
-		headers.set("Authorization", msoAdaptersAuth);
-		restTemplate = restTemplate();
 	}
 
 	public RequestsDbClient() {
-		ClientFactory clientFactory = Configuration.builder().setRestTemplateConfigurer(new RestTemplateConfigurer() {
+		ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory());
 
-			public void configure(RestTemplate restTemplate) {
+		ClientFactory clientFactory = Configuration.builder().setClientHttpRequestFactory(factory).setRestTemplateConfigurer(restTemplate -> {
+			restTemplate.getInterceptors().add((new SpringClientFilter()));
 
-				restTemplate.getInterceptors().add(new ClientHttpRequestInterceptor() {
+			restTemplate.getInterceptors().add((request, body, execution) -> {
 
-					public ClientHttpResponse intercept(HttpRequest request, byte[] body,
-							ClientHttpRequestExecution execution) throws IOException {
-
-						request.getHeaders().add("Authorization", msoAdaptersAuth);
-						return execution.execute(request, body);
-					}
-				});
-			}
+				request.getHeaders().add(HttpHeaders.AUTHORIZATION, msoAdaptersAuth);
+				return execution.execute(request, body);
+			});
 		}).build().buildClientFactory();
 		infraActiveRequestClient = clientFactory.create(InfraActiveRequests.class);
 		requestProcessingDataClient = clientFactory.create(RequestProcessingData.class);
@@ -164,6 +161,8 @@
 	
 	public List<InfraActiveRequests> getCloudOrchestrationFiltersFromInfraActive(Map<String, String> orchestrationMap){
 		URI uri = getUri(cloudOrchestrationFiltersFromInfraActive);
+		HttpHeaders headers = new HttpHeaders();
+		headers.set("Authorization", msoAdaptersAuth);
 		HttpEntity<Map> entity = new HttpEntity<>(orchestrationMap, headers);
 		try{
 			return restTemplate.exchange(uri, HttpMethod.POST, entity, new ParameterizedTypeReference<List<InfraActiveRequests>>() {}).getBody();
@@ -191,6 +190,8 @@
     }
 
 	public List<InfraActiveRequests> getOrchestrationFiltersFromInfraActive(Map<String, List<String>> orchestrationMap) {
+		HttpHeaders headers = new HttpHeaders();
+		headers.set("Authorization", msoAdaptersAuth);
 		URI uri = getUri(getOrchestrationFilterURI);
 		HttpEntity<Map<String, List<String>>> entity = new HttpEntity<>(orchestrationMap, headers);
 		return restTemplate.exchange(uri, HttpMethod.POST, entity, new ParameterizedTypeReference<List<InfraActiveRequests>>() {}).getBody();
@@ -201,6 +202,8 @@
 		return restTemplate.exchange(uri, HttpMethod.GET, HttpEntity.EMPTY, InfraActiveRequests.class).getBody();
 	}
 	public InfraActiveRequests checkInstanceNameDuplicate(HashMap<String, String> instanceIdMap, String instanceName, String requestScope) {
+		HttpHeaders headers = new HttpHeaders();
+		headers.set("Authorization", msoAdaptersAuth);
 		URI uri = getUri(checkInstanceNameDuplicate);
 		HttpEntity<InstanceNameDuplicateCheckRequest> entity = new HttpEntity<>(new InstanceNameDuplicateCheckRequest(instanceIdMap, instanceName, requestScope), headers);
 		try{
@@ -265,12 +268,16 @@
 	}
 
 	public void save(InfraActiveRequests infraActiveRequests) {
+		HttpHeaders headers = new HttpHeaders();
+		headers.set("Authorization", msoAdaptersAuth);
 		URI uri = getUri(infraActiveRequestURI);
 		HttpEntity<InfraActiveRequests> entity = new HttpEntity<>(infraActiveRequests, headers);
 		restTemplate.postForLocation(uri, entity);
 	}
 
 	public <T> void save(T object){
+		HttpHeaders headers = new HttpHeaders();
+		headers.set("Authorization", msoAdaptersAuth);
 		URI uri = getUri(endpoint+classURLMapper.getURI(object.getClass()));
 		HttpEntity<T> entity = new HttpEntity<>(object, headers);
 		restTemplate.postForLocation(uri, entity);
@@ -289,6 +296,8 @@
 	}
 
 	public void saveRequestProcessingData(RequestProcessingData requestProcessingData) {
+		HttpHeaders headers = new HttpHeaders();
+		headers.set("Authorization", msoAdaptersAuth);
 		URI uri = getUri(endpoint + requestProcessingDataURI);
 		HttpEntity<RequestProcessingData> entity = new HttpEntity<>(requestProcessingData, headers);
 		restTemplate.postForLocation(uri, entity);
@@ -330,10 +339,6 @@
 		return requestProcessingDataClient.getAll(uri);
 	}
 
-	public RestTemplate restTemplate() {
-		return new RestTemplate( new HttpComponentsClientHttpRequestFactory());
-	}
-
 	@Component
 	static class ClassURLMapper {
 		private static final Map <Class,String> classURLMap = new HashMap<>();
