diff --git a/common/src/main/java/org/openecomp/mso/db/AbstractSessionFactoryManager.java b/common/src/main/java/org/openecomp/mso/db/AbstractSessionFactoryManager.java
new file mode 100644
index 0000000..3efd6e2
--- /dev/null
+++ b/common/src/main/java/org/openecomp/mso/db/AbstractSessionFactoryManager.java
@@ -0,0 +1,74 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * OPENECOMP - 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=========================================================
+ */
+
+package org.openecomp.mso.db;
+
+import org.hibernate.cfg.Configuration;
+import org.hibernate.SessionFactory;
+import org.hibernate.service.ServiceRegistry;
+import org.openecomp.mso.properties.MsoDatabaseException;
+import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
+import java.net.URL;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+public abstract class AbstractSessionFactoryManager {
+
+    protected static Map<String, SessionFactory> sessionFactories = new ConcurrentHashMap<String, SessionFactory>();
+
+    protected synchronized SessionFactory initializeSessionFactory(URL hibernateConfigFile)
+            throws MsoDatabaseException {
+        try {
+            if (hibernateConfigFile != null) {
+                SessionFactory tempFactory = sessionFactories.get(hibernateConfigFile.getPath());
+                // Already initialized, skip
+                if (tempFactory != null) {
+                    return tempFactory;
+                }
+
+                Configuration conf = new Configuration().configure(hibernateConfigFile);
+                ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
+                tempFactory = conf.buildSessionFactory(sr);
+                if (tempFactory == null) {
+                    throw new MsoDatabaseException(
+                            "SessionFactory can't be initialized, method buildSessionFactory returned null !");
+                }
+                sessionFactories.put(hibernateConfigFile.getPath(), tempFactory);
+                return tempFactory;
+            } else {
+                throw new MsoDatabaseException(
+                        "HibernateConfigFile provided is null, therefore Hibernate can't be initialized !");
+            }
+        } catch (Exception e) {
+            throw new MsoDatabaseException("Exception occurred during the SessionFactory Build", e);
+        }
+    }
+
+    public SessionFactory getSessionFactory() throws MsoDatabaseException {
+        URL hibernateConfigFile = getHibernateConfigFile();
+        SessionFactory factory = sessionFactories.get(hibernateConfigFile.getPath());
+        if (factory == null) {
+            factory = initializeSessionFactory(hibernateConfigFile);
+        }
+        return factory;
+    }
+
+    protected abstract URL getHibernateConfigFile();
+}
diff --git a/common/src/main/java/org/openecomp/mso/db/HibernateUtils.java b/common/src/main/java/org/openecomp/mso/db/HibernateUtils.java
deleted file mode 100644
index ba452ff..0000000
--- a/common/src/main/java/org/openecomp/mso/db/HibernateUtils.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * OPENECOMP - 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=========================================================
- */
-
-package org.openecomp.mso.db;
-
-import org.hibernate.cfg.Configuration;
-import org.hibernate.SessionFactory;
-import org.hibernate.service.ServiceRegistry;
-import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
-import java.net.URL;
-
-public abstract class HibernateUtils {
-
-    protected SessionFactory sessionFactory;
-    
-    protected synchronized void initializeHibernate(URL hibernateConfigFile) {
-        // Can be null, in that case, we skip the loading
-        if (hibernateConfigFile != null) {
-            // Already initialized, skip
-            if (sessionFactory != null) {
-                return;
-            }
-    
-            Configuration conf = new Configuration().configure(hibernateConfigFile);
-            ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
-            sessionFactory = conf.buildSessionFactory(sr);
-        }
-    }
-
-    public SessionFactory getSessionFactory() {
-        if (sessionFactory == null) {
-            initializeHibernate(getHibernateConfigFile());
-        }
-        return sessionFactory;
-    }
-
-    protected abstract URL getHibernateConfigFile();
-}
diff --git a/common/src/main/java/org/openecomp/mso/logger/MessageEnum.java b/common/src/main/java/org/openecomp/mso/logger/MessageEnum.java
index 521aa50..ee0e294 100644
--- a/common/src/main/java/org/openecomp/mso/logger/MessageEnum.java
+++ b/common/src/main/java/org/openecomp/mso/logger/MessageEnum.java
@@ -167,7 +167,6 @@
 	BPMN_GENERAL_METRICS,
 	BPMN_URN_MAPPING_FAIL,
 	BPMN_VARIABLE_NULL,
-	BPMN_SDNC_CALLBACK_EXCEPTION,
 	BPMN_CALLBACK_EXCEPTION,
 	// ASDC Messages
 	ASDC_GENERAL_EXCEPTION_ARG,
diff --git a/common/src/main/java/org/openecomp/mso/logger/MsoLogger.java b/common/src/main/java/org/openecomp/mso/logger/MsoLogger.java
index e9b6fb1..a0fc765 100644
--- a/common/src/main/java/org/openecomp/mso/logger/MsoLogger.java
+++ b/common/src/main/java/org/openecomp/mso/logger/MsoLogger.java
@@ -106,7 +106,7 @@
     public enum ResponseCode {
         Suc(0), PermissionError(100), DataError(300), DataNotFound(301), BadRequest(302), SchemaError(
                 400), BusinessProcesssError(500), ServiceNotAvailable(501), InternalError(
-                502), Conflict(503), DBAccessError(504), CommunicationError(505), UnknownError(900);
+                        502), Conflict(503), DBAccessError(504), CommunicationError(505), UnknownError(900);
 
         private int value;
 
@@ -144,8 +144,8 @@
     private static final Logger LOGGER      = Logger.getLogger(MsoLogger.class.getName());
 
     private MsoLogger(MsoLogger.Catalog cat) {
-        this.debugLogger = EELFManager.getInstance().getDebugLogger();
-        this.errorLogger = EELFManager.getInstance().getErrorLogger();
+    	this.debugLogger = EELFManager.getInstance().getDebugLogger();
+    	this.errorLogger = EELFManager.getInstance().getErrorLogger();
         this.auditLogger = EELFManager.getInstance().getAuditLogger();
         this.metricsLogger = EELFManager.getInstance().getMetricsLogger();
         MsoLogger.initialization();
@@ -172,7 +172,7 @@
 
     /**
      * Get the MsoLogger based on the catalog
-     *
+     * 
      * @param cat
      *            Catalog of the logger
      * @return the MsoLogger
@@ -183,7 +183,7 @@
 
     /**
      * Record the Metrics event with no argument
-     *
+     * 
      * @param startTime
      *            Transaction starting time in millieseconds
      * @param statusCode
@@ -200,7 +200,7 @@
      *            Target VNF or VM acted opon by the component, if available
      */
     public void recordMetricEvent(Long startTime, StatusCode statusCode, ResponseCode responseCode, String responseDesc,
-                                  String targetEntity, String targetServiceName, String targetVEntity) {
+            String targetEntity, String targetServiceName, String targetVEntity) {
         prepareMetricMsg(startTime, statusCode, responseCode.getValue(), responseDesc, targetEntity, targetServiceName,
                 targetVEntity);
         metricsLogger.info("");
@@ -222,7 +222,7 @@
      *            Human redable description of the application response code
      */
     public void recordAuditEvent(Long startTime, StatusCode statusCode, ResponseCode responseCode,
-                                 String responseDesc) {
+            String responseDesc) {
         prepareAuditMsg(startTime, statusCode, responseCode.getValue(), responseDesc);
         auditLogger.info("");
         MDC.remove(TIMER);
@@ -293,7 +293,7 @@
      *            The arguments used in the log message
      */
     public void info(EELFResolvableErrorEnum msg, String arg0, String arg1, String targetEntity,
-                     String targetServiceName) {
+            String targetServiceName) {
         prepareErrorMsg(INFO_LEVEL, targetEntity, targetServiceName, null, "");
 
         debugLogger.info(msg, normalize(arg0), normalize(arg1));
@@ -310,7 +310,7 @@
      *            The arguments used in the log message
      */
     public void info(EELFResolvableErrorEnum msg, String arg0, String arg1, String arg2, String targetEntity,
-                     String targetServiceName) {
+            String targetServiceName) {
         prepareErrorMsg(INFO_LEVEL, targetEntity, targetServiceName, null, "");
 
         debugLogger.info(msg, normalize(arg0), normalize(arg1), normalize(arg2));
@@ -327,7 +327,7 @@
      *            The arguments used in the log message
      */
     public void info(EELFResolvableErrorEnum msg, String arg0, String arg1, String arg2, String arg3,
-                     String targetEntity, String targetServiceName) {
+            String targetEntity, String targetServiceName) {
         prepareErrorMsg(INFO_LEVEL, targetEntity, targetServiceName, null, "");
 
         debugLogger.info(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3));
@@ -344,7 +344,7 @@
      *            The arguments used in the log message
      */
     public void info(EELFResolvableErrorEnum msg, String arg0, String arg1, String arg2, String arg3, String arg4,
-                     String targetEntity, String targetServiceName) {
+            String targetEntity, String targetServiceName) {
         prepareErrorMsg(INFO_LEVEL, targetEntity, targetServiceName, null, "");
 
         debugLogger.info(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3), normalize(arg4));
@@ -361,7 +361,7 @@
      *            The arguments used in the log message
      */
     public void info(EELFResolvableErrorEnum msg, String arg0, String arg1, String arg2, String arg3, String arg4,
-                     String arg5, String targetEntity, String targetServiceName) {
+            String arg5, String targetEntity, String targetServiceName) {
         prepareErrorMsg(INFO_LEVEL, targetEntity, targetServiceName, null, "");
 
         debugLogger.info(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3), normalize(arg4),
@@ -378,7 +378,7 @@
      *            The log message to put
      */
     public void warn(EELFResolvableErrorEnum msg, String targetEntity, String targetServiceName, ErrorCode errorCode,
-                     String errorDesc) {
+            String errorDesc) {
         prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
 
         errorLogger.warn(msg);
@@ -395,7 +395,7 @@
      *            The exception info
      */
     public void warn(EELFResolvableErrorEnum msg, String targetEntity, String targetServiceName, ErrorCode errorCode,
-                     String errorDesc, Throwable t) {
+            String errorDesc, Throwable t) {
         prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.warn(msg);
         errorLogger.warn("Exception raised: " + getNormalizedStackTrace(t));
@@ -413,7 +413,7 @@
      *            The argument used in the log message
      */
     public void warn(EELFResolvableErrorEnum msg, String arg, String targetEntity, String targetServiceName,
-                     ErrorCode errorCode, String errorDesc) {
+            ErrorCode errorCode, String errorDesc) {
         prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.warn(msg, arg);
         MDC.remove(TARGETENTITY);
@@ -431,7 +431,7 @@
      *            The exception info
      */
     public void warn(EELFResolvableErrorEnum msg, String arg, String targetEntity, String targetServiceName,
-                     ErrorCode errorCode, String errorDesc, Throwable t) {
+            ErrorCode errorCode, String errorDesc, Throwable t) {
         prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.warn(msg, arg);
         errorLogger.warn("Exception raised: " + getNormalizedStackTrace(t));
@@ -449,7 +449,7 @@
      *            The arguments used in the log message
      */
     public void warn(EELFResolvableErrorEnum msg, String arg0, String arg1, String targetEntity,
-                     String targetServiceName, ErrorCode errorCode, String errorDesc) {
+            String targetServiceName, ErrorCode errorCode, String errorDesc) {
         prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.warn(msg, normalize(arg0), normalize(arg1));
         MDC.remove(TARGETENTITY);
@@ -467,7 +467,7 @@
      *            The exception info
      */
     public void warn(EELFResolvableErrorEnum msg, String arg0, String arg1, String targetEntity,
-                     String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
+            String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
         prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.warn(msg, normalize(arg0), normalize(arg1));
         errorLogger.warn("Exception raised: " + getNormalizedStackTrace(t));
@@ -485,7 +485,7 @@
      *            The arguments used in the log message
      */
     public void warn(EELFResolvableErrorEnum msg, String arg0, String arg1, String arg2, String targetEntity,
-                     String targetServiceName, ErrorCode errorCode, String errorDesc) {
+            String targetServiceName, ErrorCode errorCode, String errorDesc) {
         prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.warn(msg, normalize(arg0), normalize(arg1), normalize(arg2));
         MDC.remove(TARGETENTITY);
@@ -503,7 +503,7 @@
      *            The exception info
      */
     public void warn(EELFResolvableErrorEnum msg, String arg0, String arg1, String arg2, String targetEntity,
-                     String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
+            String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
         prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.warn(msg, normalize(arg0), normalize(arg1), normalize(arg2));
         errorLogger.warn("Exception raised: " + getNormalizedStackTrace(t));
@@ -521,7 +521,7 @@
      *            The arguments used in the log message
      */
     public void warn(EELFResolvableErrorEnum msg, String arg0, String arg1, String arg2, String arg3,
-                     String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc) {
+            String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc) {
         prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.warn(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3));
         MDC.remove(TARGETENTITY);
@@ -539,7 +539,7 @@
      *            The exception info
      */
     public void warn(EELFResolvableErrorEnum msg, String arg0, String arg1, String arg2, String arg3,
-                     String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
+            String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
         prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.warn(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3));
         errorLogger.warn("Exception raised: " + getNormalizedStackTrace(t));
@@ -557,7 +557,7 @@
      *            The arguments used in the log message
      */
     public void warn(EELFResolvableErrorEnum msg, String arg0, String arg1, String arg2, String arg3, String arg4,
-                     String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc) {
+            String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc) {
         prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.warn(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3), normalize(arg4));
         MDC.remove(TARGETENTITY);
@@ -575,7 +575,7 @@
      *            The exception info
      */
     public void warn(EELFResolvableErrorEnum msg, String arg0, String arg1, String arg2, String arg3, String arg4,
-                     String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
+            String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
         prepareErrorMsg(WARN_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.warn(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3), normalize(arg4));
         errorLogger.warn("Exception raised: " + getNormalizedStackTrace(t));
@@ -592,7 +592,7 @@
      *            The log message to put
      */
     public void error(EELFResolvableErrorEnum msg, String targetEntity, String targetServiceName, ErrorCode errorCode,
-                      String errorDesc) {
+            String errorDesc) {
         prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.error(msg);
         MDC.remove(TARGETENTITY);
@@ -608,7 +608,7 @@
      *            The exception info
      */
     public void error(EELFResolvableErrorEnum msg, String targetEntity, String targetServiceName, ErrorCode errorCode,
-                      String errorDesc, Throwable t) {
+            String errorDesc, Throwable t) {
         prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.error(msg);
         errorLogger.error(exceptionArg, getNormalizedStackTrace(t));
@@ -626,7 +626,7 @@
      *            The arguments used in the log message
      */
     public void error(EELFResolvableErrorEnum msg, String arg0, String targetEntity, String targetServiceName,
-                      ErrorCode errorCode, String errorDesc) {
+            ErrorCode errorCode, String errorDesc) {
         prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.error(msg, normalize(arg0));
         MDC.remove(TARGETENTITY);
@@ -644,7 +644,7 @@
      *            The exception info
      */
     public void error(EELFResolvableErrorEnum msg, String arg0, String targetEntity, String targetServiceName,
-                      ErrorCode errorCode, String errorDesc, Throwable t) {
+            ErrorCode errorCode, String errorDesc, Throwable t) {
         prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.error(msg, normalize(arg0));
         errorLogger.error(exceptionArg, getNormalizedStackTrace(t));
@@ -662,7 +662,7 @@
      *            The arguments used in the log message
      */
     public void error(EELFResolvableErrorEnum msg, String arg0, String arg1, String targetEntity,
-                      String targetServiceName, ErrorCode errorCode, String errorDesc) {
+            String targetServiceName, ErrorCode errorCode, String errorDesc) {
         prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.error(msg, normalize(arg0), normalize(arg1));
         MDC.remove(TARGETENTITY);
@@ -680,7 +680,7 @@
      *            The exception info
      */
     public void error(EELFResolvableErrorEnum msg, String arg0, String arg1, String targetEntity,
-                      String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
+            String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
         prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.error(msg, normalize(arg0), normalize(arg1));
         errorLogger.error(exceptionArg, getNormalizedStackTrace(t));
@@ -698,7 +698,7 @@
      *            The arguments used in the log message
      */
     public void error(EELFResolvableErrorEnum msg, String arg0, String arg1, String arg2, String targetEntity,
-                      String targetServiceName, ErrorCode errorCode, String errorDesc) {
+            String targetServiceName, ErrorCode errorCode, String errorDesc) {
         prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.error(msg, normalize(arg0), normalize(arg1), normalize(arg2));
         MDC.remove(TARGETENTITY);
@@ -716,7 +716,7 @@
      *            The exception info
      */
     public void error(EELFResolvableErrorEnum msg, String arg0, String arg1, String arg2, String targetEntity,
-                      String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
+            String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
         prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.error(msg, normalize(arg0), normalize(arg1), normalize(arg2));
         errorLogger.error(exceptionArg, getNormalizedStackTrace(t));
@@ -734,7 +734,7 @@
      *            The arguments used in the log message
      */
     public void error(EELFResolvableErrorEnum msg, String arg0, String arg1, String arg2, String arg3,
-                      String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc) {
+            String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc) {
         prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.error(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3));
         MDC.remove(TARGETENTITY);
@@ -752,7 +752,7 @@
      *            The exception info
      */
     public void error(EELFResolvableErrorEnum msg, String arg0, String arg1, String arg2, String arg3,
-                      String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
+            String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
         prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.error(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3));
         errorLogger.error(exceptionArg, getNormalizedStackTrace(t));
@@ -770,7 +770,7 @@
      *            The arguments used in the log message
      */
     public void error(EELFResolvableErrorEnum msg, String arg0, String arg1, String arg2, String arg3, String arg4,
-                      String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc) {
+            String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc) {
         prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.error(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3), normalize(arg4));
         MDC.remove(TARGETENTITY);
@@ -788,7 +788,7 @@
      *            The exception info
      */
     public void error(EELFResolvableErrorEnum msg, String arg0, String arg1, String arg2, String arg3, String arg4,
-                      String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
+            String targetEntity, String targetServiceName, ErrorCode errorCode, String errorDesc, Throwable t) {
         prepareErrorMsg(ERROR_LEVEL, targetEntity, targetServiceName, errorCode, errorDesc);
         errorLogger.error(msg, normalize(arg0), normalize(arg1), normalize(arg2), normalize(arg3), normalize(arg4));
         errorLogger.error(exceptionArg, getNormalizedStackTrace(t));
@@ -839,7 +839,7 @@
     }
 
     private void prepareAuditMetricMsg(long startTime, long endTime, StatusCode statusCode, int responseCode,
-                                       String responseDesc) {
+            String responseDesc) {
         Date startDate = new Date(startTime);
         Date endDate = new Date(endTime);
         DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
@@ -852,7 +852,7 @@
     }
 
     private void prepareErrorMsg(String loggingLevel, String targetEntity, String targetServiceName,
-                                 ErrorCode errorCode, String errorDesc) {
+            ErrorCode errorCode, String errorDesc) {
         MDC.put(ALERT_SEVERITY, getSeverityLevel(loggingLevel));
         MDC.put(ERRORCODE, String.valueOf(errorCode));
         MDC.put(ERRORDESC, errorDesc);
@@ -862,7 +862,7 @@
     }
 
     private void prepareMetricMsg(long startTime, StatusCode statusCode, int responseCode, String responseDesc,
-                                  String targetEntity, String targetServiceName, String targetVEntity) {
+            String targetEntity, String targetServiceName, String targetVEntity) {
         long endTime = System.currentTimeMillis();
         prepareMsg(INFO_LEVEL, null, String.valueOf(endTime - startTime));
         prepareAuditMetricMsg(startTime, endTime, statusCode, responseCode, responseDesc);
@@ -1000,7 +1000,7 @@
 
     /**
      * Set the requestId and serviceInstanceId
-     *
+     * 
      * @param reqId
      *            The requestId
      * @param svcId
@@ -1018,7 +1018,7 @@
 
     /**
      * Set the remoteIp and the basic HTTP Authentication user
-     *
+     * 
      * @param remoteIpp
      *            The remote ip address
      * @param userp
@@ -1035,7 +1035,7 @@
 
     /**
      * Set the serviceName
-     *
+     * 
      * @param serviceNamep
      *            The service name
      */
@@ -1048,7 +1048,7 @@
 
     /**
      * Get the serviceName
-     *
+     * 
      * @return The service name
      */
     public static String getServiceName() {
@@ -1064,7 +1064,7 @@
 
     /**
      * Set the requestId and serviceInstanceId based on the mso request
-     *
+     * 
      * @param msoRequest
      *            The mso request
      */
diff --git a/common/src/main/java/org/openecomp/mso/logger/MsoLoggingServlet.java b/common/src/main/java/org/openecomp/mso/logger/MsoLoggingServlet.java
index 568ab22..c1de64b 100644
--- a/common/src/main/java/org/openecomp/mso/logger/MsoLoggingServlet.java
+++ b/common/src/main/java/org/openecomp/mso/logger/MsoLoggingServlet.java
@@ -39,7 +39,11 @@
 import ch.qos.logback.classic.joran.JoranConfigurator;
 import ch.qos.logback.core.Appender;
 
+import com.wordnik.swagger.annotations.Api;
+import com.wordnik.swagger.annotations.ApiOperation;
+
 @Path("/logging")
+@Api(value="/logging",description="logging")
 public class MsoLoggingServlet {
 
     private static final String DEBUGLOG = "asyncEELFDebug";
@@ -51,6 +55,7 @@
     @GET
     @Path("/setLevel/{logContext}/{level}")
     @Produces("text/plain")
+    @ApiOperation(value="message print",response=Response.class)
     public Response setLogLevel (@PathParam("logContext") String logContext, @PathParam("level") String level) {
         logger.info (MessageEnum.LOGGER_SETUP, "", "");
         
@@ -81,6 +86,7 @@
     @Path("/loggers")
     @Produces("text/plain")
     @SuppressWarnings("rawtypes")
+    @ApiOperation(value="message print",response=Response.class)
     public Response getLoggers () {
         StringBuilder response = new StringBuilder ();
         LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); 
@@ -99,6 +105,7 @@
     @GET
     @Path("/debug")
     @Produces("text/plain")
+    @ApiOperation(value="message print",response=Response.class)
     @SuppressWarnings("rawtypes")
     /*
      * Debug log is used as a general log to store all the logs events, including events generated by MSO code or by
diff --git a/common/src/main/java/org/openecomp/mso/properties/MsoDatabaseException.java b/common/src/main/java/org/openecomp/mso/properties/MsoDatabaseException.java
new file mode 100644
index 0000000..f38495e
--- /dev/null
+++ b/common/src/main/java/org/openecomp/mso/properties/MsoDatabaseException.java
@@ -0,0 +1,51 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * OPENECOMP - 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=========================================================
+ */
+
+package org.openecomp.mso.properties;
+
+
+/**
+ * Exception during artifact installation.
+ */
+public class MsoDatabaseException extends RuntimeException {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -7048331652191419371L;
+
+    /**
+     * @param message The message to dump
+     * @param cause The Throwable cause object
+     */
+    public MsoDatabaseException (final String message) {
+        super (message);
+       
+    }
+	
+    /**
+     * @param message The message to dump
+     * @param cause The Throwable cause object
+     */
+    public MsoDatabaseException (final String message, final Throwable cause) {
+        super (message, cause);
+       
+    }
+}
diff --git a/common/src/main/java/org/openecomp/mso/properties/MsoJsonProperties.java b/common/src/main/java/org/openecomp/mso/properties/MsoJsonProperties.java
index 976b579..cfc9c7d 100644
--- a/common/src/main/java/org/openecomp/mso/properties/MsoJsonProperties.java
+++ b/common/src/main/java/org/openecomp/mso/properties/MsoJsonProperties.java
@@ -25,12 +25,13 @@
 import java.io.IOException;
 import java.security.GeneralSecurityException;
 
-import org.codehaus.jackson.JsonNode;
-import org.codehaus.jackson.JsonParseException;
-import org.codehaus.jackson.map.JsonMappingException;
-import org.codehaus.jackson.map.ObjectMapper;
 import org.openecomp.mso.utils.CryptoUtils;
 
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 
 public class MsoJsonProperties extends AbstractMsoProperties {
 	
diff --git a/common/src/main/resources/BPMN.properties b/common/src/main/resources/BPMN.properties
index 298268b..9e8a7e7 100644
--- a/common/src/main/resources/BPMN.properties
+++ b/common/src/main/resources/BPMN.properties
@@ -87,8 +87,8 @@
                   Exception encountered|\
                   Please check other logs for more information|\
                   Exception encountered        
-BPMN_SDNC_CALLBACK_EXCEPTION=\
+BPMN_CALLBACK_EXCEPTION=\
                   MSO-BPEL-9102E|\
-                  {0} Exception occurred during processing of MSO sdncAdapterCallbackService {1}|\
+                  {0} Exception occurred processing callback to BPMN process {1}|\
                   Please check other logs for more information|\
-                  Exception occurred during processing of MSO sdncAdapterCallbackService                                                                                                         
+                  Exception occurred processing callback to BPMN process
diff --git a/common/src/main/resources/Policy.properties b/common/src/main/resources/Policy.properties
new file mode 100644
index 0000000..383aa18
--- /dev/null
+++ b/common/src/main/resources/Policy.properties
@@ -0,0 +1,6 @@
+HOST = https://mtanjvsgcvm02.nvp.cip.att.com:8081/pdp/api/getDecision
+CLIENT_AUTH = Basic bTAzNzQzOnBvbGljeVIwY2sk
+AUTHORIZATION = Basic dGVzdHBkcDphbHBoYTEyMw==
+ENVIRONMENT = TEST
+X_ECOMP_REQUESTID = 1234567h
+ECOMP_COMPONENT_NAME = MSO
\ No newline at end of file
