diff --git a/openecomp-bdd/features/Onboarding/ArchiveItem/ArchiveVlm.feature b/openecomp-bdd/features/Onboarding/ArchiveItem/ArchiveVlm.feature
new file mode 100644
index 0000000..f4b524b
--- /dev/null
+++ b/openecomp-bdd/features/Onboarding/ArchiveItem/ArchiveVlm.feature
@@ -0,0 +1,42 @@
+Feature: Archive and Restore VLM
+
+    Scenario: Archive VLM with Draft
+        When I want to create a VLM
+        Then I want to create input data
+        Then I want to update the input property "name" with a random value
+        Then I want to update the input property "type" with value "Universal"
+        Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/license-key-groups" with the input data from the context
+        Then I want to commit this Item
+
+        Then I want to archive this item
+        Then I want to list Archived VLMs
+        Then I want to check that item exits in response
+
+    Scenario: Archive Already Archived VLM - Negative
+        When I want to create a VLM
+        Then I want to create input data
+        Then I want to update the input property "name" with a random value
+        Then I want to update the input property "type" with value "Universal"
+        Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/license-key-groups" with the input data from the context
+        Then I want to submit this VLM
+
+        Then I want to archive this item
+        Then I want to list Archived VLMs
+        Then I want to check that item exits in response
+        Then I want the following to fail with error message "Archive item failed, item {item.id} is already Archived"
+        Then I want to archive this item
+
+
+    Scenario: Archive Certified VLM
+            When I want to create a VLM
+            Then I want to create input data
+            Then I want to update the input property "name" with a random value
+            Then I want to update the input property "type" with value "Universal"
+            Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/license-key-groups" with the input data from the context
+            Then I want to submit this VLM
+
+            Then I want to archive this item
+            Then I want to list Archived VLMs
+            Then I want to check that item exits in response
+            Then I want to list Active VLMs
+            Then I want to check that item does not exits in response
diff --git a/openecomp-bdd/features/Onboarding/ArchiveItem/ArchiveVsp.feature b/openecomp-bdd/features/Onboarding/ArchiveItem/ArchiveVsp.feature
new file mode 100644
index 0000000..2cc0574
--- /dev/null
+++ b/openecomp-bdd/features/Onboarding/ArchiveItem/ArchiveVsp.feature
@@ -0,0 +1,58 @@
+Feature: Archive and Restore VSP
+
+    Background: Init
+        Given I want to create a VLM
+
+    Scenario: Archive VSP with Draft
+            When I want to create a VSP with onboarding type "NetworkPackage"
+            When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip"
+            And I want to process the NetworkPackage file for this VSP
+
+            Then I want to commit this Item
+            Then I want to get path "/items/{item.id}/versions"
+            Then I want to check property "listCount" for value 1
+            Then I want to make sure this Item has status "Draft"
+
+            Then I want to archive this item
+            Then I want to list Archived VSPs
+            Then I want to check that item exits in response
+            Then I want to list Active VSPs
+            Then I want to check that item does not exits in response
+
+    Scenario: Archive Already Archived VSP - Negative
+            When I want to create a VSP with onboarding type "NetworkPackage"
+            When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip"
+            And I want to process the NetworkPackage file for this VSP
+            Then I want to commit this Item
+
+            Then I want to archive this item
+            Then I want to list Archived VSPs
+            Then I want to check that item exits in response
+            Then I want to list Active VSPs
+            Then I want to check that item does not exits in response
+
+            Then I want the following to fail with error message "Archive item failed, item {item.id} is already Archived"
+            Then I want to archive this item
+
+
+    Scenario: Archive Certified VSP
+            When I want to create a VSP with onboarding type "NetworkPackage"
+            Then I want to make sure this Item has status "Draft"
+            When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip"
+            And I want to process the NetworkPackage file for this VSP
+
+            Then I want to commit this Item
+            Then I want to get path "/items/{item.id}/versions"
+            Then I want to check property "listCount" for value 1
+            Then I want to make sure this Item has status "Draft"
+
+            When I want to submit this VSP
+            Then I want to make sure this Item has status "Certified"
+            Then I want to get path "/items/{item.id}/versions"
+            Then I want to check property "listCount" for value 1
+
+            Then I want to archive this item
+            Then I want to list Archived VSPs
+            Then I want to check that item exits in response
+            Then I want to list Active VSPs
+            Then I want to check that item does not exits in response
\ No newline at end of file
diff --git a/openecomp-bdd/features/Onboarding/ArchiveItem/FilterArchivedVSPpackage.feature b/openecomp-bdd/features/Onboarding/ArchiveItem/FilterArchivedVSPpackage.feature
new file mode 100644
index 0000000..f68eece
--- /dev/null
+++ b/openecomp-bdd/features/Onboarding/ArchiveItem/FilterArchivedVSPpackage.feature
@@ -0,0 +1,40 @@
+Feature: Filter Archived VSP Package Details
+
+  Background: Init
+    Given I want to create a VLM
+
+  Scenario: Active VSP Package
+        When I want to create a VSP with onboarding type "NetworkPackage"
+        Then I want to make sure this Item has status "Draft"
+
+        When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip"
+        And I want to process the NetworkPackage file for this VSP
+        Then I want to commit this Item
+        Then I want to submit this VSP
+        Then I want to package this VSP
+        Then I want to make sure this Item has status "Certified"
+        Then I want to get path "/items/{item.id}/versions"
+        Then I want to check property "listCount" for value 1
+
+        Then I want to list Active VSPs packages
+        Then I want to check that VSP package exits in response
+
+
+  Scenario: Archived VSP Package
+          When I want to create a VSP with onboarding type "NetworkPackage"
+          Then I want to make sure this Item has status "Draft"
+
+          When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip"
+          And I want to process the NetworkPackage file for this VSP
+          Then I want to commit this Item
+          Then I want to submit this VSP
+          Then I want to package this VSP
+          Then I want to make sure this Item has status "Certified"
+          Then I want to get path "/items/{item.id}/versions"
+          Then I want to check property "listCount" for value 1
+          Then I want to archive this item
+
+          Then I want to list Archived VSPs packages
+          Then I want to check that VSP package exits in response
+
+
diff --git a/openecomp-bdd/stepDefinitions/General_Steps.js b/openecomp-bdd/stepDefinitions/General_Steps.js
index b9ea72f..b3fb0e9 100644
--- a/openecomp-bdd/stepDefinitions/General_Steps.js
+++ b/openecomp-bdd/stepDefinitions/General_Steps.js
@@ -22,6 +22,11 @@
 const fs = require('fs');
 const util = require('./Utils.js');
 
+function getPath(path, context) {
+	let compiled = _.template(path);
+	return compiled(context);
+}
+
 /**
  * @module ContextData
  * @description  Use with "Given". Use ONLY for local testing when you know the value of the Item you want to use
@@ -183,7 +188,8 @@
  **/
 Then('I want the following to fail with error message {string}', function(string)  {
 	this.context.shouldFail = true;
-	this.context.errorMessage = string;
+	let errorMessage = getPath(string, this.context);
+	this.context.errorMessage = errorMessage;
 });
 
 /**
@@ -228,4 +234,47 @@
 	let str = zip.files[string]._data;
 	this.context.responseData = JSON.parse(str);
 	callback();
+});
+
+/**
+ * @module ResponseData
+ * @description Check that the itemId from context exits in result of responseData
+ * exampleFile ArchiveItem.feature
+ * step I want to check that item exits in response
+ **/
+Then('I want to check that item exits in response', function() {
+
+  const id = this.context.item.id;
+  const results = this.context.responseData.results;
+  var testResult = false;
+
+  for(var i=0; i< results.length; i++){
+     if ( id == results[i].id){
+            testResult = true;
+     }
+  }
+
+   assert.equal(testResult,true);
+});
+
+
+/**
+ * @module ResponseData
+ * @description Check that the itemId from context does NOT exits in result of responseData
+ * exampleFile ArchiveItem.feature
+ * step I want to check that item does not exits in response
+ **/
+Then('I want to check that item does not exits in response', function() {
+
+  const id = this.context.item.id;
+  const results = this.context.responseData.results;
+  var testResult = false;
+
+  for(var i=0; i< results.length; i++){
+     if ( id == results[i].id){
+            testResult = true;
+     }
+  }
+
+   assert.equal(testResult,false);
 });
\ No newline at end of file
diff --git a/openecomp-bdd/stepDefinitions/Item_steps.js b/openecomp-bdd/stepDefinitions/Item_steps.js
index 165df6c..3ff7f20 100644
--- a/openecomp-bdd/stepDefinitions/Item_steps.js
+++ b/openecomp-bdd/stepDefinitions/Item_steps.js
@@ -65,3 +65,27 @@
 	return util.request(this.context, 'PUT', path, inputData);
 });
 
+
+/**
+ * @module Item
+ * @exampleFile ArchiveItem.feature
+ * @step I want to archive this item
+ **/
+Then('I want to archive this item', function()  {
+    let path = '/items/' + this.context.item.id + '/actions'
+    let inputData = {action: 'ARCHIVE'};
+	return util.request(this.context, 'PUT', path, inputData);
+});
+
+
+/**
+ * @module Item
+ * @exampleFile ArchiveItem.feature
+ * @step I want to restore this item
+ **/
+Then('I want to restore this item', function()  {
+    let path = '/items/' + this.context.item.id + '/actions'
+    let inputData = {action: 'RESTORE'};
+	return util.request(this.context, 'PUT', path, inputData);
+});
+
diff --git a/openecomp-bdd/stepDefinitions/VLM_steps.js b/openecomp-bdd/stepDefinitions/VLM_steps.js
index ea75313..35e78b2 100644
--- a/openecomp-bdd/stepDefinitions/VLM_steps.js
+++ b/openecomp-bdd/stepDefinitions/VLM_steps.js
@@ -55,3 +55,25 @@
 	return util.request(this.context, 'DELETE', path);
 });
 
+
+/**
+ * @module VLM
+ * @exampleFile ArchiveItem.feature
+ * @step I want to list Archived VLMs
+ **/
+Then('I want to list Archived VLMs', function()  {
+	let path = '/vendor-license-models/?Status=ARCHIVED';
+	return util.request(this.context, 'GET', path);
+});
+
+/**
+ * @module VLM
+ * @exampleFile ArchiveItem.feature
+ * @step I want to list Active VLMs
+ **/
+Then('I want to list Active VLMs', function()  {
+	let path = '/vendor-license-models';
+	return util.request(this.context, 'GET', path);
+});
+
+
diff --git a/openecomp-bdd/stepDefinitions/VSP_steps.js b/openecomp-bdd/stepDefinitions/VSP_steps.js
index bed8921..1f753fe 100644
--- a/openecomp-bdd/stepDefinitions/VSP_steps.js
+++ b/openecomp-bdd/stepDefinitions/VSP_steps.js
@@ -118,4 +118,65 @@
 Then('I want to delete this VSP', function()  {
 	let path = '/vendor-software-products/' + this.context.item.id ;
 	return util.request(this.context, 'DELETE', path);
+});
+
+/**
+ * @module VSP
+ * @exampleFile ArchiveItem.feature
+ * @step I want to list Archived VSPs
+ **/
+Then('I want to list Archived VSPs', function()  {
+	let path = '/vendor-software-products/?Status=ARCHIVED';
+	return util.request(this.context, 'GET', path);
+});
+
+/**
+ * @module VSP
+ * @exampleFile ArchiveItem.feature
+ * @step I want to list Active VSPs
+ **/
+Then('I want to list Active VSPs', function()  {
+	let path = '/vendor-software-products';
+	return util.request(this.context, 'GET', path);
+});
+
+
+/**
+ * @module VSP
+ * @exampleFile FilterArchivedVSPpackage.feature
+ * @step I want to list Archived VSPs packages
+ **/
+Then('I want to list Archived VSPs packages', function()  {
+	let path = '/vendor-software-products/packages?Status=ARCHIVED';
+	return util.request(this.context, 'GET', path);
+});
+
+/**
+ * @module VSP
+ * @exampleFile FilterArchivedVSPpackage.feature
+ * @step I want to list Active VSPs packages
+ **/
+Then('I want to list Active VSPs packages', function()  {
+	let path = '/vendor-software-products/packages';
+	return util.request(this.context, 'GET', path);
+
+});
+
+/**
+ * @module VSP
+ * @exampleFile FilterArchivedVSPpackage.feature
+ * @step I want to check that VSP package exits in response
+ **/
+Then('I want to check that VSP package exits in response', function()  {
+
+      const packages = this.context.responseData.results;
+      const id = this.context.item.id;
+      var testResult = false;
+
+      for(var i=0; i< packages.length; i++){
+          if (id == packages[i].packageId){
+               testResult = true;
+          }
+      }
+      assert.equal(testResult,true);
 });
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/Items.java b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/Items.java
new file mode 100644
index 0000000..de63c4e
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/Items.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright © 2018 European Support Limited
+ *
+ * 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.
+ */
+package org.openecomp.sdcrests.item.rest;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.openecomp.sdcrests.item.types.ItemActionRequestDto;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.constraints.NotNull;
+import javax.ws.rs.*;
+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/items")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+@Api(value = "Items")
+@Validated
+public interface Items {
+
+   @GET
+   @Path("/{itemId}")
+   @ApiOperation(value = "Get details of a item")
+   Response getItem(@PathParam("itemId") String itemId,
+                     @NotNull(message = USER_MISSING_ERROR_MSG)
+                     @HeaderParam(USER_ID_HEADER_PARAM) String user);
+
+  @PUT
+  @Path("/{itemId}/actions")
+  @ApiOperation(value = "Acts on item version")
+  Response actOn(ItemActionRequestDto request,
+                 @PathParam("itemId") String itemId,
+                 @NotNull(message = USER_MISSING_ERROR_MSG)
+                 @HeaderParam(USER_ID_HEADER_PARAM) String user);
+
+
+
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/mapping/MapItemToDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/mapping/MapItemToDto.java
index 0448407..1886dc4 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/mapping/MapItemToDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/mapping/MapItemToDto.java
@@ -1,6 +1,7 @@
 package org.openecomp.sdcrests.item.rest.mapping;
 
 import org.openecomp.sdc.versioning.types.Item;
+import org.openecomp.sdc.versioning.types.ItemStatus;
 import org.openecomp.sdcrests.item.types.ItemDto;
 import org.openecomp.sdcrests.mapping.MappingBase;
 
@@ -12,5 +13,6 @@
     target.setName(source.getName());
     target.setDescription(source.getDescription());
     target.setOwner(source.getOwner());
+    target.setStatus(source.getStatus().name());
   }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/services/ItemsImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/services/ItemsImpl.java
new file mode 100644
index 0000000..21c1f51
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/services/ItemsImpl.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright © 2018 European Support Limited
+ *
+ * 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.
+ */
+package org.openecomp.sdcrests.item.rest.services;
+
+import org.openecomp.sdc.activitylog.ActivityLogManager;
+import org.openecomp.sdc.activitylog.ActivityLogManagerFactory;
+import org.openecomp.sdc.activitylog.dao.type.ActivityLogEntity;
+import org.openecomp.sdc.activitylog.dao.type.ActivityType;
+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.notification.dtos.Event;
+import org.openecomp.sdc.notification.factories.NotificationPropagationManagerFactory;
+import org.openecomp.sdc.notification.services.NotificationPropagationManager;
+import org.openecomp.sdc.versioning.ItemManager;
+import org.openecomp.sdc.versioning.ItemManagerFactory;
+import org.openecomp.sdc.versioning.VersioningManager;
+import org.openecomp.sdc.versioning.VersioningManagerFactory;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.dao.types.VersionStatus;
+import org.openecomp.sdc.versioning.types.Item;
+import org.openecomp.sdc.versioning.types.NotificationEventTypes;
+import org.openecomp.sdcrests.item.rest.Items;
+import org.openecomp.sdcrests.item.rest.mapping.MapItemToDto;
+import org.openecomp.sdcrests.item.types.ItemAction;
+import org.openecomp.sdcrests.item.types.ItemActionRequestDto;
+import org.openecomp.sdcrests.item.types.ItemDto;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Service;
+
+import javax.inject.Named;
+import javax.ws.rs.core.Response;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_USER;
+import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.*;
+import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.SUBMIT_DESCRIPTION;
+
+@Named
+@Service("items")
+@Scope(value = "prototype")
+public class ItemsImpl implements Items {
+
+    private ItemManager itemManager =
+            ItemManagerFactory.getInstance().createInterface();
+
+    private static ActivityLogManager activityLogManager =
+            ActivityLogManagerFactory.getInstance().createInterface();
+
+    private VersioningManager versioningManager =
+            VersioningManagerFactory.getInstance().createInterface();
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(ItemsImpl.class);
+
+    private NotificationPropagationManager notifier =
+            NotificationPropagationManagerFactory.getInstance().createInterface();
+
+    private Map<ItemAction, ActionSideAffects> actionSideAffectsMap = new EnumMap<>(ItemAction.class);
+
+    {
+    actionSideAffectsMap.put(ItemAction.ARCHIVE, new ActionSideAffects(ActivityType.Archive,
+                    NotificationEventTypes.ARCHIVE));
+    actionSideAffectsMap.put(ItemAction.RESTORE, new  ActionSideAffects(ActivityType.Restore,
+                    NotificationEventTypes.RESTORE));
+    }
+
+  @Override
+  public Response actOn(ItemActionRequestDto request, String itemId, String user) {
+
+      Item item  = itemManager.get(itemId);
+      if( item == null){
+          return Response.status(Response.Status.NOT_FOUND)
+                  .entity(new Exception("Item does not exist.")).build();
+      }
+
+      switch (request.getAction()) {
+          case ARCHIVE:
+              itemManager.archive(item);
+                break;
+          case RESTORE:
+              itemManager.restore(item);
+              break;
+          default:
+        }
+
+      actionSideAffectsMap.get(request.getAction()).execute(item,user);
+
+      return Response.ok().build();
+    }
+
+    @Override
+    public Response getItem(String itemId, String user) {
+        Item item  = itemManager.get(itemId);
+        ItemDto itemDto = new MapItemToDto().applyMapping(item, ItemDto.class);
+
+        return Response.ok(itemDto).build();
+    }
+
+    private Version getLatestVersion(String itemId){
+        List<Version> list = versioningManager.list(itemId);
+       return list.stream().max(Version::compareTo).get();
+    }
+
+    private void notifyUsers(String itemId, String itemName, String message,
+                                    String userName, NotificationEventTypes eventType) {
+        Map<String, Object> eventProperties = new HashMap<>();
+        eventProperties.put(ITEM_NAME, itemName == null ? itemManager.get(itemId).getName() : itemName);
+        eventProperties.put(ITEM_ID, itemId);
+
+        eventProperties.put(SUBMIT_DESCRIPTION, message);
+        eventProperties.put(PERMISSION_USER, userName);
+
+        Event syncEvent = new SyncEvent(eventType.getEventName(), itemId, eventProperties, itemId);
+        try {
+            notifier.notifySubscribers(syncEvent, userName);
+        } catch (Exception e) {
+            LOGGER.error("Failed to send sync notification to users subscribed to item '" + itemId);
+        }
+    }
+
+    private class SyncEvent implements Event {
+
+        private String eventType;
+        private String originatorId;
+        private Map<String, Object> attributes;
+        private String entityId;
+
+        SyncEvent(String eventType, String originatorId,
+                  Map<String, Object> attributes, String entityId) {
+            this.eventType = eventType;
+            this.originatorId = originatorId;
+            this.attributes = attributes;
+            this.entityId = entityId;
+        }
+
+        @Override
+        public String getEventType() {
+            return eventType;
+        }
+
+        @Override
+        public String getOriginatorId() {
+            return originatorId;
+        }
+
+        @Override
+        public Map<String, Object> getAttributes() {
+            return attributes;
+        }
+
+        @Override
+        public String getEntityId() {
+            return entityId;
+        }
+
+    }
+
+    private class ActionSideAffects{
+      private ActivityType activityType;
+      private NotificationEventTypes notificationType;
+
+      public ActionSideAffects(ActivityType activityType, NotificationEventTypes notificationType){
+          this.activityType = activityType;
+          this.notificationType = notificationType;
+
+      }
+        public void execute(Item item, String user){
+            notifyUsers(item.getId(), item.getName(), null, user,
+                    this.notificationType);
+            activityLogManager.logActivity(new ActivityLogEntity(item.getId(), getLatestVersion(item.getId()),
+                   this.activityType, user, true, "", ""));
+        }
+    }
+
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemAction.java b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemAction.java
new file mode 100644
index 0000000..55b8cf8
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemAction.java
@@ -0,0 +1,6 @@
+package org.openecomp.sdcrests.item.types;
+
+public enum ItemAction {
+  ARCHIVE,
+  RESTORE
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemActionRequestDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemActionRequestDto.java
new file mode 100644
index 0000000..00032b6
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemActionRequestDto.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright © 2018 European Support Limited
+ *
+ * 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.
+ */
+package org.openecomp.sdcrests.item.types;
+
+public class ItemActionRequestDto {
+  private ItemAction action;
+
+  public ItemAction getAction() {
+    return action;
+  }
+
+  public void setAction(ItemAction action) {
+    this.action = action;
+  }
+
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemDto.java
index 3ca77c2..22bea01 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemDto.java
@@ -6,6 +6,7 @@
   private String name;
   private String description;
   private String owner;
+  private String status;
 
   public String getId() {
     return id;
@@ -46,4 +47,12 @@
   public void setOwner(String owner) {
     this.owner = owner;
   }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
 }
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 495cd3f..7710032 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
@@ -40,6 +40,7 @@
     <bean id = "itemPermissions" class="org.openecomp.sdcrests.itempermissions.rest.services.ItemPermissionsImpl"/>
     <bean id = "notifications" class="org.openecomp.sdcrests.notifications.rest.services.impl.NotificationsImpl"/>
     <bean id = "togglz" class="org.openecomp.sdcrests.togglz.rest.services.TogglzFeaturesImpl"/>
+    <bean id = "items" class="org.openecomp.sdcrests.item.rest.services.ItemsImpl"/>
 
     <!-- RESTful Services -->
     <jaxrs:server id="restContainer" address="/">
@@ -73,6 +74,7 @@
             <ref bean="itemPermissions"/>
             <ref bean="notifications"/>
             <ref bean="togglz"/>
+            <ref bean="items"/>
         </jaxrs:serviceBeans>
 
         <jaxrs:providers>
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/VendorLicenseModels.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/VendorLicenseModels.java
index dc17b49..f27de5e 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/VendorLicenseModels.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/VendorLicenseModels.java
@@ -57,12 +57,15 @@
   @ApiOperation(value = "List vendor license models",
       response = ItemDto.class,
       responseContainer = "List")
-  Response listLicenseModels(@ApiParam(value =
-      "Currently supported value: 'Certified' - only vendor License models with final versions "
-          + "will be return - with their latest final version")
-                             @QueryParam("versionFilter") String versionStatus,
-                             @NotNull(message = USER_MISSING_ERROR_MSG)
-                             @HeaderParam(RestConstants.USER_ID_HEADER_PARAM) String user);
+  Response listLicenseModels(@ApiParam(value = "Filter to return only Vendor License Models with at" +
+                            " least one version at this status. Currently supported values: 'Certified' , 'Draft'")
+                            @QueryParam("versionFilter") String versionStatus,
+                            @ApiParam(value = "Filter to only return Vendor License Models at this status." +
+                            "Currently supported values: 'ACTIVE' , 'ARCHIVED'." +
+                            "Default value = 'ACTIVE'.")
+                            @QueryParam("Status") String itemStatus,
+                            @NotNull(message = USER_MISSING_ERROR_MSG)
+                            @HeaderParam(RestConstants.USER_ID_HEADER_PARAM) String user);
 
   @POST
   @Path("/")
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/VendorLicenseModelsImpl.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/VendorLicenseModelsImpl.java
index b9c2ea3..2f64a50 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/VendorLicenseModelsImpl.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/VendorLicenseModelsImpl.java
@@ -52,6 +52,7 @@
 import org.openecomp.sdcrests.item.rest.mapping.MapVersionToDto;
 import org.openecomp.sdcrests.item.types.ItemCreationDto;
 import org.openecomp.sdcrests.item.types.ItemDto;
+import org.openecomp.sdc.versioning.types.ItemStatus;
 import org.openecomp.sdcrests.item.types.VersionDto;
 import org.openecomp.sdcrests.vendorlicense.rest.VendorLicenseModels;
 import org.openecomp.sdcrests.vendorlicense.rest.mapping.MapVendorLicenseModelEntityToDto;
@@ -106,20 +107,8 @@
       .createInterface());
 
   @Override
-  public Response listLicenseModels(String versionStatus, String user) {
-    Predicate<Item> itemPredicate;
-    if (VersionStatus.Certified.name().equals(versionStatus)) {
-      itemPredicate = item -> ItemType.vlm.name().equals(item.getType()) &&
-          item.getVersionStatusCounters().containsKey(VersionStatus.Certified);
-
-    } else if (VersionStatus.Draft.name().equals(versionStatus)) {
-      itemPredicate = item -> ItemType.vlm.name().equals(item.getType()) &&
-          item.getVersionStatusCounters().containsKey(VersionStatus.Draft) &&
-          userHasPermission(item.getId(), user);
-
-    } else {
-      itemPredicate = item -> ItemType.vlm.name().equals(item.getType());
-    }
+  public Response listLicenseModels(String versionStatus,String itemStatus, String user) {
+    Predicate<Item> itemPredicate = createItemPredicate(versionStatus, itemStatus, user);
 
     GenericCollectionWrapper<ItemDto> results = new GenericCollectionWrapper<>();
     MapItemToDto mapper = new MapItemToDto();
@@ -135,6 +124,7 @@
     Item item = new Item();
     item.setType(ItemType.vlm.name());
     item.setOwner(user);
+    item.setStatus(ItemStatus.ACTIVE);
     item.setName(request.getVendorName());
     item.setDescription(request.getDescription());
 
@@ -219,7 +209,7 @@
       permissionsManager.deleteItemPermissions(vlmId);
       uniqueValueUtil
           .deleteUniqueValue(VendorLicenseConstants.UniqueValues.VENDOR_NAME, vlm.getName());
-      notifyUsers(vlmId, vlm.getName(), null, "VLM was deleted", user,
+      notifyUsers(vlmId, vlm.getName(), null, null, user,
           NotificationEventTypes.DELETE);
 
       return Response.ok().build();
@@ -334,4 +324,28 @@
     return (permission != null && permission
         .matches(PermissionTypes.Contributor.name() + "|" + PermissionTypes.Owner.name()));
   }
+
+  private Predicate<Item> createItemPredicate(String versionStatus,
+                                              String itemStatus,
+                                              String user) {
+    Predicate<Item> itemPredicate = item -> ItemType.vlm.name().equals(item.getType());
+
+    if (ItemStatus.ARCHIVED.name().equals(itemStatus)) {
+      itemPredicate = itemPredicate.and(item -> ItemStatus.ARCHIVED.equals(item.getStatus()));
+    } else {
+      itemPredicate = itemPredicate.and(item -> ItemStatus.ACTIVE.equals(item.getStatus()));
+
+      if (VersionStatus.Certified.name().equals(versionStatus)) {
+        itemPredicate = itemPredicate
+                .and(item -> item.getVersionStatusCounters().containsKey(VersionStatus.Certified));
+
+      } else if (VersionStatus.Draft.name().equals(versionStatus)) {
+        itemPredicate = itemPredicate.and(
+                item -> item.getVersionStatusCounters().containsKey(VersionStatus.Draft)
+                        &&  userHasPermission(item.getId(), user));
+      }
+    }
+    return itemPredicate;
+  }
+
 }
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 60c68ef..996b389 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
@@ -69,10 +69,13 @@
   @Path("/")
   @ApiOperation(value = "Get list of vendor software products and their description",
       responseContainer = "List")
-  Response listVsps(@ApiParam(
-      value = "Currently supported values: 'Certified' - only vendor software products with final "
-          + " version will be return - with their latest final version")
+  Response listVsps(@ApiParam(value = "Filter to return only Vendor Software Products with at" +
+                    " least one version at this status. Currently supported values: 'Certified' , 'Draft'")
                     @QueryParam("versionFilter") String versionStatus,
+                    @ApiParam(value = "Filter to only return Vendor Software Products at this status." +
+                    "Currently supported values: 'ACTIVE' , 'ARCHIVED'." +
+                    "Default value = 'ACTIVE'.")
+                    @QueryParam("Status") String itemStatus,
                     @NotNull(message = USER_MISSING_ERROR_MSG)
                     @HeaderParam(USER_ID_HEADER_PARAM) String user);
 
@@ -105,7 +108,10 @@
   @ApiOperation(value = "Get list of translated CSAR files details",
       response = PackageInfoDto.class,
       responseContainer = "List")
-  Response listPackages(@ApiParam("Category") @QueryParam("category") String category,
+  Response listPackages(@ApiParam("Vendor Software Product status filter. " +
+                        "Currently supported values: 'ACTIVE', 'ARCHIVED'")
+                        @QueryParam("Status") String status,
+                        @ApiParam("Category") @QueryParam("category") String category,
                         @ApiParam("Sub-category") @QueryParam("subCategory") String subCategory,
                         @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/MapItemToVspDetailsDto.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/MapItemToVspDetailsDto.java
index caa0539..93ee159 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/MapItemToVspDetailsDto.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/MapItemToVspDetailsDto.java
@@ -15,5 +15,6 @@
     target.setVendorName((String) source.getProperties().get(VspItemProperty.VENDOR_NAME));
     target.setOnboardingMethod((String) source.getProperties().get(VspItemProperty.ONBOARDING_METHOD));
     target.setOwner(source.getOwner());
+    target.setStatus(source.getStatus().name());
   }
 }
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 be196bf..37804ff 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
@@ -16,6 +16,29 @@
 
 package org.openecomp.sdcrests.vsp.rest.services;
 
+import static javax.ws.rs.core.HttpHeaders.CONTENT_DISPOSITION;
+import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_USER;
+import static org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME;
+import static org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.VALIDATION_VSP_NAME;
+import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.ITEM_ID;
+import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.ITEM_NAME;
+import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.SUBMIT_DESCRIPTION;
+import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.VERSION_ID;
+import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.VERSION_NAME;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import javax.inject.Named;
+import javax.ws.rs.core.Response;
 import org.apache.commons.collections4.MapUtils;
 import org.openecomp.core.dao.UniqueValueDaoFactory;
 import org.openecomp.core.util.UniqueValueUtil;
@@ -62,6 +85,7 @@
 import org.openecomp.sdc.versioning.types.NotificationEventTypes;
 import org.openecomp.sdcrests.item.rest.mapping.MapVersionToDto;
 import org.openecomp.sdcrests.item.types.ItemCreationDto;
+import org.openecomp.sdc.versioning.types.ItemStatus;
 import org.openecomp.sdcrests.item.types.VersionDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.PackageInfoDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.QuestionnaireResponseDto;
@@ -85,29 +109,6 @@
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Service;
 
-import javax.inject.Named;
-import javax.ws.rs.core.Response;
-import java.io.File;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.function.Predicate;
-
-import static javax.ws.rs.core.HttpHeaders.CONTENT_DISPOSITION;
-import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_USER;
-import static org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME;
-import static org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.VALIDATION_VSP_NAME;
-import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.ITEM_ID;
-import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.ITEM_NAME;
-import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.SUBMIT_DESCRIPTION;
-import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.VERSION_ID;
-import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.VERSION_NAME;
-
 @Named
 @Service("vendorSoftwareProducts")
 @Scope(value = "prototype")
@@ -166,6 +167,7 @@
     Item item = new MapVspDescriptionDtoToItem().applyMapping(vspRequestDto, Item.class);
     item.setType(ItemType.vsp.name());
     item.setOwner(user);
+    item.setStatus(ItemStatus.ACTIVE);
     item.addProperty(VspItemProperty.ONBOARDING_METHOD, onboardingMethod.name());
 
     uniqueValueUtil.validateUniqueValue(VENDOR_SOFTWARE_PRODUCT_NAME, item.getName());
@@ -197,27 +199,14 @@
     throw new CoreException(onboardingMethodUpdateErrorCode, e);
   }
 
-  @Override
-  public Response listVsps(String versionStatus, String user) {
-    Predicate<Item> itemPredicate;
-    if (VersionStatus.Certified.name().equals(versionStatus)) {
-      itemPredicate = item -> ItemType.vsp.name().equals(item.getType())
-          && item.getVersionStatusCounters().containsKey(VersionStatus.Certified);
+    @Override
+    public Response listVsps(String versionStatus, String itemStatus, String user) {
 
-    } else if (VersionStatus.Draft.name().equals(versionStatus)) {
-      itemPredicate = item -> ItemType.vsp.name().equals(item.getType())
-          && item.getVersionStatusCounters().containsKey(VersionStatus.Draft)
-          && userHasPermission(item.getId(), user);
+      GenericCollectionWrapper<VspDetailsDto> results = new GenericCollectionWrapper<>();
+      MapItemToVspDetailsDto mapper = new MapItemToVspDetailsDto();
 
-    } else {
-      itemPredicate = item -> ItemType.vsp.name().equals(item.getType());
-    }
-
-    GenericCollectionWrapper<VspDetailsDto> results = new GenericCollectionWrapper<>();
-    MapItemToVspDetailsDto mapper = new MapItemToVspDetailsDto();
-    itemManager.list(itemPredicate).stream()
-        .sorted((o1, o2) -> o2.getModificationTime().compareTo(o1.getModificationTime()))
-        .forEach(vspItem -> results.add(mapper.applyMapping(vspItem, VspDetailsDto.class)));
+      getVspList(versionStatus,itemStatus,user)
+              .forEach(vspItem -> results.add(mapper.applyMapping(vspItem, VspDetailsDto.class)));
 
     return Response.ok(results).build();
   }
@@ -299,7 +288,7 @@
       itemManager.delete(vsp);
       permissionsManager.deleteItemPermissions(vspId);
       uniqueValueUtil.deleteUniqueValue(VENDOR_SOFTWARE_PRODUCT_NAME, vsp.getName());
-      notifyUsers(vspId, vsp.getName(), null, "VSP was deleted", user,
+      notifyUsers(vspId, vsp.getName(), null, null, user,
           NotificationEventTypes.DELETE);
 
       return Response.ok().build();
@@ -386,10 +375,19 @@
   }
 
   @Override
-  public Response listPackages(String category, String subCategory, String user) {
+  public Response listPackages(String status, String category, String subCategory, String user) {
+
+    List<String> VspsIds =
+            getVspList(null, status != null ? ItemStatus.valueOf(status).name(): null, user)
+            .stream().map(Item::getId).collect(Collectors.toList());
+
     List<PackageInfo> packageInfoList =
         vendorSoftwareProductManager.listPackages(category, subCategory);
 
+    packageInfoList = packageInfoList.stream().
+            filter(packageInfo -> VspsIds.contains(packageInfo.getVspId()))
+            .collect(Collectors.toList());
+
     GenericCollectionWrapper<PackageInfoDto> results = new GenericCollectionWrapper<>();
     MapPackageInfoToPackageInfoDto mapper = new MapPackageInfoToPackageInfoDto();
 
@@ -611,4 +609,38 @@
     return permission != null && permission
         .matches(PermissionTypes.Contributor.name() + "|" + PermissionTypes.Owner.name());
   }
+
+
+  private Predicate<Item> createItemPredicate(String versionStatus,
+                                              String itemStatus,
+                                              String user) {
+    Predicate<Item> itemPredicate = item -> ItemType.vsp.name().equals(item.getType());
+
+    if (ItemStatus.ARCHIVED.name().equals(itemStatus)) {
+      itemPredicate = itemPredicate.and(item -> ItemStatus.ARCHIVED.equals(item.getStatus()));
+    } else {
+      itemPredicate = itemPredicate.and(item -> ItemStatus.ACTIVE.equals(item.getStatus()));
+
+      if (VersionStatus.Certified.name().equals(versionStatus)) {
+        itemPredicate = itemPredicate
+                .and(item -> item.getVersionStatusCounters().containsKey(VersionStatus.Certified));
+
+      } else if (VersionStatus.Draft.name().equals(versionStatus)) {
+        itemPredicate = itemPredicate.and(
+                item -> item.getVersionStatusCounters().containsKey(VersionStatus.Draft)
+                        && userHasPermission(item.getId(), user));
+      }
+    }
+    return itemPredicate;
+  }
+
+  private List<Item> getVspList(String versionStatus, String itemStatus, String user) {
+
+    Predicate<Item> itemPredicate = createItemPredicate(versionStatus, itemStatus, user);
+
+    return itemManager.list(itemPredicate).stream()
+            .sorted((o1, o2) -> o2.getModificationTime().compareTo(o1.getModificationTime())).
+            collect(Collectors.toList());
+
+  }
 }
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/VspDetailsDto.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/VspDetailsDto.java
index 745b930..38e70a9 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/VspDetailsDto.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/VspDetailsDto.java
@@ -36,6 +36,7 @@
   private String onboardingOrigin;
   private String networkPackageName;
   private String owner;
+  private String status;
 
   public String getId() {
     return id;
@@ -92,4 +93,12 @@
   public void setOwner(String owner) {
     this.owner = owner;
   }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
 }
diff --git a/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/errors/Messages.java b/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/errors/Messages.java
index 2163669..0bf8796 100644
--- a/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/errors/Messages.java
+++ b/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/errors/Messages.java
@@ -42,6 +42,7 @@
   DELETE_VSP_ERROR("VSP has been certified and cannot be deleted."),
   DELETE_VLM_ERROR("VLM has been certified and cannot be deleted."),
 
+
   ZIP_SHOULD_NOT_CONTAIN_FOLDERS("Zip file should not contain folders"),
   VES_ZIP_SHOULD_CONTAIN_YML_ONLY(
       "Wrong VES EVENT Artifact was uploaded - all files contained in Artifact must be YAML files" +
diff --git a/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/togglz/ToggleableFeature.java b/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/togglz/ToggleableFeature.java
index c3cac50..5080e00 100644
--- a/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/togglz/ToggleableFeature.java
+++ b/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/togglz/ToggleableFeature.java
@@ -10,7 +10,13 @@
   VLAN_TAGGING,
 
   @Label ("Annotations")
-  ANNOTATIONS;
+  ANNOTATIONS,
+
+  @Label("Archive Item")
+  ARCHIVE_ITEM,
+
+  @Label("Filter")
+  FILTER;
 
   public boolean isActive() {
     return FeatureContext.getFeatureManager().isActive(this);
diff --git a/openecomp-be/lib/openecomp-sdc-activity-log-lib/openecomp-sdc-activity-log-api/src/main/java/org/openecomp/sdc/activitylog/dao/type/ActivityType.java b/openecomp-be/lib/openecomp-sdc-activity-log-lib/openecomp-sdc-activity-log-api/src/main/java/org/openecomp/sdc/activitylog/dao/type/ActivityType.java
index 620113e..3f5b1b6 100644
--- a/openecomp-be/lib/openecomp-sdc-activity-log-lib/openecomp-sdc-activity-log-api/src/main/java/org/openecomp/sdc/activitylog/dao/type/ActivityType.java
+++ b/openecomp-be/lib/openecomp-sdc-activity-log-lib/openecomp-sdc-activity-log-api/src/main/java/org/openecomp/sdc/activitylog/dao/type/ActivityType.java
@@ -2,6 +2,8 @@
 
 public enum ActivityType {
   Create,
+  Archive,
+  Restore,
   Create_Version,
   Commit,
   Submit,
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/AsdcItemManager.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/AsdcItemManager.java
index a4ea65f..ad3d1f3 100644
--- a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/AsdcItemManager.java
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/AsdcItemManager.java
@@ -16,25 +16,7 @@
 
 package org.openecomp.sdc.versioning;
 
-import java.util.Collection;
-import java.util.function.Predicate;
-import org.openecomp.sdc.versioning.dao.types.VersionStatus;
-import org.openecomp.sdc.versioning.types.Item;
+public interface AsdcItemManager extends ItemManager {
 
-public interface AsdcItemManager {
-
-  Collection<Item> list(Predicate<Item> predicate);
-
-  Item get(String itemId);
-
-  Item create(Item item);
-
-  void updateVersionStatus(String itemId, VersionStatus addedVersionStatus,
-      VersionStatus removedVersionStatus);
-
-  void updateOwner(String itemId, String owner);
-
-  void updateName(String itemId, String name);
-
-  void delete(Item item);
+    void updateOwner(String itemId, String owner);
 }
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/ItemManager.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/ItemManager.java
index 41a2c12..0448ee7 100644
--- a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/ItemManager.java
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/ItemManager.java
@@ -32,9 +32,11 @@
   void updateVersionStatus(String itemId, VersionStatus addedVersionStatus,
       VersionStatus removedVersionStatus);
 
-  void delete(Item item);
+  void archive(Item item);
 
-  void updateName(String itemId, String name);
+  void restore(Item item);
+
+  void delete(Item item);
 
   void update(Item item);
 }
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/dao/types/Version.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/dao/types/Version.java
index b1f0b71..4d4c194 100644
--- a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/dao/types/Version.java
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/dao/types/Version.java
@@ -209,7 +209,7 @@
     return major == version.major && minor == version.minor;
   }
 
-  public int compateTo(Version other){
+  public int compareTo(Version other){
     if (this.major>other.major) {
       return 1;
     } else if(this.major<other.major){
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/Item.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/Item.java
index d572373..161c22c 100644
--- a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/Item.java
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/Item.java
@@ -12,6 +12,7 @@
   private String type;
   private String name;
   private String owner;
+  private ItemStatus status;
   private String description;
   private Map<String, Object> properties = new HashMap<>();
   private Map<VersionStatus, Integer> versionStatusCounters = new EnumMap<>(VersionStatus.class);
@@ -50,6 +51,14 @@
     this.owner = owner;
   }
 
+  public ItemStatus getStatus() {
+    return status;
+  }
+
+  public void setStatus(ItemStatus status) {
+    this.status = status;
+  }
+
   public String getDescription() {
     return description;
   }
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/ItemStatus.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/ItemStatus.java
new file mode 100644
index 0000000..413c5a7
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/ItemStatus.java
@@ -0,0 +1,6 @@
+package org.openecomp.sdc.versioning.types;
+
+public enum ItemStatus {
+    ACTIVE,
+    ARCHIVED
+}
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/NotificationEventTypes.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/NotificationEventTypes.java
index 336db64..da53d8d 100644
--- a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/NotificationEventTypes.java
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/NotificationEventTypes.java
@@ -7,6 +7,8 @@
 public enum NotificationEventTypes {
     SUBMIT("submit"),
     DELETE("delete"),
+    ARCHIVE("archive"),
+    RESTORE("restore"),
     COMMIT("commit");
 
     private String eventName;
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/dao/impl/zusammen/ItemZusammenDaoImpl.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/dao/impl/zusammen/ItemZusammenDaoImpl.java
index 5a212af..665bf06 100644
--- a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/dao/impl/zusammen/ItemZusammenDaoImpl.java
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/dao/impl/zusammen/ItemZusammenDaoImpl.java
@@ -7,6 +7,7 @@
 import org.openecomp.sdc.versioning.dao.ItemDao;
 import org.openecomp.sdc.versioning.dao.types.VersionStatus;
 import org.openecomp.sdc.versioning.types.Item;
+import org.openecomp.sdc.versioning.types.ItemStatus;
 
 import java.util.Collection;
 import java.util.Map;
@@ -67,6 +68,12 @@
 
     item.setCreationTime(zusammenItem.getCreationTime());
     item.setModificationTime(zusammenItem.getModificationTime());
+
+    if(item.getStatus() == null){
+      item.setStatus(ItemStatus.ACTIVE);
+      update(item);
+    }
+
     return item;
   }
 
@@ -78,6 +85,9 @@
       case InfoPropertyName.ITEM_OWNER:
         item.setOwner((String) propertyValue);
         break;
+      case InfoPropertyName.ITEM_STATUS:
+        item.setStatus(ItemStatus.valueOf((String)propertyValue));
+        break;
       case InfoPropertyName.ITEM_VERSIONS_STATUSES:
         for (Map.Entry<String, Number> statusCounter :
             ((Map<String, Number>) propertyValue).entrySet()) {
@@ -96,6 +106,9 @@
     info.setDescription(item.getDescription());
     info.addProperty(InfoPropertyName.ITEM_TYPE, item.getType());
     info.addProperty(InfoPropertyName.ITEM_OWNER,item.getOwner());
+    if (item.getStatus() != null) {
+      info.addProperty(InfoPropertyName.ITEM_STATUS, item.getStatus());
+    }
     info.addProperty(InfoPropertyName.ITEM_VERSIONS_STATUSES, item.getVersionStatusCounters());
     item.getProperties().entrySet()
         .forEach(property -> info.addProperty(property.getKey(), property.getValue()));
@@ -106,6 +119,7 @@
     private static final String ITEM_TYPE = "item_type";
     private static final String ITEM_VERSIONS_STATUSES = "item_versions_statuses";
     private static final String ITEM_OWNER = "Owner";
+    private static final String ITEM_STATUS = "status";
 
     private InfoPropertyName() {
       throw new IllegalStateException("Constants class");
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/impl/ItemManagerImpl.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/impl/ItemManagerImpl.java
index dadf456..3b7b018 100644
--- a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/impl/ItemManagerImpl.java
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/impl/ItemManagerImpl.java
@@ -19,10 +19,14 @@
 import java.util.Collection;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
+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.versioning.ItemManager;
 import org.openecomp.sdc.versioning.dao.ItemDao;
 import org.openecomp.sdc.versioning.dao.types.VersionStatus;
 import org.openecomp.sdc.versioning.types.Item;
+import org.openecomp.sdc.versioning.types.ItemStatus;
 
 public class ItemManagerImpl implements ItemManager {
 
@@ -72,17 +76,34 @@
   }
 
   @Override
-  public void updateName(String itemId, String name) {
-    Item item = get(itemId);
-    if (item == null) {
-      return;
+  public void archive(Item item) {
+
+    if (item.getStatus() == ItemStatus.ARCHIVED) {
+      throw new CoreException(new ErrorCode.ErrorCodeBuilder()
+          .withCategory(ErrorCategory.APPLICATION)
+          .withMessage(String.format("Archive item failed, item %s is already Archived", item.getId()))
+          .build());
     }
 
-    item.setName(name);
+    item.setStatus(ItemStatus.ARCHIVED);
     itemDao.update(item);
   }
 
   @Override
+  public void restore(Item item) {
+
+      if (item.getStatus() == ItemStatus.ACTIVE) {
+          throw new CoreException(new ErrorCode.ErrorCodeBuilder()
+                  .withCategory(ErrorCategory.APPLICATION)
+                  .withMessage(String.format("Restore item failed, item %s is already Active", item.getId()))
+                  .build());
+      }
+
+      item.setStatus(ItemStatus.ACTIVE);
+      itemDao.update(item);
+    }
+
+  @Override
   public void update(Item item) {
     itemDao.update(item);
   }
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/test/java/org/openecomp/sdc/versioning/dao/impl/zusammen/ItemZusammenDaoImplTest.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/test/java/org/openecomp/sdc/versioning/dao/impl/zusammen/ItemZusammenDaoImplTest.java
index bfa660a..e67dc57 100644
--- a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/test/java/org/openecomp/sdc/versioning/dao/impl/zusammen/ItemZusammenDaoImplTest.java
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/test/java/org/openecomp/sdc/versioning/dao/impl/zusammen/ItemZusammenDaoImplTest.java
@@ -10,6 +10,7 @@
 import org.openecomp.sdc.common.session.SessionContextProviderFactory;
 import org.openecomp.sdc.versioning.dao.types.VersionStatus;
 import org.openecomp.sdc.versioning.types.Item;
+import org.openecomp.sdc.versioning.types.ItemStatus;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -28,6 +29,7 @@
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
 import static org.openecomp.sdc.versioning.dao.impl.zusammen.TestUtil.createZusammenContext;
+import static org.testng.Assert.assertEquals;
 
 public class ItemZusammenDaoImplTest {
 
@@ -114,6 +116,8 @@
 
     Assert.assertNotNull(item);
     assertItemEquals(item, toBeReturned);
+    assertEquals(item.getStatus(), ItemStatus.ACTIVE);
+
   }
 
   @Test
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/test/java/org/openecomp/sdc/versioning/impl/ItemManagerImplTest.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/test/java/org/openecomp/sdc/versioning/impl/ItemManagerImplTest.java
new file mode 100644
index 0000000..fadfe36
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/test/java/org/openecomp/sdc/versioning/impl/ItemManagerImplTest.java
@@ -0,0 +1,96 @@
+package org.openecomp.sdc.versioning.impl;
+
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.itempermissions.PermissionsServices;
+import org.openecomp.sdc.notification.services.SubscriptionService;
+import org.openecomp.sdc.versioning.dao.ItemDao;
+import org.openecomp.sdc.versioning.dao.types.VersionStatus;
+import org.openecomp.sdc.versioning.types.Item;
+import org.openecomp.sdc.versioning.types.ItemStatus;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import static org.mockito.Mockito.verify;
+import static org.testng.Assert.assertEquals;
+
+public class ItemManagerImplTest {
+
+    private static final String USER = "user1";
+    private static final String ITEM_ID = "item1";
+    private static final String ITEM_NAME = "item 1 name";
+    private static final String ITEM_TYPE_A = "A";
+    private static final String ITEM_TYPE_B = "B";
+    private static final String tenant = "dox";
+    @Mock
+    private ItemDao itemDao;
+    @Mock
+    private PermissionsServices permissionsServices;
+    @Mock
+    private SubscriptionService subscriptionService;
+    @InjectMocks
+    private ItemManagerImpl itemManager;
+
+    @BeforeMethod
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @AfterMethod
+    public void tearDown(){
+        itemManager = null;
+    }
+
+    @Test
+    public void ArchiveTest(){
+
+        Item item  = createItem(ITEM_ID,ITEM_NAME,ITEM_TYPE_A);
+        itemManager.archive(item);
+
+        verify(itemDao).update(item);
+        assertEquals(item.getStatus(), ItemStatus.ARCHIVED);
+    }
+
+    @Test(expectedExceptions = CoreException.class,expectedExceptionsMessageRegExp =
+            "Archive item failed, item .* is already Archived")
+    public void ArchiveTestNegative(){
+
+        Item item  = createItem(ITEM_ID,ITEM_NAME,ITEM_TYPE_B);
+        item.setStatus(ItemStatus.ARCHIVED);
+        itemManager.archive(item);
+
+    }
+
+    @Test
+    public void RestoreTest(){
+
+        Item item  = createItem(ITEM_ID,ITEM_NAME,ITEM_TYPE_A);
+        item.setStatus(ItemStatus.ARCHIVED);
+        itemManager.restore(item);
+
+        verify(itemDao).update(item);
+        assertEquals(item.getStatus(), ItemStatus.ACTIVE);
+    }
+
+    @Test(expectedExceptions = CoreException.class,expectedExceptionsMessageRegExp =
+            "Restore item failed, item .* is already Active")
+    public void RestoreTestNegative(){
+
+        Item item  = createItem(ITEM_ID,ITEM_NAME,ITEM_TYPE_B);
+        item.setStatus(ItemStatus.ACTIVE);
+        itemManager.restore(item);
+
+    }
+
+
+    private Item createItem(String id, String name, String type) {
+        Item item = new Item();
+        item.setId(id);
+        item.setName(name);
+        item.setType(type);
+        return item;
+    }
+}
diff --git a/openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/commands/HealAll.java b/openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/commands/HealAll.java
index 8bcfcba..d6344f7 100644
--- a/openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/commands/HealAll.java
+++ b/openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/commands/HealAll.java
@@ -99,7 +99,7 @@
       return versionInfoEntity.getCandidate().getVersion();
     } else if (!CollectionUtils.isEmpty(versionInfoEntity.getViewableVersions())) {
 
-      return versionInfoEntity.getViewableVersions().stream().max(Version::compateTo)
+      return versionInfoEntity.getViewableVersions().stream().max(Version::compareTo)
           .orElse(new Version());
     }
     return versionInfoEntity.getActiveVersion();
