<div class="failed-msg" [attr.data-tests-id]="'failed-error-message'" *ngIf="node?.data?.isFailed">Failed
           </div>
         </custom-popover>
+        <div *ngIf= "node?.data?.type == 'VFmodule'" class="instance-type" style="position: relative;border: 1px solid #D2D2CD;">
+          <div *ngIf="node?.data?.action == 'Create' && node?.data?.type == 'VFmodule'" class="notShowOnViewMode notShowOnCreateMode newIcon"></div>
+          <div><span title="{{node.data.position}}"
+                     [attr.data-tests-id]="'node-position-indicator'">{{node?.data?.position}}</span></div>
+          <div *ngIf="isLinkedInstance(node?.data)">
+            <custom-icon
+              [ngClass]="'link'"
+              class="icon-link"
+              [size]="'small'"
+              [name]="'link'">
+            </custom-icon>
+          </div>
+        </div>
         <div class="instance-type" style="position: relative;border: 1px solid #D2D2CD;">
           <div *ngIf="node?.data?.action == 'Create'" class="notShowOnViewMode notShowOnCreateMode newIcon"></div>
           <div><span title="{{node.data.type}}"
           <span>Limit</span><span>{{node?.data?.limitMembers}}</span>
         </div>
         <div class="model-actions notShowOnViewMode" *ngIf="isPaused(node)" style="border-right: none;">
-              <custom-icon
-                [size]="'large'"
-                [name]="'pause-upon-completion'"
-                [testId]="'pause-upon-completion'">
-              </custom-icon>
+          <custom-icon
+            [size]="'large'"
+            [name]="'pause-upon-completion'"
+            [testId]="'pause-upon-completion'">
+          </custom-icon>
         </div>
         <div class="model-actions notShowOnViewMode">
           <span class="icon-browse"
 
     newVfModule.isFailed = _.isNil(instance.isFailed) ? false : instance.isFailed;
     newVfModule.statusMessage = !_.isNil(instance.statusMessage) ? instance.statusMessage : "";
     newVfModule.pauseInstantiation = instance.pauseInstantiation;
-
+    newVfModule.position = instance.position;
     newVfModule = this._sharedTreeService.addingStatusProperty(newVfModule);
     return newVfModule;
   }
   }
 
   updatePosition(that, node, instanceId, parentStoreKey): void {
-    that.store.dispatch(updateVFModulePosition(node, instanceId, parentStoreKey));
+    this._store.dispatch(updateVFModulePosition(node, instanceId, parentStoreKey));
   }
 
 
 
   menuActions: { [p: string]: { method: Function; visible: Function; enable: Function } };
   isFailed: boolean;
   statusMessage?: string;
+  position: number;
 
   constructor(vfModuleInstance: VfModuleInstance, vfModuleModel: VfModule, vfModuleModelName: string, dynamicInputs: any, isEcompGeneratedNaming: boolean, dynamicModelName : string){
     super(vfModuleInstance,vfModuleModel);
 
       ],
       'trackById': DefaultDataGeneratorService.createRandomTrackById(),
       'rollbackOnFailure' : isALaCarte ? true : null,
+      'position': vfModule.position
+
     };
   }
 
 
   newState.serviceInstance[serviceUuid].upgradedVFMSonsCounter = 0;
   newState.serviceInstance[serviceUuid].isUpgraded = false;
 }
+
+export function calculatePosition(newState :any,serviceUuid: string, vnfStoreKey :string) {
+
+  let totalNumOfVfModules =(Object.keys(newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey].vfModules).length);
+  totalNumOfVfModules = 0;
+  _.forOwn(newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey].vfModules, (vfModuleInstance) => {
+    _.forOwn(vfModuleInstance, (module) => {
+      module.position = totalNumOfVfModules +1;
+      totalNumOfVfModules= totalNumOfVfModules+1;
+    })
+  });
+
+
+}
 
 import {ServiceState} from "../main.reducer";
 import {PauseStatus, ServiceInstanceActions} from "../../../models/serviceInstanceActions";
 import {updateServiceValidationCounter} from "../reducersHelper";
+import {calculatePosition} from "../reducersHelper";
 
 
 export function vfModuleReducer(state: ServiceState , action: Action) : ServiceState{
       let vfModulesMap = newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey].vfModules[vfModuleId] || new VfModuleMap();
       let randomId = generateId();
       vfInstance.action = ServiceInstanceActions.Create;
-      vfModulesMap[vfModuleId + randomId] = vfInstance;
+      let dynamicName = vfModuleId + randomId;
+      vfModulesMap[dynamicName] = vfInstance;
       updateUniqueNames(null, vfInstance.instanceName, newState.serviceInstance[serviceUuid]);
       updateUniqueNames(null, vfInstance.volumeGroupName, newState.serviceInstance[serviceUuid]);
       updateServiceValidationCounter(newState, false, vfInstance['isMissingData'], serviceUuid);
 
       newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey].vfModules[vfModuleId] = vfModulesMap;
+      //update position of newly added VF module
+      calculatePosition(newState,serviceUuid, vnfStoreKey);
       return newState;
     }
     case VfModuleActions.UPDATE_VF_MODULE: {
       updateUniqueNames(vfModulesMap[updateVFModuleInstanceAction.dynamicModelName].volumeGroupName, vfInstance.volumeGroupName, newState.serviceInstance[serviceUuid]);
       vfModulesMap[updateVFModuleInstanceAction.dynamicModelName] = vfInstance;
       newState.serviceInstance[serviceUuid].vnfs[vnfId].vfModules[vfModuleId] = vfModulesMap;
+      //retain the position of newly added VF module -- change logic
+      calculatePosition(newState,serviceUuid, vnfStoreKey);
       return newState;
     }
     case VfModuleActions.REMOVE_VNF_MODULE_INSTANCE: {