diff --git a/openecomp-ui/src/nfvo-components/clickOutsideWrapper/ClickOutsideWrapper.jsx b/openecomp-ui/src/nfvo-components/clickOutsideWrapper/ClickOutsideWrapper.jsx
new file mode 100644
index 0000000..386ec92f
--- /dev/null
+++ b/openecomp-ui/src/nfvo-components/clickOutsideWrapper/ClickOutsideWrapper.jsx
@@ -0,0 +1,34 @@
+/*!
+ * Copyright © 2016-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.
+ */
+
+import React from 'react';
+import PropTypes from 'prop-types';
+import enhanceWithClickOutside from 'react-click-outside';
+
+class ClickOutsideWrapper extends React.Component {
+    static propTypes = {
+        onClose: PropTypes.func
+    };
+
+    handleClickOutside() {
+        this.props.onClose();
+    }
+    render() {
+        return <div>{this.props.children}</div>;
+    }
+}
+
+export default enhanceWithClickOutside(ClickOutsideWrapper);
diff --git a/openecomp-ui/src/nfvo-components/panel/versionController/components/ActionButtons.jsx b/openecomp-ui/src/nfvo-components/panel/versionController/components/ActionButtons.jsx
index 4dfa117..8905aa3 100644
--- a/openecomp-ui/src/nfvo-components/panel/versionController/components/ActionButtons.jsx
+++ b/openecomp-ui/src/nfvo-components/panel/versionController/components/ActionButtons.jsx
@@ -13,27 +13,14 @@
  * or implied. See the License for the specific language governing
  * permissions and limitations under the License.
  */
-import React, { Component } from 'react';
+import React from 'react';
 import PropTypes from 'prop-types';
-import enhanceWithClickOutside from 'react-click-outside';
 import i18n from 'nfvo-utils/i18n/i18n.js';
+import ClickOutsideWrapper from 'nfvo-components/clickOutsideWrapper/ClickOutsideWrapper.jsx';
 import SVGIcon from 'sdc-ui/lib/react/SVGIcon.js';
 import Overlay from 'nfvo-components/overlay/Overlay.jsx';
 import Permissions from './Permissions.jsx';
 
-class ClickOutsideWrapper extends Component {
-    handleClickOutside() {
-        this.props.onClose();
-    }
-    render() {
-        return <div>{this.props.children}</div>;
-    }
-}
-
-const EnhancedClickOutsideWrapper = enhanceWithClickOutside(
-    ClickOutsideWrapper
-);
-
 const VCButton = ({ name, tooltipText, disabled, onClick, dataTestId }) => {
     let onClickAction = disabled ? () => {} : onClick;
     return (
@@ -95,7 +82,7 @@
     }
 }) => (
     <div className="action-buttons">
-        <EnhancedClickOutsideWrapper onClose={onClosePermissions}>
+        <ClickOutsideWrapper onClose={onClosePermissions}>
             <VCButton
                 disabled={isManual}
                 dataTestId="vc-permission-btn"
@@ -113,7 +100,7 @@
                     />
                 </Overlay>
             )}
-        </EnhancedClickOutsideWrapper>
+        </ClickOutsideWrapper>
         {isCollaborator &&
             !isArchived && (
                 <div className="collaborator-action-buttons">
diff --git a/openecomp-ui/src/sdc-app/onboarding/onboard/onboardingCatalog/VendorItem.jsx b/openecomp-ui/src/sdc-app/onboarding/onboard/onboardingCatalog/VendorItem.jsx
index 12beff7..aec8e9b 100644
--- a/openecomp-ui/src/sdc-app/onboarding/onboard/onboardingCatalog/VendorItem.jsx
+++ b/openecomp-ui/src/sdc-app/onboarding/onboard/onboardingCatalog/VendorItem.jsx
@@ -1,5 +1,5 @@
 /*!
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright © 2016-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.
@@ -13,9 +13,12 @@
  * or implied. See the License for the specific language governing
  * permissions and limitations under the License.
  */
+
 import React from 'react';
 import PropTypes from 'prop-types';
 import i18n from 'nfvo-utils/i18n/i18n.js';
+import ClickOutsideWrapper from 'nfvo-components/clickOutsideWrapper/ClickOutsideWrapper.jsx';
+
 import {
     Tile,
     TileInfo,
@@ -71,12 +74,15 @@
                         </Button>
                         {shouldShowOverlay &&
                             softwareProductList.length > 0 && (
-                                <VSPOverlay
-                                    onMigrate={onMigrate}
-                                    VSPList={softwareProductList}
-                                    onSelectVSP={onSelectVSP}
-                                    onSeeMore={() => onVendorSelect(vendor)}
-                                />
+                                <ClickOutsideWrapper
+                                    onClose={this.handleClickOutside}>
+                                    <VSPOverlay
+                                        onMigrate={onMigrate}
+                                        VSPList={softwareProductList}
+                                        onSelectVSP={onSelectVSP}
+                                        onSeeMore={() => onVendorSelect(vendor)}
+                                    />
+                                </ClickOutsideWrapper>
                             )}
                     </TileInfoLine>
                 </TileInfo>
@@ -101,6 +107,9 @@
         const { onAddVSP, vendor: { id } } = this.props;
         onAddVSP(id);
     }
+    handleClickOutside = () => {
+        this.props.onVSPButtonClick(false);
+    };
 
     handleVspCountClick(e) {
         e.stopPropagation();
diff --git a/openecomp-ui/src/sdc-app/onboarding/onboard/workspace/WorkspaceViewWithFilter.jsx b/openecomp-ui/src/sdc-app/onboarding/onboard/workspace/WorkspaceViewWithFilter.jsx
index afc68e1..bef88df 100644
--- a/openecomp-ui/src/sdc-app/onboarding/onboard/workspace/WorkspaceViewWithFilter.jsx
+++ b/openecomp-ui/src/sdc-app/onboarding/onboard/workspace/WorkspaceViewWithFilter.jsx
@@ -44,12 +44,12 @@
                 onAddVLM={
                     catalogActiveTab === catalogTabsMappping.ACTIVE
                         ? onAddLicenseModelClick
-                        : false
+                        : undefined
                 }
                 onAddVSP={
                     catalogActiveTab === catalogTabsMappping.ACTIVE
                         ? onAddSoftwareProductClick
-                        : false
+                        : undefined
                 }
                 onSelectVLM={(item, users) =>
                     onSelectLicenseModel(item, users, tabsMapping.WORKSPACE)
