diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/action-library-rest-services/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/action-library-rest-services/pom.xml.versionsBackup
new file mode 100644
index 0000000..47b9bdd
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/action-library-rest-services/pom.xml.versionsBackup
@@ -0,0 +1,143 @@
+<?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>
+
+    <artifactId>action-library-rest-services</artifactId>
+    <parent>
+        <groupId>org.openecomp.sdc.onboarding</groupId>
+        <artifactId>action-library-rest</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+
+    <properties>
+        <errorcode.dir>${project.build.directory}/generated-sources/error-codes</errorcode.dir>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>action-library-rest-types</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <!-- Spring -->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-core</artifactId>
+            <version>${spring.framework.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <version>${spring.framework.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context-support</artifactId>
+            <version>${spring.framework.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-web</artifactId>
+            <version>${spring.framework.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-beans</artifactId>
+            <version>${spring.framework.version}</version>
+        </dependency>
+
+        <!-- CXF -->
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+            <version>${cxf.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>${http.client.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpcore</artifactId>
+            <version>${http.client.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>${ws.rs.version}</version>
+        </dependency>
+
+        <!-- Other Stuff-->
+        <!--dependency>
+            <groupId>cglib</groupId>
+            <artifactId>cglib-nodep</artifactId>
+            <version>${cglib.nodep.version}</version>
+            <scope>runtime</scope>
+        </dependency-->
+
+        <!-- Java Stuff -->
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <version>${javax.inject.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-action-manager</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-action-api</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.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>1.7.21</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.jersey.contribs</groupId>
+            <artifactId>jersey-multipart</artifactId>
+            <version>1.18.1</version>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <includes>
+                        <include>test/core/unittest/offline/**</include>
+                    </includes>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
+            <!-- Error codes generator plugin -->
+            <!--plugin>
+                <groupId>org.openecomp.nfv.tools</groupId>
+                <artifactId>error-codes-maven-plugin</artifactId>
+            </plugin-->
+        </plugins>
+    </build>
+
+
+
+
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/action-library-rest-types/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/action-library-rest-types/pom.xml.versionsBackup
new file mode 100644
index 0000000..4749ce7
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/action-library-rest-types/pom.xml.versionsBackup
@@ -0,0 +1,36 @@
+<?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>
+
+    <artifactId>action-library-rest-types</artifactId>
+    <name>action-library-rest-types</name>
+
+    <parent>
+        <groupId>org.openecomp.sdc.onboarding</groupId>
+        <artifactId>action-library-rest</artifactId>
+        <version>1.0-SNAPSHOT</version>
+        <relativePath>../</relativePath>
+    </parent>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-common-rest</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-action-api</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <!--<dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-vendor-license-manager</artifactId>
+            <version>${project.version}</version>
+        </dependency>-->
+    </dependencies>
+
+
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/pom.xml.versionsBackup
new file mode 100644
index 0000000..de6c4c6
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/action-library-rest/pom.xml.versionsBackup
@@ -0,0 +1,22 @@
+<?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>
+    <groupId>org.openecomp.sdc.onboarding</groupId>
+    <artifactId>action-library-rest</artifactId>
+    <name>action-library-rest</name>
+    <version>1.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+    <parent>
+        <groupId>org.openecomp.sdc</groupId>
+        <artifactId>openecomp-sdc-rest-webapp</artifactId>
+        <version>1.0-SNAPSHOT</version>
+        <relativePath>../</relativePath>
+    </parent>
+    <modules>
+        <module>/action-library-rest-services</module>
+        <module>/action-library-rest-types</module>
+    </modules>
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/activity-log-rest/activity-log-rest-types/src/main/java/org/openecomp/sdcrests/activitylog/types/ActivityType.java b/openecomp-be/api/openecomp-sdc-rest-webapp/activity-log-rest/activity-log-rest-types/src/main/java/org/openecomp/sdcrests/activitylog/types/ActivityType.java
index dcbad72..6bfd50b 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/activity-log-rest/activity-log-rest-types/src/main/java/org/openecomp/sdcrests/activitylog/types/ActivityType.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/activity-log-rest/activity-log-rest-types/src/main/java/org/openecomp/sdcrests/activitylog/types/ActivityType.java
@@ -28,7 +28,7 @@
     CHECKOUT("Check Out"),
     CHECKIN("Check In"),
     UPLOAD_HEAT("Upload Heat"),
-    UPLOAD_ARTIFACT("Upload Artifact"),
+  UPLOAD_MONITORING_FILE("Upload Monitoring File"),
     SUBMIT("Submit");
 
     // after collaboration will be added - this will be added:
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/application-config-rest-services/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/application-config-rest-services/pom.xml.versionsBackup
new file mode 100644
index 0000000..9c3472a
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/application-config-rest-services/pom.xml.versionsBackup
@@ -0,0 +1,63 @@
+<?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>application-config-rest</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>application-config-rest-services</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <!--packaging>pom</packaging-->
+
+    <dependencies>
+
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>1.5.3</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>${ws.rs.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <version>${spring.framework.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <version>1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-application-config-manager</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+             <groupId>org.openecomp.sdc</groupId>
+            <artifactId>application-config-rest-types</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-common-rest</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <!-- CXF -->
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+            <version>${cxf.version}</version>
+        </dependency>
+    </dependencies>
+
+    
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/application-config-rest-types/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/application-config-rest-types/pom.xml.versionsBackup
new file mode 100644
index 0000000..a9c8bba
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/application-config-rest-types/pom.xml.versionsBackup
@@ -0,0 +1,18 @@
+<?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>application-config-rest</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.openecomp.sdc</groupId>
+    <artifactId>application-config-rest-types</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/pom.xml.versionsBackup
new file mode 100644
index 0000000..fd2e251
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/application-config-rest/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-rest-webapp</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.openecomp.sdc</groupId>
+    <artifactId>application-config-rest</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+
+    <modules>
+        <module>application-config-rest-services</module>
+        <module>application-config-rest-types</module>
+    </modules>
+    
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-services/pom.xml b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-services/pom.xml
new file mode 100644
index 0000000..d41c8ef
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-services/pom.xml
@@ -0,0 +1,60 @@
+<?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>healthcheck-rest</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>healthcheck-rest-services</artifactId>
+    <version>1.1.0-SNAPSHOT</version>
+    <!--packaging>pom</packaging-->
+
+    <dependencies>
+
+
+        <dependency>
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>${ws.rs.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <version>${spring.framework.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <version>1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-healthcheck-manager</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+             <groupId>org.openecomp.sdc</groupId>
+            <artifactId>healthcheck-rest-types</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-common-rest</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+         <!-- CXF -->
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+            <version>${cxf.version}</version>
+        </dependency>
+
+    </dependencies>
+
+
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-services/src/main/java/org/openecomp/sdcrests/health/rest/HealthCheck.java b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-services/src/main/java/org/openecomp/sdcrests/health/rest/HealthCheck.java
new file mode 100644
index 0000000..2ed1d57f
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-services/src/main/java/org/openecomp/sdcrests/health/rest/HealthCheck.java
@@ -0,0 +1,46 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * 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.sdcrests.health.rest;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.util.Collection;
+import org.openecomp.sdcrests.health.types.HealthInfoDtos;
+
+@Path("/v1.0/healthcheck")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+@Api(value = "Health Check")
+@Validated
+public interface HealthCheck {
+
+    @GET
+    @ApiOperation(value = "Perform health check",
+            response = HealthInfoDtos.class,
+            responseContainer = "List")
+    Response checkHealth( );
+
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-services/src/main/java/org/openecomp/sdcrests/health/rest/mapping/MapHealthCheckInfoToDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-services/src/main/java/org/openecomp/sdcrests/health/rest/mapping/MapHealthCheckInfoToDto.java
new file mode 100644
index 0000000..8d56002
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-services/src/main/java/org/openecomp/sdcrests/health/rest/mapping/MapHealthCheckInfoToDto.java
@@ -0,0 +1,49 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * 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.sdcrests.health.rest.mapping;
+
+import org.openecomp.sdc.health.data.HealthInfo;
+import org.openecomp.sdcrests.health.types.HealthCheckStatus;
+import org.openecomp.sdcrests.health.types.HealthInfoDto;
+import org.openecomp.sdcrests.health.types.HealthInfoDtos;
+import org.openecomp.sdcrests.health.types.MonitoredModules;
+import org.openecomp.sdcrests.mapping.MappingBase;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Created by Talio on 8/10/2016.
+ */
+public class MapHealthCheckInfoToDto
+        extends MappingBase<Collection<HealthInfo>, HealthInfoDtos> {
+    @Override
+    public void doMapping(Collection<HealthInfo> source, HealthInfoDtos target) {
+
+        List<HealthInfoDto> healthInfos = source.stream()
+                .map(healthInfo -> new HealthInfoDto(
+                        MonitoredModules.toValue(healthInfo.getHealthCheckComponent().toString()),
+                        HealthCheckStatus.valueOf(healthInfo.getHealthCheckStatus().toString()),
+                        healthInfo.getVersion(), healthInfo.getDescription())).collect(Collectors.toList());
+        target.setHealthInfos(healthInfos);
+    }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-services/src/main/java/org/openecomp/sdcrests/health/rest/services/HealthCheckImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-services/src/main/java/org/openecomp/sdcrests/health/rest/services/HealthCheckImpl.java
new file mode 100644
index 0000000..047adaa
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-services/src/main/java/org/openecomp/sdcrests/health/rest/services/HealthCheckImpl.java
@@ -0,0 +1,94 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * 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.sdcrests.health.rest.services;
+
+import org.apache.cxf.jaxrs.impl.ResponseBuilderImpl;
+import org.openecomp.sdc.health.HealthCheckManager;
+import org.openecomp.sdc.health.HealthCheckManagerFactory;
+import org.openecomp.sdc.health.data.HealthCheckResult;
+import org.openecomp.sdc.health.data.HealthCheckStatus;
+import org.openecomp.sdc.health.data.HealthInfo;
+import org.openecomp.sdc.health.data.SiteMode;
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
+import org.openecomp.sdc.logging.context.MdcUtil;
+import org.openecomp.sdc.logging.types.LoggerServiceName;
+import org.openecomp.sdcrests.health.types.HealthInfoDtos;
+import org.openecomp.sdcrests.wrappers.GenericCollectionWrapper;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Service;
+
+import javax.inject.Named;
+import javax.ws.rs.core.Response;
+import java.util.Arrays;
+import java.util.Collection;
+
+@Named
+@Service("healthCheck")
+@Scope(value = "prototype")
+public class HealthCheckImpl implements org.openecomp.sdcrests.health.rest.HealthCheck {
+
+    private HealthCheckManager healthCheckManager;
+    private static final Logger logger = LoggerFactory.getLogger(HealthCheckImpl.class);
+
+    public HealthCheckImpl() {
+        try {
+            healthCheckManager = HealthCheckManagerFactory.getInstance().createInterface();
+        } catch (Exception e){
+            logger.error(e.getMessage(),e);
+        }
+    }
+
+    @Override
+    public Response checkHealth() {
+        HealthCheckResult healthCheckResult = new HealthCheckResult();
+
+        try {
+            MdcUtil.initMdc(LoggerServiceName.Health_check.toString());
+            Collection<HealthInfo> healthInfos = healthCheckManager.checkHealth();
+            healthCheckResult.setComponentsInfo(healthInfos);
+            boolean someIsDown = healthInfos.stream()
+                    .anyMatch(healthInfo -> healthInfo.getHealthCheckStatus().equals(HealthCheckStatus.DOWN));
+           healthInfos.stream().
+                   filter(healthInfo -> healthInfo.getHealthCheckComponent()
+                           .equals(org.openecomp.sdc.health.data.MonitoredModules.BE)).
+                   findFirst().ifPresent(healthInfo -> healthCheckResult.setSdcVersion(healthInfo.getVersion()));
+            if (someIsDown) {
+                Response.ResponseBuilder responseBuilder = new ResponseBuilderImpl();
+                return responseBuilder.entity(healthCheckResult).status(500).build();
+            }
+            return Response.ok(healthCheckResult).build();
+        } catch (Exception ex) {
+            logger.error("Health check failed", ex);
+            Response.ResponseBuilder responseBuilder = new ResponseBuilderImpl();
+            GenericCollectionWrapper<HealthInfoDtos> results = new GenericCollectionWrapper<>();
+             HealthInfo healthInfo = new HealthInfo(org.openecomp.sdc.health.data.MonitoredModules.BE ,
+                     HealthCheckStatus.DOWN,
+                    "", "Failed to perform Health Check");
+            Collection<HealthInfo> healthInfos = Arrays.asList(healthInfo);
+            healthCheckResult.setComponentsInfo(healthInfos);
+            return responseBuilder.entity(healthCheckResult).status(500).build();
+        }
+    }
+
+
+}
+
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-types/pom.xml b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-types/pom.xml
new file mode 100644
index 0000000..2922980
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-types/pom.xml
@@ -0,0 +1,17 @@
+<?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>healthcheck-rest</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>healthcheck-rest-types</artifactId>
+    <version>1.1.0-SNAPSHOT</version>
+
+    
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-types/src/main/java/org/openecomp/sdcrests/health/types/HealthCheckStatus.java b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-types/src/main/java/org/openecomp/sdcrests/health/types/HealthCheckStatus.java
new file mode 100644
index 0000000..b634a98
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-types/src/main/java/org/openecomp/sdcrests/health/types/HealthCheckStatus.java
@@ -0,0 +1,28 @@
+package org.openecomp.sdcrests.health.types;
+
+
+public enum HealthCheckStatus {
+    UP("UP"),
+    DOWN("DOWN");
+
+    private String name;
+
+    HealthCheckStatus(String name) {
+        this.name = name;
+    }
+
+
+    @Override
+    public String toString() {
+        return name;
+    }
+
+    public static final HealthCheckStatus toValue(String inVal){
+        for (HealthCheckStatus val : values()){
+            if (val.toString().equals(inVal)){
+                return val;
+            }
+        }
+        return null;
+    }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-types/src/main/java/org/openecomp/sdcrests/health/types/HealthInfoDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-types/src/main/java/org/openecomp/sdcrests/health/types/HealthInfoDto.java
new file mode 100644
index 0000000..9ed93cf
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-types/src/main/java/org/openecomp/sdcrests/health/types/HealthInfoDto.java
@@ -0,0 +1,61 @@
+package org.openecomp.sdcrests.health.types;
+
+
+public class HealthInfoDto {
+    private MonitoredModules healthCheckComponent;
+    private HealthCheckStatus healthStatus;
+    private String version;
+    private String description;
+
+    public HealthInfoDto() {
+    }
+
+    public HealthInfoDto(MonitoredModules healthCheckComponent, HealthCheckStatus healthStatus, String version, String description) {
+        this.healthCheckComponent = healthCheckComponent;
+        this.healthStatus = healthStatus;
+        this.version = version;
+        this.description = description;
+    }
+
+    public MonitoredModules getHealthCheckComponent() {
+        return healthCheckComponent;
+    }
+
+    public void setHealthCheckComponent(MonitoredModules healthCheckComponent) {
+        this.healthCheckComponent = healthCheckComponent;
+    }
+
+    public HealthCheckStatus getHealthStatus() {
+        return healthStatus;
+    }
+
+    public void setHealthStatus(HealthCheckStatus healthStatus) {
+        this.healthStatus = healthStatus;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public String toString() {
+        return "HealthInfo{" +
+                "healthCheckComponent='" + healthCheckComponent + '\'' +
+                ", healthStatus=" + healthStatus +
+                ", version='" + version + '\'' +
+                ", description='" + description + '\'' +
+                '}';
+    }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-types/src/main/java/org/openecomp/sdcrests/health/types/HealthInfoDtos.java b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-types/src/main/java/org/openecomp/sdcrests/health/types/HealthInfoDtos.java
new file mode 100644
index 0000000..e1385d6
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-types/src/main/java/org/openecomp/sdcrests/health/types/HealthInfoDtos.java
@@ -0,0 +1,31 @@
+package org.openecomp.sdcrests.health.types;
+
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class HealthInfoDtos {
+    private List<HealthInfoDto> healthInfos;
+
+    public HealthInfoDtos() {
+    }
+
+    public HealthInfoDtos(List<HealthInfoDto> healthInfos) {
+        this.healthInfos = healthInfos;
+    }
+
+    public List<HealthInfoDto> getHealthInfos() {
+        return healthInfos;
+    }
+
+    public void setHealthInfos(List<HealthInfoDto> healthInfos) {
+        this.healthInfos = healthInfos;
+    }
+
+    @Override
+    public String toString() {
+       return  healthInfos.stream().map(healthInfoDto -> healthInfoDto.toString())
+               .collect(Collectors.joining(", "));
+
+    }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-types/src/main/java/org/openecomp/sdcrests/health/types/MonitoredModules.java b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-types/src/main/java/org/openecomp/sdcrests/health/types/MonitoredModules.java
new file mode 100644
index 0000000..5ecb37a
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-types/src/main/java/org/openecomp/sdcrests/health/types/MonitoredModules.java
@@ -0,0 +1,29 @@
+package org.openecomp.sdcrests.health.types;
+
+
+public enum MonitoredModules {
+    BE("BE"),
+    CAS("Cassandra"),
+    ZU("Zusammen");
+
+    private String name;
+
+    MonitoredModules(String name) {
+        this.name = name;
+    }
+
+
+    @Override
+    public String toString() {
+        return name;
+    }
+
+    public static final MonitoredModules toValue(String inVal){
+        for (MonitoredModules val : values()){
+            if (val.toString().equals(inVal)){
+                return val;
+            }
+        }
+        return null;
+    }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/pom.xml b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/pom.xml
new file mode 100644
index 0000000..1bb3e98
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/pom.xml
@@ -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-rest-webapp</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.openecomp.sdc</groupId>
+    <artifactId>healthcheck-rest</artifactId>
+    <version>1.1.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+
+    <modules>
+        <module>healthcheck-rest-types</module>
+        <module>healthcheck-rest-services</module>
+     </modules>
+    
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/pom.xml b/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/pom.xml
index db4b486..b45ee83 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/pom.xml
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/pom.xml
@@ -35,6 +35,11 @@
             <artifactId>validation-rest-services</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>healthcheck-rest-services</artifactId>
+            <version>${project.version}</version>
+        </dependency>
         <!--dependency>
             <groupId>org.openecomp.sdc.onboarding</groupId>
             <artifactId>application-config-rest-services</artifactId>
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/pom.xml.versionsBackup
new file mode 100644
index 0000000..983518f
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/pom.xml.versionsBackup
@@ -0,0 +1,226 @@
+<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>
+
+    <groupId>org.openecomp.sdc.onboarding</groupId>
+    <artifactId>onboarding-be</artifactId>
+    <name>onboarding-rest-war</name>
+    <version>1.0-SNAPSHOT</version>
+    <packaging>war</packaging>
+
+    <parent>
+        <groupId>org.openecomp.sdc</groupId>
+        <artifactId>openecomp-sdc-rest-webapp</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.openecomp.sdc.onboarding</groupId>
+            <artifactId>vendor-license-rest-services</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc.onboarding</groupId>
+            <artifactId>vendor-software-products-rest-services</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc.onboarding</groupId>
+            <artifactId>validation-rest-services</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <!--dependency>
+            <groupId>org.openecomp.sdc.onboarding</groupId>
+            <artifactId>application-config-rest-services</artifactId>
+            <version>${project.version}</version>
+        </dependency-->
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>application-config-rest-services</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc.onboarding</groupId>
+            <artifactId>action-library-rest-services</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+            <version>${javax.servlet.version}</version>
+        </dependency>
+        <!-- JSON -->
+        <dependency>
+            <groupId>org.codehaus.jackson</groupId>
+            <artifactId>jackson-jaxrs</artifactId>
+            <version>${org.codehaus.jackson.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.jackson</groupId>
+            <artifactId>jackson-core-asl</artifactId>
+            <version>${org.codehaus.jackson.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <version>1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-vendor-software-product-manager</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-servlets</artifactId>
+            <version>9.0.6.v20130930</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-application-config-manager</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.groovy</groupId>
+            <artifactId>groovy</artifactId>
+            <version>${groovy.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>${logback.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-core</artifactId>
+            <version>${logback.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.janino</groupId>
+            <artifactId>janino</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <!--dependency>
+            <groupId>org.codehaus.janino</groupId>
+            <artifactId>commons-compiler</artifactId>
+            <version>3.0.6</version>
+            <scope>compile</scope>
+        </dependency-->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-core</artifactId>
+            <version>4.1.3.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-web</artifactId>
+            <version>4.1.3.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-aop</artifactId>
+            <version>4.1.3.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-webmvc</artifactId>
+            <version>4.1.3.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.aspectj</groupId>
+            <artifactId>aspectjweaver</artifactId>
+            <version>1.8.9</version>
+        </dependency>
+        <dependency>
+            <groupId>org.aspectj</groupId>
+            <artifactId>aspectjrt</artifactId>
+            <version>1.8.9</version>
+        </dependency>
+        <dependency>
+            <groupId>org.aspectj</groupId>
+            <artifactId>aspectjtools</artifactId>
+            <version>1.8.9</version>
+        </dependency>
+
+    </dependencies>
+
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <includes>
+                        <include>test/core/unittest/offline/**</include>
+                    </includes>
+                    <skipTests>true</skipTests>
+                    <systemProperties>
+                        <property>
+                            <name>buildNumber</name>
+                            <value>${buildNumber}</value>
+                        </property>
+                    </systemProperties>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>2.1.1</version>
+                <configuration>
+                    <attachClasses>true</attachClasses>
+                    <webResources>
+                        <resource>
+                            <!-- this is relative to the pom.xml directory -->
+                            <directory>${basedir}/target/generated/swagger-ui</directory>
+                        </resource>
+                    </webResources>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>com.github.kongchen</groupId>
+                <artifactId>swagger-maven-plugin</artifactId>
+                <version>3.1.0</version>
+                <configuration>
+                    <apiSources>
+                        <apiSource>
+                            <springmvc>false</springmvc>
+                            <locations>org.openecomp.sdcrests</locations>
+                            <schemes>http</schemes>
+                            <basePath>/onboarding-api</basePath>
+                            <info>
+                                <title>Rest API</title>
+                                <version>v1.0, build #${buildNumber}</version>
+                                <description>Rest API Documentation</description>
+                                <termsOfService>
+                                    http://www.github.com/kongchen/swagger-maven-plugin
+                                </termsOfService>
+                            </info>
+                            <templatePath>${basedir}/templates/strapdown.html.hbs</templatePath>
+                            <outputPath>${basedir}/target/generated/api.html</outputPath>
+                            <swaggerDirectory>${basedir}/target/generated/swagger-ui
+                            </swaggerDirectory>
+                        </apiSource>
+                    </apiSources>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+
+        <!--finalName>onboarding-api</finalName-->
+    </build>
+
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/webapp/WEB-INF/beans-services.xml b/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/webapp/WEB-INF/beans-services.xml
index 609d69f..c83ae44 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/webapp/WEB-INF/beans-services.xml
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/webapp/WEB-INF/beans-services.xml
@@ -37,7 +37,7 @@
 
     <!-- aspect beans -->
     <bean id = "debugAspect" class="org.openecomp.sdc.logging.aspects.DebugAspect"/>
-
+    <bean id = "healthCheck" class="org.openecomp.sdcrests.health.rest.services.HealthCheckImpl"/>
     <!--aop:config>
         < aspect pointcuts>
         <aop:pointcut id="loggingDebugPointcut" expression="execution(* org.openecomp.sdc.*.*.*(..))"/>
@@ -60,20 +60,26 @@
             <ref bean="licenseAgreements"/>
             <ref bean="featureGroups"/>
             <ref bean="entitlementPools"/>
+            <ref bean="entitlementPoolLimits"/>
             <ref bean="licenseKeyGroups"/>
+            <ref bean="licenseKeyGroupLimits"/>
             <ref bean="vendorSoftwareProducts"/>
             <ref bean="networks"/>
             <ref bean="components"/>
             <ref bean="nics"/>
+            <ref bean="computes"/>
             <ref bean="processes"/>
             <ref bean="componentProcesses"/>
             <ref bean="validation"/>
             <ref bean="actions"/>
             <ref bean="applicationConfiguration"/>
-            <ref bean="componentUploads"/>
+            <ref bean="componentMonitoringUploads"/>
+            <ref bean="deploymentFlavors"/>
+	        <ref bean="images"/>
             <ref bean="orchestrationTemplateCandidate"/>
             <ref bean="componentDependencyModel"/>
             <ref bean="activityLog"/>
+            <ref bean="healthCheck"/>
         </jaxrs:serviceBeans>
 
         <jaxrs:providers>
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/openecomp-sdc-common-rest/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/openecomp-sdc-common-rest/pom.xml.versionsBackup
new file mode 100644
index 0000000..aaf3383
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/openecomp-sdc-common-rest/pom.xml.versionsBackup
@@ -0,0 +1,44 @@
+<?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>
+    <artifactId>openecomp-sdc-common-rest</artifactId>
+    <name>openecomp-sdc-common-rest</name>
+    <parent>
+        <groupId>org.openecomp.sdc</groupId>
+        <artifactId>openecomp-sdc-rest-webapp</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.openecomp.core</groupId>
+            <artifactId>openecomp-utilities-lib</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.core</groupId>
+            <artifactId>openecomp-common-lib</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-validator</artifactId>
+            <version>${hibernate.validator.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>${ws.rs.version}</version>
+        </dependency>
+        <!-- Swagger -->
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-core</artifactId>
+            <version>${swagger.version}</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/openecomp-sdc-common-rest/src/main/java/org/openecomp/sdcrests/errors/DefaultExceptionMapper.java b/openecomp-be/api/openecomp-sdc-rest-webapp/openecomp-sdc-common-rest/src/main/java/org/openecomp/sdcrests/errors/DefaultExceptionMapper.java
index af77268..e8a6c7e 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/openecomp-sdc-common-rest/src/main/java/org/openecomp/sdcrests/errors/DefaultExceptionMapper.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/openecomp-sdc-common-rest/src/main/java/org/openecomp/sdcrests/errors/DefaultExceptionMapper.java
@@ -22,8 +22,6 @@
 
 import org.codehaus.jackson.map.JsonMappingException;
 import org.hibernate.validator.internal.engine.path.PathImpl;
-import org.openecomp.sdc.logging.api.Logger;
-import org.openecomp.sdc.logging.api.LoggerFactory;
 import org.openecomp.core.utilities.CommonMethods;
 import org.openecomp.core.utilities.file.FileUtils;
 import org.openecomp.core.utilities.json.JsonUtil;
@@ -34,10 +32,10 @@
 import org.openecomp.sdc.common.errors.GeneralErrorBuilder;
 import org.openecomp.sdc.common.errors.JsonMappingErrorBuilder;
 import org.openecomp.sdc.common.errors.ValidationErrorBuilder;
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
 
-import java.io.ByteArrayOutputStream;
 import java.io.File;
-import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -50,8 +48,8 @@
 import javax.validation.ConstraintViolationException;
 import javax.validation.Path;
 import javax.ws.rs.core.MediaType;
-import javax.ws.rs.ext.ExceptionMapper;
 import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
 
 public class DefaultExceptionMapper implements ExceptionMapper<Exception> {
   private static final String ERROR_CODES_TO_RESPONSE_STATUS_MAPPING_FILE =
@@ -78,8 +76,8 @@
 
     try {
       writeStackTraceToFile(exception);
-    } catch (IOException e) {
-      e.printStackTrace();
+    } catch (IOException ex) {
+      ex.printStackTrace();
     }
     List<Object> contentTypes = new ArrayList<>();
     contentTypes.add(MediaType.APPLICATION_JSON);
@@ -174,15 +172,14 @@
 
   private void writeStackTraceToFile(Exception exception) throws IOException {
     File file = new File("stack_trace.txt");
-    OutputStream outputStream = new FileOutputStream(file);
-
-    if(!file.exists()){
+    if (!file.exists()) {
       file.createNewFile();
     }
-
+    OutputStream outputStream = new FileOutputStream(file);
     PrintWriter printWriter = new PrintWriter(file);
     exception.printStackTrace(printWriter);
     printWriter.close();
+    outputStream.close();
   }
 
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/pom.xml b/openecomp-be/api/openecomp-sdc-rest-webapp/pom.xml
index 907e68f..9fe4ff8 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/pom.xml
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/pom.xml
@@ -23,6 +23,7 @@
 		<module>/action-library-rest</module>
 		<module>/application-config-rest</module>
 		<module>/activity-log-rest</module>
+		<module>/healthcheck-rest</module>
 	</modules>
 
 </project>
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/pom.xml.versionsBackup
new file mode 100644
index 0000000..cd9b491
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/pom.xml.versionsBackup
@@ -0,0 +1,28 @@
+<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>
+
+	<artifactId>openecomp-sdc-rest-webapp</artifactId>
+	<name>openecomp-sdc-rest-webapp</name>
+	<version>1.0-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<parent>
+		<groupId>org.openecomp.sdc</groupId>
+		<artifactId>openecomp-sdc-api</artifactId>
+		<version>1.0-SNAPSHOT</version>
+		<relativePath>../</relativePath>
+	</parent>
+
+	<modules>
+		<module>/openecomp-sdc-common-rest</module>
+		<module>/vendor-license-rest</module>
+		<module>/onboarding-rest-war</module>
+		<module>/vendor-software-products-rest</module>
+		<module>/sequence-rest</module>
+		<module>/validation-rest</module>
+		<module>/action-library-rest</module>
+		<module>/application-config-rest</module>
+	</modules>
+
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/sequence-rest/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/sequence-rest/pom.xml.versionsBackup
new file mode 100644
index 0000000..313a50c
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/sequence-rest/pom.xml.versionsBackup
@@ -0,0 +1,15 @@
+<?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">
+    <parent>
+        <artifactId>openecomp-sdc-rest-webapp</artifactId>
+        <groupId>org.openecomp.sdc</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>sequence-rest</artifactId>
+
+
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/pom.xml.versionsBackup
new file mode 100644
index 0000000..8bacd99
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/pom.xml.versionsBackup
@@ -0,0 +1,21 @@
+<?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>
+    <groupId>org.openecomp.sdc.onboarding</groupId>
+    <artifactId>validation-rest</artifactId>
+    <name>validation-rest</name>
+    <version>1.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+    <parent>
+        <groupId>org.openecomp.sdc</groupId>
+        <artifactId>openecomp-sdc-rest-webapp</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modules>
+        <module>/validation-rest-services</module>
+        <module>/validation-rest-types</module>
+    </modules>
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/validation-rest-services/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/validation-rest-services/pom.xml.versionsBackup
new file mode 100644
index 0000000..ffc4173
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/validation-rest-services/pom.xml.versionsBackup
@@ -0,0 +1,152 @@
+<?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>
+
+    <artifactId>validation-rest-services</artifactId>
+    <parent>
+        <groupId>org.openecomp.sdc.onboarding</groupId>
+        <artifactId>validation-rest</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <dependencies>
+    <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-core</artifactId>
+        <version>${spring.framework.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-context</artifactId>
+        <version>${spring.framework.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-context-support</artifactId>
+        <version>${spring.framework.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-web</artifactId>
+        <version>${spring.framework.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-beans</artifactId>
+        <version>${spring.framework.version}</version>
+    </dependency>
+
+    <!-- CXF -->
+    <dependency>
+        <groupId>org.apache.cxf</groupId>
+        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+        <version>${cxf.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>org.apache.httpcomponents</groupId>
+        <artifactId>httpclient</artifactId>
+        <version>${http.client.version}</version>
+    </dependency>
+
+    <dependency>
+        <groupId>javax.ws.rs</groupId>
+        <artifactId>javax.ws.rs-api</artifactId>
+        <version>${ws.rs.version}</version>
+    </dependency>
+
+    <!-- Other Stuff-->
+    <!--dependency>
+        <groupId>cglib</groupId>
+        <artifactId>cglib-nodep</artifactId>
+        <version>${cglib.nodep.version}</version>
+        <scope>runtime</scope>
+    </dependency-->
+
+    <!-- Java Stuff -->
+    <dependency>
+        <groupId>javax.inject</groupId>
+        <artifactId>javax.inject</artifactId>
+        <version>${javax.inject.version}</version>
+        <scope>provided</scope>
+    </dependency>
+        <dependency>
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>${ws.rs.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.jersey</groupId>
+            <artifactId>jersey-core</artifactId>
+            <version>1.19.1</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>javax.ws.rs</groupId>
+                    <artifactId>jsr311-api</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>1.5.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc.onboarding</groupId>
+            <artifactId>validation-rest-types</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+            <version>2.7.4</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-xml</artifactId>
+            <version>2.7.4</version>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.woodstox</groupId>
+            <artifactId>woodstox-core-asl</artifactId>
+            <version>4.4.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-vendor-software-product-manager</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.jersey.contribs</groupId>
+            <artifactId>jersey-multipart</artifactId>
+            <version>1.18.1</version>
+            <scope>provided</scope>
+        </dependency>
+
+
+    </dependencies>
+
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <includes>
+                        <include>test/core/unittest/offline/**</include>
+                    </includes>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
+            <!-- Error codes generator plugin -->
+            <!--plugin>
+                <groupId>org.openecomp.nfv.tools</groupId>
+                <artifactId>error-codes-maven-plugin</artifactId>
+            </plugin-->
+        </plugins>
+    </build>
+    
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/validation-rest-types/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/validation-rest-types/pom.xml.versionsBackup
new file mode 100644
index 0000000..5cc8ee7
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/validation-rest/validation-rest-types/pom.xml.versionsBackup
@@ -0,0 +1,30 @@
+<?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>
+
+    <artifactId>validation-rest-types</artifactId>
+    <name>validation-rest-types</name>
+
+    <parent>
+        <groupId>org.openecomp.sdc.onboarding</groupId>
+        <artifactId>validation-rest</artifactId>
+        <version>1.0-SNAPSHOT</version>
+        <relativePath>../</relativePath>
+    </parent>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-common-rest</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-validation-manager</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/pom.xml.versionsBackup
new file mode 100644
index 0000000..ae9c306
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/pom.xml.versionsBackup
@@ -0,0 +1,23 @@
+<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>
+
+	<groupId>org.openecomp.sdc.onboarding</groupId>
+	<artifactId>vendor-license-rest</artifactId>
+	<name>vendor-license-rest</name>
+	<version>1.0-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<parent>
+		<groupId>org.openecomp.sdc</groupId>
+		<artifactId>openecomp-sdc-rest-webapp</artifactId>
+		<version>1.0-SNAPSHOT</version>
+		<relativePath>../</relativePath>
+	</parent>
+
+	<modules>
+		<module>/vendor-license-rest-services</module>
+		<module>/vendor-license-rest-types</module>
+	</modules>
+
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/pom.xml.versionsBackup
new file mode 100644
index 0000000..187135e
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/pom.xml.versionsBackup
@@ -0,0 +1,135 @@
+<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>
+
+	<artifactId>vendor-license-rest-services</artifactId>
+	<name>vendor-license-rest-services</name>
+
+	<parent>
+		<groupId>org.openecomp.sdc.onboarding</groupId>
+		<artifactId>vendor-license-rest</artifactId>
+		<version>1.0-SNAPSHOT</version>
+		<relativePath>../</relativePath>
+	</parent>
+
+
+	<properties>
+		<errorcode.dir>${project.build.directory}/generated-sources/error-codes</errorcode.dir>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>vendor-license-rest-types</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.openecomp.sdc</groupId>
+			<artifactId>openecomp-sdc-vendor-license-api</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.openecomp.sdc</groupId>
+			<artifactId>openecomp-sdc-vendor-license-manager</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
+
+		<!-- Spring -->
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-core</artifactId>
+			<version>${spring.framework.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-context</artifactId>
+			<version>${spring.framework.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-context-support</artifactId>
+			<version>${spring.framework.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-web</artifactId>
+			<version>${spring.framework.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-beans</artifactId>
+			<version>${spring.framework.version}</version>
+		</dependency>
+
+		<!-- CXF -->
+		<dependency>
+			<groupId>org.apache.cxf</groupId>
+			<artifactId>cxf-rt-frontend-jaxrs</artifactId>
+			<version>${cxf.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpclient</artifactId>
+			<version>${http.client.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpcore</artifactId>
+			<version>${http.client.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>javax.ws.rs</groupId>
+			<artifactId>javax.ws.rs-api</artifactId>
+			<version>${ws.rs.version}</version>
+		</dependency>
+
+		<!-- Other Stuff-->
+		<!--dependency>
+			<groupId>cglib</groupId>
+			<artifactId>cglib-nodep</artifactId>
+			<version>${cglib.nodep.version}</version>
+			<scope>runtime</scope>
+		</dependency-->
+
+		<!-- Java Stuff -->
+		<dependency>
+			<groupId>javax.inject</groupId>
+			<artifactId>javax.inject</artifactId>
+			<version>${javax.inject.version}</version>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.openecomp.sdc</groupId>
+			<artifactId>openecomp-sdc-vendor-software-product-manager</artifactId>
+			<version>1.0-SNAPSHOT</version>
+		</dependency>
+
+	</dependencies>
+
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<configuration>
+					<includes>
+						<include>test/core/unittest/offline/**</include>
+					</includes>
+					<skipTests>true</skipTests>
+				</configuration>
+			</plugin>
+			<!-- Error codes generator plugin -->
+			<!--plugin>
+				<groupId>org.openecomp.nfv.tools</groupId>
+				<artifactId>error-codes-maven-plugin</artifactId>
+			</plugin-->
+		</plugins>
+	</build>
+
+
+
+
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/EntitlementPoolLimits.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/EntitlementPoolLimits.java
new file mode 100644
index 0000000..3e7adc8
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/EntitlementPoolLimits.java
@@ -0,0 +1,103 @@
+package org.openecomp.sdcrests.vendorlicense.rest;
+
+import static org.openecomp.sdcrests.common.RestConstants.USER_ID_HEADER_PARAM;
+import static org.openecomp.sdcrests.common.RestConstants.USER_MISSING_ERROR_MSG;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+
+import org.openecomp.sdcrests.vendorlicense.types.LimitEntityDto;
+import org.openecomp.sdcrests.vendorlicense.types.LimitRequestDto;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.POST;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+@Path("/v1.0/vendor-license-models/{vlmId}/versions/{versionId}/entitlement-pools" +
+    "/{entitlementPoolId}/limits")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+@Api(value = "Vendor License Model - Entitlement Pool Limits")
+@Validated
+public interface EntitlementPoolLimits {
+
+  @POST
+  @Path("/")
+  @ApiOperation(value = "Create vendor entitlement pool limits")
+  Response createLimit(@Valid LimitRequestDto request,
+                                 @ApiParam(value = "Vendor license model Id") @PathParam("vlmId")
+                                     String vlmId,
+                                 @ApiParam(value = "Vendor license model version Id") @PathParam
+                                     ("versionId")
+                                     String versionId,
+                                 @ApiParam(value = "Vendor license model Entitlement Pool Id")
+                                      @PathParam("entitlementPoolId")
+                                          String entitlementPoolId  ,
+                                 @NotNull(message = USER_MISSING_ERROR_MSG)
+                                 @HeaderParam(USER_ID_HEADER_PARAM) String user);
+
+
+  @GET
+  @Path("/")
+  @ApiOperation(value = "List vendor entitlement pool limits",
+      response = LimitRequestDto.class,
+      responseContainer = "List")
+  Response listLimits(
+      @ApiParam(value = "Vendor license model Id") @PathParam("vlmId") String vlmId,
+      @ApiParam(value = "Vendor license model version Id") @PathParam("versionId") String versionId,
+      @ApiParam(value = "Vendor license model Entitlement Pool Id") @PathParam("entitlementPoolId")
+          String entitlementPoolId,
+      @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM) String user);
+
+  @PUT
+  @Path("/{limitId}")
+  @ApiOperation(value = "Update vendor entitlement pool limit")
+  Response updateLimit(@Valid LimitRequestDto request,
+                       @ApiParam(value = "Vendor license model Id") @PathParam("vlmId")
+                           String vlmId,
+                       @ApiParam(value = "Vendor license model version Id") @PathParam
+                           ("versionId")
+                           String versionId,
+                       @ApiParam(value = "Vendor license model Entitlement Pool Id")
+                       @PathParam("entitlementPoolId")
+                           String entitlementPoolId  ,
+                       @NotNull(message = USER_MISSING_ERROR_MSG)
+                       @PathParam("limitId") String limitId,
+                       @HeaderParam(USER_ID_HEADER_PARAM) String user);
+
+  @GET
+  @Path("/{limitId}")
+  @ApiOperation(value = "Get vendor entitlement pool limit",
+      response = LimitEntityDto.class)
+  Response getLimit(
+      @ApiParam(value = "Vendor license model Id") @PathParam("vlmId") String vlmId,
+      @ApiParam(value = "Vendor license model version Id") @PathParam("versionId") String versionId,
+      @ApiParam(value = "Vendor license model Entitlement Pool Id") @PathParam
+          ("entitlementPoolId") String entitlementPoolId,
+      @ApiParam(value = "Vendor license model Entitlement Pool Limit Id") @PathParam("limitId")
+          String limitId,
+      @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM) String user);
+
+  @DELETE
+  @Path("/{limitId}")
+  @ApiOperation(value = "Delete vendor entitlement pool limit")
+  Response deleteLimit(
+    @ApiParam(value = "Vendor license model Id") @PathParam("vlmId") String vlmId,
+    @ApiParam(value = "Vendor license model version Id") @PathParam("versionId") String versionId,
+    @ApiParam(value = "Vendor license model Entitlement pool Id") @PathParam("entitlementPoolId") String entitlementPoolId,
+    @PathParam("limitId") String limitId,
+    @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM) String user);
+
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/LicenseKeyGroupLimits.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/LicenseKeyGroupLimits.java
new file mode 100644
index 0000000..bfb2d51
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/LicenseKeyGroupLimits.java
@@ -0,0 +1,101 @@
+package org.openecomp.sdcrests.vendorlicense.rest;
+
+import static org.openecomp.sdcrests.common.RestConstants.USER_ID_HEADER_PARAM;
+import static org.openecomp.sdcrests.common.RestConstants.USER_MISSING_ERROR_MSG;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.openecomp.sdcrests.vendorlicense.types.EntitlementPoolEntityDto;
+import org.openecomp.sdcrests.vendorlicense.types.LimitEntityDto;
+import org.openecomp.sdcrests.vendorlicense.types.LimitRequestDto;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+@Path("/v1.0/vendor-license-models/{vlmId}/versions/{versionId}/license-key-groups" +
+    "/{licenseKeyGroupId}/limits")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+@Api(value = "Vendor License Model - License Key Group Limits")
+@Validated
+public interface LicenseKeyGroupLimits {
+
+  @POST
+  @Path("/")
+  @ApiOperation(value = "Create vendor license key group limit")
+  Response createLimit(@Valid LimitRequestDto request,
+                       @ApiParam(value = "Vendor license model Id") @PathParam("vlmId")
+                           String vlmId,
+                       @ApiParam(value = "Vendor license model version Id") @PathParam
+                           ("versionId")
+                           String versionId,
+                       @ApiParam(value = "Vendor license model License Key Group Id")
+                       @PathParam("licenseKeyGroupId")
+                           String licenseKeyGroupId  ,
+                       @NotNull(message = USER_MISSING_ERROR_MSG)
+                       @HeaderParam(USER_ID_HEADER_PARAM) String user);
+
+  @GET
+  @Path("/")
+  @ApiOperation(value = "List vendor license key group limits",
+      response = LimitEntityDto.class,
+      responseContainer = "List")
+  Response listLimits(
+      @ApiParam(value = "Vendor license model Id") @PathParam("vlmId") String vlmId,
+      @ApiParam(value = "Vendor license model version Id") @PathParam("versionId") String versionId,
+      @ApiParam(value = "Vendor license model License Key Group Id") @PathParam("licenseKeyGroupId")
+          String licenseKeyGroupId,
+      @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM) String user);
+
+  @PUT
+  @Path("/{limitId}")
+  @ApiOperation(value = "Update vendor license key group limit")
+  Response updateLimit(@Valid LimitRequestDto request,
+                       @ApiParam(value = "Vendor license model Id") @PathParam("vlmId")
+                           String vlmId,
+                       @ApiParam(value = "Vendor license model version Id") @PathParam
+                           ("versionId")
+                           String versionId,
+                       @ApiParam(value = "Vendor license model License Key Group Id")
+                       @PathParam("licenseKeyGroupId")
+                           String licenseKeyGroupId  ,
+                       @NotNull(message = USER_MISSING_ERROR_MSG)
+                       @PathParam("limitId") String limitId,
+                       @HeaderParam(USER_ID_HEADER_PARAM) String user);
+
+  @GET
+  @Path("/{limitId}")
+  @ApiOperation(value = "Get vendor entitlement pool limit",
+      response = LimitEntityDto.class)
+  Response getLimit(
+      @ApiParam(value = "Vendor license model Id") @PathParam("vlmId") String vlmId,
+      @ApiParam(value = "Vendor license model version Id") @PathParam("versionId") String versionId,
+      @ApiParam(value = "Vendor license model License Key Group") @PathParam
+          ("licenseKeyGroupId") String entitlementPoolId,
+      @ApiParam(value = "Vendor license model License Key Group Limit Id") @PathParam("limitId")
+          String limitId,
+      @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM) String user);
+
+    @DELETE
+    @Path("/{limitId}")
+    @ApiOperation(value = "Delete vendor license key group limit")
+    Response deleteLimit(
+            @ApiParam(value = "Vendor license model Id") @PathParam("vlmId") String vlmId,
+            @ApiParam(value = "Vendor license model version Id") @PathParam("versionId") String versionId,
+            @ApiParam(value = "Vendor license model license key group Id") @PathParam("licenseKeyGroupId") String licenseKeyGroupId,
+            @PathParam("limitId") String limitId,
+            @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM) String user);
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/LimitCreationDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/LimitCreationDto.java
new file mode 100644
index 0000000..da7852d
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/LimitCreationDto.java
@@ -0,0 +1,13 @@
+package org.openecomp.sdcrests.vendorlicense.rest.mapping;
+
+public class LimitCreationDto {
+  private String limitId;
+
+  public String getLimitId() {
+    return limitId;
+  }
+
+  public void setLimitId(String limitId) {
+    this.limitId = limitId;
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapEntitlementPoolEntityToEntitlementPoolEntityDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapEntitlementPoolEntityToEntitlementPoolEntityDto.java
index c9f4ab8..d35c06c 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapEntitlementPoolEntityToEntitlementPoolEntityDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapEntitlementPoolEntityToEntitlementPoolEntityDto.java
@@ -47,7 +47,9 @@
         .applyMapping(source.getOperationalScope(), MultiChoiceOrOtherDto.class));
     target.setTime(choiceOrOtherMapper.applyMapping(source.getTime(), ChoiceOrOtherDto.class));
     target.setManufacturerReferenceNumber(source.getManufacturerReferenceNumber());
-
     target.setReferencingFeatureGroups(source.getReferencingFeatureGroups());
+
+    target.setStartDate(source.getStartDate());
+    target.setExpiryDate(source.getExpiryDate());
   }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapEntitlementPoolRequestDtoToEntitlementPoolEntity.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapEntitlementPoolRequestDtoToEntitlementPoolEntity.java
index fe626e3..5442e1a 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapEntitlementPoolRequestDtoToEntitlementPoolEntity.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapEntitlementPoolRequestDtoToEntitlementPoolEntity.java
@@ -45,7 +45,8 @@
     target.setOperationalScope(new MapMultiChoiceOrOtherDtoToMultiChoiceOrOther()
         .applyMapping(source.getOperationalScope(), MultiChoiceOrOther.class));
     target.setTime(choiceOrOtherMapper.applyMapping(source.getTime(), ChoiceOrOther.class));
-
     target.setManufacturerReferenceNumber(source.getManufacturerReferenceNumber());
+    target.setStartDate(source.getStartDate());
+    target.setExpiryDate(source.getExpiryDate());
   }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapFeatureGroupDescriptorDtoToFeatureGroupEntity.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapFeatureGroupDescriptorDtoToFeatureGroupEntity.java
index 9875a33..dedc2a0 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapFeatureGroupDescriptorDtoToFeatureGroupEntity.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapFeatureGroupDescriptorDtoToFeatureGroupEntity.java
@@ -31,5 +31,6 @@
     target.setName(source.getName());
     target.setDescription(source.getDescription());
     target.setPartNumber(source.getPartNumber());
+    target.setManufacturerReferenceNumber(source.getManufacturerReferenceNumber());
   }
-}
+}
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapFeatureGroupEntityToFeatureGroupDescriptorDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapFeatureGroupEntityToFeatureGroupDescriptorDto.java
index 70f5666..ce69384 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapFeatureGroupEntityToFeatureGroupDescriptorDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapFeatureGroupEntityToFeatureGroupDescriptorDto.java
@@ -31,5 +31,6 @@
     target.setName(source.getName());
     target.setDescription(source.getDescription());
     target.setPartNumber(source.getPartNumber());
+    target.setManufacturerReferenceNumber(source.getManufacturerReferenceNumber());
   }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapLimitEntityToLimitCreationDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapLimitEntityToLimitCreationDto.java
new file mode 100644
index 0000000..6883f3e
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapLimitEntityToLimitCreationDto.java
@@ -0,0 +1,12 @@
+package org.openecomp.sdcrests.vendorlicense.rest.mapping;
+
+import org.openecomp.sdc.vendorlicense.dao.types.LimitEntity;
+import org.openecomp.sdcrests.mapping.MappingBase;
+
+public class MapLimitEntityToLimitCreationDto extends
+    MappingBase<LimitEntity, LimitCreationDto> {
+  @Override
+  public void doMapping(LimitEntity source, LimitCreationDto target) {
+    target.setLimitId(source.getId());
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapLimitEntityToLimitDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapLimitEntityToLimitDto.java
new file mode 100644
index 0000000..9678f92
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapLimitEntityToLimitDto.java
@@ -0,0 +1,23 @@
+package org.openecomp.sdcrests.vendorlicense.rest.mapping;
+
+import org.openecomp.sdc.vendorlicense.dao.types.LimitEntity;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorlicense.types.LimitEntityDto;
+import org.openecomp.sdcrests.vendorlicense.types.LimitRequestDto;
+
+public class MapLimitEntityToLimitDto extends MappingBase<LimitEntity, LimitEntityDto> {
+
+  @Override
+  public void doMapping(LimitEntity source, LimitEntityDto target) {
+    target.setId(source.getId());
+    target.setName(source.getName());
+    target.setDescription(source.getDescription());
+    target.setMetric(source.getMetric() != null ? source.getMetric().name() : null);
+    target.setAggregationFunction(source.getAggregationFunction() != null ? source
+        .getAggregationFunction().name() : null);
+    target.setTime(source.getTime() != null ? source.getTime().name() : null);
+    target.setType(source.getType() != null ? source.getType().name() : null);
+    target.setUnit(source.getUnit());
+    target.setValue(source.getValue());
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapLimitRequestDtoToLimitEntity.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapLimitRequestDtoToLimitEntity.java
new file mode 100644
index 0000000..7f48ece
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/mapping/MapLimitRequestDtoToLimitEntity.java
@@ -0,0 +1,75 @@
+package org.openecomp.sdcrests.vendorlicense.rest.mapping;
+
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.common.errors.ErrorCode;
+import org.openecomp.sdc.datatypes.error.ErrorLevel;
+import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
+import org.openecomp.sdc.logging.types.LoggerConstants;
+import org.openecomp.sdc.logging.types.LoggerServiceName;
+import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
+import org.openecomp.sdc.vendorlicense.dao.types.AggregationFunction;
+import org.openecomp.sdc.vendorlicense.dao.types.EntitlementMetric;
+import org.openecomp.sdc.vendorlicense.dao.types.EntitlementTime;
+import org.openecomp.sdc.vendorlicense.dao.types.LimitEntity;
+import org.openecomp.sdc.vendorlicense.errors.LimitErrorBuilder;
+import org.openecomp.sdc.vendorlicense.errors.VendorLicenseErrorCodes;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.ImageErrorBuilder;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorlicense.types.LimitRequestDto;
+import org.openecomp.sdc.vendorlicense.dao.types.LimitType;
+
+
+public class MapLimitRequestDtoToLimitEntity extends MappingBase<LimitRequestDto, LimitEntity> {
+  @Override
+  public void doMapping(LimitRequestDto source, LimitEntity target) {
+    target.setName(source.getName());
+    target.setDescription(source.getDescription());
+    try {
+      LimitType type = LimitType.valueOf(source.getType());
+      target.setType(type);
+    }
+    catch (IllegalArgumentException exception) {
+      throwInvalidValueError("type", VendorLicenseErrorCodes.LIMIT_INVALID_TYPE);
+    }
+
+    try {
+      EntitlementMetric metric = EntitlementMetric.valueOf(source.getMetric());
+      target.setMetric(metric);
+    }
+    catch (IllegalArgumentException exception) {
+      throwInvalidValueError("metric", VendorLicenseErrorCodes.LIMIT_INVALID_METRIC);
+    }
+
+    try {
+      AggregationFunction function = source.getAggregationFunction() != null ?
+              AggregationFunction.valueOf(source.getAggregationFunction()) : null;
+      target.setAggregationFunction(function);
+    }
+    catch (IllegalArgumentException exception) {
+      throwInvalidValueError("aggregationFunction",
+          VendorLicenseErrorCodes.LIMIT_INVALID_AGGREGATIONFUNCTION);
+    }
+
+    try {
+      EntitlementTime time = source.getTime() != null ?
+              EntitlementTime.valueOf(source.getTime()) : null;
+      target.setTime(time);
+    }
+    catch (IllegalArgumentException exception) {
+      throwInvalidValueError("time", VendorLicenseErrorCodes.LIMIT_INVALID_TIME);
+    }
+
+    target.setValue(source.getValue());
+    target.setUnit(source.getUnit());
+
+  }
+
+  private void throwInvalidValueError(String attribute, String vendorLicenseErrorCode) {
+    ErrorCode errorCode = LimitErrorBuilder.getInvalidValueErrorBuilder(attribute,
+        vendorLicenseErrorCode);
+    MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
+        LoggerServiceName.Create_LIMIT.toString(), ErrorLevel.ERROR.name(),
+        errorCode.id(), errorCode.message() );
+    throw new CoreException(errorCode);
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/EntitlementPoolLimitsImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/EntitlementPoolLimitsImpl.java
new file mode 100644
index 0000000..3a08822
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/EntitlementPoolLimitsImpl.java
@@ -0,0 +1,178 @@
+package org.openecomp.sdcrests.vendorlicense.rest.services;
+
+
+import org.openecomp.sdc.logging.context.MdcUtil;
+import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
+import org.openecomp.sdc.logging.types.LoggerServiceName;
+import org.openecomp.sdc.vendorlicense.VendorLicenseManager;
+import org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity;
+import org.openecomp.sdc.vendorlicense.dao.types.LimitEntity;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdcrests.vendorlicense.rest.EntitlementPoolLimits;
+import org.openecomp.sdcrests.vendorlicense.rest.mapping.LimitCreationDto;
+import org.openecomp.sdcrests.vendorlicense.rest.mapping.MapLimitEntityToLimitCreationDto;
+import org.openecomp.sdcrests.vendorlicense.rest.mapping.MapLimitEntityToLimitDto;
+import org.openecomp.sdcrests.vendorlicense.rest.mapping.MapLimitRequestDtoToLimitEntity;
+import org.openecomp.sdcrests.vendorlicense.types.LimitEntityDto;
+import org.openecomp.sdcrests.vendorlicense.types.LimitRequestDto;
+import org.openecomp.sdcrests.wrappers.GenericCollectionWrapper;
+import org.openecomp.sdcrests.wrappers.StringWrapperResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+import javax.inject.Named;
+import javax.ws.rs.core.Response;
+
+@Named
+@Service("entitlementPoolLimits")
+@Scope(value = "prototype")
+public class EntitlementPoolLimitsImpl implements EntitlementPoolLimits {
+  private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
+  @Autowired
+  private VendorLicenseManager vendorLicenseManager;
+
+  @Override
+  public Response createLimit(LimitRequestDto request,
+                              String vlmId,
+                              String versionId,
+                              String entitlementPoolId,
+                              String user) {
+    mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId, "EP id", entitlementPoolId);
+
+    MdcUtil.initMdc(LoggerServiceName.Create_LIMIT.toString());
+    vendorLicenseManager.getEntitlementPool(new EntitlementPoolEntity(vlmId, Version.valueOf
+        (versionId), entitlementPoolId), user);
+
+    LimitEntity limitEntity =
+        new MapLimitRequestDtoToLimitEntity()
+            .applyMapping(request, LimitEntity.class);
+    limitEntity.setEpLkgId(entitlementPoolId);
+    limitEntity.setVendorLicenseModelId(vlmId);
+
+    LimitEntity createdLimit = vendorLicenseManager.createLimit(limitEntity, user);
+    MapLimitEntityToLimitCreationDto mapper = new MapLimitEntityToLimitCreationDto();
+    LimitCreationDto createdLimitDto = mapper.applyMapping(createdLimit, LimitCreationDto
+        .class);
+
+    /*StringWrapperResponse result =
+        createdLimit != null ? new StringWrapperResponse(createdLimit.getId())
+            : null;*/
+
+    mdcDataDebugMessage.debugExitMessage("VLM id", vlmId, "EP id", entitlementPoolId);
+
+    //return Response.ok(result).build();
+    return Response.ok(createdLimitDto != null ? createdLimitDto : null)
+        .build();
+  }
+
+  @Override
+  public Response listLimits(String vlmId, String versionId, String entitlementPoolId, String
+      user) {
+    mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId, "EP id", entitlementPoolId);
+
+    MdcUtil.initMdc(LoggerServiceName.List_EP.toString());
+    vendorLicenseManager.getEntitlementPool(new EntitlementPoolEntity(vlmId, Version.valueOf
+        (versionId), entitlementPoolId), user);
+
+    Collection<LimitEntity> limits =
+        vendorLicenseManager.listLimits(vlmId, Version.valueOf(versionId), entitlementPoolId, user);
+
+    GenericCollectionWrapper<LimitEntityDto> result = new GenericCollectionWrapper<>();
+    MapLimitEntityToLimitDto outputMapper =
+        new MapLimitEntityToLimitDto();
+    for (LimitEntity limit : limits) {
+      result.add(outputMapper.applyMapping(limit, LimitEntityDto.class));
+    }
+
+    mdcDataDebugMessage.debugExitMessage("VLM id", vlmId, "EP id", entitlementPoolId);
+
+    return Response.ok(result).build();
+  }
+
+  @Override
+  public Response getLimit( String vlmId, String versionId, String entitlementPoolId,
+                            String limitId, String user) {
+    mdcDataDebugMessage.debugEntryMessage("VLM id, EP id, Limit Id", vlmId, entitlementPoolId,
+        limitId);
+
+    MdcUtil.initMdc(LoggerServiceName.Get_LIMIT.toString());
+
+    vendorLicenseManager.getEntitlementPool(new EntitlementPoolEntity(vlmId, Version.valueOf
+        (versionId), entitlementPoolId), user);
+    LimitEntity epInput = new LimitEntity();
+    epInput.setVendorLicenseModelId(vlmId);
+    epInput.setVersion(Version.valueOf(versionId));
+    epInput.setEpLkgId(entitlementPoolId);
+    epInput.setId(limitId);
+    LimitEntity limit = vendorLicenseManager.getLimit(epInput, user);
+
+    LimitEntityDto entitlementPoolEntityDto = limit == null ? null :
+        new MapLimitEntityToLimitDto()
+            .applyMapping(limit, LimitEntityDto.class);
+
+    mdcDataDebugMessage.debugExitMessage("VLM id, EP id, Limit Id", vlmId, entitlementPoolId,
+        limitId);
+
+    return Response.ok(entitlementPoolEntityDto).build();
+  }
+
+  @Override
+  public Response updateLimit(LimitRequestDto request,
+                              String vlmId,
+                              String versionId,
+                              String entitlementPoolId,
+                              String limitId,
+                              String user) {
+    mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId, "EP id", entitlementPoolId, "limit Id",
+        limitId);
+
+    MdcUtil.initMdc(LoggerServiceName.Update_LIMIT.toString());
+
+    vendorLicenseManager.getEntitlementPool(new EntitlementPoolEntity(vlmId, Version.valueOf
+        (versionId), entitlementPoolId), user);
+
+    LimitEntity limitEntity =
+        new MapLimitRequestDtoToLimitEntity()
+            .applyMapping(request, LimitEntity.class);
+    limitEntity.setEpLkgId(entitlementPoolId);
+    limitEntity.setVendorLicenseModelId(vlmId);
+    limitEntity.setId(limitId);
+
+    vendorLicenseManager.updateLimit(limitEntity, user);
+
+    mdcDataDebugMessage.debugExitMessage("VLM id", vlmId, "EP id", entitlementPoolId, "limit Id",
+        limitId);
+
+    return Response.ok().build();
+  }
+
+  /**
+     * Delete entitlement pool.
+     *
+     * @param vlmId               the vlm id
+     * @param entitlementPoolId   the entitlement pool id
+     * @param limitId             the limitId
+     * @param user                the user
+     * @return the response
+   */
+  public Response deleteLimit(String vlmId, String versionId, String entitlementPoolId,
+                               String limitId, String user) {
+    mdcDataDebugMessage.debugEntryMessage("VLM id, Verison Id, EP id, Limit Id", vlmId, versionId, entitlementPoolId, limitId);
+
+    MdcUtil.initMdc(LoggerServiceName.Delete_LIMIT.toString());
+    vendorLicenseManager.getEntitlementPool(new EntitlementPoolEntity(vlmId, Version.valueOf
+            (versionId), entitlementPoolId), user);
+
+    LimitEntity limitInput = new LimitEntity();
+    limitInput.setVendorLicenseModelId(vlmId);
+    limitInput.setEpLkgId(entitlementPoolId);
+    limitInput.setId(limitId);
+    vendorLicenseManager.deleteLimit(limitInput, user);
+
+    mdcDataDebugMessage.debugExitMessage("VLM id, Verison Id, EP id, Limit Id", vlmId, versionId, entitlementPoolId, limitId);
+
+    return Response.ok().build();
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/LicenseKeyGroupLimitsImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/LicenseKeyGroupLimitsImpl.java
new file mode 100644
index 0000000..aabba71
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/LicenseKeyGroupLimitsImpl.java
@@ -0,0 +1,179 @@
+package org.openecomp.sdcrests.vendorlicense.rest.services;
+
+import org.openecomp.sdc.logging.context.MdcUtil;
+import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
+import org.openecomp.sdc.logging.types.LoggerServiceName;
+import org.openecomp.sdc.vendorlicense.VendorLicenseManager;
+import org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity;
+import org.openecomp.sdc.vendorlicense.dao.types.LimitEntity;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdcrests.vendorlicense.rest.LicenseKeyGroupLimits;
+import org.openecomp.sdcrests.vendorlicense.rest.mapping.LimitCreationDto;
+import org.openecomp.sdcrests.vendorlicense.rest.mapping.MapLimitEntityToLimitCreationDto;
+import org.openecomp.sdcrests.vendorlicense.rest.mapping.MapLimitEntityToLimitDto;
+import org.openecomp.sdcrests.vendorlicense.rest.mapping.MapLimitRequestDtoToLimitEntity;
+import org.openecomp.sdcrests.vendorlicense.types.LimitEntityDto;
+import org.openecomp.sdcrests.vendorlicense.types.LimitRequestDto;
+import org.openecomp.sdcrests.wrappers.GenericCollectionWrapper;
+import org.openecomp.sdcrests.wrappers.StringWrapperResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+import javax.inject.Named;
+import javax.ws.rs.core.Response;
+
+@Named
+@Service("licenseKeyGroupLimits")
+@Scope(value = "prototype")
+public class LicenseKeyGroupLimitsImpl implements LicenseKeyGroupLimits {
+
+  private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
+  @Autowired
+  private VendorLicenseManager vendorLicenseManager;
+
+  @Override
+  public Response createLimit(LimitRequestDto request,
+                              String vlmId,
+                              String versionId,
+                              String licenseKeyGroupId,
+                              String user) {
+
+    mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId, "LKG id", licenseKeyGroupId);
+
+    MdcUtil.initMdc(LoggerServiceName.Create_LIMIT.toString());
+    vendorLicenseManager.getLicenseKeyGroup(new LicenseKeyGroupEntity(vlmId, Version.valueOf
+            (versionId), licenseKeyGroupId), user);
+
+    LimitEntity limitEntity =
+        new MapLimitRequestDtoToLimitEntity()
+            .applyMapping(request, LimitEntity.class);
+    limitEntity.setEpLkgId(licenseKeyGroupId);
+    limitEntity.setVendorLicenseModelId(vlmId);
+
+    LimitEntity createdLimit = vendorLicenseManager.createLimit(limitEntity, user);
+    MapLimitEntityToLimitCreationDto mapper = new MapLimitEntityToLimitCreationDto();
+    LimitCreationDto createdLimitDto = mapper.applyMapping(createdLimit, LimitCreationDto
+        .class);
+    /*StringWrapperResponse result =
+        createdLimit != null ? new StringWrapperResponse(createdLimit.getId())
+            : null;*/
+
+    mdcDataDebugMessage.debugExitMessage("VLM id", vlmId, "LKG id", licenseKeyGroupId);
+
+    //return Response.ok(result).build();
+    return Response.ok(createdLimitDto != null ? createdLimitDto : null)
+        .build();
+  }
+
+  @Override
+  public Response listLimits(String vlmId, String versionId, String licenseKeyGroupId, String
+      user) {
+    mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId, "LKG id", licenseKeyGroupId);
+
+    MdcUtil.initMdc(LoggerServiceName.List_EP.toString());
+    vendorLicenseManager.getLicenseKeyGroup(new LicenseKeyGroupEntity(vlmId, Version.valueOf
+        (versionId), licenseKeyGroupId), user);
+
+    Collection<LimitEntity> limits =
+        vendorLicenseManager.listLimits(vlmId, Version.valueOf(versionId), licenseKeyGroupId, user);
+
+    GenericCollectionWrapper<LimitEntityDto> result = new GenericCollectionWrapper<>();
+    MapLimitEntityToLimitDto outputMapper =
+        new MapLimitEntityToLimitDto();
+    for (LimitEntity limit : limits) {
+      result.add(outputMapper.applyMapping(limit, LimitEntityDto.class));
+    }
+
+    mdcDataDebugMessage.debugExitMessage("VLM id", vlmId, "LKG id", licenseKeyGroupId);
+
+    return Response.ok(result).build();
+  }
+
+  @Override
+  public Response updateLimit(LimitRequestDto request,
+                              String vlmId,
+                              String versionId,
+                              String licenseKeyGroupId,
+                              String limitId,
+                              String user) {
+    mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId, "LKG id", licenseKeyGroupId, "limit Id",
+        limitId);
+
+    MdcUtil.initMdc(LoggerServiceName.Update_LIMIT.toString());
+
+    vendorLicenseManager.getLicenseKeyGroup(new LicenseKeyGroupEntity(vlmId, Version.valueOf
+        (versionId), licenseKeyGroupId), user);
+
+    LimitEntity limitEntity =
+        new MapLimitRequestDtoToLimitEntity()
+            .applyMapping(request, LimitEntity.class);
+    limitEntity.setEpLkgId(licenseKeyGroupId);
+    limitEntity.setVendorLicenseModelId(vlmId);
+    limitEntity.setId(limitId);
+
+    vendorLicenseManager.updateLimit(limitEntity, user);
+
+    mdcDataDebugMessage.debugExitMessage("VLM id", vlmId, "LKG id", licenseKeyGroupId, "limit Id",
+        limitId);
+
+    return Response.ok().build();
+  }
+
+  /**
+   * Delete License Key Group.
+   *
+   * @param vlmId               the vlm id
+   * @param licenseKeyGroupId   the license Key Group id
+   * @param limitId             the limitId
+   * @param user                the user
+   * @return the response
+   */
+  public Response deleteLimit(String vlmId, String versionId, String licenseKeyGroupId,
+                              String limitId, String user) {
+    mdcDataDebugMessage.debugEntryMessage("VLM id, Verison Id, LKG id, Limit Id", vlmId, versionId,
+        licenseKeyGroupId, limitId);
+
+    MdcUtil.initMdc(LoggerServiceName.Delete_LIMIT.toString());
+    vendorLicenseManager.getLicenseKeyGroup(new LicenseKeyGroupEntity(vlmId, Version.valueOf
+              (versionId), licenseKeyGroupId), user);
+
+    LimitEntity limitInput = new LimitEntity();
+    limitInput.setVendorLicenseModelId(vlmId);
+    limitInput.setEpLkgId(licenseKeyGroupId);
+    limitInput.setId(limitId);
+    vendorLicenseManager.deleteLimit(limitInput, user);
+
+    mdcDataDebugMessage.debugExitMessage("VLM id, Verison Id, LKG id, Limit Id", vlmId, versionId,
+        licenseKeyGroupId, limitId);
+
+    return Response.ok().build();
+  }
+
+  @Override
+  public Response getLimit( String vlmId, String versionId, String licenseKeyGroupId,
+                            String limitId, String user) {
+    mdcDataDebugMessage.debugEntryMessage("VLM id, LKG id, Limit Id", vlmId, licenseKeyGroupId,
+        limitId);
+
+    MdcUtil.initMdc(LoggerServiceName.Get_LIMIT.toString());
+    vendorLicenseManager.getLicenseKeyGroup(new LicenseKeyGroupEntity(vlmId, Version.valueOf
+        (versionId), licenseKeyGroupId), user);
+    LimitEntity epInput = new LimitEntity();
+    epInput.setVendorLicenseModelId(vlmId);
+    epInput.setVersion(Version.valueOf(versionId));
+    epInput.setEpLkgId(licenseKeyGroupId);
+    epInput.setId(limitId);
+    LimitEntity limit = vendorLicenseManager.getLimit(epInput, user);
+
+    LimitEntityDto entitlementPoolEntityDto = limit == null ? null :
+        new MapLimitEntityToLimitDto()
+            .applyMapping(limit, LimitEntityDto.class);
+
+    mdcDataDebugMessage.debugExitMessage("VLM id, LKG id, Limit Id", vlmId, licenseKeyGroupId,
+        limitId);
+
+    return Response.ok(entitlementPoolEntityDto).build();
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/pom.xml.versionsBackup
new file mode 100644
index 0000000..d24c315
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/pom.xml.versionsBackup
@@ -0,0 +1,29 @@
+<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>
+
+	<artifactId>vendor-license-rest-types</artifactId>
+	<name>vendor-license-rest-types</name>
+	<version>1.0-SNAPSHOT</version>
+
+	<parent>
+		<groupId>org.openecomp.sdc.onboarding</groupId>
+		<artifactId>vendor-license-rest</artifactId>
+		<version>1.0-SNAPSHOT</version>
+		<relativePath>../</relativePath>
+	</parent>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.openecomp.sdc</groupId>
+			<artifactId>openecomp-sdc-common-rest</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.openecomp.sdc</groupId>
+			<artifactId>openecomp-sdc-vendor-license-manager</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+	</dependencies>
+
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/EntitlementPoolRequestDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/EntitlementPoolRequestDto.java
index b70504e..b49a138 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/EntitlementPoolRequestDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/EntitlementPoolRequestDto.java
@@ -21,6 +21,7 @@
 package org.openecomp.sdcrests.vendorlicense.types;
 
 import io.swagger.annotations.ApiModel;
+import org.codehaus.jackson.annotate.JsonIgnoreProperties;
 import org.openecomp.sdc.vendorlicense.dao.types.AggregationFunction;
 import org.openecomp.sdc.vendorlicense.dao.types.EntitlementMetric;
 import org.openecomp.sdc.vendorlicense.dao.types.EntitlementTime;
@@ -32,17 +33,18 @@
 import javax.validation.constraints.Size;
 
 @ApiModel(value = "EntitlementPoolRequest")
+//@JsonIgnoreProperties(value = {"manufacturerReferenceNumber"})
 public class EntitlementPoolRequestDto {
 
   @NotNull
   @Size(max = 120)
   private String name;
-  @NotNull
+
   @Size(max = 1000)
   private String description;
-  @NotNull
-  private int thresholdValue;
-  @NotNull
+
+  private Integer thresholdValue;
+
   private ThresholdUnit thresholdUnits;
   @NotNull
   @Valid
@@ -52,7 +54,7 @@
   @NotNull
   @Valid
   private ChoiceOrOtherDto<AggregationFunction> aggregationFunction;
-  @NotNull
+
   @Valid
   private MultiChoiceOrOtherDto<OperationalScope> operationalScope;
   @NotNull
@@ -62,6 +64,9 @@
   @Size(max = 100)
   private String manufacturerReferenceNumber;
 
+  private String startDate;
+  private String expiryDate;
+
   public String getName() {
     return name;
   }
@@ -78,11 +83,11 @@
     this.description = description;
   }
 
-  public int getThresholdValue() {
+  public Integer getThresholdValue() {
     return thresholdValue;
   }
 
-  public void setThresholdValue(int thresholdValue) {
+  public void setThresholdValue(Integer thresholdValue) {
     this.thresholdValue = thresholdValue;
   }
 
@@ -141,4 +146,20 @@
   public void setManufacturerReferenceNumber(String manufacturerReferenceNumber) {
     this.manufacturerReferenceNumber = manufacturerReferenceNumber;
   }
+
+  public String getStartDate() {
+    return startDate;
+  }
+
+  public void setStartDate(String startDate) {
+    this.startDate = startDate;
+  }
+
+  public String getExpiryDate() {
+    return expiryDate;
+  }
+
+  public void setExpiryDate(String expiryDate) {
+    this.expiryDate = expiryDate;
+  }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/FeatureGroupDescriptorDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/FeatureGroupDescriptorDto.java
index 5c1f8f2..f2d0d65 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/FeatureGroupDescriptorDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/FeatureGroupDescriptorDto.java
@@ -20,6 +20,8 @@
 
 package org.openecomp.sdcrests.vendorlicense.types;
 
+import org.hibernate.validator.constraints.NotBlank;
+
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
 
@@ -27,12 +29,16 @@
   @NotNull
   @Size(max = 120)
   private String name;
-  @NotNull
+
   @Size(max = 1000)
   private String description;
   @NotNull
   private String partNumber;
 
+  //@NotBlank(message = "is mandatory and should not be empty")
+  @Size(max = 100)
+  private String manufacturerReferenceNumber;
+
   public String getName() {
     return name;
   }
@@ -56,4 +62,12 @@
   public void setPartNumber(String partNumber) {
     this.partNumber = partNumber;
   }
+
+  public String getManufacturerReferenceNumber() {
+    return manufacturerReferenceNumber;
+  }
+
+  public void setManufacturerReferenceNumber(String manufacturerReferenceNumber) {
+    this.manufacturerReferenceNumber = manufacturerReferenceNumber;
+  }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/LicenseAgreementDescriptorDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/LicenseAgreementDescriptorDto.java
index acfc130..4239488 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/LicenseAgreementDescriptorDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/LicenseAgreementDescriptorDto.java
@@ -31,7 +31,7 @@
   @NotNull
   @Size(max = 120)
   private String name;
-  @NotNull
+
   @Size(max = 1000)
   private String description;
   @NotNull
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/LicenseKeyGroupRequestDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/LicenseKeyGroupRequestDto.java
index 0df2e32..a9072f5 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/LicenseKeyGroupRequestDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/LicenseKeyGroupRequestDto.java
@@ -31,12 +31,11 @@
   @NotNull
   @Size(max = 120)
   private String name;
-  @NotNull
   @Size(max = 1000)
   private String description;
   @NotNull
   private LicenseKeyType type;
-  @NotNull
+
   @Valid
   private MultiChoiceOrOtherDto<OperationalScope> operationalScope;
 
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/LimitEntityDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/LimitEntityDto.java
new file mode 100644
index 0000000..0cc1894
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/LimitEntityDto.java
@@ -0,0 +1,86 @@
+package org.openecomp.sdcrests.vendorlicense.types;
+
+public class LimitEntityDto {
+
+  private String id;
+  private String name;
+  private String type;
+  private String description;
+  private String metric;
+  private Integer value;
+  private Integer unit;
+  private String aggregationFunction;
+  private String time;
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getType() {
+    return type;
+  }
+
+  public void setType(String type) {
+    this.type = type;
+  }
+
+  public String getDescription() {
+    return description;
+  }
+
+  public void setDescription(String description) {
+    this.description = description;
+  }
+
+  public String getMetric() {
+    return metric;
+  }
+
+  public void setMetric(String metric) {
+    this.metric = metric;
+  }
+
+  public Integer getUnit() {
+    return unit;
+  }
+
+  public void setUnit(Integer unit) {
+    this.unit = unit;
+  }
+
+  public String getAggregationFunction() {
+    return aggregationFunction;
+  }
+
+  public void setAggregationFunction(String aggregationFunction) {
+    this.aggregationFunction = aggregationFunction;
+  }
+
+  public String getTime() {
+    return time;
+  }
+
+  public void setTime(String time) {
+    this.time = time;
+  }
+
+  public Integer getValue() {
+    return value;
+  }
+
+  public void setValue(Integer value) {
+    this.value = value;
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/LimitRequestDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/LimitRequestDto.java
new file mode 100644
index 0000000..61f3091
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-types/src/main/java/org/openecomp/sdcrests/vendorlicense/types/LimitRequestDto.java
@@ -0,0 +1,96 @@
+package org.openecomp.sdcrests.vendorlicense.types;
+
+import io.swagger.annotations.ApiModel;
+import org.hibernate.validator.constraints.NotBlank;
+import org.openecomp.sdc.vendorlicense.dao.types.LimitType;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+@ApiModel(value = "LimitRequest")
+public class LimitRequestDto {
+
+  @NotBlank(message = "is mandatory and should not be empty")
+  @Size(max = 120, message = "length should not exceed 120 characters.")
+  private String name;
+  @NotBlank(message = "is mandatory and should not be empty")
+  private String type;
+  @Size(max = 1000, message = "length should not exceed 1000 characters.")
+  private String description;
+  @NotBlank(message = "is mandatory and should not be empty")
+  private String metric;
+  @NotNull(message = "is mandatory and should not be empty")
+  @Min(value = 1, message = "should be integer and > 0")
+  private Integer value;
+  @Min(value = 1, message = "should be integer and > 0")
+  private Integer unit;
+  private String aggregationFunction;
+  private String time;
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getDescription() {
+    return description;
+  }
+
+  public void setDescription(String description) {
+    this.description = description;
+  }
+
+  public String getMetric() {
+    return metric;
+  }
+
+  public void setMetric(String metric) {
+    this.metric = metric;
+  }
+
+  public String getType() {
+    return type;
+  }
+
+  public void setType(String type) {
+    this.type = type;
+  }
+
+  public String getAggregationFunction() {
+    return aggregationFunction;
+  }
+
+  public void setAggregationFunction(
+      String aggregationFunction) {
+    this.aggregationFunction = aggregationFunction;
+  }
+
+  public String getTime() {
+    return time;
+  }
+
+  public void setTime(String time) {
+    this.time = time;
+  }
+
+  public Integer getUnit() {
+    return unit;
+  }
+
+  public void setUnit(Integer unit) {
+    this.unit = unit;
+  }
+
+  public Integer getValue() {
+    return value;
+  }
+
+  public void setValue(Integer value) {
+    this.value = value;
+  }
+
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/pom.xml.versionsBackup
new file mode 100644
index 0000000..074c8d9
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/pom.xml.versionsBackup
@@ -0,0 +1,21 @@
+<?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>
+    <groupId>org.openecomp.sdc.onboarding</groupId>
+    <artifactId>vendor-software-products-rest</artifactId>
+    <name>vendor-software-products-rest</name>
+    <version>1.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+    <parent>
+        <groupId>org.openecomp.sdc</groupId>
+        <artifactId>openecomp-sdc-rest-webapp</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modules>
+        <module>/vendor-software-products-rest-services</module>
+        <module>/vendor-software-products-rest-types</module>
+    </modules>
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/pom.xml.versionsBackup
new file mode 100644
index 0000000..ba28146
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/pom.xml.versionsBackup
@@ -0,0 +1,153 @@
+<?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>
+
+    <artifactId>vendor-software-products-rest-services</artifactId>
+    <parent>
+        <groupId>org.openecomp.sdc.onboarding</groupId>
+        <artifactId>vendor-software-products-rest</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <dependencies>
+    <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-core</artifactId>
+        <version>${spring.framework.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-context</artifactId>
+        <version>${spring.framework.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-context-support</artifactId>
+        <version>${spring.framework.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-web</artifactId>
+        <version>${spring.framework.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-beans</artifactId>
+        <version>${spring.framework.version}</version>
+    </dependency>
+
+    <!-- CXF -->
+    <dependency>
+        <groupId>org.apache.cxf</groupId>
+        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+        <version>${cxf.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>org.apache.httpcomponents</groupId>
+        <artifactId>httpclient</artifactId>
+        <version>${http.client.version}</version>
+    </dependency>
+
+    <dependency>
+        <groupId>javax.ws.rs</groupId>
+        <artifactId>javax.ws.rs-api</artifactId>
+        <version>${ws.rs.version}</version>
+    </dependency>
+
+    <!-- Other Stuff-->
+    <!--dependency>
+        <groupId>cglib</groupId>
+        <artifactId>cglib-nodep</artifactId>
+        <version>${cglib.nodep.version}</version>
+        <scope>runtime</scope>
+    </dependency-->
+
+    <!-- Java Stuff -->
+    <dependency>
+        <groupId>javax.inject</groupId>
+        <artifactId>javax.inject</artifactId>
+        <version>${javax.inject.version}</version>
+        <scope>provided</scope>
+    </dependency>
+        <dependency>
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>${ws.rs.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.jersey</groupId>
+            <artifactId>jersey-core</artifactId>
+            <version>1.19.1</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>javax.ws.rs</groupId>
+                    <artifactId>jsr311-api</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>1.5.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc.onboarding</groupId>
+            <artifactId>vendor-software-products-rest-types</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+            <version>2.7.4</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-xml</artifactId>
+            <version>2.7.4</version>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.woodstox</groupId>
+            <artifactId>woodstox-core-asl</artifactId>
+            <version>4.4.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-vendor-software-product-manager</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sun.jersey.contribs</groupId>
+            <artifactId>jersey-multipart</artifactId>
+            <version>1.18.1</version>
+            <scope>provided</scope>
+        </dependency>
+
+
+    </dependencies>
+
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <includes>
+                        <include>test/core/unittest/offline/**</include>
+                    </includes>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
+            <!-- Error codes generator plugin -->
+            <!--plugin>
+                <groupId>org.openecomp.nfv.tools</groupId>
+                <artifactId>error-codes-maven-plugin</artifactId>
+            </plugin-->
+        </plugins>
+    </build>
+    
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/ComponentMonitoringForSwaggerFileUpload.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/ComponentMonitoringForSwaggerFileUpload.java
new file mode 100644
index 0000000..e7e8ba1
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/ComponentMonitoringForSwaggerFileUpload.java
@@ -0,0 +1,65 @@
+///*-
+// * ============LICENSE_START=======================================================
+// * SDC
+// * ================================================================================
+// * 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.sdcrests.vsp.rest;
+//
+//import io.swagger.annotations.Api;
+//import io.swagger.annotations.ApiOperation;
+//import io.swagger.annotations.ApiParam;
+//import org.apache.cxf.jaxrs.ext.multipart.Attachment;
+//import org.apache.cxf.jaxrs.ext.multipart.Multipart;
+//import org.springframework.validation.annotation.Validated;
+//
+//import javax.validation.constraints.NotNull;
+//import javax.ws.rs.Consumes;
+//import javax.ws.rs.HeaderParam;
+//import javax.ws.rs.Path;
+//import javax.ws.rs.PathParam;
+//import javax.ws.rs.Produces;
+//import javax.ws.rs.core.MediaType;
+//import javax.ws.rs.core.Response;
+//
+//import static org.openecomp.sdcrests.common.RestConstants.USER_ID_HEADER_PARAM;
+//import static org.openecomp.sdcrests.common.RestConstants.USER_MISSING_ERROR_MSG;
+//
+//@Path("/v1.0/vendor-software-products")
+//@Produces(MediaType.APPLICATION_JSON)
+//@Consumes(MediaType.APPLICATION_JSON)
+//@Api(value = "Vendor Software Products")
+//@Validated
+//public interface ComponentMonitoringForSwaggerFileUpload {
+//
+//
+//
+//  @Path("/{vspId}/versions/{versionId}/components/{componentId}/uploads/type{type}")
+//  @Consumes(MediaType.MULTIPART_FORM_DATA)
+//  @ApiOperation(value = "Upload file for component by type")
+//  Response upload(@Multipart("upload") Attachment attachment,
+//                  @ApiParam(value = "Vendor software product Id") @PathParam("vspId")
+//                      String vspId,
+//                  @ApiParam(value = "Vendor software product version Id")
+//                  @PathParam("versionId") String versionId,
+//                  @ApiParam(value = "Component Id") @PathParam("componentId") String
+//                      componentId,
+//                  @ApiParam(value = "Upload Type") @PathParam("type") String type,
+//                  @NotNull(message = USER_MISSING_ERROR_MSG)
+//                  @HeaderParam(USER_ID_HEADER_PARAM) String user) throws Exception;
+//
+// }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/ComponentMonitoringUploads.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/ComponentMonitoringUploads.java
new file mode 100644
index 0000000..c8c29b6
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/ComponentMonitoringUploads.java
@@ -0,0 +1,91 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * 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.sdcrests.vsp.rest;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.apache.cxf.jaxrs.ext.multipart.Attachment;
+import org.apache.cxf.jaxrs.ext.multipart.Multipart;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.MonitoringUploadStatusDto;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.constraints.NotNull;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import static org.openecomp.sdcrests.common.RestConstants.USER_ID_HEADER_PARAM;
+import static org.openecomp.sdcrests.common.RestConstants.USER_MISSING_ERROR_MSG;
+
+@Path(
+    "/v1.0/vendor-software-products/{vspId}/versions/{versionId}/components/{componentId}/uploads/")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+@Api(value = "Vendor Software Product Component Uploads")
+@Validated
+public interface ComponentMonitoringUploads extends VspEntities {
+  @POST
+  @Path("types/{type}/")
+  @Consumes(MediaType.MULTIPART_FORM_DATA)
+  @ApiOperation(value = "Upload file for component by type")
+  Response upload(@Multipart("upload") Attachment attachment,
+                  @ApiParam(value = "Vendor software product Id") @PathParam("vspId")
+                      String vspId,
+                  @ApiParam(value = "Vendor software product version Id")
+                  @PathParam("versionId") String versionId,
+                  @ApiParam(value = "Component Id") @PathParam("componentId") String
+                      componentId,
+                  @ApiParam(value = "Upload Type") @PathParam("type") String type,
+                  @NotNull(message = USER_MISSING_ERROR_MSG)
+                  @HeaderParam(USER_ID_HEADER_PARAM) String user) throws Exception;
+
+  @DELETE
+  @Path("types/{type}")
+  @ApiOperation(value = "Delete file uploaded for component")
+  Response delete(
+      @ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+      @ApiParam(value = "Vendor software product version Id") @PathParam("versionId")
+          String versionId,
+      @ApiParam(value = "Component Id") @PathParam("componentId") String componentId,
+      @ApiParam(value = "Upload Type") @PathParam("type") String type,
+      @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM) String user)
+      throws Exception;
+
+  @GET
+  @Path("")
+  @ApiOperation(value = "Get the filenames of uploaded files by type",
+      response = MonitoringUploadStatusDto.class)
+  Response list(@ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+                @ApiParam(value = "Vendor software product version Id") @PathParam("versionId")
+                    String versionId,
+                @ApiParam(value = "Vendor software product component Id") @PathParam("componentId")
+                    String componentId,
+                @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                    String user);
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/ComponentUploads.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/ComponentUploads.java
index 313ae24..9c327f5 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/ComponentUploads.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/ComponentUploads.java
@@ -1,108 +1,108 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * 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.sdcrests.vsp.rest;
-
-import static org.openecomp.sdcrests.common.RestConstants.USER_ID_HEADER_PARAM;
-import static org.openecomp.sdcrests.common.RestConstants.USER_MISSING_ERROR_MSG;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import org.apache.cxf.jaxrs.ext.multipart.Attachment;
-import org.apache.cxf.jaxrs.ext.multipart.Multipart;
-import org.openecomp.sdcrests.vendorsoftwareproducts.types.MibUploadStatusDto;
-import org.springframework.validation.annotation.Validated;
-
-import javax.validation.constraints.NotNull;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-@Path("/v1.0/vendor-software-products/{vspId}/versions/{versionId}/components/{componentId}/monitors")
-@Produces(MediaType.APPLICATION_JSON)
-@Consumes(MediaType.APPLICATION_JSON)
-@Api(value = "Vendor Software Product Component MIB Uploads")
-@Validated
-public interface ComponentUploads extends VspEntities {
-  @POST
-  @Path("/snmp-trap/upload")
-  @Consumes(MediaType.MULTIPART_FORM_DATA)
-  @ApiOperation(value = "Upload vendor software product MIB SNMP_TRAP Definitions file")
-  Response uploadTrapMibFile(@Multipart("upload") Attachment attachment,
-                             @ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
-                             @ApiParam(value = "Vendor software product version Id") @PathParam("versionId") String versionId,
-                             @ApiParam(value = "Component Id") @PathParam("componentId") String
-                                 componentId,
-                             @NotNull(message = USER_MISSING_ERROR_MSG)
-                             @HeaderParam(USER_ID_HEADER_PARAM) String user);
-
-  @DELETE
-  @Path("/snmp-trap")
-  @ApiOperation(value = "Delete vendor software product MIB SNMP_TRAP Definitions file")
-  Response deleteTrapMibFile(
-      @ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
-      @ApiParam(value = "Vendor software product version Id") @PathParam("versionId") String versionId,
-      @ApiParam(value = "Component Id") @PathParam("componentId") String componentId,
-      @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM) String user);
-
-  @POST
-  @Path("/snmp/upload")
-  @Consumes(MediaType.MULTIPART_FORM_DATA)
-  @ApiOperation(value = "Upload vendor software product MIB SNMP_POLL Definitions file")
-  Response uploadPollMibFile(@Multipart("upload") Attachment attachment,
-                             @ApiParam(value = "Vendor software product Id") @PathParam("vspId")
-                                 String vspId,
-                             @ApiParam(value = "Vendor software product version Id") @PathParam("versionId") String versionId,
-                             @ApiParam(value = "Vendor software product component Id")
-                             @PathParam("componentId") String componentId,
-                             @NotNull(message = USER_MISSING_ERROR_MSG)
-                             @HeaderParam(USER_ID_HEADER_PARAM) String user);
-
-  @DELETE
-  @Path("/snmp")
-  @ApiOperation(value = "Delete vendor software product MIB SNMP_POLL Definitions file")
-  Response deletePollMibFile(
-      @ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
-      @ApiParam(value = "Vendor software product version Id") @PathParam("versionId") String versionId,
-      @ApiParam(value = "Vendor software product component Id") @PathParam("componentId")
-          String componentId,
-      @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM) String user);
-
-
-  // TODO: 2/27/2017 add version
-  @GET
-  @Path("/snmp/")
-  @ApiOperation(value = "Get the filenames of uploaded MIB definitions",
-      response = MibUploadStatusDto.class)
-  Response list(@ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
-                @ApiParam(value = "Vendor software product version Id") @PathParam("versionId") String versionId,
-                @ApiParam(value = "Vendor software product component Id") @PathParam("componentId")
-                    String componentId,
-                @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
-                    String user);
-}
+///*-
+// * ============LICENSE_START=======================================================
+// * SDC
+// * ================================================================================
+// * 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.sdcrests.vsp.rest;
+//
+//import io.swagger.annotations.Api;
+//import io.swagger.annotations.ApiOperation;
+//import io.swagger.annotations.ApiParam;
+//import org.apache.cxf.jaxrs.ext.multipart.Attachment;
+//import org.apache.cxf.jaxrs.ext.multipart.Multipart;
+//import org.openecomp.sdcrests.vendorsoftwareproducts.types.MonitoringUploadStatusDto;
+//import org.springframework.validation.annotation.Validated;
+//
+//import javax.validation.constraints.NotNull;
+//import javax.ws.rs.Consumes;
+//import javax.ws.rs.DELETE;
+//import javax.ws.rs.GET;
+//import javax.ws.rs.HeaderParam;
+//import javax.ws.rs.POST;
+//import javax.ws.rs.Path;
+//import javax.ws.rs.PathParam;
+//import javax.ws.rs.Produces;
+//import javax.ws.rs.core.MediaType;
+//import javax.ws.rs.core.Response;
+//
+//import static org.openecomp.sdcrests.common.RestConstants.USER_ID_HEADER_PARAM;
+//import static org.openecomp.sdcrests.common.RestConstants.USER_MISSING_ERROR_MSG;
+//
+//@Path("/v1.0/vendor-software-products/{vspId}/versions/{versionId}/components/{componentId}/monitors")
+//@Produces(MediaType.APPLICATION_JSON)
+//@Consumes(MediaType.APPLICATION_JSON)
+//@Api(value = "Vendor Software Product Component MIB Uploads")
+//@Validated
+//public interface ComponentUploads extends VspEntities {
+//  @POST
+//  @Path("/snmp-trap/upload")
+//  @Consumes(MediaType.MULTIPART_FORM_DATA)
+//  @ApiOperation(value = "Upload vendor software product MIB SNMP_TRAP Definitions file")
+//  Response uploadTrapMibFile(@Multipart("upload") Attachment attachment,
+//                             @ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+//                             @ApiParam(value = "Vendor software product version Id") @PathParam("versionId") String versionId,
+//                             @ApiParam(value = "Component Id") @PathParam("componentId") String
+//                                 componentId,
+//                             @NotNull(message = USER_MISSING_ERROR_MSG)
+//                             @HeaderParam(USER_ID_HEADER_PARAM) String user);
+//
+//  @DELETE
+//  @Path("/snmp-trap")
+//  @ApiOperation(value = "Delete vendor software product MIB SNMP_TRAP Definitions file")
+//  Response deleteTrapMibFile(
+//      @ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+//      @ApiParam(value = "Vendor software product version Id") @PathParam("versionId") String versionId,
+//      @ApiParam(value = "Component Id") @PathParam("componentId") String componentId,
+//      @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM) String user);
+//
+//  @POST
+//  @Path("/snmp/upload")
+//  @Consumes(MediaType.MULTIPART_FORM_DATA)
+//  @ApiOperation(value = "Upload vendor software product MIB SNMP_POLL Definitions file")
+//  Response uploadPollMibFile(@Multipart("upload") Attachment attachment,
+//                             @ApiParam(value = "Vendor software product Id") @PathParam("vspId")
+//                                 String vspId,
+//                             @ApiParam(value = "Vendor software product version Id") @PathParam("versionId") String versionId,
+//                             @ApiParam(value = "Vendor software product component Id")
+//                             @PathParam("componentId") String componentId,
+//                             @NotNull(message = USER_MISSING_ERROR_MSG)
+//                             @HeaderParam(USER_ID_HEADER_PARAM) String user);
+//
+//  @DELETE
+//  @Path("/snmp")
+//  @ApiOperation(value = "Delete vendor software product MIB SNMP_POLL Definitions file")
+//  Response deletePollMibFile(
+//      @ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+//      @ApiParam(value = "Vendor software product version Id") @PathParam("versionId") String versionId,
+//      @ApiParam(value = "Vendor software product component Id") @PathParam("componentId")
+//          String componentId,
+//      @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM) String user);
+//
+//
+//  // TODO: 2/27/2017 add version
+//  @GET
+//  @Path("/snmp/")
+//  @ApiOperation(value = "Get the filenames of uploaded MIB definitions",
+//      response = MonitoringUploadStatusDto.class)
+//  Response list(@ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+//                @ApiParam(value = "Vendor software product version Id") @PathParam("versionId") String versionId,
+//                @ApiParam(value = "Vendor software product component Id") @PathParam("componentId")
+//                    String componentId,
+//                @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+//                    String user);
+//}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/Compute.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/Compute.java
new file mode 100644
index 0000000..13d9a04
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/Compute.java
@@ -0,0 +1,131 @@
+package org.openecomp.sdcrests.vsp.rest;
+
+import static org.openecomp.sdcrests.common.RestConstants.USER_ID_HEADER_PARAM;
+import static org.openecomp.sdcrests.common.RestConstants.USER_MISSING_ERROR_MSG;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComputeDetailsDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComputeDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.QuestionnaireResponseDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.validation.IsValidJson;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+@Path("/v1.0/vendor-software-products/{vspId}/versions/{versionId}/components/{componentId" +
+    "}/compute-flavors")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+@Api(value = "Vendor Software Product Component Compute-flavors")
+@Validated
+public interface Compute extends VspEntities {
+
+  @GET
+  @Path("/")
+  @ApiOperation(value = "Get list of vendor software product component compute-flavors",
+      response = ComputeDto.class,
+      responseContainer = "List")
+  Response list(@ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+                @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+                @ApiParam(value = "Vendor software product component Id") @PathParam("componentId")
+                    String componentId,
+                @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                    String user);
+
+  @GET
+  @Path("/{computeFlavorId}")
+  @ApiOperation(value = "Get vendor software product component compute-flavor",
+      response = ComputeDetailsDto.class,
+      responseContainer = "CompositionEntityResponse")
+  Response get(@ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+               @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+               @ApiParam(value = "Vendor software product component Id") @PathParam("componentId")
+                   String componentId,
+               @ApiParam(value = "Vendor software product compute-flavor Id") @PathParam
+                   ("computeFlavorId")
+                   String computeId,
+               @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                   String user);
+
+  @POST
+  @Path("/")
+  @ApiOperation(value = "Create a vendor software product component compute-flavor")
+  Response create(@Valid ComputeDetailsDto request,
+                  @ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+                  @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+                  @ApiParam(value = "Vendor software product component Id")
+                  @PathParam("componentId") String componentId,
+                  @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                      String user);
+
+  @PUT
+  @Path("/{computeFlavorId}")
+  @ApiOperation(value = "Update vendor software product component compute-flavor")
+  Response update(@Valid ComputeDetailsDto request,
+                  @ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+                  @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+                  @ApiParam(value = "Vendor software product component Id")
+                  @PathParam("componentId") String componentId,
+                  @ApiParam(value = "Vendor software product compute-flavor Id") @PathParam
+                      ("computeFlavorId")
+                      String computeFlavorId,
+                  @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                      String user);
+
+  @PUT
+  @Path("/{computeFlavorId}/questionnaire")
+  @ApiOperation(value = "Update vendor software product component compute-flavor questionnaire")
+  Response updateQuestionnaire(@NotNull @IsValidJson String questionnaireData,
+                  @ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+                  @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+                  @ApiParam(value = "Vendor software product component Id")
+                  @PathParam("componentId") String componentId,
+                  @ApiParam(value = "Vendor software product compute-flavor Id") @PathParam
+                      ("computeFlavorId")
+                      String computeFlavorId,
+                  @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                      String user);
+
+  @DELETE
+  @Path("/{computeFlavorId}")
+  @ApiOperation(value = "Delete vendor software product component compute-flavor")
+  Response delete(@ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+                  @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+                  @ApiParam(value = "Vendor software product component Id")
+                  @PathParam("componentId") String componentId,
+                  @ApiParam(value = "Vendor software product compute-flavor Id") @PathParam
+                      ("computeFlavorId")
+                      String computeFlavorId,
+                  @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                      String user);
+
+  @GET
+  @Path("/{computeFlavorId}/questionnaire")
+  @ApiOperation(value = "Get vendor software product component compute-flavor questionnaire",
+      response = QuestionnaireResponseDto.class)
+  Response getQuestionnaire(
+      @ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+      @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+      @ApiParam(value = "Vendor software product component Id") @PathParam("componentId")
+          String componentId,
+      @ApiParam(value = "Vendor software product compute-flavor Id") @PathParam
+          ("computeFlavorId") String computeId,
+      @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM) String user);
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/DeploymentFlavors.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/DeploymentFlavors.java
new file mode 100644
index 0000000..581b151
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/DeploymentFlavors.java
@@ -0,0 +1,88 @@
+package org.openecomp.sdcrests.vsp.rest;
+
+import static org.openecomp.sdcrests.common.RestConstants.USER_ID_HEADER_PARAM;
+import static org.openecomp.sdcrests.common.RestConstants.USER_MISSING_ERROR_MSG;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.DeploymentFlavorDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.DeploymentFlavorListResponseDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.DeploymentFlavorRequestDto;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+
+@Path("/v1.0/vendor-software-products/{vspId}/versions/{versionId}/deployment-flavors")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+@Api(value = "Vendor Software Product deployment-flavors")
+@Validated
+public interface DeploymentFlavors extends VspEntities {
+
+  @POST
+  @Path("/")
+  @ApiOperation(value = "Create a vendor software product Deployment Flavor")
+  Response create(@Valid DeploymentFlavorRequestDto request,
+                  @ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+                  @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+                  @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                      String user);
+
+  @GET
+  @Path("/")
+  @ApiOperation(value = "List vendor software product Deployment Flavor",
+      response = DeploymentFlavorListResponseDto.class,
+      responseContainer = "List")
+  Response list(@ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+                @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+                @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                    String user);
+
+  @GET
+  @Path("/{deploymentFlavorId}")
+  @ApiOperation(value = "Get vendor software product Deployment Flavor",
+      response = DeploymentFlavorDto.class)
+  Response get(@ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+               @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+               @ApiParam(value = "Vendor software product Deployment Flavor Id") @PathParam
+                   ("deploymentFlavorId") String deploymentFlavorId,
+               @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                   String user);
+
+  @GET
+  @Path("/schema")
+  Response getSchema(@ApiParam(value = "Vendor software product Id") @PathParam("vspId") String
+                        vspId,
+                     @PathParam("versionId") String versionId,
+               @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                   String user);
+
+  @DELETE
+  @Path("/{deploymentFlavorId}")
+  @ApiOperation(value = "Delete vendor software product Deployment Flavor")
+  Response delete(@ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+                  @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+                  @ApiParam(value = "Vendor software product Deployment Flavor Id")
+                  @PathParam("deploymentFlavorId") String deploymentFlavorId,
+                  @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                          String user);
+
+  @PUT
+  @Path("/{deploymentFlavorId}")
+  @ApiOperation(value = "Update vendor software product Deployment Flavor")
+  Response update(@Valid DeploymentFlavorRequestDto request,
+                  @ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+                  @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+                  @ApiParam(value = "Vendor software product Deployment Flavor Id")
+                  @PathParam("deploymentFlavorId") String deploymentFlavorId,
+                  @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                      String user);
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/Images.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/Images.java
new file mode 100644
index 0000000..8939faa
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/Images.java
@@ -0,0 +1,159 @@
+package org.openecomp.sdcrests.vsp.rest;
+
+import static org.openecomp.sdcrests.common.RestConstants.USER_ID_HEADER_PARAM;
+import static org.openecomp.sdcrests.common.RestConstants.USER_MISSING_ERROR_MSG;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ImageData;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ImageDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ImageRequestDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.QuestionnaireResponseDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.validation.IsValidJson;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+@Path("/v1.0/vendor-software-products/{vspId}/versions/{versionId}/components/{componentId}/images")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+@Api(value = "Vendor Software Product Images")
+@Validated
+public interface Images extends VspEntities {
+
+  @GET
+  @Path("/")
+  @ApiOperation(value = "List vendor software product component images",
+      response = ImageDto.class,
+      responseContainer = "List")
+  Response list(@ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+                @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+                @ApiParam(value = "Vendor software product component Id") @PathParam("componentId")
+                    String componentId,
+                @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                    String user);
+
+  @POST
+  @Path("/")
+  @ApiOperation(value = "Create a vendor software product component image")
+  Response create(@Valid ImageRequestDto request,
+                  @ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+                  @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+                  @ApiParam(value = "Vendor software product component Id")
+                  @PathParam("componentId") String componentId,
+                  @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                      String user);
+
+  @GET
+  @Path("/schema")
+  //@ApiOperation(value = "Get schema for vendor software product component Image" ,
+  // response = QuestionnaireResponseDto.class)
+  Response getImageSchema(@ApiParam(value = "Vendor software product Id") @PathParam("vspId")
+                              String vspId,
+                          @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+                          @ApiParam(value = "Vendor software product component Id")
+                          @PathParam("componentId") String componentId,@NotNull
+                              (message = USER_MISSING_ERROR_MSG) @HeaderParam
+                              (USER_ID_HEADER_PARAM) String user);
+
+  /*@GET
+  @Path("/{imageId}")
+  @ApiOperation(value = "Get vendor software product component Image",
+      response = ImageDto.class,
+      responseContainer = "ImageEntityResponse")
+  Response get(@ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+               @ApiParam(value = "Vendor software product component Id") @PathParam("componentId")
+                   String componentId,
+               @ApiParam(value = "Vendor software product image Id") @PathParam("imageId")
+                   String imageId,
+               @Pattern(regexp = Version.VERSION_REGEX,
+                   message = Version.VERSION_STRING_VIOLATION_MSG) @QueryParam("version")
+                   String version,
+               @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                   String user);*/
+
+  @GET
+  @Path("/{imageId}")
+  @ApiOperation(value = "Get vendor software product component Image",
+      response = ImageDto.class,
+      responseContainer = "CompositionEntityResponse")
+  Response get(@ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+               @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+               @ApiParam(value = "Vendor software product component Id") @PathParam("componentId")
+                   String componentId,
+               @ApiParam(value = "Vendor software product Image Id") @PathParam
+                   ("imageId")
+                   String imageId,
+               @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                   String user);
+
+  @DELETE
+  @Path("/{imageId}")
+  @ApiOperation(value = "Delete vendor software product Image")
+  Response delete(@ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+                  @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+                  @ApiParam(value = "Vendor software product component Id")
+                  @PathParam("componentId") String componentId,
+                  @ApiParam(value = "Vendor software product Image Id") @PathParam("imageId")
+                      String imageId,
+                  @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                      String user);
+
+  @PUT
+  @Path("/{imageId}")
+  @ApiOperation(value = "Update vendor software product Image")
+  Response update(@Valid ImageRequestDto request,
+                  @ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+                  @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+                  @ApiParam(value = "Vendor software product component Id")
+                  @PathParam("componentId") String componentId,
+                  @ApiParam(value = "Vendor software product Image Id") @PathParam("imageId")
+                      String imageId,
+                  @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                      String user);
+
+  @PUT
+  @Path("/{imageId}/questionnaire")
+  @ApiOperation(value = "Update vendor software product component image questionnaire")
+  Response updateQuestionnaire(@NotNull @IsValidJson String questionnaireData,
+                               @ApiParam(value = "Vendor software product Id")
+                               @PathParam("vspId") String vspId,
+                               @ApiParam(value = "Version Id")
+                               @PathParam("versionId") String versionId,
+                               @ApiParam(value = "Vendor software product component Id")
+                               @PathParam("componentId") String componentId,
+                               @ApiParam(value = "Vendor software product image Id")
+                               @PathParam ("imageId") String imageId,
+                               @NotNull(message = USER_MISSING_ERROR_MSG)
+                               @HeaderParam(USER_ID_HEADER_PARAM) String user);
+
+  @GET
+  @Path("/{imageId}/questionnaire")
+  @ApiOperation(value = "Get vendor software product component image questionnaire",
+      response = QuestionnaireResponseDto.class)
+  Response getQuestionnaire(
+      @ApiParam(value = "Vendor software product Id") @PathParam("vspId") String vspId,
+      @ApiParam(value = "Version Id") @PathParam("versionId") String versionId,
+      @ApiParam(value = "Vendor software product component Id") @PathParam("componentId")
+          String componentId,
+      @ApiParam(value = "Vendor software product image Id") @PathParam
+          ("imageId") String imageId,
+      @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM) String user);
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/VendorSoftwareProducts.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/VendorSoftwareProducts.java
index 53fe2af..4366b2c 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/VendorSoftwareProducts.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/VendorSoftwareProducts.java
@@ -23,21 +23,41 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import org.openecomp.sdcrests.vendorsoftwareproducts.types.*;
+import org.apache.cxf.jaxrs.ext.multipart.Multipart;
+import org.openecomp.sdc.vendorsoftwareproduct.types.FileDataStructureDto;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.PackageInfoDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.QuestionnaireResponseDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.UploadFileResponseDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.VersionSoftwareProductActionRequestDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspComputeDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspCreationDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspDescriptionDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.validation.IsValidJson;
 import org.springframework.validation.annotation.Validated;
 
-import javax.validation.Valid;
-import javax.validation.constraints.NotNull;
-import javax.ws.rs.*;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
 
 import static org.openecomp.sdcrests.common.RestConstants.USER_ID_HEADER_PARAM;
 import static org.openecomp.sdcrests.common.RestConstants.USER_MISSING_ERROR_MSG;
-
 @Path("/v1.0/vendor-software-products")
 @Produces(MediaType.APPLICATION_JSON)
 @Consumes(MediaType.APPLICATION_JSON)
@@ -183,4 +203,14 @@
                                      @NotNull(message = USER_MISSING_ERROR_MSG)
                                      @HeaderParam(USER_ID_HEADER_PARAM) String user);
 
+  @GET
+  @Path("/{vspId}/versions/{versionId}/compute-flavors")
+  @ApiOperation(value = "Get list of vendor software product compute-flavors",
+      response = VspComputeDto.class,
+      responseContainer = "List")
+  Response listCompute(@ApiParam(value = "Vendor software product Id") @PathParam("vspId") String
+                           vspId,
+                       @PathParam("versionId") String versionId,
+                       @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM)
+                           String user);
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComponentDataToComponentDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComponentDataToComponentDto.java
index b669830..346b39a 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComponentDataToComponentDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComponentDataToComponentDto.java
@@ -32,6 +32,9 @@
         source.getDisplayName() == null ? source.getName() : source.getDisplayName());
     target.setVfcCode(
         source.getVfcCode() == null ? target.getDisplayName() : source.getVfcCode());
+    target.setNfcCode(
+        source.getNfcCode() == null ? source.getDisplayName() : source.getNfcCode());
+    target.setNfcFunction(source.getNfcFunction());
     target.setDescription(source.getDescription());
   }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComponentEntityToComponentCreationDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComponentEntityToComponentCreationDto.java
new file mode 100644
index 0000000..372a83a
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComponentEntityToComponentCreationDto.java
@@ -0,0 +1,13 @@
+package org.openecomp.sdcrests.vsp.rest.mapping;
+
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComponentCreationDto;
+
+public class MapComponentEntityToComponentCreationDto extends MappingBase<ComponentEntity,
+    ComponentCreationDto> {
+  @Override
+  public void doMapping(ComponentEntity source, ComponentCreationDto target) {
+    target.setVfcId(source.getId());
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComponentRequestDtoToComponentEntity.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComponentRequestDtoToComponentEntity.java
index f61ee0d..6649c11 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComponentRequestDtoToComponentEntity.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComponentRequestDtoToComponentEntity.java
@@ -33,6 +33,8 @@
     component.setName(source.getName());
     component.setDisplayName(source.getDisplayName());
     component.setVfcCode(source.getVfcCode());
+    component.setNfcCode(source.getNfcCode());
+    component.setNfcFunction(source.getNfcFunction());
     component.setDescription(source.getDescription());
     target.setComponentCompositionData(component);
   }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComputeDataToComputeDetailsDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComputeDataToComputeDetailsDto.java
new file mode 100644
index 0000000..f0408bb
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComputeDataToComputeDetailsDto.java
@@ -0,0 +1,15 @@
+package org.openecomp.sdcrests.vsp.rest.mapping;
+
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComputeData;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComputeDetailsDto;
+
+public class MapComputeDataToComputeDetailsDto extends MappingBase<ComputeData, ComputeDetailsDto> {
+
+  @Override
+  public void doMapping(ComputeData source, ComputeDetailsDto target) {
+
+    target.setName(source.getName());
+    target.setDescription(source.getDescription());
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComputeDetailsDtoToComputeEntity.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComputeDetailsDtoToComputeEntity.java
new file mode 100644
index 0000000..7db9a0a
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComputeDetailsDtoToComputeEntity.java
@@ -0,0 +1,17 @@
+package org.openecomp.sdcrests.vsp.rest.mapping;
+
+import org.openecomp.core.utilities.json.JsonUtil;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComputeDescription;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComputeDetailsDto;
+
+public class MapComputeDetailsDtoToComputeEntity extends MappingBase<ComputeDetailsDto,
+    ComputeEntity> {
+  @Override
+  public void doMapping(ComputeDetailsDto source, ComputeEntity target) {
+    ComputeDescription computeDesc = new ComputeDescription(source.getName(), source
+        .getDescription());
+    target.setCompositionData(computeDesc == null ? null : JsonUtil.object2Json(computeDesc));
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComputeEntityToComputeCreationDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComputeEntityToComputeCreationDto.java
new file mode 100644
index 0000000..23f7b52
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComputeEntityToComputeCreationDto.java
@@ -0,0 +1,13 @@
+package org.openecomp.sdcrests.vsp.rest.mapping;
+
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComputeCreationDto;
+
+public class MapComputeEntityToComputeCreationDto extends
+    MappingBase<ComputeEntity, ComputeCreationDto> {
+  @Override
+  public void doMapping(ComputeEntity source, ComputeCreationDto target) {
+    target.setId(source.getId());
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComputeEntityToComputeDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComputeEntityToComputeDto.java
new file mode 100644
index 0000000..d758647
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComputeEntityToComputeDto.java
@@ -0,0 +1,22 @@
+package org.openecomp.sdcrests.vsp.rest.mapping;
+
+import org.openecomp.core.utilities.json.JsonUtil;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.types.ListComputeResponse;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComputeDescription;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComputeDto;
+
+public class MapComputeEntityToComputeDto extends MappingBase<ListComputeResponse, ComputeDto> {
+  @Override
+  public void doMapping(ListComputeResponse source, ComputeDto target) {
+    target.setId(source.getComputeEntity().getId());
+    if (source.getComputeEntity().getCompositionData() != null) {
+      ComputeDescription desc = JsonUtil.json2Object(source.getComputeEntity().getCompositionData
+          (), ComputeDescription.class);
+      target.setName(desc.getName());
+      target.setDescription(desc.getDescription());
+      target.setAssociatedToDeploymentFlavor(source.isAssociatedWithDeploymentFlavor());
+    }
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComputeEntityToVspComputeDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComputeEntityToVspComputeDto.java
new file mode 100644
index 0000000..f02bf37
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapComputeEntityToVspComputeDto.java
@@ -0,0 +1,20 @@
+package org.openecomp.sdcrests.vsp.rest.mapping;
+
+import org.openecomp.core.utilities.json.JsonUtil;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComputeDescription;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspComputeDto;
+
+public class MapComputeEntityToVspComputeDto extends MappingBase<ComputeEntity, VspComputeDto> {
+  @Override
+  public void doMapping(ComputeEntity source, VspComputeDto target) {
+    target.setComputeFlavorId(source.getId());
+    if (source.getCompositionData() != null) {
+      ComputeDescription desc = JsonUtil.json2Object(source.getCompositionData(), ComputeDescription
+          .class);
+      target.setName(desc.getName());
+      target.setComponentId(source.getComponentId());
+    }
+  }
+}
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapDeploymentFlavorEntityDeploymentFlavorToListResponse.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapDeploymentFlavorEntityDeploymentFlavorToListResponse.java
new file mode 100644
index 0000000..edfbccf
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapDeploymentFlavorEntityDeploymentFlavorToListResponse.java
@@ -0,0 +1,22 @@
+package org.openecomp.sdcrests.vsp.rest.mapping;
+
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.DeploymentFlavorEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.DeploymentFlavor;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.DeploymentFlavorListResponseDto;
+
+public class MapDeploymentFlavorEntityDeploymentFlavorToListResponse extends
+    MappingBase<DeploymentFlavorEntity, DeploymentFlavorListResponseDto> {
+
+  @Override
+  public void doMapping(DeploymentFlavorEntity source,
+                        DeploymentFlavorListResponseDto target) {
+    target.setId(source.getId());
+    DeploymentFlavor deploymentFlavor = source.getDeploymentFlavorCompositionData();
+
+    if (deploymentFlavor != null) {
+      target.setModel(deploymentFlavor.getModel());
+      target.setDescription(deploymentFlavor.getDescription());
+    }
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapDeploymentFlavorEntityToDeploymentFlavorCreationDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapDeploymentFlavorEntityToDeploymentFlavorCreationDto.java
new file mode 100644
index 0000000..0ca990c
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapDeploymentFlavorEntityToDeploymentFlavorCreationDto.java
@@ -0,0 +1,16 @@
+package org.openecomp.sdcrests.vsp.rest.mapping;
+
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.DeploymentFlavorEntity;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.DeploymentFlavorCreationDto;
+
+
+public class MapDeploymentFlavorEntityToDeploymentFlavorCreationDto extends MappingBase<DeploymentFlavorEntity,
+    DeploymentFlavorCreationDto> {
+
+  @Override
+  public void doMapping(DeploymentFlavorEntity source,
+                        DeploymentFlavorCreationDto target) {
+    target.setDeploymentFlavorId(source.getId());
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapDeploymentFlavorEntityToDeploymentFlavorDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapDeploymentFlavorEntityToDeploymentFlavorDto.java
new file mode 100644
index 0000000..41795ee
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapDeploymentFlavorEntityToDeploymentFlavorDto.java
@@ -0,0 +1,19 @@
+package org.openecomp.sdcrests.vsp.rest.mapping;
+
+
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.DeploymentFlavorEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.DeploymentFlavor;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.DeploymentFlavorDto;
+
+public class MapDeploymentFlavorEntityToDeploymentFlavorDto  extends
+    MappingBase<DeploymentFlavorEntity, DeploymentFlavorDto> {
+  @Override
+  public void doMapping(DeploymentFlavorEntity source, DeploymentFlavorDto target) {
+    target.setId(source.getId());
+    DeploymentFlavor deploymentFlavor = source.getDeploymentFlavorCompositionData();
+    if (deploymentFlavor != null) {
+      //new MapNetworkToNetworkDto().doMapping(deploymentFlavor, target);
+    }
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapDeploymentFlavorRequestDtoToDeploymentFlavorEntity.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapDeploymentFlavorRequestDtoToDeploymentFlavorEntity.java
new file mode 100644
index 0000000..b956313
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapDeploymentFlavorRequestDtoToDeploymentFlavorEntity.java
@@ -0,0 +1,20 @@
+package org.openecomp.sdcrests.vsp.rest.mapping;
+
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.DeploymentFlavorEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.DeploymentFlavor;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.DeploymentFlavorRequestDto;
+
+public class MapDeploymentFlavorRequestDtoToDeploymentFlavorEntity
+    extends MappingBase<DeploymentFlavorRequestDto, DeploymentFlavorEntity> {
+
+  @Override
+  public void doMapping(DeploymentFlavorRequestDto source, DeploymentFlavorEntity target) {
+    DeploymentFlavor deploymentFlavor = new DeploymentFlavor();
+    deploymentFlavor.setModel(source.getModel());
+    deploymentFlavor.setDescription(source.getDescription());
+    deploymentFlavor.setFeatureGroupId(source.getFeatureGroupId());
+    deploymentFlavor.setComponentComputeAssociations(source.getComponentComputeAssociations());
+    target.setDeploymentFlavorCompositionData(deploymentFlavor);
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapDeploymentFlavorToDeploymentDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapDeploymentFlavorToDeploymentDto.java
new file mode 100644
index 0000000..fceeb8f
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapDeploymentFlavorToDeploymentDto.java
@@ -0,0 +1,16 @@
+package org.openecomp.sdcrests.vsp.rest.mapping;
+
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.DeploymentFlavor;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.DeploymentFlavorDto;
+
+
+public class MapDeploymentFlavorToDeploymentDto extends MappingBase<DeploymentFlavor, DeploymentFlavorDto> {
+  @Override
+  public void doMapping(DeploymentFlavor source, DeploymentFlavorDto target) {
+    target.setModel(source.getModel());
+    target.setDescription(source.getDescription());
+    target.setFeatureGroupId(source.getFeatureGroupId());
+    target.setComponentComputeAssociations(source.getComponentComputeAssociations());
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapImageDataToImageDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapImageDataToImageDto.java
new file mode 100644
index 0000000..684cd4c
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapImageDataToImageDto.java
@@ -0,0 +1,22 @@
+package org.openecomp.sdcrests.vsp.rest.mapping;
+
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ImageData;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ImageDto;
+
+
+public class MapImageDataToImageDto extends MappingBase<ImageData, ImageDto> {
+
+  @Override
+  public void doMapping(ImageData source, ImageDto target) {
+    target.setFileName(source.getFileName());
+    target.setDescription(source.getDescription());
+  }
+}
+
+
+
+
+
+
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapImageEntityToImageCreationDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapImageEntityToImageCreationDto.java
new file mode 100644
index 0000000..5710fbe
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapImageEntityToImageCreationDto.java
@@ -0,0 +1,16 @@
+package org.openecomp.sdcrests.vsp.rest.mapping;
+
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ImageEntity;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComponentCreationDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ImageCreationDto;
+
+public class MapImageEntityToImageCreationDto extends MappingBase<ImageEntity,
+    ImageCreationDto> {
+
+  @Override
+  public void doMapping(ImageEntity source, ImageCreationDto target) {
+    target.setId(source.getId());
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapImageEntityToImageDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapImageEntityToImageDto.java
new file mode 100644
index 0000000..62d3746
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapImageEntityToImageDto.java
@@ -0,0 +1,21 @@
+package org.openecomp.sdcrests.vsp.rest.mapping;
+
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ImageEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Image;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ImageData;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ImageDto;
+
+public class MapImageEntityToImageDto extends MappingBase<ImageEntity, ImageDto> {
+  @Override
+  public void doMapping(ImageEntity source, ImageDto target) {
+    target.setId(source.getId());
+    Image image = source.getImageCompositionData();
+
+    if (image != null) {
+      ImageData imageData = new ImageData(image.getFileName(), image.getDescription());
+      new MapImageDataToImageDto().doMapping(imageData, target);
+    }
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapImageRequestDtoToImageEntity.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapImageRequestDtoToImageEntity.java
new file mode 100644
index 0000000..0b8a501
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapImageRequestDtoToImageEntity.java
@@ -0,0 +1,44 @@
+package org.openecomp.sdcrests.vsp.rest.mapping;
+
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.common.errors.ErrorCategory;
+import org.openecomp.sdc.common.errors.ErrorCode;
+import org.openecomp.sdc.datatypes.error.ErrorLevel;
+import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
+import org.openecomp.sdc.logging.types.LoggerConstants;
+import org.openecomp.sdc.logging.types.LoggerErrorCode;
+import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ImageEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.ImageErrorBuilder;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Image;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ImageFormat;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ImageRequestDto;
+
+public class MapImageRequestDtoToImageEntity extends MappingBase<ImageRequestDto, ImageEntity> {
+
+  @Override
+  public void doMapping(ImageRequestDto source, ImageEntity target) {
+    Image image = new Image();
+    image.setFileName(source.getFileName());
+    image.setDescription(source.getDescription());
+    /*try {
+      if (source.getFormat() != null) {
+        final ImageFormat imageFormat = ImageFormat.valueOf(source.getFormat());
+        image.setFormat(source.getFormat());
+      }
+    } catch (IllegalArgumentException exception) {
+      ErrorCode errorCode = ImageErrorBuilder.getInvalidImageFormatErrorBuilder();
+      MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
+          LoggerTragetServiceName.CREATE_IMAGE, ErrorLevel.ERROR.name(),
+          errorCode.id(), errorCode.message() );
+      throw new CoreException(errorCode);
+    }
+    image.setMd5(source.getMd5());
+    image.setVersion(source.getVersion());
+    //image.setProvidedBy(source.getProvidedBy());*/
+    target.setImageCompositionData(image);
+  }
+
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapMibUploadStatusToDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapMonitoringUploadStatusToDto.java
similarity index 77%
rename from openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapMibUploadStatusToDto.java
rename to openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapMonitoringUploadStatusToDto.java
index d69e078..08d322d 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapMibUploadStatusToDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapMonitoringUploadStatusToDto.java
@@ -20,14 +20,16 @@
 
 package org.openecomp.sdcrests.vsp.rest.mapping;
 
-import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.MibUploadStatus;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.MonitoringUploadStatus;
 import org.openecomp.sdcrests.mapping.MappingBase;
-import org.openecomp.sdcrests.vendorsoftwareproducts.types.MibUploadStatusDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.MonitoringUploadStatusDto;
 
-public class MapMibUploadStatusToDto extends MappingBase<MibUploadStatus, MibUploadStatusDto> {
+public class MapMonitoringUploadStatusToDto
+    extends MappingBase<MonitoringUploadStatus, MonitoringUploadStatusDto> {
   @Override
-  public void doMapping(MibUploadStatus source, MibUploadStatusDto target) {
+  public void doMapping(MonitoringUploadStatus source, MonitoringUploadStatusDto target) {
     target.setSnmpPoll(source.getSnmpPoll());
     target.setSnmpTrap(source.getSnmpTrap());
+    target.setVesEvent(source.getVesEvent());
   }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapNicEntityToNicCreationResponseDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapNicEntityToNicCreationResponseDto.java
new file mode 100644
index 0000000..23bf5d5
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapNicEntityToNicCreationResponseDto.java
@@ -0,0 +1,16 @@
+package org.openecomp.sdcrests.vsp.rest.mapping;
+
+
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
+import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.NicCreationResponseDto;
+
+public class MapNicEntityToNicCreationResponseDto extends MappingBase<NicEntity,
+    NicCreationResponseDto> {
+
+
+  @Override
+  public void doMapping(NicEntity source, NicCreationResponseDto target) {
+    target.setNicId(source.getId());
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapNicRequestDtoToNicEntity.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapNicRequestDtoToNicEntity.java
index 4744364..7fd0253 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapNicRequestDtoToNicEntity.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapNicRequestDtoToNicEntity.java
@@ -21,6 +21,7 @@
 package org.openecomp.sdcrests.vsp.rest.mapping;
 
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.NetworkType;
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
 import org.openecomp.sdcrests.mapping.MappingBase;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.NicRequestDto;
@@ -32,6 +33,8 @@
     nic.setName(source.getName());
     nic.setDescription(source.getDescription());
     nic.setNetworkId(source.getNetworkId());
+    nic.setNetworkType(NetworkType.valueOf(source.getNetworkType()));
+    nic.setNetworkDescription(source.getNetworkDescription());
     target.setNicCompositionData(nic);
   }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapNicToNicDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapNicToNicDto.java
index 2fcfd36..8c48f18 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapNicToNicDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapNicToNicDto.java
@@ -31,5 +31,9 @@
     target.setDescription(source.getDescription());
     target.setNetworkId(source.getNetworkId());
     target.setNetworkName(source.getNetworkName());
+    if (source.getNetworkType() != null) {
+      target.setNetworkType(source.getNetworkType().name());
+    }
+    target.setNetworkDescription(source.getNetworkDescription());
   }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapValidationResponseToDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapValidationResponseToDto.java
index e6346c4..89d210f 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapValidationResponseToDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapValidationResponseToDto.java
@@ -24,6 +24,8 @@
 import org.apache.commons.collections4.MapUtils;
 import org.openecomp.sdc.common.errors.ErrorCode;
 import org.openecomp.sdc.datatypes.error.ErrorMessage;
+import org.openecomp.sdc.vendorsoftwareproduct.types.ComponentValidationResult;
+import org.openecomp.sdc.vendorsoftwareproduct.types.DeploymentFlavorValidationResult;
 import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireValidationResult;
 import org.openecomp.sdc.vendorsoftwareproduct.types.ValidationResponse;
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
@@ -32,15 +34,17 @@
 import org.openecomp.sdcrests.common.types.ErrorCodeDto;
 import org.openecomp.sdcrests.common.types.ErrorMessageDto;
 import org.openecomp.sdcrests.mapping.MappingBase;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComponentValidationResultDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.CompositionEntityValidationDataDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.DeploymentFlavorValidationResultDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.QuestionnaireValidationResultDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.ValidationResponseDto;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -57,7 +61,8 @@
 
   private static QuestionnaireValidationResultDto mapQuestionnaireValidationResult(
       QuestionnaireValidationResult questionnaireValidationResult) {
-    if (questionnaireValidationResult == null) {
+    if (Objects.isNull(questionnaireValidationResult)
+        || Objects.isNull(questionnaireValidationResult.getValidationData())) {
       return null;
     }
     QuestionnaireValidationResultDto questionnaireValidationResultDto =
@@ -74,6 +79,44 @@
     return questionnaireValidationResultDto;
   }
 
+  private static ComponentValidationResultDto mapcomponentValidationResult(
+      ComponentValidationResult componentValidationResult) {
+    if (componentValidationResult == null) {
+      return null;
+    }
+    ComponentValidationResultDto componentValidationResultDto =
+        new ComponentValidationResultDto();
+    componentValidationResultDto.setValid(componentValidationResult.isValid());
+
+    Set<CompositionEntityValidationDataDto> validationDataDto = new HashSet<>();
+    for(CompositionEntityValidationData validationData : componentValidationResult.getValidationData()){
+      validationDataDto.add(new MapCompositionEntityValidationDataToDto().applyMapping
+          (validationData, CompositionEntityValidationDataDto.class));
+    }
+
+    componentValidationResultDto.setValidationData(validationDataDto);
+    return componentValidationResultDto;
+  }
+
+  private static DeploymentFlavorValidationResultDto mapdeploymentFlavorValidationResult(
+      DeploymentFlavorValidationResult deploymentFlavorValidationResult) {
+    if (deploymentFlavorValidationResult == null) {
+      return null;
+    }
+    DeploymentFlavorValidationResultDto deploymentFlavorValidationResultDto =
+        new DeploymentFlavorValidationResultDto();
+    deploymentFlavorValidationResultDto.setValid(deploymentFlavorValidationResult.isValid());
+
+    Set<CompositionEntityValidationDataDto> validationDataDto = new HashSet<>();
+    for(CompositionEntityValidationData validationData : deploymentFlavorValidationResult.getValidationData()){
+      validationDataDto.add(new MapCompositionEntityValidationDataToDto().applyMapping
+          (validationData, CompositionEntityValidationDataDto.class));
+    }
+
+    deploymentFlavorValidationResultDto.setValidationData(validationDataDto);
+    return deploymentFlavorValidationResultDto;
+  }
+
   private static List<ErrorMessageDto> mapErrorMessages(List<ErrorMessage> errorMessages) {
     return errorMessages == null ? null : errorMessages.stream().map(
         errorMessage -> new MapErrorMessageToDto()
@@ -94,5 +137,7 @@
     target.setUploadDataErrors(mapUploadDataErrors(source.getUploadDataErrors()));
     target.setQuestionnaireValidationResult(
         mapQuestionnaireValidationResult(source.getQuestionnaireValidationResult()));
+    target.setComponentValidationResult(mapcomponentValidationResult(source.getComponentValidationResult()));
+    target.setDeploymentFlavorValidationResult(mapdeploymentFlavorValidationResult(source.getDeploymentFlavorValidationResult()));
   }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVersionedVendorSoftwareProductInfoToVspDetailsDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVersionedVendorSoftwareProductInfoToVspDetailsDto.java
index 6eca00e..9093da5 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVersionedVendorSoftwareProductInfoToVspDetailsDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVersionedVendorSoftwareProductInfoToVspDetailsDto.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.
@@ -73,5 +73,9 @@
               .map(version -> new VersionDto(version.toString(), version.toString()))
               .collect(Collectors.toList()));
     }
+
+    //Onboarding Method valid value will always be present in VSP saved in DB
+    target.setOnboardingMethod(vsp.getOnboardingMethod());
+
   }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDescriptionDtoToVspDetails.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDescriptionDtoToVspDetails.java
index ec08432..9808bbb 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDescriptionDtoToVspDetails.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDescriptionDtoToVspDetails.java
@@ -38,6 +38,7 @@
     target.setIcon(source.getIcon());
     target.setVendorName(source.getVendorName());
     target.setVendorId(source.getVendorId());
+    target.setOnboardingMethod(source.getOnboardingMethod());
 
     VersionDto vlmVersion = source.getLicensingVersion();
     if (vlmVersion != null) {
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MspVspDetailsToVspCreationDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDetailsToVspCreationDto.java
similarity index 92%
rename from openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MspVspDetailsToVspCreationDto.java
rename to openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDetailsToVspCreationDto.java
index 5480dc1..f009d8b 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MspVspDetailsToVspCreationDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapVspDetailsToVspCreationDto.java
@@ -24,10 +24,7 @@
 import org.openecomp.sdcrests.mapping.MappingBase;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspCreationDto;
 
-/**
- * Created by TALIO on 5/15/2016.
- */
-public class MspVspDetailsToVspCreationDto extends MappingBase<VspDetails, VspCreationDto> {
+public class MapVspDetailsToVspCreationDto extends MappingBase<VspDetails, VspCreationDto> {
   @Override
   public void doMapping(VspDetails source, VspCreationDto target) {
     target.setVspId(source.getId());
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/ComponentMonitoringUploadsImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/ComponentMonitoringUploadsImpl.java
new file mode 100644
index 0000000..a971782
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/ComponentMonitoringUploadsImpl.java
@@ -0,0 +1,117 @@
+package org.openecomp.sdcrests.vsp.rest.services;
+
+import org.apache.cxf.jaxrs.ext.multipart.Attachment;
+import org.openecomp.core.enrichment.types.MonitoringUploadType;
+import org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder;
+import org.openecomp.sdc.common.errors.Messages;
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
+import org.openecomp.sdc.logging.context.MdcUtil;
+import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
+import org.openecomp.sdc.logging.messages.AuditMessages;
+import org.openecomp.sdc.logging.types.LoggerServiceName;
+import org.openecomp.sdc.vendorsoftwareproduct.ComponentManager;
+import org.openecomp.sdc.vendorsoftwareproduct.ComponentManagerFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.MonitoringUploadsManager;
+import org.openecomp.sdc.vendorsoftwareproduct.MonitoringUploadsManagerFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.MonitoringUploadStatus;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.types.VersionableEntityAction;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.MonitoringUploadStatusDto;
+import org.openecomp.sdcrests.vsp.rest.ComponentMonitoringUploads;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapMonitoringUploadStatusToDto;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Service;
+
+import javax.inject.Named;
+import javax.ws.rs.core.Response;
+import java.io.InputStream;
+
+/**
+ * @author katyr
+ * @since June 26, 2017
+ */
+
+@Named
+@Service("componentMonitoringUploads")
+@Scope(value = "prototype")
+//@Validated
+public class ComponentMonitoringUploadsImpl implements ComponentMonitoringUploads {
+  private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
+  private MonitoringUploadsManager
+      monitoringUploadsManager = MonitoringUploadsManagerFactory.getInstance().createInterface();
+  private ComponentManager componentManager =
+      ComponentManagerFactory.getInstance().createInterface();
+  private static final Logger logger =
+      LoggerFactory.getLogger(ComponentMonitoringUploadsImpl.class);
+
+  @Override
+  public Response upload(Attachment attachment,
+                         String vspId, String versionId, String componentId, String type,
+                         String user) throws Exception {
+    mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId + "," + componentId);
+    MdcUtil.initMdc(LoggerServiceName.Upload_Monitoring_Artifact.toString());
+    logger.audit(AuditMessages.AUDIT_MSG + String.format(AuditMessages
+        .UPLOAD_MONITORING_FILE, type, vspId, componentId));
+
+    Version version = resolveVspVersion(vspId, null, user, VersionableEntityAction.Write);
+    componentManager.validateComponentExistence(vspId, version, componentId, user);
+
+    MonitoringUploadType monitoringUploadType = getMonitoringUploadType(vspId, componentId, type);
+    monitoringUploadsManager.upload(attachment.getObject(InputStream.class),
+        attachment.getContentDisposition().getParameter("filename"), vspId, version, componentId,
+        monitoringUploadType, user);
+
+    mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId + "," + componentId);
+    return Response.ok().build();
+  }
+
+  private MonitoringUploadType getMonitoringUploadType(String vspId, String componentId,
+                                                       String type) throws Exception {
+    MonitoringUploadType monitoringUploadType;
+    try {
+      monitoringUploadType = MonitoringUploadType.valueOf(type);
+    } catch (IllegalArgumentException exception) {
+      String errorWithParameters = ErrorMessagesFormatBuilder
+          .getErrorWithParameters(Messages.ILLEGAL_MONITORING_ARTIFACT_TYPE.getErrorMessage(),
+              componentId, vspId);
+      throw new Exception(errorWithParameters, exception);
+    }
+    return monitoringUploadType;
+  }
+
+  @Override
+  public Response delete(String vspId, String versionId, String componentId,
+                         String type, String user) throws Exception {
+    mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId + "," + componentId);
+    MdcUtil.initMdc(LoggerServiceName.Delete_Monitoring_Artifact.toString());
+
+    MonitoringUploadType monitoringUploadType = getMonitoringUploadType(vspId, componentId, type);
+
+    Version version = resolveVspVersion(vspId, null, user, VersionableEntityAction.Write);
+    componentManager.validateComponentExistence(vspId, version, componentId, user);
+    monitoringUploadsManager
+        .delete(vspId, version, componentId, monitoringUploadType, user);
+
+    mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId + "," + componentId);
+    return Response.ok().build();
+  }
+
+  @Override
+  public Response list(String vspId, String versionId, String componentId,
+                       String user) {
+    MdcUtil.initMdc(LoggerServiceName.List_Monitoring_Artifacts.toString());
+
+    Version version = resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read);
+    componentManager.validateComponentExistence(vspId, version, componentId, user);
+
+    MonitoringUploadStatus response = monitoringUploadsManager
+        .listFilenames(vspId, version, componentId, user);
+
+    MonitoringUploadStatusDto returnEntity =
+        new MapMonitoringUploadStatusToDto()
+            .applyMapping(response, MonitoringUploadStatusDto.class);
+    return Response.status(Response.Status.OK).entity(returnEntity).build();
+
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/ComponentUploadsImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/ComponentUploadsImpl.java
index 7a2a157..f885082 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/ComponentUploadsImpl.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/ComponentUploadsImpl.java
@@ -1,137 +1,142 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * 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.sdcrests.vsp.rest.services;
-
-import org.apache.cxf.jaxrs.ext.multipart.Attachment;
-import org.openecomp.core.enrichment.types.ArtifactType;
-import org.openecomp.sdc.logging.api.Logger;
-import org.openecomp.sdc.logging.api.LoggerFactory;
-import org.openecomp.sdc.logging.context.MdcUtil;
-import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
-import org.openecomp.sdc.logging.messages.AuditMessages;
-import org.openecomp.sdc.logging.types.LoggerServiceName;
-import org.openecomp.sdc.vendorsoftwareproduct.ComponentManager;
-import org.openecomp.sdc.vendorsoftwareproduct.ComponentManagerFactory;
-import org.openecomp.sdc.vendorsoftwareproduct.MibManager;
-import org.openecomp.sdc.vendorsoftwareproduct.MibManagerFactory;
-import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.MibUploadStatus;
-import org.openecomp.sdc.versioning.dao.types.Version;
-import org.openecomp.sdc.versioning.types.VersionableEntityAction;
-import org.openecomp.sdcrests.vendorsoftwareproducts.types.MibUploadStatusDto;
-import org.openecomp.sdcrests.vsp.rest.ComponentUploads;
-import org.openecomp.sdcrests.vsp.rest.mapping.MapMibUploadStatusToDto;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Service;
-import org.springframework.validation.annotation.Validated;
-
-import javax.inject.Named;
-import javax.ws.rs.core.Response;
-import java.io.InputStream;
-
-@Named
-@Service("componentUploads")
-@Scope(value = "prototype")
-@Validated
-public class ComponentUploadsImpl implements ComponentUploads {
-  private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
-  private MibManager mibManager = MibManagerFactory.getInstance().createInterface();
-  private ComponentManager componentManager =
-      ComponentManagerFactory.getInstance().createInterface();
-  private static final Logger logger =
-          LoggerFactory.getLogger(ComponentUploadsImpl.class);
-
-  @Override
-  public Response uploadTrapMibFile(Attachment attachment, String vspId, String versionId, String componentId,
-                                    String user) {
-    mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId + "," + componentId);
-    MdcUtil.initMdc(LoggerServiceName.Upload_MIB_File.toString());
-    logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.UPLOAD_ARTIFACT_MIB_TRAP + vspId);
-
-    Version version = resolveVspVersion(vspId, null, user, VersionableEntityAction.Write);
-    componentManager.validateComponentExistence(vspId, version, componentId, user);
-    mibManager.upload(attachment.getObject(InputStream.class),
-        attachment.getContentDisposition().getParameter("filename"), vspId, version, componentId,
-        ArtifactType.SNMP_TRAP, user);
-
-    mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId + "," + componentId);
-    return Response.ok().build();
-  }
-
-  @Override
-  public Response deleteTrapMibFile(String vspId, String versionId, String componentId, String user) {
-    mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId + "," + componentId);
-    MdcUtil.initMdc(LoggerServiceName.Delete_MIB_File.toString());
-
-    Version version = resolveVspVersion(vspId, null, user, VersionableEntityAction.Write);
-    componentManager.validateComponentExistence(vspId, version, componentId, user);
-    mibManager.delete(vspId, version, componentId, ArtifactType.SNMP_TRAP, user);
-
-    mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId + "," + componentId);
-    return Response.ok().build();
-  }
-
-  @Override
-  public Response uploadPollMibFile(Attachment attachment, String vspId, String versionId, String componentId,
-                                    String user) {
-
-    mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId + "," + componentId);
-    logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.UPLOAD_ARTIFACT_MIB_POLL + vspId);
-    MdcUtil.initMdc(LoggerServiceName.Upload_MIB_File.toString());
-
-    Version version = resolveVspVersion(vspId, null, user, VersionableEntityAction.Write);
-    componentManager.validateComponentExistence(vspId, version, componentId, user);
-    mibManager.upload(attachment.getObject(InputStream.class),
-        attachment.getContentDisposition().getParameter("filename"), vspId, version, componentId,
-        ArtifactType.SNMP_POLL, user);
-
-    mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId + "," + componentId);
-    return Response.ok().build();
-  }
-
-  @Override
-  public Response deletePollMibFile(String vspId, String versionId, String componentId, String
-      user) {
-    mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId + "," + componentId);
-    MdcUtil.initMdc(LoggerServiceName.Delete_MIB_File.toString());
-
-    Version version = resolveVspVersion(vspId, null, user, VersionableEntityAction.Write);
-    componentManager.validateComponentExistence(vspId, version, componentId, user);
-    mibManager.delete(vspId, version, componentId, ArtifactType.SNMP_POLL, user);
-
-    mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId + "," + componentId);
-    return Response.ok().build();
-  }
-
-  @Override
-  public Response list(String vspId, String versionId, String componentId, String user) {
-    MdcUtil.initMdc(LoggerServiceName.List_MIB_Files.toString());
-
-    Version version = resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read);
-    componentManager.validateComponentExistence(vspId, version, componentId, user);
-
-    MibUploadStatus response = mibManager.listFilenames(vspId, version, componentId, user);
-
-    MibUploadStatusDto returnEntity =
-        new MapMibUploadStatusToDto().applyMapping(response, MibUploadStatusDto.class);
-    return Response.status(Response.Status.OK).entity(returnEntity).build();
-
-  }
-}
+///*-
+// * ============LICENSE_START=======================================================
+// * SDC
+// * ================================================================================
+// * 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.sdcrests.vsp.rest.services;
+//
+//import org.apache.cxf.jaxrs.ext.multipart.Attachment;
+//import org.openecomp.core.enrichment.types.MonitoringUploadType;
+//import org.openecomp.sdc.logging.api.Logger;
+//import org.openecomp.sdc.logging.api.LoggerFactory;
+//import org.openecomp.sdc.logging.context.MdcUtil;
+//import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
+//import org.openecomp.sdc.logging.messages.AuditMessages;
+//import org.openecomp.sdc.logging.types.LoggerServiceName;
+//import org.openecomp.sdc.vendorsoftwareproduct.ComponentManager;
+//import org.openecomp.sdc.vendorsoftwareproduct.ComponentManagerFactory;
+//import org.openecomp.sdc.vendorsoftwareproduct.MonitoringUploadsManager;
+//import org.openecomp.sdc.vendorsoftwareproduct.MonitoringUploadsManagerFactory;
+//import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.MonitoringUploadStatus;
+//import org.openecomp.sdc.versioning.dao.types.Version;
+//import org.openecomp.sdc.versioning.types.VersionableEntityAction;
+//import org.openecomp.sdcrests.vendorsoftwareproducts.types.MonitoringUploadStatusDto;
+//import org.openecomp.sdcrests.vsp.rest.ComponentUploads;
+//import org.openecomp.sdcrests.vsp.rest.mapping.MapMonitoringUploadStatusToDto;
+//import org.springframework.context.annotation.Scope;
+//import org.springframework.stereotype.Service;
+//import org.springframework.validation.annotation.Validated;
+//
+//import javax.inject.Named;
+//import javax.ws.rs.core.Response;
+//import java.io.InputStream;
+//
+//@Named
+//@Service("componentUploads")
+//@Scope(value = "prototype")
+//@Validated
+//public class ComponentUploadsImpl implements ComponentUploads {
+//  private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
+//  private MonitoringUploadsManager
+//      monitoringUploadsManager = MonitoringUploadsManagerFactory.getInstance().createInterface();
+//  private ComponentManager componentManager =
+//      ComponentManagerFactory.getInstance().createInterface();
+//  private static final Logger logger =
+//          LoggerFactory.getLogger(ComponentUploadsImpl.class);
+//
+//  @Override
+//  public Response uploadTrapMibFile(Attachment attachment, String vspId, String versionId, String componentId,
+//                                    String user) {
+//    mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId + "," + componentId);
+//    MdcUtil.initMdc(LoggerServiceName.Upload_Monitoring_Artifact.toString());
+//    logger.audit(AuditMessages.AUDIT_MSG + String.format(AuditMessages.UPLOAD_MONITORING_FILE ,
+//        vspId,componentId));
+//
+//    Version version = resolveVspVersion(vspId, null, user, VersionableEntityAction.Write);
+//    componentManager.validateComponentExistence(vspId, version, componentId, user);
+//    monitoringUploadsManager.upload(attachment.getObject(InputStream.class),
+//        attachment.getContentDisposition().getParameter("filename"), vspId, version, componentId,
+//        MonitoringUploadType.SNMP_TRAP, user);
+//
+//    mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId + "," + componentId);
+//    return Response.ok().build();
+//  }
+//
+//  @Override
+//  public Response deleteTrapMibFile(String vspId, String versionId, String componentId, String user) {
+//    mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId + "," + componentId);
+//    MdcUtil.initMdc(LoggerServiceName.Delete_Monitoring_Artifact.toString());
+//
+//    Version version = resolveVspVersion(vspId, null, user, VersionableEntityAction.Write);
+//    componentManager.validateComponentExistence(vspId, version, componentId, user);
+//    monitoringUploadsManager
+//        .delete(vspId, version, componentId, MonitoringUploadType.SNMP_TRAP, user);
+//
+//    mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId + "," + componentId);
+//    return Response.ok().build();
+//  }
+//
+//  @Override
+//  public Response uploadPollMibFile(Attachment attachment, String vspId, String versionId, String componentId,
+//                                    String user) {
+//
+//    mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId + "," + componentId);
+//    logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.UPLOAD_MONITORING_FILE + vspId);
+//    MdcUtil.initMdc(LoggerServiceName.Upload_Monitoring_Artifact.toString());
+//
+//    Version version = resolveVspVersion(vspId, null, user, VersionableEntityAction.Write);
+//    componentManager.validateComponentExistence(vspId, version, componentId, user);
+//    monitoringUploadsManager.upload(attachment.getObject(InputStream.class),
+//        attachment.getContentDisposition().getParameter("filename"), vspId, version, componentId,
+//        MonitoringUploadType.SNMP_POLL, user);
+//
+//    mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId + "," + componentId);
+//    return Response.ok().build();
+//  }
+//
+//  @Override
+//  public Response deletePollMibFile(String vspId, String versionId, String componentId, String
+//      user) {
+//    mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId + "," + componentId);
+//    MdcUtil.initMdc(LoggerServiceName.Delete_Monitoring_Artifact.toString());
+//
+//    Version version = resolveVspVersion(vspId, null, user, VersionableEntityAction.Write);
+//    componentManager.validateComponentExistence(vspId, version, componentId, user);
+//    monitoringUploadsManager
+//        .delete(vspId, version, componentId, MonitoringUploadType.SNMP_POLL, user);
+//
+//    mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId + "," + componentId);
+//    return Response.ok().build();
+//  }
+//
+//  @Override
+//  public Response list(String vspId, String versionId, String componentId, String user) {
+//    MdcUtil.initMdc(LoggerServiceName.List_Monitoring_Artifacts.toString());
+//
+//    Version version = resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read);
+//    componentManager.validateComponentExistence(vspId, version, componentId, user);
+//
+//    MonitoringUploadStatus response = monitoringUploadsManager
+//        .listFilenames(vspId, version, componentId, user);
+//
+//    MonitoringUploadStatusDto returnEntity =
+//        new MapMonitoringUploadStatusToDto().applyMapping(response, MonitoringUploadStatusDto.class);
+//    return Response.status(Response.Status.OK).entity(returnEntity).build();
+//
+//  }
+//}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/ComponentsImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/ComponentsImpl.java
index a36534a..51955b7 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/ComponentsImpl.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/ComponentsImpl.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.
@@ -32,6 +32,7 @@
 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
 import org.openecomp.sdc.versioning.dao.types.Version;
 import org.openecomp.sdc.versioning.types.VersionableEntityAction;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComponentCreationDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComponentDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComponentRequestDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.CompositionEntityResponseDto;
@@ -39,6 +40,7 @@
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.QuestionnaireResponseDto;
 import org.openecomp.sdcrests.vsp.rest.Components;
 import org.openecomp.sdcrests.vsp.rest.mapping.MapComponentDataToComponentDto;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapComponentEntityToComponentCreationDto;
 import org.openecomp.sdcrests.vsp.rest.mapping.MapComponentEntityToComponentDto;
 import org.openecomp.sdcrests.vsp.rest.mapping.MapComponentRequestDtoToComponentEntity;
 import org.openecomp.sdcrests.vsp.rest.mapping.MapCompositionEntityResponseToDto;
@@ -93,8 +95,12 @@
     component.setVersion(resolveVspVersion(vspId, null, user, VersionableEntityAction.Write));
 
     ComponentEntity createdComponent = componentManager.createComponent(component, user);
+    MapComponentEntityToComponentCreationDto mapping =
+        new MapComponentEntityToComponentCreationDto();
+    ComponentCreationDto createdComponentDto = mapping.applyMapping(createdComponent,
+        ComponentCreationDto.class);
     return Response
-        .ok(createdComponent != null ? new StringWrapperResponse(createdComponent.getId()) : null)
+        .ok(createdComponent != null ? createdComponentDto : null)
         .build();
   }
 
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/ComputeImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/ComputeImpl.java
new file mode 100644
index 0000000..ec445af
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/ComputeImpl.java
@@ -0,0 +1,162 @@
+package org.openecomp.sdcrests.vsp.rest.services;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.openecomp.sdc.logging.context.MdcUtil;
+import org.openecomp.sdc.logging.types.LoggerServiceName;
+import org.openecomp.sdc.vendorsoftwareproduct.ComponentManager;
+import org.openecomp.sdc.vendorsoftwareproduct.ComponentManagerFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.ComputeManager;
+import org.openecomp.sdc.vendorsoftwareproduct.ComputeManagerFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.ListComputeResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComputeData;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.types.VersionableEntityAction;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.CompositionEntityResponseDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.CompositionEntityValidationDataDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComputeCreationDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComputeDetailsDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ComputeDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.QuestionnaireResponseDto;
+import org.openecomp.sdcrests.vsp.rest.Compute;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapCompositionEntityResponseToDto;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapCompositionEntityValidationDataToDto;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapComputeDataToComputeDetailsDto;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapComputeDetailsDtoToComputeEntity;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapComputeEntityToComputeCreationDto;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapComputeEntityToComputeDto;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapQuestionnaireResponseToQuestionnaireResponseDto;
+import org.openecomp.sdcrests.wrappers.GenericCollectionWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+import javax.inject.Named;
+import javax.ws.rs.core.Response;
+
+@Named
+@Service("computes")
+@Scope(value = "prototype")
+public class ComputeImpl implements Compute {
+  private ComputeManager computetManager =
+      ComputeManagerFactory.getInstance().createInterface();
+  private ComponentManager componentManager =
+      ComponentManagerFactory.getInstance().createInterface();
+
+  @Override
+  public Response list(String vspId, String version, String componentId, String user) {
+    MdcUtil.initMdc(LoggerServiceName.List_Computes.toString());
+    Version vspVersion = resolveVspVersion(vspId, version, user, VersionableEntityAction.Read);
+    componentManager.validateComponentExistence(vspId, vspVersion, componentId, user);
+    Collection<ListComputeResponse> computes =
+        computetManager
+            .listCompute(vspId, vspVersion, componentId, user);
+
+    MapComputeEntityToComputeDto mapper = new MapComputeEntityToComputeDto();
+    GenericCollectionWrapper<ComputeDto> results = new GenericCollectionWrapper<>();
+    for (ListComputeResponse compute : computes) {
+      results.add(mapper.applyMapping(compute, ComputeDto.class));
+    }
+
+    return Response.ok(results).build();
+  }
+
+  @Override
+  public Response get(String vspId, String version, String componentId, String computeId,
+                      String user) {
+    MdcUtil.initMdc(LoggerServiceName.Get_Compute.toString());
+    Version vspVersion = resolveVspVersion(vspId, version, user, VersionableEntityAction.Read);
+    componentManager.validateComponentExistence(vspId, vspVersion, componentId, user);
+    CompositionEntityResponse<ComputeData> response = computetManager
+        .getCompute(vspId, vspVersion, componentId, computeId, user);
+
+    CompositionEntityResponseDto<ComputeDetailsDto> responseDto = new
+        CompositionEntityResponseDto<>();
+    new MapCompositionEntityResponseToDto<>(new MapComputeDataToComputeDetailsDto(),
+        ComputeDetailsDto.class).doMapping(response, responseDto);
+    return Response.ok(responseDto).build();
+  }
+
+  @Override
+  public Response create(ComputeDetailsDto request, String vspId, String versionId,
+                         String componentId, String user) {
+    MdcUtil.initMdc(LoggerServiceName.Create_Compute.toString());
+    ComputeEntity compute = new MapComputeDetailsDtoToComputeEntity().applyMapping(request,
+        ComputeEntity.class);
+    compute.setVspId(vspId);
+    compute.setComponentId(componentId);
+    compute.setVersion(resolveVspVersion(vspId, null, user, VersionableEntityAction.Write));
+    componentManager.validateComponentExistence(vspId, compute.getVersion(), componentId, user);
+
+    ComputeEntity createdCompute = computetManager.createCompute(compute, user);
+
+    MapComputeEntityToComputeCreationDto mapper = new MapComputeEntityToComputeCreationDto();
+    ComputeCreationDto createdComputeDto = mapper.applyMapping(createdCompute, ComputeCreationDto
+        .class);
+    return Response.ok(createdComputeDto != null ? createdComputeDto : null)
+        .build();
+  }
+
+  @Override
+  public Response update(ComputeDetailsDto request, String vspId, String versionId, String
+      componentId, String computeFlavorId, String user) {
+    MdcUtil.initMdc(LoggerServiceName.Update_Compute.toString());
+    ComputeEntity compute = new MapComputeDetailsDtoToComputeEntity().applyMapping(request,
+        ComputeEntity.class);
+    compute.setVspId(vspId);
+    compute.setComponentId(componentId);
+    compute.setVersion(resolveVspVersion(vspId, null, user, VersionableEntityAction.Write));
+    compute.setId(computeFlavorId);
+
+    componentManager.validateComponentExistence(vspId, compute.getVersion(), componentId, user);
+    CompositionEntityValidationData validationData =
+        computetManager.updateCompute(compute, user);
+    return validationData != null && CollectionUtils.isNotEmpty(validationData.getErrors())
+        ? Response.status(Response.Status.EXPECTATION_FAILED).entity(
+        new MapCompositionEntityValidationDataToDto().applyMapping(validationData,
+            CompositionEntityValidationDataDto.class)).build() : Response.ok().build();
+  }
+
+  @Override
+  public Response delete(String vspId, String versionId, String componentId, String
+      computeFlavorId, String user) {
+    MdcUtil.initMdc(LoggerServiceName.Delete_Compute.toString());
+    Version version = resolveVspVersion(vspId, null, user, VersionableEntityAction.Write);
+    componentManager.validateComponentExistence(vspId, version, componentId, user);
+    computetManager.deleteCompute(vspId, version, componentId, computeFlavorId, user);
+    return Response.ok().build();
+  }
+
+  @Override
+  public Response getQuestionnaire(String vspId, String versionId, String componentId, String
+      computeFlavorId, String user) {
+    MdcUtil.initMdc(LoggerServiceName.Get_Questionnaire_Compute.toString());
+    Version vspVersion = resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read);
+    componentManager.validateComponentExistence(vspId, vspVersion, componentId, user);
+    QuestionnaireResponse questionnaireResponse = computetManager
+        .getComputeQuestionnaire(vspId, vspVersion, componentId, computeFlavorId, user);
+
+    QuestionnaireResponseDto result = new MapQuestionnaireResponseToQuestionnaireResponseDto()
+        .applyMapping(questionnaireResponse, QuestionnaireResponseDto.class);
+    return Response.ok(result).build();
+  }
+
+  @Override
+  public Response updateQuestionnaire(String questionnaireData, String vspId, String versionId,
+                                      String componentId,
+                                      String computeFlavorId, String user) {
+    MdcUtil
+        .initMdc(LoggerServiceName.Update_Questionnaire_Compute.toString()
+        );
+    Version version = resolveVspVersion(vspId, null, user, VersionableEntityAction.Write);
+    componentManager.validateComponentExistence(vspId, version, componentId, user);
+    computetManager
+        .updateComputeQuestionnaire(vspId, version, componentId, computeFlavorId,
+            questionnaireData, user);
+    return Response.ok().build();
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/DeploymentFlavorsImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/DeploymentFlavorsImpl.java
new file mode 100644
index 0000000..adcdaca
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/DeploymentFlavorsImpl.java
@@ -0,0 +1,129 @@
+package org.openecomp.sdcrests.vsp.rest.services;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.openecomp.sdc.logging.context.MdcUtil;
+import org.openecomp.sdc.logging.types.LoggerServiceName;
+import org.openecomp.sdc.vendorsoftwareproduct.DeploymentFlavorManager;
+import org.openecomp.sdc.vendorsoftwareproduct.DeploymentFlavorManagerFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.DeploymentFlavorEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.DeploymentFlavor;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.types.VersionableEntityAction;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.CompositionEntityResponseDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.CompositionEntityValidationDataDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.DeploymentFlavorCreationDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.DeploymentFlavorDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.DeploymentFlavorListResponseDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.DeploymentFlavorRequestDto;
+import org.openecomp.sdcrests.vsp.rest.DeploymentFlavors;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapCompositionEntityResponseToDto;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapCompositionEntityValidationDataToDto;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapDeploymentFlavorEntityDeploymentFlavorToListResponse;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapDeploymentFlavorEntityToDeploymentFlavorCreationDto;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapDeploymentFlavorRequestDtoToDeploymentFlavorEntity;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapDeploymentFlavorToDeploymentDto;
+import org.openecomp.sdcrests.wrappers.GenericCollectionWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+import javax.inject.Named;
+import javax.ws.rs.core.Response;
+
+@Named
+@Service("deploymentFlavors")
+@Scope(value = "prototype")
+public class DeploymentFlavorsImpl implements DeploymentFlavors
+{
+  private DeploymentFlavorManager deploymentFlavorManager =
+      DeploymentFlavorManagerFactory.getInstance().createInterface();
+
+  @Override
+  public Response create(DeploymentFlavorRequestDto request, String vspId, String versionId,
+                         String user) {
+    MdcUtil.initMdc(LoggerServiceName.Create_Deployment_Flavor.toString());
+    DeploymentFlavorEntity deploymentFlavorEntity =
+        new MapDeploymentFlavorRequestDtoToDeploymentFlavorEntity()
+            .applyMapping(request, DeploymentFlavorEntity.class);
+    deploymentFlavorEntity.setVspId(vspId);
+    deploymentFlavorEntity.setVersion(resolveVspVersion(vspId, null, user,
+        VersionableEntityAction.Write));
+    DeploymentFlavorEntity createdDeploymentFlavor =
+        deploymentFlavorManager.createDeploymentFlavor(deploymentFlavorEntity, user);
+    MapDeploymentFlavorEntityToDeploymentFlavorCreationDto mapping =
+        new MapDeploymentFlavorEntityToDeploymentFlavorCreationDto();
+    DeploymentFlavorCreationDto deploymentFlavorCreatedDto= mapping.applyMapping
+        (createdDeploymentFlavor,DeploymentFlavorCreationDto.class);
+    return Response
+        .ok(createdDeploymentFlavor != null ? deploymentFlavorCreatedDto : null)
+        .build();
+  }
+
+  @Override
+  public Response list(String vspId,String version,String user) {
+    MdcUtil.initMdc(LoggerServiceName.Get_List_Deployment_flavor.toString());
+    Collection<DeploymentFlavorEntity> deploymentFlavors =
+        deploymentFlavorManager.listDeploymentFlavors(vspId, resolveVspVersion(vspId, version, user,
+            VersionableEntityAction.Read), user);
+
+    MapDeploymentFlavorEntityDeploymentFlavorToListResponse mapper = new
+        MapDeploymentFlavorEntityDeploymentFlavorToListResponse();
+    GenericCollectionWrapper<DeploymentFlavorListResponseDto> results = new GenericCollectionWrapper<>();
+    for (DeploymentFlavorEntity deploymentFlavor : deploymentFlavors) {
+      results.add(mapper.applyMapping(deploymentFlavor, DeploymentFlavorListResponseDto.class));
+    }
+    return Response.ok(results).build();
+  }
+
+  @Override
+  public Response get(String vspId, String version, String deploymentFlavorId, String user) {
+    MdcUtil.initMdc(LoggerServiceName.Get_Deployment_flavor.toString());
+    CompositionEntityResponse<DeploymentFlavor> response = deploymentFlavorManager
+        .getDeploymentFlavor(vspId, resolveVspVersion(vspId, version, user,
+            VersionableEntityAction.Read), deploymentFlavorId, user);
+
+    CompositionEntityResponseDto<DeploymentFlavorDto> responseDto = new
+        CompositionEntityResponseDto<>();
+    new MapCompositionEntityResponseToDto<>(new MapDeploymentFlavorToDeploymentDto(), DeploymentFlavorDto.class)
+        .doMapping(response, responseDto);
+    return Response.ok(responseDto).build();
+  }
+
+  @Override
+  public Response getSchema(String vspId, String version, String user) {
+    MdcUtil.initMdc(LoggerServiceName.Get_Deployment_flavor.toString());
+    CompositionEntityResponse<DeploymentFlavor> response = deploymentFlavorManager
+        .getDeploymentFlavorSchema(vspId, Version.valueOf(version), user);
+    return Response.ok(response).build();
+  }
+
+  @Override
+  public Response delete(String vspId, String versionId, String deploymentFlavorId, String user) {
+    MdcUtil.initMdc(LoggerServiceName.Delete_Deployment_flavor.toString());
+    Version version = resolveVspVersion(vspId, null, user, VersionableEntityAction.Write);
+    deploymentFlavorManager.deleteDeploymentFlavor(vspId, version, deploymentFlavorId, user);
+    return Response.ok().build();
+  }
+
+  @Override
+  public Response update(DeploymentFlavorRequestDto request, String vspId, String versionId,
+                         String deploymentFlavorId, String user) {
+    MdcUtil.initMdc(LoggerServiceName.Update_Deployment_flavor.toString());
+    DeploymentFlavorEntity deploymentFlavorEntity =
+        new MapDeploymentFlavorRequestDtoToDeploymentFlavorEntity().applyMapping(request,
+            DeploymentFlavorEntity.class);
+    deploymentFlavorEntity.setVspId(vspId);
+    deploymentFlavorEntity.setVersion(resolveVspVersion(vspId, null, user, VersionableEntityAction.Write));
+    deploymentFlavorEntity.setId(deploymentFlavorId);
+
+    CompositionEntityValidationData validationData =
+        deploymentFlavorManager.updateDeploymentFlavor(deploymentFlavorEntity, user);
+    return validationData != null && CollectionUtils.isNotEmpty(validationData.getErrors())
+        ? Response.status(Response.Status.EXPECTATION_FAILED).entity(
+        new MapCompositionEntityValidationDataToDto().applyMapping(validationData,
+            CompositionEntityValidationDataDto.class)).build() : Response.ok().build();
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/ImagesImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/ImagesImpl.java
new file mode 100644
index 0000000..c939eb5
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/ImagesImpl.java
@@ -0,0 +1,175 @@
+package org.openecomp.sdcrests.vsp.rest.services;
+
+
+import io.swagger.annotations.ApiParam;
+import org.apache.commons.collections.CollectionUtils;
+import org.openecomp.sdc.logging.context.MdcUtil;
+import org.openecomp.sdc.logging.types.LoggerServiceName;
+import org.openecomp.sdc.vendorsoftwareproduct.ComponentManager;
+import org.openecomp.sdc.vendorsoftwareproduct.ComponentManagerFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.ImageManager;
+import org.openecomp.sdc.vendorsoftwareproduct.ImageManagerFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ImageEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Image;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ImageData;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.types.VersionableEntityAction;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.CompositionEntityResponseDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.CompositionEntityValidationDataDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ImageCreationDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ImageDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.ImageRequestDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.QuestionnaireResponseDto;
+import org.openecomp.sdcrests.vsp.rest.Images;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapCompositionEntityResponseToDto;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapCompositionEntityValidationDataToDto;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapImageDataToImageDto;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapImageEntityToImageCreationDto;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapImageEntityToImageDto;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapImageRequestDtoToImageEntity;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapQuestionnaireResponseToQuestionnaireResponseDto;
+import org.openecomp.sdcrests.wrappers.GenericCollectionWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+import javax.inject.Named;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.core.Response;
+
+
+@Named
+@Service("images")
+@Scope(value = "prototype")
+public class ImagesImpl implements Images
+ {
+
+  private ImageManager imageManager = ImageManagerFactory.getInstance().createInterface();
+  private ComponentManager componentManager =
+      ComponentManagerFactory.getInstance().createInterface();
+
+  @Override
+  public Response create(ImageRequestDto request, String vspId, String versionId,String
+      componentId, String user) {
+    MdcUtil.initMdc(LoggerServiceName.Create_Image.toString());
+    ImageEntity image =
+        new MapImageRequestDtoToImageEntity().applyMapping(request, ImageEntity.class);
+    image.setVspId(vspId);
+    image.setComponentId(componentId);
+    image.setVersion(resolveVspVersion(vspId, null, user, VersionableEntityAction.Write));
+    componentManager.validateComponentExistence(vspId, image.getVersion(), componentId, user);
+    ImageEntity createdImage = imageManager.createImage(image, user);
+    MapImageEntityToImageCreationDto mapping = new MapImageEntityToImageCreationDto();
+    ImageCreationDto createdImageDto = mapping.applyMapping(createdImage, ImageCreationDto.class);
+    return Response
+        .ok(createdImage != null ? createdImageDto : null)
+        .build();
+  }
+
+  @Override
+  public Response getImageSchema(String vspId, String versionId, String componentId, String user) {
+    MdcUtil.initMdc(LoggerServiceName.GET_Image_Schema.toString());
+    CompositionEntityResponse<Image> response =
+        imageManager.getImageSchema(vspId, user);
+    return Response.ok(response).build();
+  }
+
+  @Override
+  public Response get(String vspId, String versionId, String componentId, String imageId, String
+      user) {
+    MdcUtil.initMdc(LoggerServiceName.GET_Image.toString());
+    Version vspVersion = resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read);
+    componentManager.validateComponentExistence(vspId, vspVersion, componentId, user);
+    CompositionEntityResponse<Image> response = imageManager.getImage(vspId,
+        vspVersion, componentId, imageId, user);
+
+    return Response.ok(response).build();
+  }
+
+  @Override
+  public Response list(String vspId, String versionId, String componentId, String user) {
+    MdcUtil.initMdc(LoggerServiceName.List_Images.toString());
+    Version vspVersion = resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read);
+    componentManager.validateComponentExistence(vspId, vspVersion, componentId, user);
+    Collection<ImageEntity> images =
+        imageManager.listImages(vspId, vspVersion, componentId, user);
+
+    MapImageEntityToImageDto mapper = new MapImageEntityToImageDto();
+    GenericCollectionWrapper<ImageDto> results = new GenericCollectionWrapper<>();
+    for (ImageEntity image : images) {
+      results.add(mapper.applyMapping(image, ImageDto.class));
+    }
+
+    return Response.ok(results).build();
+  }
+
+  @Override
+  public Response delete(String vspId, String versionId, String componentId, String imageId,
+                         String user) {
+    MdcUtil.initMdc(LoggerServiceName.Delete_Image.toString());
+    Version vspVersion = resolveVspVersion(vspId, null, user, VersionableEntityAction.Write);
+    componentManager.validateComponentExistence(vspId, vspVersion, componentId, user);
+    imageManager.deleteImage(vspId, vspVersion, componentId, imageId, user);
+    return Response.ok().build();
+  }
+
+  @Override
+  public Response update(ImageRequestDto request, String vspId, String versionId, String
+                         componentId,
+                         String imageId,
+                         String user) {
+    MdcUtil.initMdc(LoggerServiceName.Update_Image.toString());
+    ImageEntity imageEntity = new MapImageRequestDtoToImageEntity().applyMapping(request,
+        ImageEntity.class);
+    imageEntity.setVspId(vspId);
+    imageEntity.setVersion(resolveVspVersion(vspId, null, user, VersionableEntityAction.Write));
+    imageEntity.setComponentId(componentId);
+    imageEntity.setId(imageId);
+    componentManager.validateComponentExistence(vspId, imageEntity.getVersion(), componentId, user);
+
+    CompositionEntityValidationData validationData =
+        imageManager.updateImage(imageEntity, user);
+    return validationData != null && CollectionUtils.isNotEmpty(validationData.getErrors())
+        ? Response.status(Response.Status.EXPECTATION_FAILED).entity(
+        new MapCompositionEntityValidationDataToDto()
+            .applyMapping(validationData, CompositionEntityValidationDataDto.class)).build() :
+        Response.ok().build();
+  }
+
+  @Override
+  public Response getQuestionnaire(String vspId, String versionId, String componentId, String
+      imageId, String user) {
+    MdcUtil.initMdc(LoggerServiceName.Get_Questionnaire_Compute.toString());
+    Version vspVersion = resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read);
+    componentManager.validateComponentExistence(vspId, vspVersion, componentId, user);
+    QuestionnaireResponse questionnaireResponse = imageManager
+        .getImageQuestionnaire(vspId, vspVersion, componentId, imageId,
+            user);
+
+    QuestionnaireResponseDto result = new MapQuestionnaireResponseToQuestionnaireResponseDto()
+        .applyMapping(questionnaireResponse, QuestionnaireResponseDto.class);
+    return Response.ok(result).build();
+
+  }
+
+  @Override
+  public Response updateQuestionnaire(String questionnaireData, String vspId, String
+      versionId,String componentId,String imageId, String user) {
+    MdcUtil
+        .initMdc(LoggerServiceName.Update_Questionnaire_Compute.toString()
+        );
+   Version vspVersion = resolveVspVersion(vspId, null, user, VersionableEntityAction.Write);
+   componentManager.validateComponentExistence(vspId, vspVersion, componentId, user);
+    imageManager.updateImageQuestionnaire(vspId, vspVersion, componentId, imageId,
+        questionnaireData, user);
+    return Response.ok().build();
+  }
+
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/NicsImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/NicsImpl.java
index 9227006..1612c96 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/NicsImpl.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/NicsImpl.java
@@ -36,12 +36,14 @@
 import org.openecomp.sdc.versioning.types.VersionableEntityAction;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.CompositionEntityResponseDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.CompositionEntityValidationDataDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.NicCreationResponseDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.NicDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.NicRequestDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.QuestionnaireResponseDto;
 import org.openecomp.sdcrests.vsp.rest.Nics;
 import org.openecomp.sdcrests.vsp.rest.mapping.MapCompositionEntityResponseToDto;
 import org.openecomp.sdcrests.vsp.rest.mapping.MapCompositionEntityValidationDataToDto;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapNicEntityToNicCreationResponseDto;
 import org.openecomp.sdcrests.vsp.rest.mapping.MapNicEntityToNicDto;
 import org.openecomp.sdcrests.vsp.rest.mapping.MapNicRequestDtoToNicEntity;
 import org.openecomp.sdcrests.vsp.rest.mapping.MapNicToNicDto;
@@ -89,7 +91,11 @@
     componentManager.validateComponentExistence(vspId, nic.getVersion(), componentId, user);
 
     NicEntity createdNic = nicManager.createNic(nic, user);
-    return Response.ok(createdNic != null ? new StringWrapperResponse(createdNic.getId()) : null)
+    MapNicEntityToNicCreationResponseDto mapping =
+        new MapNicEntityToNicCreationResponseDto();
+    NicCreationResponseDto createdNicDto = mapping.applyMapping(createdNic,
+        NicCreationResponseDto.class);
+    return Response.ok(createdNic != null ? createdNicDto : null)
         .build();
   }
 
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VendorSoftwareProductsImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VendorSoftwareProductsImpl.java
index c730066..6dcb63d 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VendorSoftwareProductsImpl.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VendorSoftwareProductsImpl.java
@@ -22,16 +22,24 @@
 
 import org.openecomp.sdc.activityLog.ActivityLogManager;
 import org.openecomp.sdc.activityLog.ActivityLogManagerFactory;
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.common.errors.ErrorCode;
+import org.openecomp.sdc.datatypes.error.ErrorLevel;
 import org.openecomp.sdc.logging.api.Logger;
 import org.openecomp.sdc.logging.api.LoggerFactory;
 import org.openecomp.sdc.logging.context.MdcUtil;
+import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
 import org.openecomp.sdc.logging.messages.AuditMessages;
 import org.openecomp.sdc.logging.types.LoggerConstants;
+import org.openecomp.sdc.logging.types.LoggerErrorCode;
 import org.openecomp.sdc.logging.types.LoggerServiceName;
+import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
 import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager;
 import org.openecomp.sdc.vendorsoftwareproduct.VspManagerFactory;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.PackageInfo;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.OnboardingMethodErrorBuilder;
 import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
 import org.openecomp.sdc.vendorsoftwareproduct.types.ValidationResponse;
 import org.openecomp.sdc.vendorsoftwareproduct.types.VersionedVendorSoftwareProductInfo;
@@ -42,16 +50,18 @@
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.QuestionnaireResponseDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.ValidationResponseDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VersionSoftwareProductActionRequestDto;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspComputeDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspCreationDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspDescriptionDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspDetailsDto;
 import org.openecomp.sdcrests.vsp.rest.VendorSoftwareProducts;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapComputeEntityToVspComputeDto;
 import org.openecomp.sdcrests.vsp.rest.mapping.MapPackageInfoToPackageInfoDto;
 import org.openecomp.sdcrests.vsp.rest.mapping.MapQuestionnaireResponseToQuestionnaireResponseDto;
 import org.openecomp.sdcrests.vsp.rest.mapping.MapValidationResponseToDto;
 import org.openecomp.sdcrests.vsp.rest.mapping.MapVersionedVendorSoftwareProductInfoToVspDetailsDto;
 import org.openecomp.sdcrests.vsp.rest.mapping.MapVspDescriptionDtoToVspDetails;
-import org.openecomp.sdcrests.vsp.rest.mapping.MspVspDetailsToVspCreationDto;
+import org.openecomp.sdcrests.vsp.rest.mapping.MapVspDetailsToVspCreationDto;
 import org.openecomp.sdcrests.wrappers.GenericCollectionWrapper;
 import org.openecomp.sdcrests.wrappers.StringWrapperResponse;
 import org.slf4j.MDC;
@@ -62,6 +72,7 @@
 import javax.ws.rs.core.Response;
 import java.io.File;
 import java.io.IOException;
+import java.util.Collection;
 import java.util.List;
 
 
@@ -79,21 +90,35 @@
   private ActivityLogManager activityLogManager =
       ActivityLogManagerFactory.getInstance().createInterface();
 
-  @Override
-  public Response createVsp(VspDescriptionDto vspDescriptionDto, String user) {
-    MdcUtil.initMdc(LoggerServiceName.Create_VSP.toString());
-    logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CREATE_VSP + vspDescriptionDto.getName());
+    @Override
+    public Response createVsp(VspDescriptionDto vspDescriptionDto, String user) {
+        MdcUtil.initMdc(LoggerServiceName.Create_VSP.toString());
+        logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CREATE_VSP
+            + vspDescriptionDto.getName());
 
-    VspDetails vspDetails =
-        new MapVspDescriptionDtoToVspDetails().applyMapping(vspDescriptionDto, VspDetails.class);
+      VspCreationDto vspCreationDto = null;
+      switch (vspDescriptionDto.getOnboardingMethod()) {
+        case "HEAT":
+        case "Manual":
+          VspDetails vspDetails = new MapVspDescriptionDtoToVspDetails().
+              applyMapping(vspDescriptionDto, VspDetails.class);
 
-    vspDetails = vendorSoftwareProductManager.createVsp(vspDetails, user);
+          vspDetails = vendorSoftwareProductManager.createVsp(vspDetails, user);
 
-    MspVspDetailsToVspCreationDto mapping = new MspVspDetailsToVspCreationDto();
-    VspCreationDto vspCreationDto = mapping.applyMapping(vspDetails, VspCreationDto.class);
+          MapVspDetailsToVspCreationDto mapping = new MapVspDetailsToVspCreationDto();
+          vspCreationDto = mapping.applyMapping(vspDetails, VspCreationDto.class);
+          break;
+        default:
+          ErrorCode onboardingMethodUpdateErrorCode = OnboardingMethodErrorBuilder
+              .getInvalidOnboardingMethodErrorBuilder();
+          MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
+              LoggerTragetServiceName.ADD_VSP, ErrorLevel.ERROR.name(),
+              LoggerErrorCode.DATA_ERROR.getErrorCode(), onboardingMethodUpdateErrorCode.message());
+          throw new CoreException(onboardingMethodUpdateErrorCode);
+      }
 
-    return Response.ok(vspCreationDto).build();
-  }
+      return Response.ok(vspCreationDto).build();
+    }
 
   @Override
   public Response listVsps(String versionFilter, String user) {
@@ -324,12 +349,26 @@
         vendorSoftwareProductManager.getInformationArtifact(vspId,
             resolveVspVersion(vspId, versionId, user, VersionableEntityAction.Read), user);
 
-    Response.ResponseBuilder response = Response.ok(textInformationArtifact);
-    if (textInformationArtifact == null) {
-      return Response.status(Response.Status.NOT_FOUND).build();
+        Response.ResponseBuilder response = Response.ok(textInformationArtifact);
+        if (textInformationArtifact == null) {
+            return Response.status(Response.Status.NOT_FOUND).build();
+        }
+        response
+                .header("Content-Disposition", "attachment; filename=" + textInformationArtifact.getName());
+        return response.build();
     }
-    response
-        .header("Content-Disposition", "attachment; filename=" + textInformationArtifact.getName());
-    return response.build();
+
+  public Response listCompute(String vspId, String version, String user) {
+
+    Collection<ComputeEntity> computes = vendorSoftwareProductManager.getComputeByVsp(vspId,
+        resolveVspVersion(vspId, version, user, VersionableEntityAction.Read), user);
+
+    MapComputeEntityToVspComputeDto mapper = new MapComputeEntityToVspComputeDto();
+    GenericCollectionWrapper<VspComputeDto> results = new GenericCollectionWrapper<>();
+    for (ComputeEntity compute : computes) {
+      results.add(mapper.applyMapping(compute, VspComputeDto.class));
+    }
+
+    return Response.ok(results).build();
   }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/pom.xml.versionsBackup b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/pom.xml.versionsBackup
new file mode 100644
index 0000000..7fb5fd7
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/pom.xml.versionsBackup
@@ -0,0 +1,30 @@
+<?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>
+
+    <artifactId>vendor-software-products-rest-types</artifactId>
+    <name>vendor-software-products-rest-types</name>
+
+    <parent>
+        <groupId>org.openecomp.sdc.onboarding</groupId>
+        <artifactId>vendor-software-products-rest</artifactId>
+        <version>1.0-SNAPSHOT</version>
+        <relativePath>../</relativePath>
+    </parent>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-common-rest</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-vendor-software-product-manager</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComponentCreationDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComponentCreationDto.java
new file mode 100644
index 0000000..a4ec05c
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComponentCreationDto.java
@@ -0,0 +1,13 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+public class ComponentCreationDto {
+  private String vfcId;
+
+  public String getVfcId() {
+    return vfcId;
+  }
+
+  public void setVfcId(String vfcId) {
+    this.vfcId = vfcId;
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComponentRequestDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComponentRequestDto.java
index 8d2fd4b..364e119 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComponentRequestDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComponentRequestDto.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.
@@ -20,11 +20,19 @@
 
 package org.openecomp.sdcrests.vendorsoftwareproducts.types;
 
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
 public class ComponentRequestDto {
 
   private String name;
+  @NotNull(message = "VFC displayName is mandatory.")
+  @Size(min = 1, max = 30,message = "VFC displayName length should be between 1 and 30.")
   private String displayName;
+  @Size(min = 0, max = 1000,message = "description length should not exceed 1000.")
   private String vfcCode;
+  private String nfcCode;
+  private String nfcFunction;
   private String description;
 
   public String getName() {
@@ -58,4 +66,20 @@
   public void setVfcCode(String vfcCode) {
     this.vfcCode = vfcCode;
   }
+
+  public String getNfcCode() {
+    return nfcCode;
+  }
+
+  public void setNfcCode(String nfcCode) {
+    this.nfcCode = nfcCode;
+  }
+
+  public String getNfcFunction() {
+    return nfcFunction;
+  }
+
+  public void setNfcFunction(String nfcFunction) {
+    this.nfcFunction = nfcFunction;
+  }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComponentValidationResultDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComponentValidationResultDto.java
new file mode 100644
index 0000000..b5456b7
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComponentValidationResultDto.java
@@ -0,0 +1,25 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+
+import java.util.Set;
+
+public class ComponentValidationResultDto {
+  private boolean valid;
+  private Set<CompositionEntityValidationDataDto> validationData;
+
+  public boolean isValid() {
+    return valid;
+  }
+
+  public void setValid(boolean valid) {
+    this.valid = valid;
+  }
+
+  public Set<CompositionEntityValidationDataDto> getValidationData() {
+    return validationData;
+  }
+
+  public void setValidationData(Set<CompositionEntityValidationDataDto> validationData) {
+    this.validationData = validationData;
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComputeCreationDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComputeCreationDto.java
new file mode 100644
index 0000000..f2b0689
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComputeCreationDto.java
@@ -0,0 +1,13 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+public class ComputeCreationDto {
+  private String id;
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComputeDescription.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComputeDescription.java
new file mode 100644
index 0000000..1c4283a
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComputeDescription.java
@@ -0,0 +1,31 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+public class ComputeDescription {
+  private String name;
+  private String description;
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getDescription() {
+    return description;
+  }
+
+  public void setDescription(String description) {
+    this.description = description;
+  }
+
+  public ComputeDescription() {
+
+  }
+
+  public ComputeDescription(String name, String description) {
+    this.name = name;
+    this.description = description;
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComputeDetailsDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComputeDetailsDto.java
new file mode 100644
index 0000000..4b7889b
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComputeDetailsDto.java
@@ -0,0 +1,34 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+import org.hibernate.validator.constraints.NotBlank;
+
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Size;
+
+public class ComputeDetailsDto implements CompositionDataEntityDto {
+  @NotBlank(message = "is mandatory and should not be empty")
+  @Size(min = 0, max = 30, message = "length should not exceed 30 characters.")
+  @Pattern(regexp = "^[a-zA-Z 0-9._-]*$", message = "must match \"^[a-zA-Z 0-9._-]*$\"")
+  private String name;
+  @Size(min = 0, max = 300, message = "length should not exceed 300 characters.")
+  private String description;
+
+  public ComputeDetailsDto() {
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getDescription() {
+    return description;
+  }
+
+  public void setDescription(String description) {
+    this.description = description;
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComputeDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComputeDto.java
new file mode 100644
index 0000000..829e2c5
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ComputeDto.java
@@ -0,0 +1,40 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+public class ComputeDto {
+  private String name;
+  private String id;
+  private String description;
+  private boolean associatedToDeploymentFlavor;
+
+  public boolean isAssociatedToDeploymentFlavor() {
+    return associatedToDeploymentFlavor;
+  }
+
+  public void setAssociatedToDeploymentFlavor(boolean associatedToDeploymentFlavor) {
+    this.associatedToDeploymentFlavor = associatedToDeploymentFlavor;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getDescription() {
+    return description;
+  }
+
+  public void setDescription(String description) {
+    this.description = description;
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/DeploymentFlavorCreationDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/DeploymentFlavorCreationDto.java
new file mode 100644
index 0000000..d4c3443
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/DeploymentFlavorCreationDto.java
@@ -0,0 +1,14 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+
+public class DeploymentFlavorCreationDto {
+  private String deploymentFlavorId;
+
+  public String getDeploymentFlavorId() {
+    return deploymentFlavorId;
+  }
+
+  public void setDeploymentFlavorId(String deploymentFlavorId) {
+    this.deploymentFlavorId = deploymentFlavorId;
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/DeploymentFlavorDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/DeploymentFlavorDto.java
new file mode 100644
index 0000000..1748603
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/DeploymentFlavorDto.java
@@ -0,0 +1,14 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+public class DeploymentFlavorDto extends DeploymentFlavorRequestDto implements CompositionDataEntityDto {
+
+    private String id;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/DeploymentFlavorListResponseDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/DeploymentFlavorListResponseDto.java
new file mode 100644
index 0000000..fe51c9e
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/DeploymentFlavorListResponseDto.java
@@ -0,0 +1,34 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+
+public class DeploymentFlavorListResponseDto {
+  public String getModel() {
+    return model;
+  }
+
+  public void setModel(String model) {
+    this.model = model;
+  }
+
+  private String model;
+
+  public String getDescription() {
+    return description;
+  }
+
+  public void setDescription(String description) {
+    this.description = description;
+  }
+
+  private String description;
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  private String id;
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/DeploymentFlavorRequestDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/DeploymentFlavorRequestDto.java
new file mode 100644
index 0000000..54ce63b
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/DeploymentFlavorRequestDto.java
@@ -0,0 +1,53 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+
+import org.hibernate.validator.constraints.NotBlank;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentComputeAssociation;
+
+import java.util.List;
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Size;
+
+public class DeploymentFlavorRequestDto {
+    @NotBlank(message = "is mandatory and should not be empty")
+    @Pattern(regexp = "^[a-zA-Z 0-9._-]*$", message = "must match \"^[a-zA-Z 0-9._-]*$\"")
+    @Size(min = 0, max = 30,message = "length should not exceed 30 characters.")
+    private String model;
+    @Size(min = 0, max = 300,message = "length should not exceed 300 characters.")
+    private String description;
+    private String featureGroupId;
+    private List<ComponentComputeAssociation> componentComputeAssociations;
+
+    public String getModel() {
+        return model;
+    }
+
+    public void setModel(String model) {
+        this.model = model;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getFeatureGroupId() {
+        return featureGroupId;
+    }
+
+    public void setFeatureGroupId(String featureGroupId) {
+        this.featureGroupId = featureGroupId;
+    }
+
+    public List<ComponentComputeAssociation> getComponentComputeAssociations() {
+        return componentComputeAssociations;
+    }
+
+    public void setComponentComputeAssociations(List<ComponentComputeAssociation> componentComputeAssociations) {
+        this.componentComputeAssociations = componentComputeAssociations;
+    }
+
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/DeploymentFlavorValidationResultDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/DeploymentFlavorValidationResultDto.java
new file mode 100644
index 0000000..d6f557c
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/DeploymentFlavorValidationResultDto.java
@@ -0,0 +1,25 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+
+import java.util.Set;
+
+public class DeploymentFlavorValidationResultDto {
+  private boolean valid;
+  private Set<CompositionEntityValidationDataDto> validationData;
+
+  public boolean isValid() {
+    return valid;
+  }
+
+  public void setValid(boolean valid) {
+    this.valid = valid;
+  }
+
+  public Set<CompositionEntityValidationDataDto> getValidationData() {
+    return validationData;
+  }
+
+  public void setValidationData(Set<CompositionEntityValidationDataDto> validationData) {
+    this.validationData = validationData;
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ImageCreationDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ImageCreationDto.java
new file mode 100644
index 0000000..7e1987e
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ImageCreationDto.java
@@ -0,0 +1,14 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+public class ImageCreationDto {
+
+  private String id;
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ImageDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ImageDto.java
new file mode 100644
index 0000000..7b30022
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ImageDto.java
@@ -0,0 +1,14 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+
+public class ImageDto extends ImageRequestDto implements CompositionDataEntityDto {
+  private String id;
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ImageRequestDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ImageRequestDto.java
new file mode 100644
index 0000000..6164522
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ImageRequestDto.java
@@ -0,0 +1,75 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+import org.hibernate.validator.constraints.NotBlank;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+
+public class ImageRequestDto implements CompositionDataEntityDto {
+
+  @NotBlank(message = "is mandatory and should not be empty")
+  @Pattern(regexp = "^[a-zA-Z 0-9._-]*$", message = "must match \"^[a-zA-Z 0-9._-]*$\"")
+  private String fileName;
+  private String description;
+  /*private String version;
+  private String format;
+  private String md5;
+  //private String providedBy;*/
+
+  public String getDescription() {
+    return description;
+  }
+
+  public void setDescription(String description) {
+    this.description = description;
+  }
+
+   public String getFileName() {
+    return fileName;
+  }
+
+  public void setFileName(String fileName) {
+    this.fileName = fileName;
+  }
+
+  /*public String getMd5() {
+    return md5;
+  }
+
+  public void setMd5(String md5) {
+    this.md5 = md5;
+  }
+
+  public String getFormat() {
+    return format;
+  }
+
+  public void setFormat(String format) {
+    this.format = format;
+  }
+
+  public String getVersion() {
+    return version;
+  }
+
+  public void setVersion(String version) {
+    this.version = version;
+  }
+
+  public String getFileName() {
+    return fileName;
+  }
+
+  public void setFileName(String fileName) {
+    this.fileName = fileName;
+  }
+
+  /*public String getProvidedBy() {
+    return providedBy;
+  }
+
+  public void setProvidedBy(String providedBy) {
+    this.providedBy = providedBy;
+  }*/
+
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/MibUploadStatusDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/MonitoringUploadStatusDto.java
similarity index 84%
rename from openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/MibUploadStatusDto.java
rename to openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/MonitoringUploadStatusDto.java
index 7331115..38cd631 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/MibUploadStatusDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/MonitoringUploadStatusDto.java
@@ -20,12 +20,13 @@
 
 package org.openecomp.sdcrests.vendorsoftwareproducts.types;
 
-public class MibUploadStatusDto {
+public class MonitoringUploadStatusDto {
   private String snmpTrap;
   private String snmpPoll;
+  private String vesEvent;
 
 
-  public MibUploadStatusDto() {
+  public MonitoringUploadStatusDto() {
   }
 
   public String getSnmpTrap() {
@@ -40,7 +41,16 @@
     return snmpPoll;
   }
 
+  public String getVesEvent() {
+    return vesEvent;
+  }
+
+  public void setVesEvent(String vesEvent) {
+    this.vesEvent = vesEvent;
+  }
+
   public void setSnmpPoll(String snmpPoll) {
     this.snmpPoll = snmpPoll;
+
   }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/NicCreationResponseDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/NicCreationResponseDto.java
new file mode 100644
index 0000000..469e444
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/NicCreationResponseDto.java
@@ -0,0 +1,14 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+
+public class NicCreationResponseDto {
+  private String nicId;
+
+  public String getNicId() {
+    return nicId;
+  }
+
+  public void setNicId(String nicId) {
+    this.nicId = nicId;
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/NicRequestDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/NicRequestDto.java
index bd14012..fba85b6 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/NicRequestDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/NicRequestDto.java
@@ -20,11 +20,25 @@
 
 package org.openecomp.sdcrests.vendorsoftwareproducts.types;
 
+import org.hibernate.validator.constraints.NotBlank;
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.validation.ValidateString;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+
 public class NicRequestDto {
 
+  @NotBlank(message = "is mandatory and should not be empty")
+  @Pattern(regexp = "^[a-zA-Z 0-9._-]*$", message = "must match \"^[a-zA-Z 0-9._-]*$\"")
   private String name;
   private String description;
   private String networkId;
+  @NotNull
+  @ValidateString(acceptedValues = {"External", "Internal"}, message =   "doesn't "
+      +  "meet the expected attribute value.", isCaseSensitive = true)
+  private String networkType;
+
+  private String networkDescription;
 
   public String getName() {
     return name;
@@ -49,4 +63,20 @@
   public void setNetworkId(String networkId) {
     this.networkId = networkId;
   }
+
+  public String getNetworkType(){
+    return networkType;
+  }
+
+  public void setNetworkType(String networkType){
+    this.networkType = networkType;
+  }
+
+  public String getNetworkDescription(){
+    return networkDescription;
+  }
+
+  public void setNetworkDescription(String networkDescription){
+    this.networkDescription = networkDescription;
+  }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/OnboardingMethod.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/OnboardingMethod.java
new file mode 100644
index 0000000..3059efb
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/OnboardingMethod.java
@@ -0,0 +1,6 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+public enum OnboardingMethod {
+  HEAT,
+  Manual;
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ValidationResponseDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ValidationResponseDto.java
index d76ae66..bc03ec9 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ValidationResponseDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/ValidationResponseDto.java
@@ -33,6 +33,8 @@
   private Collection<ErrorCodeDto> licensingDataErrors;
   private Map<String, List<ErrorMessageDto>> uploadDataErrors;
   private QuestionnaireValidationResultDto questionnaireValidationResult;
+  private ComponentValidationResultDto componentValidationResult;
+  private DeploymentFlavorValidationResultDto deploymentFlavorValidationResult;
 
   public boolean isValid() {
     return valid;
@@ -74,4 +76,23 @@
       QuestionnaireValidationResultDto questionnaireValidationResult) {
     this.questionnaireValidationResult = questionnaireValidationResult;
   }
+
+  public ComponentValidationResultDto getComponentValidationResult() {
+    return componentValidationResult;
+  }
+
+  public void setComponentValidationResult(
+      ComponentValidationResultDto componentValidationResult) {
+    this.componentValidationResult = componentValidationResult;
+  }
+
+  public DeploymentFlavorValidationResultDto getDeploymentFlavorValidationResult() {
+    return deploymentFlavorValidationResult;
+  }
+
+  public void setDeploymentFlavorValidationResult(
+      DeploymentFlavorValidationResultDto deploymentFlavorValidationResult) {
+    this.deploymentFlavorValidationResult = deploymentFlavorValidationResult;
+  }
+
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VmSizing.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VmSizing.java
new file mode 100644
index 0000000..c7f9d12
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VmSizing.java
@@ -0,0 +1,72 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+import org.openecomp.sdcrests.vendorsoftwareproducts.types.validation.ValidateString;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+
+public class VmSizing {
+  @Min(value = 1, message = "should be integer and > 0")
+  @Max(value = 16, message = "should be integer and <= 16")
+  private int numOfCPUs;
+  @Min(value = 1, message = "should be integer and > 0")
+  private int fileSystemSizeGB;
+  @Min(value = 1, message = "should be integer and > 0")
+  private int persistentStorageVolumeSize;
+  @Min(value = 1, message = "should be integer and > 0")
+  private int ioOperationsPerSec;
+  @ValidateString(acceptedValues = {"1:1", "4:1", "16:1"}, message = "doesn't meet the expected "
+      + "attribute value.")
+  private String cpuOverSubscriptionRatio;
+  @ValidateString(acceptedValues = {"1", "2", "4", "8"}, message = "doesn't meet the expected "
+      + "attribute value.")
+  private String memoryRAM;
+
+  public int getNumOfCPUs() {
+    return numOfCPUs;
+  }
+
+  public void setNumOfCPUs(int numOfCPUs) {
+    this.numOfCPUs = numOfCPUs;
+  }
+
+  public int getFileSystemSizeGB() {
+    return fileSystemSizeGB;
+  }
+
+  public void setFileSystemSizeGB(int fileSystemSizeGB) {
+    this.fileSystemSizeGB = fileSystemSizeGB;
+  }
+
+  public int getPersistentStorageVolumeSize() {
+    return persistentStorageVolumeSize;
+  }
+
+  public void setPersistentStorageVolumeSize(int persistentStorageVolumeSize) {
+    this.persistentStorageVolumeSize = persistentStorageVolumeSize;
+  }
+
+  public int getIoOperationsPerSec() {
+    return ioOperationsPerSec;
+  }
+
+  public void setIoOperationsPerSec(int ioOperationsPerSec) {
+    this.ioOperationsPerSec = ioOperationsPerSec;
+  }
+
+  public String getCpuOverSubscriptionRatio() {
+    return cpuOverSubscriptionRatio;
+  }
+
+  public void setCpuOverSubscriptionRatio(String cpuOverSubscriptionRatio) {
+    this.cpuOverSubscriptionRatio = cpuOverSubscriptionRatio;
+  }
+
+  public String getMemoryRAM() {
+    return memoryRAM;
+  }
+
+  public void setMemoryRAM(String memoryRAM) {
+    this.memoryRAM = memoryRAM;
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VspComputeDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VspComputeDto.java
new file mode 100644
index 0000000..a41ae5f
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VspComputeDto.java
@@ -0,0 +1,31 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types;
+
+public class VspComputeDto {
+  private String name;
+  private String componentId;
+  private String computeFlavorId;
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getComponentId() {
+    return componentId;
+  }
+
+  public void setComponentId(String componentId) {
+    this.componentId = componentId;
+  }
+
+  public String getComputeFlavorId() {
+    return computeFlavorId;
+  }
+
+  public void setComputeFlavorId(String computeFlavorId) {
+    this.computeFlavorId = computeFlavorId;
+  }
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VspDescriptionDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VspDescriptionDto.java
index 92e9d74..80b68de 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VspDescriptionDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VspDescriptionDto.java
@@ -25,9 +25,6 @@
 
 import javax.validation.constraints.NotNull;
 
-/**
- * Created by TALIO on 4/20/2016.
- */
 public class VspDescriptionDto {
   @NotNull
   private String name;
@@ -45,6 +42,9 @@
   private VersionDto licensingVersion;    // this will be populated with vlm version
   private LicensingData licensingData;
 
+  @NotNull
+  private String onboardingMethod;
+
   public String getName() {
     return name;
   }
@@ -116,4 +116,12 @@
   public void setLicensingData(LicensingData licensingData) {
     this.licensingData = licensingData;
   }
+
+  public String getOnboardingMethod() {
+    return onboardingMethod;
+  }
+
+  public void setOnboardingMethod(String onboardingMethod) {
+    this.onboardingMethod = onboardingMethod;
+  }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/validation/StringValidator.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/validation/StringValidator.java
new file mode 100644
index 0000000..0fc2fd7
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/validation/StringValidator.java
@@ -0,0 +1,36 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types.validation;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+
+public class StringValidator implements ConstraintValidator<ValidateString, String> {
+
+  private List<String> valueList;
+  boolean isCaseSensitive;
+
+  @Override
+  public void initialize(ValidateString constraintAnnotation) {
+    valueList = new ArrayList<String>();
+    isCaseSensitive = constraintAnnotation.isCaseSensitive();
+    for (String val : constraintAnnotation.acceptedValues()) {
+      if (!isCaseSensitive) {
+        val = val.toUpperCase();
+      }
+      valueList.add(val);
+    }
+  }
+
+  @Override
+  public boolean isValid(String value, ConstraintValidatorContext context) {
+    if (!isCaseSensitive) {
+      value = value.toUpperCase();
+    }
+    if (value != null && !valueList.contains(value)) {
+      return false;
+    }
+    return true;
+  }
+
+}
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/validation/ValidateString.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/validation/ValidateString.java
new file mode 100644
index 0000000..1218bb1
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/validation/ValidateString.java
@@ -0,0 +1,44 @@
+package org.openecomp.sdcrests.vendorsoftwareproducts.types.validation;
+
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+import javax.validation.Constraint;
+import javax.validation.Payload;
+
+/**
+ * The interface Validate string.
+ */
+@Documented
+@Constraint(validatedBy = StringValidator.class)
+@Target({METHOD, FIELD, ANNOTATION_TYPE, PARAMETER, CONSTRUCTOR})
+@Retention(RUNTIME)
+public @interface ValidateString {
+  /**
+   * The constant message.
+   */
+  String message = "";
+
+  /**
+   * Accepted values string [ ].
+   *
+   * @return the string [ ]
+   */
+  String[] acceptedValues();
+
+  String message() default "{org.openecomp.sdcrests.vendorsoftwareproducts.types.validation"
+      + ".message}";
+
+  boolean isCaseSensitive() default false;
+
+  Class<?>[] groups() default {};
+
+  Class<? extends Payload>[] payload() default {};
+}
