diff --git a/openecomp-ui/resources/scss/modules/_softwareProductAttachmentPage.scss b/openecomp-ui/resources/scss/modules/_softwareProductAttachmentPage.scss
index 0ae3f00..ad98ec0 100644
--- a/openecomp-ui/resources/scss/modules/_softwareProductAttachmentPage.scss
+++ b/openecomp-ui/resources/scss/modules/_softwareProductAttachmentPage.scss
@@ -24,13 +24,12 @@
   .attachments-view-controllers {
     position: absolute;
     right: 40px;
-    top: 15px;
+    top: 10px;
     display: flex;
 
-
+    
     .icon-component {
-      margin-right: 30px;
-
+      margin-right: 30px;      
     }
 
     input[type="file"] {
@@ -39,6 +38,32 @@
       padding: 0;
       margin-left: -1px;
     }
+
+    .proceed-to-validation-btn {
+      width: 191px;
+      margin-right: 30px;
+      height: 36px;
+    }
+    .go-to-overview-btn {
+      width: 191px;
+      margin-right: 36px;
+      height: 36px;
+    }
+    .separator {
+      height: 27px;
+      border: 1px solid $light-gray;
+      margin-right: 31px;
+      margin-left: 0px; 
+      margin-top: 3px;
+    }
+    .abort-btn {      
+      fill: $blue;
+      color: $blue;
+      &:hover {
+        color: $light-blue;
+        fill: $light-blue;
+      }
+    }      
   }
 }
 
diff --git a/openecomp-ui/src/nfvo-components/panel/NavigationSideBar.jsx b/openecomp-ui/src/nfvo-components/panel/NavigationSideBar.jsx
index 02552fc..2eda7e6 100644
--- a/openecomp-ui/src/nfvo-components/panel/NavigationSideBar.jsx
+++ b/openecomp-ui/src/nfvo-components/panel/NavigationSideBar.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.
@@ -23,7 +23,8 @@
 		activeItemId: PropTypes.string.isRequired,
 		onSelect: PropTypes.func,
 		onToggle: PropTypes.func,
-		groups: PropTypes.array
+		groups: PropTypes.array,
+		disabled: PropTypes.bool
 	};
 
 	constructor(props) {
@@ -35,10 +36,10 @@
 	}
 
 	render() {
-		let {groups, activeItemId} = this.props;
+		let {groups, activeItemId, disabled = false} = this.props;
 
 		return (
-			<div className='navigation-side-content'>
+			<div className={`navigation-side-content ${disabled ? 'disabled' : ''}`}>
 				{groups.map(group => (
 					<NavigationMenu menu={group} activeItemId={activeItemId} onNavigationItemClick={this.handleItemClicked} key={'menu_' + group.id} />
 				))}
diff --git a/openecomp-ui/src/nfvo-components/panel/versionController/VersionController.jsx b/openecomp-ui/src/nfvo-components/panel/versionController/VersionController.jsx
index 5273785..fdc86d4 100644
--- a/openecomp-ui/src/nfvo-components/panel/versionController/VersionController.jsx
+++ b/openecomp-ui/src/nfvo-components/panel/versionController/VersionController.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.
@@ -43,10 +43,11 @@
 
 	render() {
 		let {version = {},  viewableVersions = [], onVersionSwitching, onMoreVersionsClick, callVCAction, onSave, isReadOnlyMode, itemPermission,
-				isFormDataValid, onClose, onManagePermissions, permissions = {},  userInfo, usersList, itemName, onOpenCommentCommitModal, onOpenRevisionsModal, isManual} = this.props;
+				isFormDataValid, onClose, onManagePermissions, permissions = {},  userInfo, usersList, itemName,
+				 onOpenCommentCommitModal, onOpenRevisionsModal, isManual, candidateInProcess} = this.props;
 		return (
 			<div className='version-controller-bar'>
-				<div className='vc-container'>
+				<div className={`vc-container ${candidateInProcess ? 'disabled' : ''}`}>
 					<div className='version-status-container'>
 						<VersionSelector
 							viewableVersions={viewableVersions}
@@ -58,7 +59,7 @@
 						<ActionButtons onSubmit={callVCAction ? () => this.submit(callVCAction, version) : undefined}
 							onRevert={callVCAction ? () => this.revert(callVCAction, version) : undefined}
 							onOpenRevisionsModal={onOpenRevisionsModal}
-							onSave={onSave ? () => onSave() : undefined}
+							onSave={onSave ? () => onSave() : undefined}							
 							permissions={permissions}
 							userInfo={userInfo}
 							onManagePermissions={onManagePermissions}
@@ -70,7 +71,7 @@
 							onCommit={callVCAction ? (comment) => this.commit(callVCAction, version, comment) : undefined}
 							isFormDataValid={isFormDataValid}
 							itemPermissions={itemPermission}
-							isReadOnlyMode={isReadOnlyMode}
+							isReadOnlyMode={isReadOnlyMode || candidateInProcess}
 							isManual={isManual} />
 						<div className='vc-separator'></div>
 						<NotificationsView />
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProduct.js b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProduct.js
index cdaf189..683dd4f 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProduct.js
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProduct.js
@@ -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.
@@ -90,7 +90,7 @@
 
 const buildNavigationBarProps = ({softwareProduct, meta, screen, componentId, componentsList, mapOfExpandedIds}) => {
 	const {softwareProductEditor: {data: currentSoftwareProduct = {}}} = softwareProduct;
-	const {id, name, onboardingMethod, candidateOnboardingOrigin} = currentSoftwareProduct;
+	const {id, name, onboardingMethod, candidateOnboardingOrigin, onboardingOrigin} = currentSoftwareProduct;
 	const groups = [{
 		id: id,
 		name: name,
@@ -126,7 +126,7 @@
 				id: enums.SCREEN.SOFTWARE_PRODUCT_ATTACHMENTS,
 				name: i18n('Attachments'),
 				disabled: false,
-				hidden: candidateOnboardingOrigin === onboardingOriginTypes.NONE,
+				hidden: !candidateOnboardingOrigin && !onboardingOrigin,
 				meta
 			}, {
 				id: enums.SCREEN.SOFTWARE_PRODUCT_ACTIVITY_LOG,
@@ -159,14 +159,14 @@
 	}];
 	let activeItemId = getActiveNavigationId(screen, componentId);
 	return {
-		activeItemId, groups
+		activeItemId, groups, disabled: !!candidateOnboardingOrigin
 	};
 };
 
 const buildVersionControllerProps = ({softwareProduct, versions, currentVersion, permissions, userInfo, usersList, itemPermission, isReadOnlyMode}) => {
 	const {softwareProductEditor = {data: {}}} = softwareProduct;
-	const {isValidityData = true, data: {name, onboardingMethod}} = softwareProductEditor;
-
+	const {isValidityData = true, data: {name, onboardingMethod, candidateOnboardingOrigin}} = softwareProductEditor;
+	
 	return {
 		version: currentVersion,
 		viewableVersions: versions,
@@ -177,7 +177,8 @@
 		isReadOnlyMode,
 		userInfo,
 		usersList,
-		isManual: onboardingMethod === onboardingMethodType.MANUAL
+		isManual: onboardingMethod === onboardingMethodType.MANUAL,
+		candidateInProcess: !!candidateOnboardingOrigin
 	};
 };
 
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper.js b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper.js
index ebd660f..9ed6005 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper.js
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper.js
@@ -1,17 +1,17 @@
-/*
- * Copyright © 2016-2017 European Support Limited
+/*!
+ * 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
+ * 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.
+ * 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 RestAPIUtil from 'nfvo-utils/RestAPIUtil.js';
 import showFileSaveDialog from 'nfvo-utils/ShowFileSaveDialog.js';
@@ -116,6 +116,10 @@
 	return RestAPIUtil.fetch(`${baseUrl()}${softwareProductId}/versions/${version.id}/orchestration-template-candidate`, {dataType: 'binary'});
 }
 
+function abortValidationProcess(softwareProductId, version) {
+	return RestAPIUtil.destroy(`${baseUrl()}${softwareProductId}/versions/${version.id}/orchestration-template-candidate`);
+}
+
 function objToString(obj) {
 	let str = '';
 	if (obj instanceof Array) {
@@ -242,6 +246,8 @@
 			if (response.status === 'Success') {
 				SoftwareProductComponentsActionHelper.fetchSoftwareProductComponents(dispatch, {softwareProductId, version});
 				SoftwareProductActionHelper.fetchSoftwareProduct(dispatch, {softwareProductId, version});
+			} else {
+				SoftwareProductActionHelper.fetchSoftwareProduct(dispatch, {softwareProductId, version});
 			}
 		});
 	},
@@ -267,6 +273,10 @@
 								screen: enums.SCREEN.SOFTWARE_PRODUCT_ATTACHMENTS_SETUP, screenType: screenTypes.SOFTWARE_PRODUCT,
 								props: {softwareProductId, version}
 							});
+							dispatch({
+								type: actionTypes.CANDIDATE_IN_PROCESS,
+								inProcess: true
+							});
 							break;
 						case onboardingOriginTypes.CSAR:
 							ScreensHelper.loadScreen(dispatch, {
@@ -540,6 +550,10 @@
 			screen: enums.SCREEN.SOFTWARE_PRODUCT_LANDING_PAGE, screenType: screenTypes.SOFTWARE_PRODUCT,
 			props: {softwareProductId, version: {id: newVer, label: newVer}}
 		}));
+	},
+
+	abortCandidateValidation(dispatch, {softwareProductId, version}) {		
+		return abortValidationProcess(softwareProductId, version);
 	}
 
 };
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductConstants.js b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductConstants.js
index 7df4658..c824837 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductConstants.js
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProductConstants.js
@@ -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.
@@ -24,6 +24,7 @@
 	SOFTWARE_PRODUCT_QUESTIONNAIRE_UPDATE: null,
 	LOAD_LICENSING_VERSIONS_LIST: null,
 	TOGGLE_NAVIGATION_ITEM: null,
+	CANDIDATE_IN_PROCESS: null,
 
 	softwareProductEditor: {
 		OPEN: null,
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachments.js b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachments.js
index 234953e..d942172 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachments.js
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachments.js
@@ -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.
@@ -55,7 +55,8 @@
 		HeatSetupComponent: HeatSetup,
 		version,
 		onboardingOrigin,
-		activeTab
+		activeTab,
+		candidateInProcess: !!currentSoftwareProduct.candidateOnboardingOrigin
 	};
 };
 
@@ -67,6 +68,8 @@
 			data:{
 				msg: i18n('Upload will erase existing data. Do you want to continue?'),
 				confirmationButtonText: i18n('Continue'),
+				title: i18n('WARNING'),
+
 				onConfirmed: ()=>SoftwareProductActionHelper.uploadFile(dispatch, {
 					softwareProductId,
 					formData,
@@ -75,6 +78,15 @@
 				})
 			}
 		}),
+		onUploadAbort: () => {
+			SoftwareProductActionHelper.abortCandidateValidation(dispatch, {softwareProductId, version})
+				.then(()=>{
+					ScreensHelper.loadScreen(dispatch, {
+						screen: enums.SCREEN.SOFTWARE_PRODUCT_LANDING_PAGE, screenType: screenTypes.SOFTWARE_PRODUCT,
+						props: {softwareProductId, version}
+					});
+				});
+		},
 		onInvalidFileUpload: () => dispatch({
 			type: modalActionTypes.GLOBAL_MODAL_ERROR,
 			data: {
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachmentsView.jsx b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachmentsView.jsx
index a230157..90dd769 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachmentsView.jsx
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachmentsView.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.
@@ -21,6 +21,7 @@
 import i18n from 'nfvo-utils/i18n/i18n.js';
 import HeatValidation from './validation/HeatValidation.js';
 import {onboardingOriginTypes} from 'sdc-app/onboarding/softwareProduct/SoftwareProductConstants.js';
+import Button from 'sdc-ui/lib/react/Button.js';
 
 class HeatScreenView extends Component {
 
@@ -30,40 +31,56 @@
 		setActiveTab: PropTypes.func
 	};
 
+	componentDidMount() {		
+		 if (!this.props.goToOverview && this.props.candidateInProcess) {			
+			this.props.setActiveTab({activeTab: tabsMapping.VALIDATION});
+		 }
+	}
+
 	render() {
-		let {isValidationAvailable, isReadOnlyMode, heatDataExist, onDownload, softwareProductId, onProcessAndValidate,
-			heatSetup, HeatSetupComponent, onGoToOverview, version, onboardingOrigin, activeTab, setActiveTab, ...other} = this.props;
+		let {isValidationAvailable, isReadOnlyMode, heatDataExist, onDownload, softwareProductId, onProcessAndValidate, onUploadAbort,
+			candidateInProcess, heatSetup, HeatSetupComponent, onGoToOverview, version, onboardingOrigin, activeTab, setActiveTab, ...other} = this.props;
 
 		return (
 			<div className='vsp-attachments-view'>
 				<div className='attachments-view-controllers'>
-					{(activeTab === tabsMapping.SETUP) &&
-						<SVGIcon
-							disabled={heatDataExist ? false : true}
-							name='download'
-							className='icon-component'
-							label={i18n('Export Validation')}
-							labelPosition='right'
-							color='secondary'
-							onClick={heatDataExist ? () => onDownload({heatCandidate: heatSetup, isReadOnlyMode, version}) : undefined}
-							data-test-id='download-heat'/>}
-					{(activeTab === tabsMapping.VALIDATION && softwareProductId) &&
-						<SVGIcon
-							disabled={this.props.goToOverview !== true}
-							onClick={this.props.goToOverview ? () => onGoToOverview({version}) : undefined}
-							name='proceedToOverview'
-							className='icon-component'
-							label={i18n('Go to Overview')}
-							labelPosition='right'
-							color={this.props.goToOverview ? 'primary' : 'secondary'}
-							data-test-id='go-to-overview'/>}
-					<SVGIcon
-						name='upload'
-						className='icon-component'
-						label={i18n('Upload New File')}
+					{(activeTab === tabsMapping.SETUP) &&	
+						<Button btnType='outline' 
+							data-test-id='proceed-to-validation-btn'
+							disabled={!isValidationAvailable} 
+							className='proceed-to-validation-btn'
+							onClick={()=>this.handleTabPress(tabsMapping.VALIDATION)}>{i18n('PROCEED TO VALIDATION')}</Button>					
+					}		
+					{candidateInProcess && <SVGIcon							
+						onClick={onUploadAbort}
+						name='close'
+						className='icon-component abort-btn'
+						label={i18n('ABORT')}
 						labelPosition='right'
 						color='secondary'
-						disabled={isReadOnlyMode}
+						data-test-id='abort-btn'/>
+					}	
+					
+					{(activeTab === tabsMapping.VALIDATION && softwareProductId) &&
+						<Button btnType='outline' 
+							data-test-id='go-to-overview'
+							disabled={this.props.goToOverview !== true}
+							className='go-to-overview-btn'
+							onClick={this.props.goToOverview ? () => onGoToOverview({version}) : undefined}>{i18n('GO TO OVERVIEW')}</Button>}						
+					<div className='separator'></div>		
+					<SVGIcon
+						disabled={heatDataExist ? false : true}
+						name='download'
+						className='icon-component'														
+						color='dark-gray'
+						onClick={heatDataExist ? () => onDownload({heatCandidate: heatSetup, isReadOnlyMode, version}) : undefined}
+						data-test-id='download-heat'/>
+
+					<SVGIcon
+						name='upload'
+						className='icon-component'						
+						color='dark-gray'
+						disabled={isReadOnlyMode || candidateInProcess}
 						onClick={isReadOnlyMode ? undefined : evt => this.refs.hiddenImportFileInput.click(evt)}
 						data-test-id='upload-heat'/>
 					<input
@@ -73,11 +90,11 @@
 						accept='.zip, .csar'
 						onChange={evt => this.handleImport(evt)}/>
 				</div>
-			<Tabs
-				className='attachments-tabs'
-				type='header'
-				activeTab={activeTab}
-				onTabClick={key => this.handleTabPress(key)}>
+				<Tabs
+					className='attachments-tabs'
+					type='header'
+					activeTab={activeTab}
+					onTabClick={key => this.handleTabPress(key)}>
 					<Tab tabId={tabsMapping.SETUP} title='Setup' disabled={onboardingOrigin === onboardingOriginTypes.CSAR}>
 						<HeatSetupComponent
 							heatDataExist={heatDataExist}
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/details/SoftwareProductDetailsReducer.js b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/details/SoftwareProductDetailsReducer.js
index 54dc1a4..1a29326 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/details/SoftwareProductDetailsReducer.js
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/details/SoftwareProductDetailsReducer.js
@@ -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.
@@ -50,6 +50,11 @@
 				...state,
 				licensingVersionsList: action.licensingVersionsList
 			};
+		case actionTypes.CANDIDATE_IN_PROCESS: 
+			return {
+				...state,
+				data: {...state.data, candidateOnboardingOrigin: true}				
+			};	
 		default:
 			return state;
 	}
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPage.js b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPage.js
index 90ea182..64e0d56 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPage.js
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPage.js
@@ -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.
@@ -27,7 +27,7 @@
 	softwareProduct,
 	licenseModel: {licenseAgreement},
 }) => {
-	let {softwareProductEditor: {data:currentSoftwareProduct = {}}, softwareProductComponents, softwareProductCategories = []} = softwareProduct;
+	let {softwareProductEditor: {data:currentSoftwareProduct = {}}, softwareProductComponents, softwareProductCategories = [], } = softwareProduct;
 	let {licensingData = {}} = currentSoftwareProduct;
 	let {licenseAgreementList} = licenseAgreement;
 	let {componentsList} = softwareProductComponents;
@@ -53,8 +53,8 @@
 		currentSoftwareProduct: {
 			...currentSoftwareProduct,
 			licenseAgreementName,
-			fullCategoryDisplayName
-		},
+			fullCategoryDisplayName						
+		},		
 		componentsList,
 		isManual: currentSoftwareProduct.onboardingMethod === onboardingMethod.MANUAL
 	};
@@ -67,7 +67,10 @@
 				screen: enums.SCREEN.SOFTWARE_PRODUCT_DETAILS, screenType: screenTypes.SOFTWARE_PRODUCT,
 				props: {softwareProductId, version}
 			}),
-
+		onCandidateInProcess: (softwareProductId) => ScreensHelper.loadScreen(dispatch, {
+			screen: enums.SCREEN.SOFTWARE_PRODUCT_ATTACHMENTS_SETUP, screenType: screenTypes.SOFTWARE_PRODUCT,
+			props: {softwareProductId, version}
+		}),	
 		onUpload: (softwareProductId, formData) =>
 			SoftwareProductActionHelper.uploadFile(dispatch, {
 				softwareProductId,
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPageView.jsx b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPageView.jsx
index 76228b0..70c04f0 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPageView.jsx
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPageView.jsx
@@ -1,17 +1,17 @@
-/*
- * Copyright © 2016-2017 European Support Limited
+/*!
+ * 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
- * 
+ *
+ * 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.
+ * 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';
@@ -65,7 +65,12 @@
 		onComponentSelect: PropTypes.func,
 		onAddComponent: PropTypes.func
 	};
-
+	componentDidMount() {
+		const {onCandidateInProcess, currentSoftwareProduct} = this.props;		
+		if (currentSoftwareProduct.candidateOnboardingOrigin) {
+			onCandidateInProcess(currentSoftwareProduct.id);
+		}
+	}
 	render() {
 		let {currentSoftwareProduct, isReadOnlyMode, isManual, onDetailsSelect} =  this.props;
 		return (
diff --git a/openecomp-ui/test/softwareProduct/attachments/validationFlow.test.js b/openecomp-ui/test/softwareProduct/attachments/validationFlow.test.js
new file mode 100644
index 0000000..b095aed
--- /dev/null
+++ b/openecomp-ui/test/softwareProduct/attachments/validationFlow.test.js
@@ -0,0 +1,40 @@
+/*!
+ * 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 {VSPEditorFactoryWithLicensingData} from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
+import {storeCreator} from 'sdc-app/AppStore.js';
+import {actionTypes} from 'sdc-app/onboarding/softwareProduct/SoftwareProductConstants.js';
+
+describe('SoftwareProduct Attachments - validation flow test: ', function () {
+
+	it('candidate in process flag test', () => {
+		const softwareProduct = VSPEditorFactoryWithLicensingData.build();
+		const store = storeCreator({			
+			softwareProduct: {
+				softwareProductEditor: {data: softwareProduct},
+				softwareProductQuestionnaire: {qdata: 'test', qschema: {type: 'string'}}
+			}
+		});		
+		store.dispatch({
+			type: actionTypes.CANDIDATE_IN_PROCESS,
+			inProcess: true
+		}); 
+		let unsubscribe = store.subscribe(() => {
+			expect(store.getState().softwareProduct.softwareProductEditor.data.onboardingOrigin).toEqual(true);			
+		});							
+		unsubscribe();
+	});
+
+});
\ No newline at end of file
