diff --git a/openecomp-ui/src/sdc-app/onboarding/OnboardingView.jsx b/openecomp-ui/src/sdc-app/onboarding/OnboardingView.jsx
index 7877085..69e514b 100644
--- a/openecomp-ui/src/sdc-app/onboarding/OnboardingView.jsx
+++ b/openecomp-ui/src/sdc-app/onboarding/OnboardingView.jsx
@@ -25,8 +25,8 @@
 import LicenseKeyGroupsListEditor from './licenseModel/licenseKeyGroups/LicenseKeyGroupsListEditor.js';
 import EntitlementPoolsListEditor from './licenseModel/entitlementPools/EntitlementPoolsListEditor.js';
 import SoftwareProduct from './softwareProduct/SoftwareProduct.js';
-import SoftwareProductLandingPage  from './softwareProduct/landingPage/SoftwareProductLandingPage.js';
-import SoftwareProductDetails  from './softwareProduct/details/SoftwareProductDetails.js';
+import SoftwareProductLandingPage from './softwareProduct/landingPage/SoftwareProductLandingPage.js';
+import SoftwareProductDetails from './softwareProduct/details/SoftwareProductDetails.js';
 import SoftwareProductAttachments from './softwareProduct/attachments/SoftwareProductAttachments.js';
 import SoftwareProductProcesses from './softwareProduct/processes/SoftwareProductProcesses.js';
 import SoftwareProductDeployment from './softwareProduct/deployment/SoftwareProductDeployment.js';
@@ -48,136 +48,243 @@
 import React from 'react';
 
 import ReactDOM from 'react-dom';
-import {enums} from './OnboardingConstants.js';
+import { enums } from './OnboardingConstants.js';
 
 export default class OnboardingView extends React.Component {
-	static propTypes = {
-		currentScreen: PropTypes.shape({
-			screen: PropTypes.oneOf(objectValues(enums.SCREEN)).isRequired,
-			props: PropTypes.object.isRequired,
-			itemPermission: PropTypes.object
-		}).isRequired
-	};
+    static propTypes = {
+        currentScreen: PropTypes.shape({
+            screen: PropTypes.oneOf(objectValues(enums.SCREEN)).isRequired,
+            props: PropTypes.object.isRequired,
+            itemPermission: PropTypes.object
+        }).isRequired
+    };
 
-	componentDidMount() {
-		let element = ReactDOM.findDOMNode(this);
-		element.addEventListener('click', event => {
-			if (event.target.tagName === 'A') {
-				event.preventDefault();
-			}
-		});
-		['wheel', 'mousewheel', 'DOMMouseScroll'].forEach(eventType =>
-			element.addEventListener(eventType, event => event.stopPropagation())
-		);
-	}
+    componentDidMount() {
+        let element = ReactDOM.findDOMNode(this);
+        element.addEventListener('click', event => {
+            if (event.target.tagName === 'A') {
+                event.preventDefault();
+            }
+        });
+        ['wheel', 'mousewheel', 'DOMMouseScroll'].forEach(eventType =>
+            element.addEventListener(eventType, event =>
+                event.stopPropagation()
+            )
+        );
+    }
 
-	render() {
-		let {currentScreen} = this.props;
-		let {screen, props} = currentScreen;
+    render() {
+        let { currentScreen } = this.props;
+        let { screen, props } = currentScreen;
 
-		return (
-			<div className='dox-ui dox-ui-punch-out dox-ui-punch-out-full-page'>
-				{(() => {
-					switch (screen) {
-						case enums.SCREEN.ONBOARDING_CATALOG:
-							return <Onboard {...props}/>;
-						case enums.SCREEN.VERSIONS_PAGE:
-							return <VersionsPage {...props} />;
+        return (
+            <div className="dox-ui dox-ui-punch-out dox-ui-punch-out-full-page">
+                {(() => {
+                    switch (screen) {
+                        case enums.SCREEN.ONBOARDING_CATALOG:
+                            return <Onboard {...props} />;
+                        case enums.SCREEN.VERSIONS_PAGE:
+                            return <VersionsPage {...props} />;
 
-						case enums.SCREEN.LICENSE_AGREEMENTS:
-						case enums.SCREEN.FEATURE_GROUPS:
-						case enums.SCREEN.ENTITLEMENT_POOLS:
-						case enums.SCREEN.LICENSE_KEY_GROUPS:
-						case enums.SCREEN.LICENSE_MODEL_OVERVIEW:
-						case enums.SCREEN.ACTIVITY_LOG:
-							return (
-								<LicenseModel currentScreen={currentScreen}>
-									{
-										(()=>{
-											switch(screen) {
-												case enums.SCREEN.LICENSE_MODEL_OVERVIEW:
-													return <LicenseModelOverview {...props}/>;
-												case enums.SCREEN.LICENSE_AGREEMENTS:
-													return <LicenseAgreementListEditor {...props}/>;
-												case enums.SCREEN.FEATURE_GROUPS:
-													return <FeatureGroupListEditor {...props}/>;
-												case enums.SCREEN.ENTITLEMENT_POOLS:
-													return <EntitlementPoolsListEditor {...props}/>;
-												case enums.SCREEN.LICENSE_KEY_GROUPS:
-													return <LicenseKeyGroupsListEditor {...props}/>;
-												case enums.SCREEN.ACTIVITY_LOG:
-													return <ActivityLog {...props}/>;
-											}
-										})()
-									}
-								</LicenseModel>
-							);
+                        case enums.SCREEN.LICENSE_AGREEMENTS:
+                        case enums.SCREEN.FEATURE_GROUPS:
+                        case enums.SCREEN.ENTITLEMENT_POOLS:
+                        case enums.SCREEN.LICENSE_KEY_GROUPS:
+                        case enums.SCREEN.LICENSE_MODEL_OVERVIEW:
+                        case enums.SCREEN.ACTIVITY_LOG:
+                            return (
+                                <LicenseModel currentScreen={currentScreen}>
+                                    {(() => {
+                                        switch (screen) {
+                                            case enums.SCREEN
+                                                .LICENSE_MODEL_OVERVIEW:
+                                                return (
+                                                    <LicenseModelOverview
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .LICENSE_AGREEMENTS:
+                                                return (
+                                                    <LicenseAgreementListEditor
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN.FEATURE_GROUPS:
+                                                return (
+                                                    <FeatureGroupListEditor
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN.ENTITLEMENT_POOLS:
+                                                return (
+                                                    <EntitlementPoolsListEditor
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .LICENSE_KEY_GROUPS:
+                                                return (
+                                                    <LicenseKeyGroupsListEditor
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN.ACTIVITY_LOG:
+                                                return (
+                                                    <ActivityLog {...props} />
+                                                );
+                                        }
+                                    })()}
+                                </LicenseModel>
+                            );
 
-						case enums.SCREEN.SOFTWARE_PRODUCT_LANDING_PAGE:
-						case enums.SCREEN.SOFTWARE_PRODUCT_DETAILS:
-						case enums.SCREEN.SOFTWARE_PRODUCT_ATTACHMENTS:
-						case enums.SCREEN.SOFTWARE_PRODUCT_PROCESSES:
-						case enums.SCREEN.SOFTWARE_PRODUCT_DEPLOYMENT:
-						case enums.SCREEN.SOFTWARE_PRODUCT_NETWORKS:
-						case enums.SCREEN.SOFTWARE_PRODUCT_DEPENDENCIES:
-						case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENTS:
-						case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_PROCESSES:
-						case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_STORAGE:
-						case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_NETWORK:
-						case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_GENERAL:
-						case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_COMPUTE:
-						case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_LOAD_BALANCING:
-						case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_IMAGES:
-						case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_MONITORING:
-						case enums.SCREEN.SOFTWARE_PRODUCT_ACTIVITY_LOG:
-							return (
-								<SoftwareProduct currentScreen={currentScreen}>
-									{
-										(()=>{
-											switch(screen) {
-												case enums.SCREEN.SOFTWARE_PRODUCT_LANDING_PAGE:
-													return <SoftwareProductLandingPage {...props}/>;
-												case enums.SCREEN.SOFTWARE_PRODUCT_DETAILS:
-													return <SoftwareProductDetails {...props}/>;
-												case enums.SCREEN.SOFTWARE_PRODUCT_ATTACHMENTS:
-													return <SoftwareProductAttachments className='no-padding-content-area' {...props} />;
-												case enums.SCREEN.SOFTWARE_PRODUCT_PROCESSES:
-													return <SoftwareProductProcesses {...props}/>;
-												case enums.SCREEN.SOFTWARE_PRODUCT_DEPLOYMENT:
-													return <SoftwareProductDeployment {...props}/>;
-												case enums.SCREEN.SOFTWARE_PRODUCT_NETWORKS:
-													return <SoftwareProductNetworks {...props}/>;
-												case enums.SCREEN.SOFTWARE_PRODUCT_DEPENDENCIES:
-													return <SoftwareProductDependencies {...props} />;
-												case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENTS:
-													return <SoftwareProductComponentsList  {...props}/>;
-												case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_PROCESSES:
-													return <SoftwareProductComponentProcessesList  {...props}/>;
-												case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_STORAGE:
-													return <SoftwareProductComponentStorage {...props}/>;
-												case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_NETWORK:
-													return <SoftwareProductComponentsNetworkList {...props}/>;
-												case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_GENERAL:
-													return <SoftwareProductComponentsGeneral{...props}/>;
-												case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_COMPUTE:
-													return <SoftwareProductComponentsCompute {...props}/>;
-												case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_LOAD_BALANCING:
-													return <SoftwareProductComponentLoadBalancing{...props}/>;
-												case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_IMAGES:
-													return <SoftwareProductComponentsImageList{...props}/>;
-												case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_MONITORING:
-													return <SoftwareProductComponentsMonitoring {...props}/>;
-												case enums.SCREEN.SOFTWARE_PRODUCT_ACTIVITY_LOG:
-													return <ActivityLog {...props}/>;
-											}
-										})()
-									}
-								</SoftwareProduct>
-							);
-					}
-				})()}
-			</div>
-		);
-	}
+                        case enums.SCREEN.SOFTWARE_PRODUCT_LANDING_PAGE:
+                        case enums.SCREEN.SOFTWARE_PRODUCT_DETAILS:
+                        case enums.SCREEN.SOFTWARE_PRODUCT_ATTACHMENTS:
+                        case enums.SCREEN.SOFTWARE_PRODUCT_PROCESSES:
+                        case enums.SCREEN.SOFTWARE_PRODUCT_DEPLOYMENT:
+                        case enums.SCREEN.SOFTWARE_PRODUCT_NETWORKS:
+                        case enums.SCREEN.SOFTWARE_PRODUCT_DEPENDENCIES:
+                        case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENTS:
+                        case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_PROCESSES:
+                        case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_STORAGE:
+                        case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_NETWORK:
+                        case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_GENERAL:
+                        case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_COMPUTE:
+                        case enums.SCREEN
+                            .SOFTWARE_PRODUCT_COMPONENT_LOAD_BALANCING:
+                        case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_IMAGES:
+                        case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_MONITORING:
+                        case enums.SCREEN.SOFTWARE_PRODUCT_ACTIVITY_LOG:
+                            return (
+                                <SoftwareProduct currentScreen={currentScreen}>
+                                    {(() => {
+                                        switch (screen) {
+                                            case enums.SCREEN
+                                                .SOFTWARE_PRODUCT_LANDING_PAGE:
+                                                return (
+                                                    <SoftwareProductLandingPage
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .SOFTWARE_PRODUCT_DETAILS:
+                                                return (
+                                                    <SoftwareProductDetails
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .SOFTWARE_PRODUCT_ATTACHMENTS:
+                                                return (
+                                                    <SoftwareProductAttachments
+                                                        className="no-padding-content-area"
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .SOFTWARE_PRODUCT_PROCESSES:
+                                                return (
+                                                    <SoftwareProductProcesses
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .SOFTWARE_PRODUCT_DEPLOYMENT:
+                                                return (
+                                                    <SoftwareProductDeployment
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .SOFTWARE_PRODUCT_NETWORKS:
+                                                return (
+                                                    <SoftwareProductNetworks
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .SOFTWARE_PRODUCT_DEPENDENCIES:
+                                                return (
+                                                    <SoftwareProductDependencies
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .SOFTWARE_PRODUCT_COMPONENTS:
+                                                return (
+                                                    <SoftwareProductComponentsList
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .SOFTWARE_PRODUCT_COMPONENT_PROCESSES:
+                                                return (
+                                                    <SoftwareProductComponentProcessesList
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .SOFTWARE_PRODUCT_COMPONENT_STORAGE:
+                                                return (
+                                                    <SoftwareProductComponentStorage
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .SOFTWARE_PRODUCT_COMPONENT_NETWORK:
+                                                return (
+                                                    <SoftwareProductComponentsNetworkList
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .SOFTWARE_PRODUCT_COMPONENT_GENERAL:
+                                                return (
+                                                    <SoftwareProductComponentsGeneral
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .SOFTWARE_PRODUCT_COMPONENT_COMPUTE:
+                                                return (
+                                                    <SoftwareProductComponentsCompute
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .SOFTWARE_PRODUCT_COMPONENT_LOAD_BALANCING:
+                                                return (
+                                                    <SoftwareProductComponentLoadBalancing
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .SOFTWARE_PRODUCT_COMPONENT_IMAGES:
+                                                return (
+                                                    <SoftwareProductComponentsImageList
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .SOFTWARE_PRODUCT_COMPONENT_MONITORING:
+                                                return (
+                                                    <SoftwareProductComponentsMonitoring
+                                                        {...props}
+                                                    />
+                                                );
+                                            case enums.SCREEN
+                                                .SOFTWARE_PRODUCT_ACTIVITY_LOG:
+                                                return (
+                                                    <ActivityLog {...props} />
+                                                );
+                                        }
+                                    })()}
+                                </SoftwareProduct>
+                            );
+                    }
+                })()}
+            </div>
+        );
+    }
 }
-
