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 (
