diff --git a/openecomp-ui/src/sdc-app/common/helpers/ItemsHelper.js b/openecomp-ui/src/sdc-app/common/helpers/ItemsHelper.js
index bbca87f..3ac3efd 100644
--- a/openecomp-ui/src/sdc-app/common/helpers/ItemsHelper.js
+++ b/openecomp-ui/src/sdc-app/common/helpers/ItemsHelper.js
@@ -4,9 +4,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.
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper.js b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper.js
index 90bf9f9..6d74bad 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper.js
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper.js
@@ -715,6 +715,10 @@
         }
     },
 
+    softwareProductDelete(itemId) {
+        return RestAPIUtil.destroy(`${baseUrl()}/${itemId}`);
+    },
+
     setIsValidityData(dispatch, { isValidityData }) {
         dispatch({
             type: actionTypes.softwareProductEditor.IS_VALIDITY_DATA_CHANGED,
diff --git a/openecomp-ui/src/sdc-app/onboarding/versionsPage/VersionsPage.js b/openecomp-ui/src/sdc-app/onboarding/versionsPage/VersionsPage.js
index bbf4533..61c0d0a 100644
--- a/openecomp-ui/src/sdc-app/onboarding/versionsPage/VersionsPage.js
+++ b/openecomp-ui/src/sdc-app/onboarding/versionsPage/VersionsPage.js
@@ -98,7 +98,9 @@
         },
         onArchive: () => VersionsPageActionHelper.archiveItem(dispatch, itemId),
         onRestore: () =>
-            VersionsPageActionHelper.restoreItemFromArchive(dispatch, itemId)
+            VersionsPageActionHelper.restoreItemFromArchive(dispatch, itemId),
+        onDelete: () =>
+            VersionsPageActionHelper.deleteItemFromArchive(dispatch, itemId)
     };
 };
 
diff --git a/openecomp-ui/src/sdc-app/onboarding/versionsPage/VersionsPage.jsx b/openecomp-ui/src/sdc-app/onboarding/versionsPage/VersionsPage.jsx
index 6be0565..95c7530 100644
--- a/openecomp-ui/src/sdc-app/onboarding/versionsPage/VersionsPage.jsx
+++ b/openecomp-ui/src/sdc-app/onboarding/versionsPage/VersionsPage.jsx
@@ -21,22 +21,36 @@
 import { Button } from 'onap-ui-react';
 import i18n from 'nfvo-utils/i18n/i18n.js';
 
-const ArchiveRestoreButton = ({ depricateAction, title, isArchived }) => (
+const ArchiveRestoreButton = ({
+    deprecateAction,
+    title,
+    isArchived,
+    deleteAction
+}) => (
     <div className="deprecate-btn-wrapper">
+        ,
         {isArchived ? (
-            <Button
-                data-test-id="deprecate-action-btn"
-                className="depricate-btn"
-                onClick={depricateAction}>
-                {title}
-            </Button>
+            <div>
+                <Button
+                    data-test-id="deprecate-action-btn"
+                    className="deprecate-btn"
+                    onClick={deprecateAction}>
+                    {title}
+                </Button>
+                <Button
+                    data-test-id="delete-action-btn"
+                    className="deprecate-btn"
+                    onClick={deleteAction}>
+                    {i18n('DELETE')}
+                </Button>
+            </div>
         ) : (
             <SVGIcon
                 data-test-id="deprecate-action-btn"
                 name="archiveBox"
                 title={i18n('Archive')}
                 color="secondary"
-                onClick={depricateAction}
+                onClick={deprecateAction}
             />
         )}
     </div>
@@ -50,6 +64,7 @@
     itemName,
     isArchived,
     onRestore,
+    onDelete,
     onArchive,
     isCollaborator
 }) => {
@@ -62,9 +77,10 @@
             {isCollaborator && (
                 <ArchiveRestoreButton
                     isArchived={isArchived}
-                    depricateAction={
+                    deprecateAction={
                         isArchived ? () => onRestore() : () => onArchive()
                     }
+                    deleteAction={isArchived ? () => onDelete() : null}
                     title={i18n(isArchived ? 'RESTORE' : 'ARCHIVE')}
                 />
             )}
@@ -95,7 +111,8 @@
             isManual,
             isArchived,
             onArchive,
-            onRestore
+            onRestore,
+            onDelete
         } = this.props;
         const depricatedTitle = isArchived ? i18n('(Archived)') : '';
         return (
@@ -106,6 +123,7 @@
                     onArchive={onArchive}
                     isArchived={isArchived}
                     onRestore={onRestore}
+                    onDelete={onDelete}
                     isCollaborator={isCollaborator}
                 />
                 <PermissionsView
diff --git a/openecomp-ui/src/sdc-app/onboarding/versionsPage/VersionsPageActionHelper.js b/openecomp-ui/src/sdc-app/onboarding/versionsPage/VersionsPageActionHelper.js
index 8087dce..6ade7ff 100644
--- a/openecomp-ui/src/sdc-app/onboarding/versionsPage/VersionsPageActionHelper.js
+++ b/openecomp-ui/src/sdc-app/onboarding/versionsPage/VersionsPageActionHelper.js
@@ -14,8 +14,7 @@
  * permissions and limitations under the License.
  */
 import ItemsHelper from '../../common/helpers/ItemsHelper.js';
-import { actionTypes } from './VersionsPageConstants.js';
-import { itemTypes } from './VersionsPageConstants.js';
+import { actionTypes, itemTypes } from './VersionsPageConstants.js';
 import { modalContentMapper } from 'sdc-app/common/modal/ModalContentMapper.js';
 import { actionTypes as modalActionTypes } from 'nfvo-components/modal/GlobalModalConstants.js';
 import i18n from 'nfvo-utils/i18n/i18n.js';
@@ -26,6 +25,7 @@
     onboardingActions
 } from 'sdc-app/onboarding/OnboardingConstants.js';
 import { notificationActions } from 'nfvo-components/notification/NotificationsConstants.js';
+import SoftwareProductActionHelper from 'sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper';
 
 const VersionsPageActionHelper = {
     fetchVersions(dispatch, { itemType, itemId }) {
@@ -112,6 +112,18 @@
                 message: i18n('Item successfully restored')
             })
         );
+    },
+
+    async deleteItemFromArchive(dispatch, itemId) {
+        await SoftwareProductActionHelper.softwareProductDelete(itemId);
+        await ScreensHelper.loadScreen(dispatch, {
+            screen: enums.SCREEN.ONBOARDING_CATALOG
+        });
+        dispatch(
+            notificationActions.showSuccess({
+                message: i18n('Item successfully deleted')
+            })
+        );
     }
 };
 
