diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/pom.xml.versionsBackup
new file mode 100644
index 0000000..a2786b2
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/pom.xml.versionsBackup
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>
+    <dependencies>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.aspectj</groupId>
+            <artifactId>aspectjrt</artifactId>
+            <version>1.8.9</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+    </dependencies>
+
+    <parent>
+        <groupId>org.openecomp.sdc</groupId>
+        <artifactId>openecomp-logging-lib</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+
+    <artifactId>openecomp-sdc-logging-api</artifactId>
+    <name>openecomp-sdc-logging-api</name>
+    <version>1.0-SNAPSHOT</version>
+
+    <!--dependencies>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-core</artifactId>
+            <version>4.1.3.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <version>4.1.3.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-beans</artifactId>
+            <version>4.1.3.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-beans</artifactId>
+            <version>4.1.3.RELEASE</version>
+        </dependency>
+    </dependencies-->
+
+    
+</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/LoggerFactory.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/LoggerFactory.java
index 7029ded..68365fd 100644
--- a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/LoggerFactory.java
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/LoggerFactory.java
@@ -23,185 +23,212 @@
 
 /**
  * <a>Factory to hide a concrete, framework-specific implementation of logger creation.</a>
- *
- * <p>The service used by this factory must implement {@link LoggerCreationService}. If no implementation has been
- * configured or could not be instantiated, a <b>no-op logger</b> will be used, and <b>no events</b> will be logged.
- * This is done to prevent recursion if attempts are being made to log exceptions that resulted from logger
- * initialization.
- * </p>
+ * <p>The service used by this factory must implement {@link LoggerCreationService}. If no
+ * implementation has been configured or could not be instantiated, a <b>no-op logger</b> will be
+ * used, and <b>no events</b> will be logged. This is done to prevent recursion if attempts are
+ * being made to log exceptions that resulted from logger initialization. </p>
  *
  * @author evitaliy
- * @since 13/09/2016.
- *
  * @see BaseFactory
  * @see LoggerCreationService
+ * @since 13/09/2016.
  */
 @SuppressWarnings("ThrowableInstanceNeverThrown")
 public class LoggerFactory extends BaseFactory {
 
-    private static final LoggerCreationService SERVICE;
+  private static final LoggerCreationService SERVICE;
 
-    static {
-        LoggerCreationService service;
+  static {
+    LoggerCreationService service;
 
-        try {
-            service = locateService(LoggerCreationService.class);
-        } catch (Throwable e) {
-            new RuntimeException("Failed to instantiate logger factory", e).printStackTrace();
-            // use the no-op service to prevent recursion in case of an attempt to log an exception as a
-            // result of a logger initialization error
-            service = new NoOpLoggerCreationService();
-        }
-
-        SERVICE = service;
+    try {
+      service = locateService(LoggerCreationService.class);
+    } catch (Exception ex) {
+      new RuntimeException("Failed to instantiate logger factory", ex).printStackTrace();
+      // use the no-op service to prevent recursion in case of an attempt to log an exception as a
+      // result of a logger initialization error
+      service = new NoOpLoggerCreationService();
     }
 
-    public static Logger getLogger(String clazzName) {
-        return SERVICE.getLogger(clazzName);
+    SERVICE = service;
+  }
+
+  public static Logger getLogger(String clazzName) {
+    return SERVICE.getLogger(clazzName);
+  }
+
+  public static Logger getLogger(Class<?> clazz) {
+    return SERVICE.getLogger(clazz);
+  }
+
+  private static class NoOpLoggerCreationService implements LoggerCreationService {
+
+    private static final Logger NO_OP_LOGGER = new Logger() {
+
+      @Override
+      public String getName() {
+        return "No-Op Logger";
+      }
+
+      @Override
+      public boolean isMetricsEnabled() {
+        return false;
+      }
+
+      @Override
+      public void metrics(String msg) {
+      }
+
+      @Override
+      public void metrics(String msg, Object arg) {
+      }
+
+      @Override
+      public void metrics(String msg, Object arg1, Object arg2) {
+      }
+
+      @Override
+      public void metrics(String msg, Object... arguments) {
+      }
+
+      @Override
+      public void metrics(String msg, Throwable t) {
+      }
+
+      @Override
+      public boolean isAuditEnabled() {
+        return false;
+      }
+
+      @Override
+      public void audit(String msg) {
+      }
+
+      @Override
+      public void audit(String msg, Object arg) {
+      }
+
+      @Override
+      public void audit(String msg, Object arg1, Object arg2) {
+      }
+
+      @Override
+      public void audit(String msg, Object... arguments) {
+      }
+
+      @Override
+      public void audit(String msg, Throwable t) {
+      }
+
+      @Override
+      public boolean isDebugEnabled() {
+        return false;
+      }
+
+      @Override
+      public void debug(String msg) {
+      }
+
+      @Override
+      public void debug(String msg, Object arg) {
+      }
+
+      @Override
+      public void debug(String msg, Object arg1, Object arg2) {
+      }
+
+      @Override
+      public void debug(String msg, Object... arguments) {
+      }
+
+      @Override
+      public void debug(String msg, Throwable t) {
+      }
+
+      @Override
+      public boolean isInfoEnabled() {
+        return false;
+      }
+
+      @Override
+      public void info(String msg) {
+      }
+
+      @Override
+      public void info(String msg, Object arg) {
+      }
+
+      @Override
+      public void info(String msg, Object arg1, Object arg2) {
+      }
+
+      @Override
+      public void info(String msg, Object... arguments) {
+      }
+
+      @Override
+      public void info(String msg, Throwable t) {
+      }
+
+      @Override
+      public boolean isWarnEnabled() {
+        return false;
+      }
+
+      @Override
+      public void warn(String msg) {
+      }
+
+      @Override
+      public void warn(String msg, Object arg) {
+      }
+
+      @Override
+      public void warn(String msg, Object... arguments) {
+      }
+
+      @Override
+      public void warn(String msg, Object arg1, Object arg2) {
+      }
+
+      @Override
+      public void warn(String msg, Throwable t) {
+      }
+
+      @Override
+      public boolean isErrorEnabled() {
+        return false;
+      }
+
+      @Override
+      public void error(String msg) {
+      }
+
+      @Override
+      public void error(String msg, Object arg) {
+      }
+
+      @Override
+      public void error(String msg, Object arg1, Object arg2) {
+      }
+
+      @Override
+      public void error(String msg, Object... arguments) {
+      }
+
+      @Override
+      public void error(String msg, Throwable t) {
+      }
+    };
+
+    @Override
+    public Logger getLogger(String className) {
+      return NO_OP_LOGGER;
     }
 
-    public static Logger getLogger(Class<?> clazz) {
-        return SERVICE.getLogger(clazz);
+    @Override
+    public Logger getLogger(Class<?> clazz) {
+      return NO_OP_LOGGER;
     }
-
-    private static class NoOpLoggerCreationService implements LoggerCreationService {
-        
-        private static final Logger NO_OP_LOGGER = new Logger() {
-            
-            @Override
-            public String getName() {
-                return "No-Op Logger";
-            }
-
-            @Override
-            public boolean isMetricsEnabled() {
-                return false;
-            }
-
-            @Override
-            public void metrics(String msg) { }
-
-            @Override
-            public void metrics(String msg, Object arg) { }
-
-            @Override
-            public void metrics(String msg, Object arg1, Object arg2) { }
-
-            @Override
-            public void metrics(String msg, Object... arguments) { }
-
-            @Override
-            public void metrics(String msg, Throwable t) { }
-
-            @Override
-            public boolean isAuditEnabled() {
-                return false;
-            }
-
-            @Override
-            public void audit(String msg) { }
-
-            @Override
-            public void audit(String msg, Object arg) { }
-
-            @Override
-            public void audit(String msg, Object arg1, Object arg2) { }
-
-            @Override
-            public void audit(String msg, Object... arguments) { }
-
-            @Override
-            public void audit(String msg, Throwable t) { }
-
-            @Override
-            public boolean isDebugEnabled() {
-                return false;
-            }
-
-            @Override
-            public void debug(String msg) { }
-
-            @Override
-            public void debug(String msg, Object arg) { }
-
-            @Override
-            public void debug(String msg, Object arg1, Object arg2) { }
-
-            @Override
-            public void debug(String msg, Object... arguments) { }
-
-            @Override
-            public void debug(String msg, Throwable t) { }
-
-            @Override
-            public boolean isInfoEnabled() {
-                return false;
-            }
-
-            @Override
-            public void info(String msg) { }
-
-            @Override
-            public void info(String msg, Object arg) { }
-
-            @Override
-            public void info(String msg, Object arg1, Object arg2) { }
-
-            @Override
-            public void info(String msg, Object... arguments) { }
-
-            @Override
-            public void info(String msg, Throwable t) { }
-
-            @Override
-            public boolean isWarnEnabled() {
-                return false;
-            }
-
-            @Override
-            public void warn(String msg) { }
-
-            @Override
-            public void warn(String msg, Object arg) { }
-
-            @Override
-            public void warn(String msg, Object... arguments) { }
-
-            @Override
-            public void warn(String msg, Object arg1, Object arg2) { }
-
-            @Override
-            public void warn(String msg, Throwable t) { }
-
-            @Override
-            public boolean isErrorEnabled() {
-                return false;
-            }
-
-            @Override
-            public void error(String msg) { }
-
-            @Override
-            public void error(String msg, Object arg) { }
-
-            @Override
-            public void error(String msg, Object arg1, Object arg2) { }
-
-            @Override
-            public void error(String msg, Object... arguments) { }
-
-            @Override
-            public void error(String msg, Throwable t) { }
-        };
-        
-        @Override
-        public Logger getLogger(String className) {
-            return NO_OP_LOGGER;
-        }
-
-        @Override
-        public Logger getLogger(Class<?> clazz) {
-            return NO_OP_LOGGER;
-        }
-    }
+  }
 }
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/context/TaskFactory.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/context/TaskFactory.java
index 3ad999f..e2b31c3 100644
--- a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/context/TaskFactory.java
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/context/TaskFactory.java
@@ -23,57 +23,53 @@
 import org.openecomp.sdc.logging.api.BaseFactory;
 
 /**
- * <p>Should be used to propagate a diagnostic context (for instance
- * <a href="http://www.slf4j.org/manual.html#mdc">MDC</a>) to other threads.</p>
- *
- * <p>Applicable when creating a child thread directly, or submitting tasks for potentially postponed execution via
- * an <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html">Executor</a> (including
- * any of the <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html">executor
- * services</a> and
- * <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html">ForkJoinPool</a>).</p>
- *
+ * <p>Should be used to propagate a diagnostic context (for instance <a
+ * href="http://www.slf4j.org/manual.html#mdc">MDC</a>) to other threads.</p>
+ * <p>Applicable when creating a child thread directly, or submitting tasks for potentially
+ * postponed execution via an <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html">Executor</a>
+ * (including any of the <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html">executor
+ * services</a> and <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html">ForkJoinPool</a>).</p>
  * <p>The service used by this factory must implement {@link ContextPropagationService}.</p>
  *
  * @author evitaliy
- * @since 12/09/2016.
- *
  * @see ContextPropagationService
+ * @since 12/09/2016.
  */
 @SuppressWarnings("ThrowableInstanceNeverThrown")
 public class TaskFactory extends BaseFactory {
 
-    private static final ContextPropagationService SERVICE;
-    private static final RuntimeException ERROR;
+  private static final ContextPropagationService SERVICE;
+  private static final RuntimeException ERROR;
 
-    static {
+  static {
 
-        ContextPropagationService service = null;
-        RuntimeException error = null;
+    ContextPropagationService service = null;
+    RuntimeException error = null;
 
-        try {
-            service = locateService(ContextPropagationService.class);
-        } catch (Throwable e) {
-            error = new RuntimeException("Failed to instantiate task factory", e);
-        }
-
-        SERVICE = service;
-        ERROR = error;
+    try {
+      service = locateService(ContextPropagationService.class);
+    } catch (Exception ex) {
+      error = new RuntimeException("Failed to instantiate task factory", ex);
     }
 
-    /**
-     * Modify a task so that a diagnostic context is propagated to the thread when the task runs. Done in a
-     * logging-framework specific way.
-     *
-     * @param task any Runnable that will run in a thread
-     * @return modified (wrapped) original task that runs the same business logic, but also takes care of copying the
-     *         diagnostic context for logging
-     */
-    public static Runnable create(Runnable task) {
+    SERVICE = service;
+    ERROR = error;
+  }
 
-        if (SERVICE == null) {
-            throw ERROR;
-        }
+  /**
+   * Modify a task so that a diagnostic context is propagated to the thread when the task runs. Done
+   * in a logging-framework specific way.
+   *
+   * @param task any Runnable that will run in a thread
+   * @return modified (wrapped) original task that runs the same business logic, but also takes care
+   * of copying the diagnostic context for logging
+   */
+  public static Runnable create(Runnable task) {
 
-        return SERVICE.create(task);
+    if (SERVICE == null) {
+      throw ERROR;
     }
+
+    return SERVICE.create(task);
+  }
 }
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/messages/AuditMessages.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/messages/AuditMessages.java
index 028a1bc..f23a2c5 100644
--- a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/messages/AuditMessages.java
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/messages/AuditMessages.java
@@ -5,24 +5,25 @@
  */
 public class AuditMessages {
 
-    public static final String AUDIT_MSG = " --Audit-- ";
+  public static final String AUDIT_MSG = " --Audit-- ";
 
-    public static final String CREATE_VLM = "Create VLM. VLM Name: ";
-    public static final String CHECK_IN_VLM = "Check in VLM. VLM Id: ";
-    public static final String CHECK_OUT_VLM = "Check out VLM. VLM Id: ";
-    public static final String SUBMIT_VLM = "submit VLM. VLM Name: ";
+  public static final String CREATE_VLM = "Create VLM. VLM Name: ";
+  public static final String CHECK_IN_VLM = "Check in VLM. VLM Id: ";
+  public static final String CHECK_OUT_VLM = "Check out VLM. VLM Id: ";
+  public static final String SUBMIT_VLM = "submit VLM. VLM Name: ";
 
-    public static final String CREATE_VSP = "Create VSP. VSP Name: ";
-    public static final String CHECK_IN_VSP = "Check in VSP. VSP Id: ";
-    public static final String CHECK_OUT_VSP = "Check out VSP. VSP Id: ";
-    public static final String SUBMIT_VSP = "Submit VSP. VSP Id: ";
+  public static final String CREATE_VSP = "Create VSP. VSP Name: ";
+  public static final String CHECK_IN_VSP = "Check in VSP. VSP Id: ";
+  public static final String CHECK_OUT_VSP = "Check out VSP. VSP Id: ";
+  public static final String SUBMIT_VSP = "Submit VSP. VSP Id: ";
 
-    public static final String UPLOAD_HEAT = "Upload HEAT. VSP Id: ";
-    public static final String UPLOAD_PROCESS_ARTIFACT = "Upload Process Artifact. VSP Id: ";
-    public static final String UPLOAD_ARTIFACT_MIB_POLL = "Upload Artifact SNMP POLL. VSP Id: ";
-    public static final String UPLOAD_ARTIFACT_MIB_TRAP = "Upload Artifact SNMP TRAP. VSP Id: ";
+  public static final String UPLOAD_HEAT = "Upload HEAT. VSP Id: ";
+  public static final String UPLOAD_PROCESS_ARTIFACT = "Upload Process Artifact. VSP Id: ";
+  public static final String UPLOAD_MONITORING_FILE = "Upload Monitoring File of type %s " +
+      "" + ". VSP Id: %s, component id: %s";
+//    public static final String UPLOAD_ARTIFACT_MIB_TRAP = "Upload Artifact SNMP TRAP. VSP Id: ";
 
-    public static final String IMPORT_SUCCESS = "VSP import to VF success. VSP Id: ";
-    public static final String IMPORT_FAIL = "VSP import to VF fail. VSP Id: ";
+  public static final String IMPORT_SUCCESS = "VSP import to VF success. VSP Id: ";
+  public static final String IMPORT_FAIL = "VSP import to VF fail. VSP Id: ";
 
 }
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorCode.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorCode.java
index 141a149..3f48991 100644
--- a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorCode.java
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorCode.java
@@ -27,7 +27,7 @@
   DATA_ERROR("300"),
   SCHEMA_ERROR("400"),
   BUSINESS_PROCESS_ERROR("500"),
-  UNKNOWN_ERROR("900");
+  UNKNOWN_ERROR("900"), ;
 
   private String errorCode;
 
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorDescription.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorDescription.java
index 16a7b43..7e502d5 100644
--- a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorDescription.java
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorDescription.java
@@ -55,6 +55,8 @@
   public static final String VALIDATE_FILE = "Can't validate file";
   public static final String INVALID_FILE_TYPE = "Invalid file type";
   public static final String INVALID_ZIP = "Invalid zip file";
+  public static final String INVALID_VES_FILE = "Invalid VES file";
+
 
 
   public static final String RESOURCE_UNIQUE_NETWORK_ROLE =
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerServiceName.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerServiceName.java
index 3fac954..c6d9ebb 100644
--- a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerServiceName.java
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerServiceName.java
@@ -7,9 +7,9 @@
  * 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.
@@ -38,6 +38,11 @@
   Get_EP,
   Delete_EP,
 
+  Create_LIMIT,
+  Delete_LIMIT,
+  Update_LIMIT,
+  Get_LIMIT,
+
   List_FG,
   Create_FG,
   Update_FG,
@@ -104,9 +109,9 @@
   Get_Questionnaire_Component,
   Update_Questionnaire_Component,
 
-  Upload_MIB_File,
-  Delete_MIB_File,
-  List_MIB_Files,
+  Upload_Monitoring_Artifact,
+  Delete_Monitoring_Artifact,
+  List_Monitoring_Artifacts,
 
   List_Network,
   Create_Network,
@@ -126,19 +131,42 @@
   Create_Process,
   Update_Process,
 
+  Create_Compute,
+  List_Computes,
+  Get_Compute,
+  Update_Compute,
+  Delete_Compute,
+  Get_Questionnaire_Compute,
+  Update_Questionnaire_Compute,
+
   Insert_To_ApplicationConfig_Table,
   Get_From_ApplicationConfig_Table,
   Get_List_From_ApplicationConfig_Table_By_Namespace,
 
+  Create_Deployment_Flavor,
+  Get_List_Deployment_flavor,
+  Get_Deployment_flavor,
+  Delete_Deployment_flavor,
+  Update_Deployment_flavor,
+
   Get_List_Activity_Log,
 
   Validate,
   Enrich, Delete_VSP, Get_Process_Artifact, Create_Entity, Checkout_Entity, Undo_Checkout_Entity,
   Checkin_Entity, Submit_Entity, Get_Entity_Version, Delete_Entity, Undo_Delete_Entity,
   Translate_Resource, Translate_HEAT, LoggerServiceName, Get_VSP_List, Delete_VLM, Update_Manifest,
+  Create_Image,
+  GET_Image_Schema,
+  List_Images,
+  GET_Image,
+  Delete_Image,
+  Update_Image,
 
   CREATE_COMPONENT_DEPENDENCY_MODEL,
-  GET_COMPONENT_DEPENDENCY_MODEL;
+  GET_COMPONENT_DEPENDENCY_MODEL,
+
+  Health_check
+  ;
 
   public static String getServiceName(LoggerServiceName serviceName) {
     return serviceName.name().replace("_", " ");
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerTragetServiceName.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerTragetServiceName.java
index b496d73..6b0570e 100644
--- a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerTragetServiceName.java
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerTragetServiceName.java
@@ -7,9 +7,9 @@
  * 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.
@@ -122,7 +122,9 @@
 
   public static final String SUBMIT_VSP = "Submit VSP";
   public static final String GET_VSP = "Get VSP";
+  public static final String ADD_VSP = "Add VSP";
   public static final String DELETE_VSP = "Delete VSP";
+  public static final String UPDATE_VSP = "Update VSP";
   public static final String ENRICH = "Enrich";
   public static final String UPLOAD_FILE = "Upload file";
   public static final String GET_UPLOADED_HEAT = "Get Uploaded HEAT File";
@@ -135,8 +137,8 @@
 
   public static final String GET_VLM = "Get VLM";
 
-  public static final String VALIDATE_MIB = "Validate MIB File";
-  public static final String UPLOAD_MIB = "Upload MIB file";
+  public static final String VALIDATE_MONITORING_FILE = "Validate Monitoring File";
+  public static final String UPLOAD_MONITORING_FILE = "Upload Monitoring file";
 
   public static final String GET_VERSION_INFO = "Get version info";
 
@@ -145,12 +147,18 @@
 
   public static final String CREATE_COMPONENT = "Create Component";
   public static final String DELETE_COMPONENT = "Delete Component";
+  public static final String UPDATE_COMPONENT = "Update Component";
 
   public static final String GET_PROCESS_ARTIFACT = "Get Process Artifact";
   public static final String UPLOAD_PROCESS_ARTIFACT = "Upload Process Artifact";
 
   public static final String CREATE_NIC = "Create Nic";
   public static final String DELETE_NIC = "Delete Nic";
+  public static final String UPDATE_NIC = "Update Nic";
+
+  public static final String CREATE_DEPLOYMENT_FLAVOR = "Create Deployment Flavor";
+  public static final String DELETE_DEPLOYMENT_FLAVOR = "Delete Deployment Flavor";
+  public static final String UPDATE_DEPLOYMENT_FLAVOR = "Update Deployment Flavor";
 
   public static final String EXTRACT_COMPOSITION_DATA = "Extract Composition Data";
 
@@ -178,6 +186,18 @@
       "Insert Value Into Application Config";
 
   public static final String VALIDATE_FILE_DATA_STRUCTURE = "Validate Manifest Sent From User";
+  public static final String CREATE_IMAGE = "Create Image";
+  public static final String DELETE_IMAGE = "Delete Image";
+  public static final String UPDATE_IMAGE = "Update Image";
+
+  public static final String CREATE_COMPUTE = "Create Compute";
+  public static final String UPDATE_COMPUTE = "Update Compute";
+  public static final String DELETE_COMPUTE = "Delete Compute";
+
+  public static final String COLLECT_MANUAL_VSP_TOSCA_DATA = "Collect Manual Vsp Tosca data";
+  public static final String GENERATE_MANUAL_VSP_TOSCA = "Generate Manual Vsp Tosca";
+
+  public static final String VALIDATE_DATE_RANGE = "Validate Date Range";
 
   public static final String CREATE_COMPONENT_DEPENDENCY_MODEL = "Create Component Dependency "
       + "Model";
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/pom.xml.versionsBackup
new file mode 100644
index 0000000..374de71
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/pom.xml.versionsBackup
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>
+    <dependencies>
+        <!--dependency>
+            <groupId>org.openecomp.core</groupId>
+            <artifactId>openecomp-common-lib</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency-->
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-logging-api</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <version>4.1.3.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-webmvc</artifactId>
+            <version>4.1.3.RELEASE</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>${logback.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+            <version>2.5</version>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>1.1.7</version>
+        </dependency>
+
+    </dependencies>
+
+    <parent>
+        <groupId>org.openecomp.sdc</groupId>
+        <artifactId>openecomp-logging-lib</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.openecomp.sdc</groupId>
+    <artifactId>openecomp-sdc-logging-core</artifactId>
+    <name>openecomp-sdc-logging-core</name>
+    <version>1.0-SNAPSHOT</version>
+
+    
+</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-logging-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-logging-lib/pom.xml.versionsBackup
new file mode 100644
index 0000000..7765713
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/pom.xml.versionsBackup
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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.openecomp.sdc</groupId>
+        <artifactId>openecomp-sdc-lib</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.openecomp.sdc</groupId>
+    <name>openecomp-logging-lib</name>
+    <artifactId>openecomp-logging-lib</artifactId>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>/openecomp-sdc-logging-api</module>
+        <module>/openecomp-sdc-logging-core</module>
+    </modules>
+
+    
+</project>
\ No newline at end of file
