diff --git a/adapters/mso-openstack-adapters/pom.xml b/adapters/mso-openstack-adapters/pom.xml
index 01c1df3..fb104fc 100644
--- a/adapters/mso-openstack-adapters/pom.xml
+++ b/adapters/mso-openstack-adapters/pom.xml
@@ -272,5 +272,10 @@
 			<groupId>org.flywaydb</groupId>
 			<artifactId>flyway-core</artifactId>
 		</dependency>
+		<dependency>
+			<groupId>org.onap.so</groupId>
+			<artifactId>cxf-logging</artifactId>
+			<version>${project.version}</version>
+		</dependency>
 	</dependencies>
 </project>
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/CXFConfiguration.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/CXFConfiguration.java
index 2b21381..996e2c2 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/CXFConfiguration.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/CXFConfiguration.java
@@ -86,13 +86,7 @@
 	private MsoVnfCloudifyAdapterImpl vnfCloudifyAdapterImpl;
 	@Autowired
 	private JettisonStyleMapperProvider jettisonStyleObjectMapper; 	
-	
-	@Autowired
-	private SOAPLoggingInInterceptor soapInInterceptor;
-	    
-	@Autowired
-	private SOAPLoggingOutInterceptor soapOutInterceptor;
-	
+
     @Bean(name=Bus.DEFAULT_BUS_ID)
     public SpringBus springBus() {      
         return new SpringBus();
@@ -114,9 +108,9 @@
         EndpointImpl endpoint = new EndpointImpl(springBus(), networkAdapterImpl);
         endpoint.publish("/NetworkAdapter");
         endpoint.setWsdlLocation("NetworkAdapter.wsdl");
-        endpoint.getInInterceptors().add(soapInInterceptor);
-        endpoint.getOutInterceptors().add(soapOutInterceptor);
-        endpoint.getOutFaultInterceptors().add(soapOutInterceptor);
+        endpoint.getInInterceptors().add(new SOAPLoggingInInterceptor());
+        endpoint.getOutInterceptors().add(new SOAPLoggingOutInterceptor());
+        endpoint.getOutFaultInterceptors().add(new SOAPLoggingOutInterceptor());
         return endpoint;
     }	
 	
@@ -125,9 +119,9 @@
         EndpointImpl endpoint = new EndpointImpl(springBus(), networkAdapterAsyncImpl);
         endpoint.publish("/NetworkAdapterAsync");
         endpoint.setWsdlLocation("NetworkAdapterAsync.wsdl");
-        endpoint.getInInterceptors().add(soapInInterceptor);
-        endpoint.getOutInterceptors().add(soapOutInterceptor);
-        endpoint.getOutFaultInterceptors().add(soapOutInterceptor);
+        endpoint.getInInterceptors().add(new SOAPLoggingInInterceptor());
+        endpoint.getOutInterceptors().add(new SOAPLoggingOutInterceptor());
+        endpoint.getOutFaultInterceptors().add(new SOAPLoggingOutInterceptor());
         return endpoint;
     }		
 	
@@ -139,9 +133,9 @@
         EndpointImpl endpoint = new EndpointImpl(springBus(), tenantAdapterImpl);
         endpoint.publish("/TenantAdapter");
         endpoint.setWsdlLocation("TenantAdapter.wsdl");
-        endpoint.getInInterceptors().add(soapInInterceptor);
-        endpoint.getOutInterceptors().add(soapOutInterceptor);
-        endpoint.getOutFaultInterceptors().add(soapOutInterceptor);
+        endpoint.getInInterceptors().add(new SOAPLoggingInInterceptor());
+        endpoint.getOutInterceptors().add(new SOAPLoggingOutInterceptor());
+        endpoint.getOutFaultInterceptors().add(new SOAPLoggingOutInterceptor());
         return endpoint;
     }
     
@@ -155,9 +149,9 @@
         EndpointImpl endpoint = new EndpointImpl(springBus(), vnfAdapterImpl);
         endpoint.publish("/VnfAdapter");
         endpoint.setWsdlLocation("VnfAdapter.wsdl");
-        endpoint.getInInterceptors().add(soapInInterceptor);
-        endpoint.getOutInterceptors().add(soapOutInterceptor);
-        endpoint.getOutFaultInterceptors().add(soapOutInterceptor);
+        endpoint.getInInterceptors().add(new SOAPLoggingInInterceptor());
+        endpoint.getOutInterceptors().add(new SOAPLoggingOutInterceptor());
+        endpoint.getOutFaultInterceptors().add(new SOAPLoggingOutInterceptor());
         return endpoint;
     }
     
@@ -166,9 +160,9 @@
         EndpointImpl endpoint = new EndpointImpl(springBus(), vnfAdapterAsyncImpl);
         endpoint.publish("/VnfAsyncAdapter");
         endpoint.setWsdlLocation("VnfAsyncAdapter.wsdl");
-        endpoint.getInInterceptors().add(soapInInterceptor);
-        endpoint.getOutInterceptors().add(soapOutInterceptor);
-        endpoint.getOutFaultInterceptors().add(soapOutInterceptor);
+        endpoint.getInInterceptors().add(new SOAPLoggingInInterceptor());
+        endpoint.getOutInterceptors().add(new SOAPLoggingOutInterceptor());
+        endpoint.getOutFaultInterceptors().add(new SOAPLoggingOutInterceptor());
         return endpoint;
     }
     
@@ -177,9 +171,9 @@
         EndpointImpl endpoint = new EndpointImpl(springBus(), vnfCloudifyAdapterImpl);
         endpoint.publish("/VnfCloudifyAdapterImpl");
         endpoint.setWsdlLocation("VnfCloudifyAdapterImpl.wsdl");
-        endpoint.getInInterceptors().add(soapInInterceptor);
-        endpoint.getOutInterceptors().add(soapOutInterceptor);
-        endpoint.getOutFaultInterceptors().add(soapOutInterceptor);
+        endpoint.getInInterceptors().add(new SOAPLoggingInInterceptor());
+        endpoint.getOutInterceptors().add(new SOAPLoggingOutInterceptor());
+        endpoint.getOutFaultInterceptors().add(new SOAPLoggingOutInterceptor());
         return endpoint;
     }
     
diff --git a/adapters/mso-requests-db-adapter/pom.xml b/adapters/mso-requests-db-adapter/pom.xml
index 934e2a5..955a4d8 100644
--- a/adapters/mso-requests-db-adapter/pom.xml
+++ b/adapters/mso-requests-db-adapter/pom.xml
@@ -72,11 +72,6 @@
 			<optional>true</optional>
 		</dependency>
 		<dependency>
-			<groupId>janino</groupId>
-			<artifactId>janino</artifactId>
-			<version>2.5.15</version>
-		</dependency>
-		<dependency>
 			<groupId>ch.vorburger.mariaDB4j</groupId>
 			<artifactId>mariaDB4j</artifactId>
 			<version>2.2.3</version>
@@ -110,6 +105,11 @@
 			<artifactId>micrometer-registry-prometheus</artifactId>
 			<version>1.0.5</version>
 		</dependency>
+		<dependency>
+			<groupId>org.onap.so</groupId>
+			<artifactId>cxf-logging</artifactId>
+			<version>${project.version}</version>
+		</dependency>
 	</dependencies>
 
 	<build>
diff --git a/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/application/CXFConfiguration.java b/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/application/CXFConfiguration.java
index 0404c10..23a769b 100644
--- a/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/application/CXFConfiguration.java
+++ b/adapters/mso-requests-db-adapter/src/main/java/org/onap/so/adapters/requestsdb/application/CXFConfiguration.java
@@ -45,12 +45,6 @@
 	@Autowired
 	private MsoRequestsDbAdapter requestDbAdapterImpl;
 	
-	@Autowired
-	private SOAPLoggingInInterceptor soapInInterceptor;
-	
-	@Autowired
-	private SOAPLoggingOutInterceptor soapOutInterceptor;
-	
 	@Bean
 	public ServletRegistrationBean cxfServlet() {
 	
@@ -65,9 +59,9 @@
 		logFeature.setPrettyLogging(true);
 		logFeature.initialize(bus);
 		endpoint.getFeatures().add(logFeature);
-		endpoint.getInInterceptors().add(soapInInterceptor);
-		endpoint.getOutInterceptors().add(soapOutInterceptor);
-		endpoint.getOutFaultInterceptors().add(soapOutInterceptor);
+		endpoint.getInInterceptors().add(new SOAPLoggingInInterceptor());
+		endpoint.getOutInterceptors().add(new SOAPLoggingOutInterceptor());
+		endpoint.getOutFaultInterceptors().add(new SOAPLoggingOutInterceptor());
 		return endpoint;
 	}
 
diff --git a/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/adapters/HealthCheckHandlerTest.java b/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/adapters/HealthCheckHandlerTest.java
index 159eb01..4e00ced 100644
--- a/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/adapters/HealthCheckHandlerTest.java
+++ b/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/adapters/HealthCheckHandlerTest.java
@@ -58,7 +58,7 @@
 	
 	@Test
 	public void testHealthcheck() throws JSONException {
-
+	    TestAppender.events.clear();
 		HttpEntity<String> entity = new HttpEntity<String>(null, headers);
 
 		ResponseEntity<String> response = restTemplate.exchange(
@@ -87,6 +87,7 @@
                 assertEquals("/manage/health",mdc.get(ONAPLogConstants.MDCs.SERVICE_NAME));
                 assertEquals("COMPLETED",mdc.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE));
             }
+        TestAppender.events.clear();
 	}
 	
 	private String createURLWithPort(String uri) {
diff --git a/adapters/mso-sdnc-adapter/pom.xml b/adapters/mso-sdnc-adapter/pom.xml
index 0337c26..7723ffa 100644
--- a/adapters/mso-sdnc-adapter/pom.xml
+++ b/adapters/mso-sdnc-adapter/pom.xml
@@ -150,11 +150,6 @@
 			<scope>test</scope>
 		</dependency>
 		<dependency>
-			<groupId>janino</groupId>
-			<artifactId>janino</artifactId>
-			<version>2.5.15</version>
-		</dependency>
-		<dependency>
 			<groupId>io.micrometer</groupId>
 			<artifactId>micrometer-spring-legacy</artifactId>
 			<version>1.0.5</version>
@@ -164,5 +159,10 @@
 			<artifactId>micrometer-registry-prometheus</artifactId>
 			<version>1.0.5</version>
 		</dependency>
+		<dependency>
+			<groupId>org.onap.so</groupId>
+			<artifactId>cxf-logging</artifactId>
+			<version>${project.version}</version>
+		</dependency>
 	</dependencies>
 </project>
\ No newline at end of file
diff --git a/adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/CXFConfiguration.java b/adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/CXFConfiguration.java
index f6fd8d5..766a48a 100644
--- a/adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/CXFConfiguration.java
+++ b/adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/CXFConfiguration.java
@@ -64,15 +64,10 @@
 	
 	@Autowired 
 	private SNIROResponse sniroResponse;
-
-	@Autowired
-	private SOAPLoggingInInterceptor soapInInterceptor;
-	    
-	@Autowired
-	private SOAPLoggingOutInterceptor soapOutInterceptor;
     
 	@Autowired
 	private ObjectMapper mapper;
+	
     @Bean
     public Server rsServer() {
         endpoint = new JAXRSServerFactoryBean();
@@ -93,9 +88,9 @@
     @Bean
     public Endpoint sndcAdapter() {
         EndpointImpl wsdlEndpoint = new EndpointImpl(bus, sdncAdapterPortImpl);
-        wsdlEndpoint.getInInterceptors().add(soapInInterceptor);
-        wsdlEndpoint.getOutInterceptors().add(soapOutInterceptor);
-        wsdlEndpoint.getOutFaultInterceptors().add(soapOutInterceptor);
+        wsdlEndpoint.getInInterceptors().add(new SOAPLoggingInInterceptor());
+        wsdlEndpoint.getOutInterceptors().add(new SOAPLoggingOutInterceptor());
+        wsdlEndpoint.getOutFaultInterceptors().add(new SOAPLoggingOutInterceptor());
         wsdlEndpoint.publish("/SDNCAdapter");
         return wsdlEndpoint;
     }
diff --git a/bpmn/mso-infrastructure-bpmn/pom.xml b/bpmn/mso-infrastructure-bpmn/pom.xml
index 151ba2c..77e2fa2 100644
--- a/bpmn/mso-infrastructure-bpmn/pom.xml
+++ b/bpmn/mso-infrastructure-bpmn/pom.xml
@@ -201,5 +201,10 @@
 			<artifactId>so-bpmn-tasks</artifactId>
 			<version>${project.version}</version>
 		</dependency>
+		<dependency>
+			<groupId>org.onap.so</groupId>
+			<artifactId>cxf-logging</artifactId>
+			<version>${project.version}</version>
+		</dependency>
 	</dependencies>
 </project>
diff --git a/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/infrastructure/CXFConfiguration.java b/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/infrastructure/CXFConfiguration.java
index 7721588..62be133 100644
--- a/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/infrastructure/CXFConfiguration.java
+++ b/bpmn/mso-infrastructure-bpmn/src/main/java/org/onap/so/bpmn/infrastructure/CXFConfiguration.java
@@ -78,12 +78,6 @@
 	@Autowired
 	private VnfAdapterNotify vnfAdapterNotifyServiceImpl;
 	
-	@Autowired
-	private SOAPLoggingInInterceptor soapInInterceptor;
-
-	@Autowired
-	private SOAPLoggingOutInterceptor soapOutInterceptor;
-	
 	@Bean
     public ServletRegistrationBean cxfServlet() {
         return new ServletRegistrationBean(new CXFServlet(), "/mso/*");
@@ -93,9 +87,9 @@
     public Endpoint vnfAdapterCallback() {
         EndpointImpl endpoint = new EndpointImpl(bus, vnfAdapterNotifyServiceImpl);
         endpoint.publish("/VNFAdaptercallback");
-        endpoint.getInInterceptors().add(soapInInterceptor);
-        endpoint.getOutInterceptors().add(soapOutInterceptor);
-        endpoint.getOutFaultInterceptors().add(soapOutInterceptor);
+        endpoint.getInInterceptors().add(new SOAPLoggingInInterceptor());
+        endpoint.getOutInterceptors().add(new SOAPLoggingOutInterceptor());
+        endpoint.getOutFaultInterceptors().add(new SOAPLoggingOutInterceptor());
         return endpoint;
     }
 	
@@ -103,9 +97,9 @@
     public Endpoint sndcAdapterCallback() {
         EndpointImpl endpoint = new EndpointImpl(bus, sdncAdapterCallbackServiceImpl);
         endpoint.publish("/SDNCAdapterCallbackService");
-        endpoint.getInInterceptors().add(soapInInterceptor);
-        endpoint.getOutInterceptors().add(soapOutInterceptor);
-        endpoint.getOutFaultInterceptors().add(soapOutInterceptor);
+        endpoint.getInInterceptors().add(new SOAPLoggingInInterceptor());
+        endpoint.getOutInterceptors().add(new SOAPLoggingOutInterceptor());
+        endpoint.getOutFaultInterceptors().add(new SOAPLoggingOutInterceptor());
         return endpoint;
     }
 		
diff --git a/common/pom.xml b/common/pom.xml
index 490f2c7..d3f460e 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -102,16 +102,7 @@
 			<groupId>org.apache.cxf</groupId>
 			<artifactId>cxf-rt-rs-client</artifactId>
 			<version>${cxf.version}</version>
-		</dependency>
-		<dependency>
-    		<groupId>org.apache.cxf</groupId>
-    		<artifactId>cxf-rt-bindings-soap</artifactId>
-  			<version>${cxf.version}</version>
-		</dependency>
-		<dependency>
-    		<groupId>org.apache.cxf</groupId>
-    		<artifactId>cxf-rt-transports-http</artifactId>
-    		<version>${cxf.version}</version>
+			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>com.shazam</groupId>
@@ -148,11 +139,6 @@
 			<artifactId>slf4j-api</artifactId>
 		</dependency>
 		<dependency>
-			<groupId>janino</groupId>
-			<artifactId>janino</artifactId>
-			<version>2.5.15</version>
-		</dependency>
-		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-configuration-processor</artifactId>
 			<optional>true</optional>
diff --git a/common/src/main/java/org/onap/so/client/RestClient.java b/common/src/main/java/org/onap/so/client/RestClient.java
index cb8e1f0..007c666 100644
--- a/common/src/main/java/org/onap/so/client/RestClient.java
+++ b/common/src/main/java/org/onap/so/client/RestClient.java
@@ -36,7 +36,6 @@
 import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Predicate;
-
 import javax.ws.rs.client.Client;
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.client.Invocation.Builder;
@@ -46,29 +45,28 @@
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.core.UriBuilder;
-
 import org.onap.so.client.policy.CommonObjectMapperProvider;
-import org.onap.so.client.policy.LoggingFilter;
-import org.onap.so.logger.MsoLogger;
 import org.onap.so.logging.jaxrs.filter.JaxRsClientLogging;
+import org.onap.so.logging.jaxrs.filter.PayloadLoggingFilter;
 import org.onap.so.utils.CryptoUtils;
 import org.onap.so.utils.TargetEntity;
-import org.slf4j.MDC;
-
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
-
 import net.jodah.failsafe.Failsafe;
 import net.jodah.failsafe.RetryPolicy;
 
 
 public abstract class RestClient {
-	public static final String ECOMP_COMPONENT_NAME = "MSO";
+	private static final String APPLICATION_MERGE_PATCH_JSON = "application/merge-patch+json";
+
+    public static final String ECOMP_COMPONENT_NAME = "MSO";
 	
 	private static final int MAX_PAYLOAD_SIZE = 1024 * 1024;
 	private WebTarget webTarget;
 
 	protected final Map<String, String> headerMap;
-	protected final MsoLogger msoLogger;
+	protected final Logger logger = LoggerFactory.getLogger(RestClient.class);
 	protected URL host;
 	protected Optional<URI> path;
 	protected String accept;
@@ -79,11 +77,6 @@
 
     protected RestClient(RestProperties props, Optional<URI> path) {
 		
-		msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.GENERAL, RestClient.class);
-		this.requestId = MDC.get(MsoLogger.REQUEST_ID);
-		if (requestId == null) {
-			requestId = "";
-		}
 		headerMap = new HashMap<>();
 		try {
 			host = props.getEndpoint();
@@ -99,24 +92,14 @@
 		this(props, path);
 		this.accept = accept;
 		this.contentType = contentType;
-		this.requestId = MDC.get(MsoLogger.REQUEST_ID);
-		if (requestId == null) {
-			requestId = "";
-		}
 		this.props = props;
 	}
 
 	protected RestClient(URL host, String contentType) {
 		headerMap = new HashMap<>();
-	
-		msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.GENERAL, RestClient.class);
 		this.path = Optional.empty();
 		this.host = host;
 		this.contentType = contentType;
-		this.requestId = MDC.get(MsoLogger.REQUEST_ID);
-		if (requestId == null) {
-			requestId = "";
-		}
 		this.props = new DefaultProperties(host);
 	}
 
@@ -143,15 +126,13 @@
 
 	    if (webTarget == null) {
 	        initializeClient(getClient());
-        }
-		Builder builder = webTarget.request();
-		initializeHeaderMap(headerMap);
-
-		headerMap.put("X-ECOMP-RequestID", requestId);
-		for (Entry<String, String> entry : headerMap.entrySet()) {
-			builder.header(entry.getKey(), entry.getValue());
-		}
-		return builder;
+	    }
+	    Builder builder = webTarget.request();
+	    initializeHeaderMap(headerMap);
+	    for (Entry<String, String> entry : headerMap.entrySet()) {
+	        builder.header(entry.getKey(), entry.getValue());
+	    }
+	    return builder;
 	}
 	
 	protected WebTarget getWebTarget() {
@@ -179,7 +160,7 @@
 			String authHeaderValue = "Basic " + Base64.getEncoder().encodeToString(decryptedAuth);
 			headerMap.put("Authorization", authHeaderValue);
 		} catch (GeneralSecurityException e) {
-			msoLogger.error(e.getMessage(), e);
+			logger.error(e.getMessage(), e);
 		}
 	}
 
@@ -192,7 +173,7 @@
 	}
 
 	protected String getMergeContentType() {
-		return "application/merge-patch+json";
+		return APPLICATION_MERGE_PATCH_JSON;
 	}
 
 	protected Client getClient() {
@@ -203,11 +184,11 @@
 
 	protected void initializeClient(Client client) {
 		if (this.enableLogging()) {
-			client.register(new LoggingFilter(this.getMaxPayloadSize()));
+			client.register(new PayloadLoggingFilter(this.getMaxPayloadSize()));
 		}
 		CommonObjectMapperProvider provider = this.getCommonObjectMapperProvider();
 		client.register(new JacksonJsonProvider(provider.getMapper()));
-
+		
         jaxRsClientLogging = new JaxRsClientLogging();
         jaxRsClientLogging.setTargetService(getTargetEntity());
         client.register(jaxRsClientLogging);
diff --git a/common/src/main/java/org/onap/so/client/RestClientSSL.java b/common/src/main/java/org/onap/so/client/RestClientSSL.java
index 8eaeee9..cb2839a 100644
--- a/common/src/main/java/org/onap/so/client/RestClientSSL.java
+++ b/common/src/main/java/org/onap/so/client/RestClientSSL.java
@@ -32,7 +32,8 @@
 
 public abstract class RestClientSSL extends RestClient {
 	
-	public static final String SSL_KEY_STORE_KEY = "javax.net.ssl.keyStore";
+	private static final String TRUE = "true";
+    public static final String SSL_KEY_STORE_KEY = "javax.net.ssl.keyStore";
 	public static final String SSL_KEY_STORE_PASSWORD_KEY = "javax.net.ssl.keyStorePassword";
 	public static final String MSO_LOAD_SSL_CLIENT_KEYSTORE_KEY = "mso.load.ssl.client.keystore";
 	
@@ -51,19 +52,18 @@
 		Client client = null;
 		try {
 			String loadSSLKeyStore = System.getProperty(RestClientSSL.MSO_LOAD_SSL_CLIENT_KEYSTORE_KEY);
-			if(loadSSLKeyStore != null && loadSSLKeyStore.equalsIgnoreCase("true")) {
+			if(loadSSLKeyStore != null && loadSSLKeyStore.equalsIgnoreCase(TRUE)) {
 				KeyStore ks = getKeyStore();
 				if(ks != null) {
 					client = ClientBuilder.newBuilder().keyStore(ks, System.getProperty(RestClientSSL.SSL_KEY_STORE_PASSWORD_KEY)).build();
-					this.msoLogger.debug("RestClientSSL not using default SSL context - setting keystore here.");
+					logger.debug("RestClientSSL not using default SSL context - setting keystore here.");
 					return client;
 				}
 			}
 			//Use default SSL context 
 			client = ClientBuilder.newBuilder().sslContext(SSLContext.getDefault()).build();
-			this.msoLogger.debug("RestClientSSL using default SSL context!");
+			logger.info("RestClientSSL using default SSL context!");
 		} catch (NoSuchAlgorithmException e) {
-			//this.logger.error(MessageEnum.APIH_GENERAL_EXCEPTION, "AAI", "Client init", MsoLogger.ErrorCode.UnknownError, "could not create SSL client", e);
 			throw new RuntimeException(e);
 		}
 		return client;
diff --git a/common/src/main/java/org/onap/so/client/adapter/rest/AdapterRestClient.java b/common/src/main/java/org/onap/so/client/adapter/rest/AdapterRestClient.java
index 2329a5a..9d72fdf 100644
--- a/common/src/main/java/org/onap/so/client/adapter/rest/AdapterRestClient.java
+++ b/common/src/main/java/org/onap/so/client/adapter/rest/AdapterRestClient.java
@@ -72,7 +72,7 @@
 			encodedString = "Basic " + encodedString;
 			return encodedString;
 		} catch (GeneralSecurityException e) {
-			this.msoLogger.debug(e.getMessage());
+			logger.error(e.getMessage(),e);
 			return null;
 		}
 	}
diff --git a/common/src/main/java/org/onap/so/logging/jaxrs/filter/JaxRsClientLogging.java b/common/src/main/java/org/onap/so/logging/jaxrs/filter/JaxRsClientLogging.java
index 2cb375b..49dc71e 100644
--- a/common/src/main/java/org/onap/so/logging/jaxrs/filter/JaxRsClientLogging.java
+++ b/common/src/main/java/org/onap/so/logging/jaxrs/filter/JaxRsClientLogging.java
@@ -22,104 +22,126 @@
 
 
 import org.apache.commons.io.IOUtils;
-import org.onap.so.logger.MsoLogger;
+import org.onap.logging.ref.slf4j.ONAPLogConstants;
 import org.onap.so.utils.TargetEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
+import org.slf4j.MarkerFactory;
 import org.springframework.stereotype.Component;
-
+import javax.annotation.Priority;
 import javax.ws.rs.client.ClientRequestContext;
 import javax.ws.rs.client.ClientRequestFilter;
 import javax.ws.rs.client.ClientResponseContext;
 import javax.ws.rs.client.ClientResponseFilter;
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerResponseContext;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Response;
-
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Providers;
 import java.io.*;
-
-import java.time.Instant;
-import java.time.ZoneId;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.Locale;
+import java.util.Map;
 import java.util.UUID;
 
 @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
 @Component
+@Priority(0)
 public class JaxRsClientLogging implements ClientRequestFilter,ClientResponseFilter {
-	
-	private static MsoLogger logger = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA,JaxRsClientLogging.class);
+    
+    @Context 
+    private Providers providers;
 
-	private TargetEntity targetEntity;
+    private static final String TRACE = "trace-#";
+    private static final String SO = "SO";
+    private static Logger logger = LoggerFactory.getLogger(JaxRsClientLogging.class);
 
-	public void setTargetService(TargetEntity targetEntity){
-	    this.targetEntity = targetEntity;
+    public void setTargetService(TargetEntity targetEntity){
+        MDC.put("TargetEntity", targetEntity.toString());
     }
 
-	@Override
-	public void filter(ClientRequestContext clientRequest) {
+    @Override
+    public void filter(ClientRequestContext clientRequest) {
         try{
-            MultivaluedMap<String, Object> headers = clientRequest.getHeaders();
-            
-            
-            Instant instant = Instant.now();
-            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX" )
-                .withLocale( Locale.US )
-                .withZone( ZoneId.systemDefault() );
-
-            String requestId = MDC.get(MsoLogger.REQUEST_ID);
-            if(requestId == null || requestId.isEmpty()){
-                requestId = UUID.randomUUID().toString();
-                logger.warnSimple(clientRequest.getUri().getPath(),"Could not Find Request ID Generating New One");
-            }
-
-			MDC.put(MsoLogger.METRIC_BEGIN_TIME, formatter.format(instant));
-			MDC.put(MsoLogger.METRIC_START_TIME, String.valueOf(System.currentTimeMillis()));
-            MDC.put(MsoLogger.REQUEST_ID,requestId);	
-            MDC.put(MsoLogger.TARGETSERVICENAME, clientRequest.getUri().toString());
+            setupMDC(clientRequest);
+            setupHeaders(clientRequest);
+            logger.info(ONAPLogConstants.Markers.INVOKE, "Invoke");
         } catch (Exception e) {
-			logger.warnSimple("Error in incoming JAX-RS Inteceptor", e);
-		}
-	}	
+            logger.warn("Error in incoming JAX-RS Inteceptor", e);
+        }
+    }
+
+    private void setupHeaders(ClientRequestContext clientRequest) {
+        MultivaluedMap<String, Object> headers = clientRequest.getHeaders();
+        headers.add(ONAPLogConstants.Headers.REQUEST_ID, extractRequestID(clientRequest));
+        headers.add(ONAPLogConstants.Headers.INVOCATION_ID, MDC.get(ONAPLogConstants.MDCs.INVOCATION_ID));
+        headers.add(ONAPLogConstants.Headers.PARTNER_NAME, SO);
+    }
+
+    private void setupMDC(ClientRequestContext clientRequest) {
+        MDC.put(ONAPLogConstants.MDCs.INVOKE_TIMESTAMP, ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT));
+        MDC.put(ONAPLogConstants.MDCs.TARGET_SERVICE_NAME, clientRequest.getUri().toString());
+        MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, ONAPLogConstants.ResponseStatus.INPROGRESS.toString());
+        setInvocationId();
+        MDC.put("TargetEntity",MDC.get("TargetEntity"));
+    }
+
+    private String extractRequestID(ClientRequestContext clientRequest) {
+        String requestId = MDC.get(ONAPLogConstants.MDCs.REQUEST_ID);
+        if(requestId == null || requestId.isEmpty() || requestId.equals(TRACE)){
+            requestId = UUID.randomUUID().toString();
+            logger.warn("Could not Find Request ID Generating New One: {}",clientRequest.getUri().getPath());
+        }
+        return requestId;
+    }	
+
+    private void setInvocationId() {
+        String invocationId = MDC.get(ONAPLogConstants.MDCs.INVOCATION_ID);
+        if(invocationId == null || invocationId.isEmpty())
+            invocationId =UUID.randomUUID().toString();
+        MDC.put(ONAPLogConstants.MDCs.INVOCATION_ID, invocationId);
+    }
 
 
-	@Override
-	public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) {
+    @Override
+    public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) {
 
         try {
-			Instant instant = Instant.now();
-			DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX" )
-			        .withLocale( Locale.US )
-			        .withZone( ZoneId.systemDefault() );
-			String startTime= MDC.get(MsoLogger.METRIC_START_TIME);
+            String statusCode;
+            if(Response.Status.Family.familyOf(responseContext.getStatus()).equals(Response.Status.Family.SUCCESSFUL)){		
+                statusCode=ONAPLogConstants.ResponseStatus.COMPLETED.toString();
+            }else{							
+                statusCode=ONAPLogConstants.ResponseStatus.ERROR.toString();				
+            }
+            MDC.put(ONAPLogConstants.MDCs.RESPONSE_CODE, String.valueOf(responseContext.getStatus()));
+            MDC.put(ONAPLogConstants.MDCs.RESPONSE_DESCRIPTION,getStringFromInputStream(responseContext));
+            MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, statusCode);
+            logger.info(MarkerFactory.getMarker("INVOKE_RETURN"), "InvokeReturn");
+            clearClientMDCs();
+        } catch ( Exception e) {
+            logger.warn("Error in outgoing JAX-RS Inteceptor", e);
+        }
+    }
 
-			long elapsedTime = System.currentTimeMillis()-Long.parseLong(startTime);
-			String statusCode;
-			if(Response.Status.Family.familyOf(responseContext.getStatus()).equals(Response.Status.Family.SUCCESSFUL)){		
-			    statusCode=MsoLogger.COMPLETE;
-			}else{							
-				statusCode=MsoLogger.StatusCode.ERROR.toString();				
-			}
-			MultivaluedMap<String, String> headers = responseContext.getHeaders();
-
-			String partnerName =  headers.getFirst(MsoLogger.HEADER_FROM_APP_ID );
-			if(partnerName == null || partnerName.isEmpty())
-				partnerName="UNKNOWN";
-			MDC.put(MsoLogger.RESPONSEDESC,getStringFromInputStream(responseContext));
-			MDC.put(MsoLogger.STATUSCODE, statusCode);
-			MDC.put(MsoLogger.RESPONSECODE,String.valueOf(responseContext.getStatus()));
-			MDC.put(MsoLogger.METRIC_TIMER, String.valueOf(elapsedTime));
-			MDC.put(MsoLogger.METRIC_END_TIME,formatter.format(instant));
-			MDC.put(MsoLogger.PARTNERNAME,partnerName);	
-            MDC.put(MsoLogger.TARGETENTITY, targetEntity.toString());
-			logger.recordMetricEvent();			
-		} catch ( Exception e) {
-			logger.warnSimple("Error in outgoing JAX-RS Inteceptor", e);
-		}
-	}
+    private void clearClientMDCs() {
+        MDC.remove(ONAPLogConstants.MDCs.INVOCATION_ID);
+        MDC.remove(ONAPLogConstants.MDCs.RESPONSE_DESCRIPTION);
+        MDC.remove(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE);
+        MDC.remove(ONAPLogConstants.MDCs.RESPONSE_DESCRIPTION);
+        MDC.remove(ONAPLogConstants.MDCs.RESPONSE_CODE);
+    }
 
     private static String getStringFromInputStream(ClientResponseContext clientResponseContext) {
 
-	    InputStream is = clientResponseContext.getEntityStream();
-	    ByteArrayOutputStream boas = new ByteArrayOutputStream();
+        InputStream is = clientResponseContext.getEntityStream();
+        ByteArrayOutputStream boas = new ByteArrayOutputStream();
 
         try {
             IOUtils.copy(is,boas);
@@ -128,8 +150,9 @@
             return boas.toString();
 
         } catch (IOException e) {
-            logger.warnSimple("Failed to read response body", e);
+            logger.warn("Failed to read response body", e);
         }
         return "Unable to read input stream";
     }
+
 }
diff --git a/common/src/main/java/org/onap/so/client/policy/LoggingFilter.java b/common/src/main/java/org/onap/so/logging/jaxrs/filter/PayloadLoggingFilter.java
similarity index 92%
rename from common/src/main/java/org/onap/so/client/policy/LoggingFilter.java
rename to common/src/main/java/org/onap/so/logging/jaxrs/filter/PayloadLoggingFilter.java
index 83cf08f..29264f4 100644
--- a/common/src/main/java/org/onap/so/client/policy/LoggingFilter.java
+++ b/common/src/main/java/org/onap/so/logging/jaxrs/filter/PayloadLoggingFilter.java
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.so.client.policy;
+package org.onap.so.logging.jaxrs.filter;
 
 import java.io.BufferedInputStream;
 import java.io.ByteArrayOutputStream;
@@ -40,22 +40,24 @@
 import javax.ws.rs.ext.WriterInterceptorContext;
 
 import org.onap.so.logger.MsoLogger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 @Provider
-@Priority(0)
-public class LoggingFilter implements ClientRequestFilter, ClientResponseFilter, WriterInterceptor {
+@Priority(1)
+public class PayloadLoggingFilter implements ClientRequestFilter, ClientResponseFilter, WriterInterceptor {
 
-	private static final MsoLogger logger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, LoggingFilter.class);
+	private static final Logger logger = LoggerFactory.getLogger(PayloadLoggingFilter.class);
 	private static final String ENTITY_STREAM_PROPERTY = "LoggingFilter.entityStream";
 	private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
 	private final int maxEntitySize;
 
-	public LoggingFilter() {
+	public PayloadLoggingFilter() {
 		maxEntitySize = 1024 * 1024;
 	}
 
-	public LoggingFilter(int maxPayloadSize) {
+	public PayloadLoggingFilter(int maxPayloadSize) {
 		this.maxEntitySize = Integer.min(maxPayloadSize, 1024 * 1024);
 	}
 
diff --git a/common/src/main/java/org/onap/so/utils/TargetEntity.java b/common/src/main/java/org/onap/so/utils/TargetEntity.java
index ad76e56..84dae95 100644
--- a/common/src/main/java/org/onap/so/utils/TargetEntity.java
+++ b/common/src/main/java/org/onap/so/utils/TargetEntity.java
@@ -20,13 +20,22 @@
 
 package org.onap.so.utils;
 
+import java.util.EnumSet;
 
 public enum TargetEntity {
     OPENSTACK_ADAPTER, BPMN, GRM ,AAI, DMAAP, POLICY, CATALOG_DB, REQUEST_DB, VNF_ADAPTER, SDNC_ADAPTER, NARAD;
 
-    private static final String PREFIX = "MSO";
+    private static final String PREFIX = "SO";
+    
+    public static EnumSet<TargetEntity> getSOInternalComponents() {
+        return EnumSet.of(OPENSTACK_ADAPTER, BPMN,CATALOG_DB,REQUEST_DB,VNF_ADAPTER,SDNC_ADAPTER);
+    }
+    
     @Override
     public String toString(){
-        return TargetEntity.PREFIX + "." + this.name();
+        if(getSOInternalComponents().contains(this))
+            return TargetEntity.PREFIX + "." + this.name();
+        else
+            return this.name();
     }
-}
+}
\ No newline at end of file
diff --git a/common/src/test/java/org/onap/so/adapter_utils/tests/MsoLoggerTest.java b/common/src/test/java/org/onap/so/adapter_utils/tests/MsoLoggerTest.java
deleted file mode 100644
index 29ac91c..0000000
--- a/common/src/test/java/org/onap/so/adapter_utils/tests/MsoLoggerTest.java
+++ /dev/null
@@ -1,331 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.so.adapter_utils.tests;
-
-import org.onap.so.entity.MsoRequest;
-import org.onap.so.logger.MessageEnum;
-import org.onap.so.logger.MsoLogger;
-import org.onap.so.logger.MsoLogger.ErrorCode;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.slf4j.MDC;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.nio.charset.Charset;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.List;
-
-/**
- * This class implements all test methods of the MsoLogger features.
- *
- *
- */
-public class MsoLoggerTest {
-
-	static MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.GENERAL, MsoLoggerTest.class);
-
-	/**
-	 * This method is called before any test occurs. It creates a fake tree from
-	 * scratch
-	 */
-	@BeforeClass
-	public static final void prepare() {
-
-	}
-
-	@Before
-	public final void cleanErrorLogFile() throws FileNotFoundException {
-		URL url = this.getClass().getClassLoader().getResource("logback-test.xml");
-		String logFile = url.getFile().substring(0, url.getFile().indexOf("test-classes"))
-				+ "/MSO/Test/errorjboss.server.name_IS_UNDEFINED.log";
-		PrintWriter asdcConfigFileWriter = new PrintWriter(logFile);
-		asdcConfigFileWriter.print("");
-		asdcConfigFileWriter.flush();
-		asdcConfigFileWriter.close();
-	}
-
-	@Before
-	public final void cleanMetricLogFile() throws FileNotFoundException {
-		URL url = this.getClass().getClassLoader().getResource("logback-test.xml");
-		String logFile = url.getFile().substring(0, url.getFile().indexOf("test-classes"))
-				+ "/MSO/Test/metricsjboss.server.name_IS_UNDEFINED.log";
-		PrintWriter asdcConfigFileWriter = new PrintWriter(logFile);
-		asdcConfigFileWriter.print("");
-		asdcConfigFileWriter.flush();
-		asdcConfigFileWriter.close();
-	}
-
-	@Before
-	public final void cleanAuditLogFile() throws FileNotFoundException {
-		URL url = this.getClass().getClassLoader().getResource("logback-test.xml");
-		String logFile = url.getFile().substring(0, url.getFile().indexOf("test-classes"))
-				+ "/MSO/Test/auditjbo.server.name_IS_UNDEFINED.log";
-		PrintWriter asdcConfigFileWriter = new PrintWriter(logFile);
-		asdcConfigFileWriter.print("");
-		asdcConfigFileWriter.flush();
-		asdcConfigFileWriter.close();
-	}
-
-	/**
-	 * This method implements a test of getSeverifyLevel method.
-	 */
-	@Test
-	public final void testGetSeverityLevel() {
-
-		try {
-			String levelInfo = (String) invokePriveMethod("getSeverityLevel", "INFO");
-			Assert.assertEquals(levelInfo, "0");
-
-			String levelWarn = (String) invokePriveMethod("getSeverityLevel", "WARN");
-			Assert.assertEquals(levelWarn, "1");
-
-			String levelERROR = (String) invokePriveMethod("getSeverityLevel", "ERROR");
-			Assert.assertEquals(levelERROR, "2");
-
-			String levelDEBUG = (String) invokePriveMethod("getSeverityLevel", "DEBUG");
-			Assert.assertEquals(levelDEBUG, "0");
-
-			String levelFATAL = (String) invokePriveMethod("getSeverityLevel", "FATAL");
-			Assert.assertEquals(levelFATAL, "3");
-		} catch (Exception e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * This method implements a test of getFinalServiceName method.
-	 */
-	@Test
-	public final void testGetFinalServiceName() {
-		try {
-			String serviceName1 = (String) invokePriveMethod("getFinalServiceName", "testServiceName1");
-			Assert.assertEquals(serviceName1, "testServiceName1");
-
-			MsoLogger.setServiceName("testServiceName2");
-			String serviceName2 = (String) invokePriveMethod("getFinalServiceName", "testServiceName1");
-			Assert.assertEquals(serviceName2, "testServiceName1");
-
-			String msgNull = null;
-			String serviceName3 = (String) invokePriveMethod("getFinalServiceName", msgNull);
-			Assert.assertEquals(serviceName3, "testServiceName2");
-
-			MsoLogger.resetServiceName();
-			String serviceName4 = (String) invokePriveMethod("getFinalServiceName", msgNull);
-			Assert.assertEquals(serviceName4, "invoke0");
-		} catch (Exception e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-	}
-
-	@Test
-	public final void testPrepareMsg() {
-		try {
-			String msgNull = null;
-			MDC.clear();
-			invokePrepareMsg("INFO", null, null);
-
-			Assert.assertTrue(MDC.get(MsoLogger.REQUEST_ID).equals("trace-#")
-					&& MDC.get(MsoLogger.SERVICE_INSTANCE_ID).equals("trace-#")
-					&& MDC.get(MsoLogger.SERVICE_NAME).equals("invoke0") && MDC.get(MsoLogger.TIMER) == null
-					&& MDC.get(MsoLogger.ALERT_SEVERITY).equals("0"));
-
-			MsoLogger.setLoggerParameters("testRemoteIp", "testUser");
-			MsoLogger.setLogContext("testReqId", "testSvcId");
-			invokePrepareMsg("ERROR", "testServiceName3", null);
-			Assert.assertTrue(MDC.get(MsoLogger.REQUEST_ID).equals("testReqId")
-					&& MDC.get(MsoLogger.SERVICE_INSTANCE_ID).equals("testSvcId")
-					&& MDC.get(MsoLogger.SERVICE_NAME).equals("testServiceName3") && MDC.get(MsoLogger.TIMER) == null
-					&& MDC.get(MsoLogger.ALERT_SEVERITY).equals("2"));
-
-			MsoLogger.setServiceName("testServiceName2");
-			invokePrepareMsg("WARN", msgNull, msgNull);
-			Assert.assertTrue(MDC.get(MsoLogger.REQUEST_ID).equals("testReqId")
-					&& MDC.get(MsoLogger.SERVICE_INSTANCE_ID).equals("testSvcId")
-					&& MDC.get(MsoLogger.SERVICE_NAME).equals("testServiceName2") && MDC.get(MsoLogger.TIMER) == null
-					&& MDC.get(MsoLogger.ALERT_SEVERITY).equals("1"));
-
-			MDC.clear();
-			MsoRequest msoRequest = new MsoRequest();
-			msoRequest.setRequestId("reqId2");
-			msoRequest.setServiceInstanceId("servId2");
-			MsoLogger.setLogContext(msoRequest);
-			invokePrepareMsg("FATAL", null, "123");
-			Assert.assertTrue(MDC.get(MsoLogger.REQUEST_ID).equals("reqId2")
-					&& MDC.get(MsoLogger.SERVICE_INSTANCE_ID).equals("servId2")
-					&& MDC.get(MsoLogger.TIMER).equals("123") && MDC.get(MsoLogger.ALERT_SEVERITY).equals("3"));
-
-		} catch (Exception e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * This method implements a test of log methods
-	 */
-	@Test
-	@Ignore
-	public final void testLogMethods() {
-		try {
-			MDC.clear();
-			MsoLogger.setLogContext("reqId2", "servId2");
-			MsoLogger.setServiceName("MSO.testServiceName");
-			msoLogger.info(MessageEnum.LOGGER_UPDATE_SUC, "testLogger", "INFO", "DEBUG", "target entity",
-					"target service");
-			msoLogger.warn(MessageEnum.GENERAL_WARNING, "warning test", "", "", MsoLogger.ErrorCode.UnknownError,
-					"warning test");
-			msoLogger.error(MessageEnum.GENERAL_EXCEPTION, "target entity", "target service",
-					MsoLogger.ErrorCode.UnknownError, "error test");
-
-			// Fetch from the error log
-			URL url = this.getClass().getClassLoader().getResource("logback-test.xml");
-			String logFile = url.getFile().substring(0, url.getFile().indexOf("test-classes"))
-					+ "/MSO/Test/errorjboss.server.name_IS_UNDEFINED.log";
-
-			Path filePath = new File(logFile).toPath();
-			Charset charset = Charset.defaultCharset();
-			List<String> stringList = Files.readAllLines(filePath, charset);
-			String[] stringArray = stringList.toArray(new String[] {});
-			int size = stringArray.length;
-
-			Assert.assertTrue(stringArray[size - 3]
-					.contains("|reqId2|main|MSO.testServiceName||target entity|target service|INFO|null||")
-					&& stringArray[size - 3].contains(
-							"||MSO-GENERAL-5408I Successfully update Logger: testLogger from level INFO to level DEBUG"));
-			Assert.assertTrue(stringArray[size - 2]
-					.contains("|reqId2|main|MSO.testServiceName||||WARN|UnknownError|warning test|")
-					&& stringArray[size - 2].contains("|MSO-GENERAL-5401W WARNING: warning test"));
-			Assert.assertTrue(stringArray[size - 1].contains(
-					"|reqId2|main|MSO.testServiceName||target entity|target service|ERROR|UnknownError|error test|")
-					&& stringArray[size - 1].contains("|MSO-GENERAL-9401E Exception encountered"));
-
-		} catch (Exception e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * This method implements a test of recordMetricEvent method.
-	 * 
-	 * @throws IOException
-	 */
-	@Test
-	@Ignore
-	public final void testRecordMetricEvent() throws IOException {
-		MDC.clear();
-		MsoLogger.setLogContext("reqId", "servId");
-		msoLogger.recordMetricEvent(123456789L, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful",
-				"VNF", "createVNF", null);
-		MDC.put(MsoLogger.REMOTE_HOST, "127.0.0.1");
-		MDC.put(MsoLogger.PARTNERNAME, "testUser");
-		msoLogger.recordMetricEvent(123456789L, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.ServiceNotAvailable,
-				"Exception", "SDNC", "removeSDNC", "testVNF");
-
-		// Fetch from the metric log
-		URL url = this.getClass().getClassLoader().getResource("logback-test.xml");
-		String logFile = url.getFile().substring(0, url.getFile().indexOf("test-classes"))
-				+ "/MSO/Test/metricsjboss.server.name_IS_UNDEFINED.log";
-
-		Path filePath = new File(logFile).toPath();
-		Charset charset = Charset.defaultCharset();
-		List<String> stringList = Files.readAllLines(filePath, charset);
-		String[] stringArray = stringList.toArray(new String[] {});
-		msoLogger.error(MessageEnum.GENERAL_EXCEPTION, "", "", MsoLogger.ErrorCode.UnknownError, "test error msg");
-
-		Assert.assertTrue(stringArray[0]
-				.contains("|reqId|servId|main||testRecordMetricEvent||VNF|createVNF|COMPLETE|0|Successful|"));
-		// count the occurance of symbol "|"
-		Assert.assertTrue((stringArray[0].length() - stringArray[0].replace("|", "").length()) == 28);
-		Assert.assertTrue(stringArray[1]
-				.contains("|reqId|servId|main||testRecordMetricEvent|testUser|SDNC|removeSDNC|ERROR|501|Exception|")
-				&& stringArray[1].contains("|127.0.0.1||||testVNF|||||"));
-		Assert.assertTrue((stringArray[1].length() - stringArray[1].replace("|", "").length()) == 28);
-	}
-
-	/**
-	 * This method implements a test of testRecordAuditEvent method.
-	 */
-
-	// User reflection to invoke to avoid change the publicity of the method
-	private static String invokePrepareMsg(String arg1, String arg2, String arg3) {
-		Method method;
-		try {
-			method = MsoLogger.class.getDeclaredMethod("prepareMsg", String.class, String.class, String.class);
-			method.setAccessible(true);
-			return (String) method.invoke(msoLogger, arg1, arg2, arg3);
-		} catch (NoSuchMethodException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (SecurityException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (IllegalAccessException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (IllegalArgumentException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (InvocationTargetException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-	// User reflection to invoke to avoid change the publicity of the method
-	private static Object invokePriveMethod(String methodName, String arg) {
-		Method method;
-		try {
-			method = MsoLogger.class.getDeclaredMethod(methodName, String.class);
-			method.setAccessible(true);
-			return method.invoke(msoLogger, arg);
-		} catch (NoSuchMethodException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (SecurityException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (IllegalAccessException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (IllegalArgumentException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (InvocationTargetException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		return null;
-	}
-}
diff --git a/common/src/test/java/org/onap/so/client/grm/GRMClientTest.java b/common/src/test/java/org/onap/so/client/grm/GRMClientTest.java
index 3cce6a6..7b78376 100644
--- a/common/src/test/java/org/onap/so/client/grm/GRMClientTest.java
+++ b/common/src/test/java/org/onap/so/client/grm/GRMClientTest.java
@@ -24,9 +24,11 @@
 import static com.github.tomakehurst.wiremock.client.WireMock.post;
 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
 import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
+import static com.github.tomakehurst.wiremock.client.WireMock.*;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-
+import static org.junit.Assert.fail;
 import java.io.File;
 import java.nio.file.Files;
 import java.util.ArrayList;
@@ -43,6 +45,7 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.onap.logging.ref.slf4j.ONAPLogConstants;
 import org.onap.so.client.grm.beans.OperationalInfo;
 import org.onap.so.client.grm.beans.Property;
 import org.onap.so.client.grm.beans.ServiceEndPoint;
@@ -54,8 +57,7 @@
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.github.tomakehurst.wiremock.junit.WireMockRule;
-import org.onap.so.logger.MsoLogger;
-import org.onap.so.logger.MsoLogger.Catalog;
+
 import org.onap.so.utils.TestAppender;
 
 public class GRMClientTest {
@@ -66,6 +68,8 @@
 	@Rule
 	public ExpectedException thrown = ExpectedException.none();
 	
+	private static final String uuidRegex = "(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-5][0-9a-f]{3}-?[089ab][0-9a-f]{3}-?[0-9a-f]{12}$";
+	
 	@BeforeClass
 	public static void setUp() throws Exception {
 		System.setProperty("mso.config.path", "src/test/resources");
@@ -81,25 +85,45 @@
 			.willReturn(aResponse()
 				.withStatus(200)
 				.withHeader("Content-Type", MediaType.APPLICATION_JSON)
-				.withHeader("X-FromAppId", "GRM")
 				.withBody(endpoints)));
 
-		MDC.put(MsoLogger.SERVICE_NAME, "my-value");
+		MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, "/test");
 		GRMClient client = new GRMClient();
 		ServiceEndPointList sel = client.findRunningServices("TEST.ECOMP_PSL.*", 1, "TEST");
 		List<ServiceEndPoint> list = sel.getServiceEndPointList();
 		assertEquals(3, list.size());
-        ILoggingEvent logEvent = TestAppender.events.get(0);
-        Map<String,String> mdc = logEvent.getMDCPropertyMap();
-        assertNotNull(mdc.get(MsoLogger.METRIC_BEGIN_TIME));
-         assertNotNull(mdc.get(MsoLogger.METRIC_END_TIME));
-        assertNotNull(mdc.get(MsoLogger.REQUEST_ID));
-        assertNotNull(mdc.get(MsoLogger.METRIC_TIMER));
-        assertEquals("200",mdc.get(MsoLogger.RESPONSECODE));
-        assertEquals("GRM",mdc.get(MsoLogger.PARTNERNAME));
-        assertEquals("expect value to not be overwritten by jax rs client interceptor", "my-value",mdc.get(MsoLogger.SERVICE_NAME));
-        assertEquals("COMPLETE",mdc.get(MsoLogger.STATUSCODE));
-        assertNotNull(mdc.get(MsoLogger.RESPONSEDESC));
+		
+		boolean foundInvoke = false;
+		boolean foundInvokeReturn = false;
+        for(ILoggingEvent logEvent : TestAppender.events)
+            if(logEvent.getLoggerName().equals("org.onap.so.logging.jaxrs.filter.JaxRsClientLogging") &&
+                    logEvent.getMarker().getName().equals("INVOKE")
+                    ){
+                Map<String,String> mdc = logEvent.getMDCPropertyMap();
+                assertNotNull(mdc.get(ONAPLogConstants.MDCs.INVOCATION_ID));
+                assertEquals("GRM",mdc.get("TargetEntity"));
+                assertEquals("INPROGRESS",mdc.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE));
+                foundInvoke=true;
+            }else if(logEvent.getLoggerName().equals("org.onap.so.logging.jaxrs.filter.JaxRsClientLogging") &&
+                    logEvent.getMarker()!= null && logEvent.getMarker().getName().equals("INVOKE_RETURN")){
+                Map<String,String> mdc = logEvent.getMDCPropertyMap();
+                assertNotNull(mdc.get(ONAPLogConstants.MDCs.INVOCATION_ID));
+                assertEquals("200",mdc.get(ONAPLogConstants.MDCs.RESPONSE_CODE));
+                assertEquals("COMPLETED",mdc.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE));
+                foundInvokeReturn=true;
+            }
+        
+        if(!foundInvoke)
+            fail("INVOKE Marker not found");
+        
+        if(!foundInvokeReturn)
+            fail("INVOKE RETURN Marker not found");
+        
+        verify(postRequestedFor(urlEqualTo("/GRMLWPService/v1/serviceEndPoint/findRunning"))
+                .withHeader(ONAPLogConstants.Headers.INVOCATION_ID.toString(), matching(uuidRegex))
+                        .withHeader(ONAPLogConstants.Headers.REQUEST_ID.toString(), matching(uuidRegex))
+                                .withHeader(ONAPLogConstants.Headers.PARTNER_NAME.toString(), equalTo("SO")));
+        TestAppender.events.clear();
 	}
 	
 	@Test 
@@ -116,68 +140,6 @@
 		client.findRunningServices("TEST.ECOMP_PSL.*", 1, "TEST");
 	}
 	
-	@Ignore
-	@Test
-	public void testAdd() throws Exception {
-
-		wireMockRule.stubFor(post(urlPathEqualTo("/GRMLWPService/v1/serviceEndPoint/add"))
-			.willReturn(aResponse()
-				.withStatus(202)
-				.withHeader("Content-Type", MediaType.APPLICATION_JSON)
-				.withBody("test")));
-		wireMockRule.addMockServiceRequestListener((request, response) -> {
-			System.out.println("URL Requested => " + request.getAbsoluteUrl());
-			System.out.println("Request Body => " + request.getBodyAsString());
-			System.out.println("Request Headers => " + request.getHeaders().toString());
-			System.out.println("Response Status => " + response.getStatus());
-			System.out.println("Response Body => " + response.getBodyAsString());
-		});	
-		
-		Version ver = new Version();
-		ver.setMajor(1);
-		ver.setMinor(0);
-		ver.setPatch("0");
-
-		ServiceEndPoint sep = new ServiceEndPoint();
-		sep.setName("TEST.ECOMP_PSL.Inventory");
-		sep.setVersion(ver);
-		sep.setHostAddress("127.0.0.1");
-		sep.setListenPort("8080");
-		sep.setLatitude("37.7022");
-		sep.setLongitude("121.9358");
-		sep.setContextPath("/");
-		sep.setRouteOffer("TEST");
-		
-		OperationalInfo operInfo = new OperationalInfo();
-		operInfo.setCreatedBy("edge");
-		operInfo.setUpdatedBy("edge");
-		
-		sep.setOperationalInfo(operInfo);
-		
-		Property prop1 = new Property();
-		prop1.setName("Environment");
-		prop1.setValue("TEST");
-		
-		Property prop2 = new Property();
-		prop2.setName("cpfrun_cluster_name");
-		prop2.setValue("testcase_cluster_no_cluster");
-		
-		List<Property> props = new ArrayList<Property>();
-		props.add(prop1);
-		props.add(prop2);
-		
-		sep.setProperties(props);
-
-		ServiceEndPointRequest request = new ServiceEndPointRequest();
-		request.setEnv("DEV");
-		request.setServiceEndPoint(sep);
-		
-		System.out.println("Request in JSON: " + mapper.writeValueAsString(request));
-		
-		GRMClient client = new GRMClient();
-		client.addServiceEndPoint(request);
-	}
-	
 	@Test
 	public void testAddFail() throws Exception {
 		wireMockRule.stubFor(post(urlPathEqualTo("/GRMLWPService/v1/serviceEndPoint/add"))
diff --git a/common/src/test/resources/logback-test.xml b/common/src/test/resources/logback-test.xml
index c4248bf..772eeab 100644
--- a/common/src/test/resources/logback-test.xml
+++ b/common/src/test/resources/logback-test.xml
@@ -1,8 +1,8 @@
 <!--
   ============LICENSE_START=======================================================
-  ECOMP MSO
+  ONAP SO
   ================================================================================
-  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+  Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
   ================================================================================
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
@@ -18,159 +18,58 @@
   ============LICENSE_END=========================================================
   -->
 
-<configuration scan="false" debug="true">
-  <!--<jmxConfigurator /> -->
-  <!-- directory path for all other type logs -->
+<configuration>
+	<property name="p_tim" value="%d{&quot;yyyy-MM-dd'T'HH:mm:ss.SSSXXX&quot;, UTC}"/>
+    <property name="p_lvl" value="%level"/>
+    <property name="p_log" value="%logger"/>
+    <property name="p_mdc" value="%replace(%replace(%mdc){'\t','\\\\t'}){'\n', '\\\\n'}"/>
+    <property name="p_msg" value="%replace(%replace(%msg){'\t', '\\\\t'}){'\n','\\\\n'}"/>
+    <property name="p_exc" value="%replace(%replace(%rootException){'\t', '\\\\t'}){'\n','\\\\n'}"/>
+    <property name="p_mak" value="%replace(%replace(%marker){'\t', '\\\\t'}){'\n','\\\\n'}"/>
+    <property name="p_thr" value="%thread"/>
+    <property name="pattern" value="%nopexception${p_tim}\t${p_thr}\t${p_lvl}\t${p_log}\t${p_mdc}\t${p_msg}\t${p_exc}\t${p_mak}\t%n"/>
 
-  <property name="logDir" value="./target" />
-  
-  <!-- directory path for debugging type logs -->
-  <property name="debugDir" value="./target" />
-  
-  <!--  specify the component name 
-    <ECOMP-component-name>::= "MSO" | "DCAE" | "ASDC " | "AAI" |"Policy" | "SDNC" | "AC"  -->
-  <property name="componentName" value="MSO"></property>
-  <property name="subComponentName" value="Test"></property>
-  <!--  log file names -->
-  <property name="errorLogName" value="error" />
-  <property name="metricsLogName" value="metrics" />
-  <property name="auditLogName" value="audit" />
-  <property name="debugLogName" value="debug" />
 
-  <property name="errorPattern" value="%d{&quot;yyyy-MM-dd'T'HH:mm:ss.SSSXXX&quot;, UTC}|%X{RequestId}|%thread|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%.-5level|%X{ErrorCode}|%X{ErrorDesc}|%msg%n" />
-  <property name="debugPattern" value="%d{&quot;yyyy-MM-dd'T'HH:mm:ss.SSSXXX&quot;, UTC}|%X{RequestId}|%msg%n" />
-
-  <property name="auditPattern" value="%X{BeginTimestamp}|%X{EndTimestamp}|%X{RequestId}|%X{ServiceInstanceId}|%thread||%X{ServiceName}|%X{PartnerName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDesc}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{Timer}|%X{ServerFQDN}|%X{RemoteHost}||||||||%msg%n" />
-  <property name="metricPattern" value="%X{BeginTimestamp}|%X{EndTimestamp}|%X{RequestId}|%X{ServiceInstanceId}|%thread||%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDesc}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{Timer}|%X{ServerFQDN}|%X{RemoteHost}||||%X{TargetVirtualEntity}|||||%msg%n" />
-
-  <property name="logDirectory" value="${logDir}/${componentName}/${subComponentName}" />
-  <property name="debugLogDirectory" value="${debugDir}/${componentName}/${subComponentName}" />
-
-  <appender name="test" class="org.onap.so.utils.TestAppender"/>
-  <!-- ============================================================================ -->
-  <!-- EELF Appenders -->
-  <!-- ============================================================================ -->
-
-  <!-- The EELFAppender is used to record events to the general application 
-    log -->
-  
-  <!-- EELF Audit Appender. This appender is used to record audit engine 
-    related logging events. The audit logger and appender are specializations 
-    of the EELF application root logger and appender. This can be used to segregate 
-    Policy engine events from other components, or it can be eliminated to record 
-    these events as part of the application root log. -->
-    
-  <appender name="EELFAudit"
-    class="ch.qos.logback.core.rolling.RollingFileAppender">
-    <file>${logDirectory}/${auditLogName}${jboss.server.name}.log</file>
-    <rollingPolicy
-      class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-      <fileNamePattern>${logDirectory}/${auditLogName}${jboss.server.name}.log.%d</fileNamePattern>
-      <!--<maxHistory>30</maxHistory>-->
-    </rollingPolicy>
-    <encoder>
-         <pattern>${auditPattern}</pattern>
-    </encoder>
-  </appender>
-  <appender name="asyncEELFAudit" class="ch.qos.logback.classic.AsyncAppender">
-    <queueSize>500</queueSize>
-    <discardingThreshold>0</discardingThreshold>
-    <appender-ref ref="EELFAudit" />
-  </appender>
-
-<appender name="EELFMetrics"
-    class="ch.qos.logback.core.rolling.RollingFileAppender">
-    <file>${logDirectory}/${metricsLogName}${jboss.server.name}.log</file>
-    <rollingPolicy
-      class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-      <fileNamePattern>${logDirectory}/${metricsLogName}${jboss.server.name}.log.%d</fileNamePattern>
-      <!--<maxHistory>30</maxHistory>-->
-    </rollingPolicy>
-    <encoder>
-      <!-- <pattern>"%d{HH:mm:ss.SSS} [%thread] %-5level %logger{1024} - 
-        %msg%n"</pattern> -->
-      <pattern>${metricPattern}</pattern>
-    </encoder>
-  </appender>
-  
-  
-  <appender name="asyncEELFMetrics" class="ch.qos.logback.classic.AsyncAppender">
-    <queueSize>500</queueSize>
-    <discardingThreshold>0</discardingThreshold>
-    <appender-ref ref="EELFMetrics"/>
-  </appender>
-   
-  <appender name="EELFError"
-    class="ch.qos.logback.core.rolling.RollingFileAppender">
-    <file>${logDirectory}/${errorLogName}${jboss.server.name}.log</file>
-    <rollingPolicy
-      class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-      <fileNamePattern>${logDirectory}/${errorLogName}${jboss.server.name}.log.%d</fileNamePattern>
-      <!--<maxHistory>30</maxHistory>-->
-    </rollingPolicy>
-    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-      <level>INFO</level>
-    </filter>
-    <encoder>
-      <pattern>${errorPattern}</pattern>
-    </encoder>
-  </appender>
-  
-  <appender name="asyncEELFError" class="ch.qos.logback.classic.AsyncAppender">
-    <queueSize>500</queueSize>
-    <discardingThreshold>0</discardingThreshold>
-    <appender-ref ref="EELFError"/>
-  </appender>
-  
-   <appender name="EELFDebug"
-    class="ch.qos.logback.core.rolling.RollingFileAppender">
-    <file>${debugLogDirectory}/${debugLogName}${jboss.server.name}.log</file>
-    <rollingPolicy
-      class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-      <fileNamePattern>${debugLogDirectory}/${debugLogName}${jboss.server.name}.log.%d</fileNamePattern>
-      <!--<maxHistory>30</maxHistory>-->
-    </rollingPolicy>
-    <encoder>
-      <pattern>${debugPattern}</pattern>
-    </encoder>
-  </appender>
-  
-  <appender name="asyncEELFDebug" class="ch.qos.logback.classic.AsyncAppender">
-    <queueSize>500</queueSize>
-    <discardingThreshold>0</discardingThreshold>
-    <appender-ref ref="EELFDebug" />
-    <includeCallerData>true</includeCallerData>
-  </appender>
- 
-  	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
 		<encoder>
-			<pattern>%d{HH:mm:ss.SSS} [%thread] |%X{RequestId}| %-5level
-				%logger{1024} - %msg%n
-			</pattern>
+			<pattern>${pattern}</pattern>
 		</encoder>
 	</appender>
+
+	<appender name="test"
+		class="org.onap.so.utils.TestAppender" />
+
+	<logger name="com.att.ecomp.audit" level="info" additivity="false">
+		<appender-ref ref="STDOUT" />
+	</logger>
+
+	<logger name="com.att.eelf.metrics" level="info" additivity="false">
+		<appender-ref ref="STDOUT" />
+	</logger>
+
+	<logger name="com.att.eelf.error" level="WARN" additivity="false">
+		<appender-ref ref="STDOUT" />
+	</logger>
+
+	<logger name="org.onap" level="${so.log.level:-DEBUG}" additivity="false">
+		<appender-ref ref="STDOUT" />
+		<appender-ref ref="test" />
+	</logger>
 	
-  <!-- ============================================================================ -->
-  <!--  EELF loggers -->
-  <!-- ============================================================================ -->
+	<logger name="org.flywaydb" level="DEBUG" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
+	
 
-  <logger name="com.att.eelf.audit" level="${so.log.level:-DEBUG}" additivity="false">
-    <appender-ref ref="asyncEELFAudit" /> 
-  </logger>
-  
-  <logger name="METRIC" level="${so.log.level:-DEBUG}" additivity="true">
-    <appender-ref ref="asyncEELFMetrics" />
-    <appender-ref ref="test" />
-  </logger>
+	<logger name="ch.vorburger" level="WARN" additivity="false">
+		<appender-ref ref="STDOUT" />
+	</logger>
+	
 
-  <logger name="com.att.eelf.error" level="${so.log.level:-DEBUG}" additivity="false">
-    <appender-ref ref="asyncEELFError" />
-  </logger>
-  
-  <root level="${so.log.level:-DEBUG}">
-    <appender-ref ref="asyncEELFDebug" />
-    <appender-ref ref="STDOUT" />
-  </root>
+	<root level="WARN">
+		<appender-ref ref="STDOUT" />
+		<appender-ref ref="test" />
+	</root>
 
 
 </configuration>
\ No newline at end of file
diff --git a/common/src/test/resources/mso-bad.json b/common/src/test/resources/mso-bad.json
deleted file mode 100644
index 1aaea50..0000000
--- a/common/src/test/resources/mso-bad.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-	"asdc-connections": {
-		"asdc-controller1": {
-			"asdcUser": "user1",
-			"asdcConsumerGroup": "consumer1",
-			"asdcConsumerId": "consumer1",
-			"asdcEnvironmentName": "PROD",
-			"asdcAddress": "localhost:8443",
-			"asdcPassword": "1c551b8b5ab91fcd5a0907b11c304199"
-		},
-		"asdc-controller2": {
-			"asdcUser": "user2",
-			"asdcConsumerGroup": "consumer2",
-			"asdcConsumerId": "consumer2",
-			"asdcEnvironmentName": "E2E",
-			"asdcAddress": "localhost:8443",
-			"asdcPassword": "1c551b8b5ab91fcd5a0907b11c304199"
-		}
-	}
-}
\ No newline at end of file
diff --git a/common/src/test/resources/mso.json b/common/src/test/resources/mso.json
deleted file mode 100644
index e8ee4a9..0000000
--- a/common/src/test/resources/mso.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-  "asdc-connections":{
-    "asdc-controller1":{
-        "asdcUser": "user1",
-        "asdcConsumerGroup": "consumer1",
-        "asdcConsumerId": "consumer1",
-        "asdcEnvironmentName": "PROD",
-        "asdcAddress": "localhost:8443",
-        "asdcPassword": "1c551b8b5ab91fcd5a0907b11c304199"
-    },
-    "asdc-controller2":{
-        "asdcUser": "user2",
-        "asdcConsumerGroup": "consumer2",
-        "asdcConsumerId": "consumer2",
-        "asdcEnvironmentName": "E2E",
-        "asdcAddress": "localhost:8443",
-        "asdcPassword": "1c551b8b5ab91fcd5a0907b11c304199"
-    }
-  },
-  "mso.properties.reload.time.minutes":2
-}
diff --git a/common/src/test/resources/mso.properties b/common/src/test/resources/mso.properties
deleted file mode 100644
index bb0e4eb..0000000
--- a/common/src/test/resources/mso.properties
+++ /dev/null
@@ -1,28 +0,0 @@
-###
-# ============LICENSE_START=======================================================
-# ECOMP MSO
-# ================================================================================
-# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-###
-
-mso.properties.reload.time.minutes=2
-ecomp.mso.cloud.1.cloudId=MT
-ecomp.mso.cloud.1.keystoneUrl=http://localhost:5000/v2.0
-ecomp.mso.cloud.1.msoId=John
-ecomp.mso.cloud.1.publicNetId=FD205490A48D48475607C36B9AD902BF
-ecomp.mso.cloud.1.test=1234
-ecomp.mso.cloud.1.boolean=true
-ecomp.mso.cloud.1.enum=enum1
diff --git a/common/src/test/resources/mso2.json b/common/src/test/resources/mso2.json
deleted file mode 100644
index bac30c4..0000000
--- a/common/src/test/resources/mso2.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-	"asdc-connections": {
-		"asdc-controller1": {
-			"asdcUser": "user1B",
-			"asdcConsumerGroup": "consumer1",
-			"asdcConsumerId": "consumer1",
-			"asdcEnvironmentName": "PROD",
-			"asdcAddress": "localhost:8443",
-			"asdcPassword": "1c551b8b5ab91fcd5a0907b11c304199"
-		},
-		"asdc-controller2": {
-			"asdcUser": "user2B",
-			"asdcConsumerGroup": "consumer2",
-			"asdcConsumerId": "consumer2",
-			"asdcEnvironmentName": "E2E",
-			"asdcAddress": "localhost:8443",
-			"asdcPassword": "1c551b8b5ab91fcd5a0907b11c304199"
-		}
-	}
-}
\ No newline at end of file
diff --git a/common/src/test/resources/mso2.properties b/common/src/test/resources/mso2.properties
deleted file mode 100644
index 423346e..0000000
--- a/common/src/test/resources/mso2.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-###
-# ============LICENSE_START=======================================================
-# ECOMP MSO
-# ================================================================================
-# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-###
-
-mso.properties.reload.time.minutes=1
-ecomp.mso.cloud.1.cloudId=MT2
diff --git a/cxf-logging/.gitignore b/cxf-logging/.gitignore
new file mode 100644
index 0000000..c2a9623
--- /dev/null
+++ b/cxf-logging/.gitignore
@@ -0,0 +1,2 @@
+/tattletale-jar/
+/bin/
diff --git a/cxf-logging/pom.xml b/cxf-logging/pom.xml
new file mode 100644
index 0000000..378d169
--- /dev/null
+++ b/cxf-logging/pom.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+        <groupId>org.onap.so</groupId>
+        <artifactId>so</artifactId>
+        <version>1.3.0-SNAPSHOT</version>
+	</parent>
+	<name>CXFLogging</name>
+	<description>Common CXF Logging Classes</description>
+	<dependencies>
+		<dependency>
+			<groupId>org.apache.cxf</groupId>
+			<artifactId>cxf-rt-rs-client</artifactId>
+			<version>${cxf.version}</version>
+		</dependency>
+		<dependency>
+    		<groupId>org.apache.cxf</groupId>
+    		<artifactId>cxf-rt-bindings-soap</artifactId>
+  			<version>${cxf.version}</version>
+		</dependency>
+		<dependency>
+    		<groupId>org.apache.cxf</groupId>
+    		<artifactId>cxf-rt-transports-http</artifactId>
+    		<version>${cxf.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>javax.servlet-api</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-ext</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-api</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.onap.logging-analytics</groupId>
+  			<artifactId>logging-slf4j</artifactId>
+  			<version>1.2.2-SNAPSHOT</version>
+  			<exclusions>
+				<exclusion>
+					<groupId>com.att.eelf</groupId>
+					<artifactId>eelf-core</artifactId>
+				</exclusion>
+			</exclusions>
+  		</dependency>
+    </dependencies>
+	<build>
+		<resources>
+			<resource>
+				<directory>src/main/resources</directory>
+				<filtering>true</filtering>
+			</resource>
+			<resource>
+				<directory>src/main/java</directory>
+				<includes>
+					<include>**/*.java</include>
+				</includes>
+			</resource>
+		</resources>		
+	</build>
+	<artifactId>cxf-logging</artifactId>
+</project>
diff --git a/common/src/main/java/org/onap/so/logging/cxf/interceptor/SOAPLoggingInInterceptor.java b/cxf-logging/src/main/java/org/onap/so/logging/cxf/interceptor/SOAPLoggingInInterceptor.java
similarity index 87%
rename from common/src/main/java/org/onap/so/logging/cxf/interceptor/SOAPLoggingInInterceptor.java
rename to cxf-logging/src/main/java/org/onap/so/logging/cxf/interceptor/SOAPLoggingInInterceptor.java
index 9aed537..52d26fb 100644
--- a/common/src/main/java/org/onap/so/logging/cxf/interceptor/SOAPLoggingInInterceptor.java
+++ b/cxf-logging/src/main/java/org/onap/so/logging/cxf/interceptor/SOAPLoggingInInterceptor.java
@@ -1,38 +1,26 @@
 package org.onap.so.logging.cxf.interceptor;
 
 
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
-import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletRequest;
-import javax.xml.namespace.QName;
 import org.apache.cxf.binding.soap.SoapMessage;
 import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
-import org.apache.cxf.service.model.MessageInfo;
-import org.apache.cxf.service.model.OperationInfo;
 import org.apache.cxf.transport.http.AbstractHTTPDestination;
 import org.onap.logging.ref.slf4j.ONAPLogConstants;
-import org.onap.so.logging.jaxrs.filter.JaxRsFilterLogging;
-import org.onap.so.logging.jaxrs.filter.MDCSetup;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
 
-@Component
+
 public class SOAPLoggingInInterceptor extends AbstractSoapInterceptor{
 
     protected static Logger logger = LoggerFactory.getLogger(SOAPLoggingInInterceptor.class);
-    
-    @Autowired
-    MDCSetup mdcSetup;
-    
+
     public SOAPLoggingInInterceptor() {
         super(Phase.READ);
     }
@@ -40,7 +28,7 @@
     @Override
     public void handleMessage(SoapMessage message) throws Fault {
         try {
-  
+            SOAPMDCSetup mdcSetup = new SOAPMDCSetup();
             Map<String, List<String>> headers  = (Map<String,List<String>>) message.get(Message.PROTOCOL_HEADERS);
             HttpServletRequest request = (HttpServletRequest)message.get(AbstractHTTPDestination.HTTP_REQUEST);
             request.getRemoteAddr();
diff --git a/common/src/main/java/org/onap/so/logging/cxf/interceptor/SOAPLoggingOutInterceptor.java b/cxf-logging/src/main/java/org/onap/so/logging/cxf/interceptor/SOAPLoggingOutInterceptor.java
similarity index 72%
rename from common/src/main/java/org/onap/so/logging/cxf/interceptor/SOAPLoggingOutInterceptor.java
rename to cxf-logging/src/main/java/org/onap/so/logging/cxf/interceptor/SOAPLoggingOutInterceptor.java
index c50e505..1ddf268 100644
--- a/common/src/main/java/org/onap/so/logging/cxf/interceptor/SOAPLoggingOutInterceptor.java
+++ b/cxf-logging/src/main/java/org/onap/so/logging/cxf/interceptor/SOAPLoggingOutInterceptor.java
@@ -1,39 +1,25 @@
 package org.onap.so.logging.cxf.interceptor;
 
 
-import java.util.Collections;
-import java.util.Map;
-import java.util.UUID;
-import java.util.stream.Collectors;
-import javax.servlet.http.HttpServletRequest;
-import javax.xml.namespace.QName;
 import org.apache.cxf.binding.soap.SoapMessage;
 import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
-import org.apache.cxf.service.model.MessageInfo;
-import org.apache.cxf.service.model.OperationInfo;
-import org.apache.cxf.transport.http.AbstractHTTPDestination;
 import org.onap.logging.ref.slf4j.ONAPLogConstants;
-import org.onap.so.exceptions.MSOException;
-import org.onap.so.logging.jaxrs.filter.JaxRsFilterLogging;
-import org.onap.so.logging.jaxrs.filter.MDCSetup;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
 
-@Component
+
+
 public class SOAPLoggingOutInterceptor extends AbstractSoapInterceptor{
 
     private static final String _500 = "500";
 
     protected static Logger logger = LoggerFactory.getLogger(SOAPLoggingOutInterceptor.class);
     
-    @Autowired
-    MDCSetup mdcSetup;
+
     
     public SOAPLoggingOutInterceptor() {
         super(Phase.WRITE);
diff --git a/cxf-logging/src/main/java/org/onap/so/logging/cxf/interceptor/SOAPMDCSetup.java b/cxf-logging/src/main/java/org/onap/so/logging/cxf/interceptor/SOAPMDCSetup.java
new file mode 100644
index 0000000..6991949
--- /dev/null
+++ b/cxf-logging/src/main/java/org/onap/so/logging/cxf/interceptor/SOAPMDCSetup.java
@@ -0,0 +1,53 @@
+package org.onap.so.logging.cxf.interceptor;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.UUID;
+import javax.servlet.http.HttpServletRequest;
+import org.onap.logging.ref.slf4j.ONAPLogConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+
+
+
+public class SOAPMDCSetup {
+    
+    protected static Logger logger = LoggerFactory.getLogger(SOAPMDCSetup.class); 
+    
+    private static final String INSTANCE_UUID = UUID.randomUUID().toString();
+    
+    public void setInstanceUUID(){
+        MDC.put(ONAPLogConstants.MDCs.INSTANCE_UUID, INSTANCE_UUID);
+    }
+
+    public void setServerFQDN(){
+        String serverFQDN = "";
+        InetAddress addr= null;
+        try {
+            addr = InetAddress.getLocalHost();
+            serverFQDN = addr.toString();
+        } catch (UnknownHostException e) {
+            logger.warn("Cannot Resolve Host Name");
+            serverFQDN = "";
+        }
+        MDC.put(ONAPLogConstants.MDCs.SERVER_FQDN, serverFQDN);
+    }
+
+    public void setClientIPAddress(HttpServletRequest httpServletRequest){
+        String remoteIpAddress = "";
+        if (httpServletRequest != null) {
+            remoteIpAddress = httpServletRequest.getRemoteAddr();
+        } 
+        MDC.put(ONAPLogConstants.MDCs.CLIENT_IP_ADDRESS, remoteIpAddress);
+    }
+
+    public void setEntryTimeStamp() {
+        MDC.put(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP,ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT));
+    }
+    
+   
+}
\ No newline at end of file
diff --git a/cxf-logging/src/test/resources/logback-test.xml b/cxf-logging/src/test/resources/logback-test.xml
new file mode 100644
index 0000000..772eeab
--- /dev/null
+++ b/cxf-logging/src/test/resources/logback-test.xml
@@ -0,0 +1,75 @@
+<!--
+  ============LICENSE_START=======================================================
+  ONAP SO
+  ================================================================================
+  Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<configuration>
+	<property name="p_tim" value="%d{&quot;yyyy-MM-dd'T'HH:mm:ss.SSSXXX&quot;, UTC}"/>
+    <property name="p_lvl" value="%level"/>
+    <property name="p_log" value="%logger"/>
+    <property name="p_mdc" value="%replace(%replace(%mdc){'\t','\\\\t'}){'\n', '\\\\n'}"/>
+    <property name="p_msg" value="%replace(%replace(%msg){'\t', '\\\\t'}){'\n','\\\\n'}"/>
+    <property name="p_exc" value="%replace(%replace(%rootException){'\t', '\\\\t'}){'\n','\\\\n'}"/>
+    <property name="p_mak" value="%replace(%replace(%marker){'\t', '\\\\t'}){'\n','\\\\n'}"/>
+    <property name="p_thr" value="%thread"/>
+    <property name="pattern" value="%nopexception${p_tim}\t${p_thr}\t${p_lvl}\t${p_log}\t${p_mdc}\t${p_msg}\t${p_exc}\t${p_mak}\t%n"/>
+
+
+	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<pattern>${pattern}</pattern>
+		</encoder>
+	</appender>
+
+	<appender name="test"
+		class="org.onap.so.utils.TestAppender" />
+
+	<logger name="com.att.ecomp.audit" level="info" additivity="false">
+		<appender-ref ref="STDOUT" />
+	</logger>
+
+	<logger name="com.att.eelf.metrics" level="info" additivity="false">
+		<appender-ref ref="STDOUT" />
+	</logger>
+
+	<logger name="com.att.eelf.error" level="WARN" additivity="false">
+		<appender-ref ref="STDOUT" />
+	</logger>
+
+	<logger name="org.onap" level="${so.log.level:-DEBUG}" additivity="false">
+		<appender-ref ref="STDOUT" />
+		<appender-ref ref="test" />
+	</logger>
+	
+	<logger name="org.flywaydb" level="DEBUG" additivity="false">
+        <appender-ref ref="STDOUT" />
+    </logger>
+	
+
+	<logger name="ch.vorburger" level="WARN" additivity="false">
+		<appender-ref ref="STDOUT" />
+	</logger>
+	
+
+	<root level="WARN">
+		<appender-ref ref="STDOUT" />
+		<appender-ref ref="test" />
+	</root>
+
+
+</configuration>
\ No newline at end of file
diff --git a/mso-api-handlers/mso-api-handler-common/pom.xml b/mso-api-handlers/mso-api-handler-common/pom.xml
index 0743a2d..b1963f1 100644
--- a/mso-api-handlers/mso-api-handler-common/pom.xml
+++ b/mso-api-handlers/mso-api-handler-common/pom.xml
@@ -130,20 +130,6 @@
 			<groupId>org.onap.so</groupId>
 			<artifactId>common</artifactId>
 			<version>${project.version}</version>
-			<exclusions>
-				<exclusion>
-         			<groupId>org.apache.cxf</groupId>
-          			<artifactId>cxf-rt-rs-client</artifactId>
-        		</exclusion>
-        		<exclusion>
-         			<groupId>org.apache.cxf</groupId>
-          			<artifactId>cxf-rt-bindings-soap</artifactId>
-        		</exclusion>
-        		<exclusion>
-         			<groupId>org.apache.cxf</groupId>
-          			<artifactId>cxf-rt-transports-http</artifactId>
-        		</exclusion>
-        	</exclusions>
 		</dependency>
 	</dependencies>
 
diff --git a/mso-catalog-db/pom.xml b/mso-catalog-db/pom.xml
index cd4f25e..7f86cba 100644
--- a/mso-catalog-db/pom.xml
+++ b/mso-catalog-db/pom.xml
@@ -52,20 +52,6 @@
 			<groupId>org.onap.so</groupId>
 			<artifactId>common</artifactId>
 			<version>${project.version}</version>
-			<exclusions>
-				<exclusion>
-         			<groupId>org.apache.cxf</groupId>
-          			<artifactId>cxf-rt-rs-client</artifactId>
-        		</exclusion>
-        		<exclusion>
-         			<groupId>org.apache.cxf</groupId>
-          			<artifactId>cxf-rt-bindings-soap</artifactId>
-        		</exclusion>
-        		<exclusion>
-         			<groupId>org.apache.cxf</groupId>
-          			<artifactId>cxf-rt-transports-http</artifactId>
-        		</exclusion>
-        	</exclusions>
 		</dependency>
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
diff --git a/pom.xml b/pom.xml
index d2ddd6c..59f0d5e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,6 +29,7 @@
 		<module>asdc-controller</module>
 		<module>bpmn</module>
 		<module>cloudify-client</module>
+		<module>cxf-logging</module>
 		<module>packages</module>
 	</modules>
 	<properties>
@@ -427,7 +428,7 @@
 					<version>2.20</version>
 					<configuration>
 						<systemPropertyVariables>
-							<so.log.level>${so.log.level}</so.log.level>
+							<so.log.level>DEBUG</so.log.level>
 						</systemPropertyVariables>
 						<rerunFailingTestsCount>2</rerunFailingTestsCount>
 					</configuration>
@@ -439,7 +440,7 @@
 					<configuration>
 						<skip>true</skip>
 						<systemPropertyVariables>
-							<so.log.level>${so.log.level}</so.log.level>
+							<so.log.level>DEBUG</so.log.level>
 						</systemPropertyVariables>
 						<rerunFailingTestsCount>2</rerunFailingTestsCount>
 					</configuration>
