diff --git a/src/app/utilities/ns-update/NsUpdateComponent.ts b/src/app/utilities/ns-update/NsUpdateComponent.ts
index b33bfc4..7efba70 100644
--- a/src/app/utilities/ns-update/NsUpdateComponent.ts
+++ b/src/app/utilities/ns-update/NsUpdateComponent.ts
@@ -31,7 +31,7 @@
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
 import { VNFD } from 'VNFDModel';
-import { VNFInstanceDetails } from 'VNFInstanceModel';
+import { InstanceData, VNFInstanceDetails } from 'VNFInstanceModel';
 import { WarningComponent } from 'WarningComponent';
 
 /**
@@ -146,30 +146,35 @@
 
     /** Getting MemberVnfIndex using NSDescriptor API @public */
     public getMemberVnfIndex(): void {
+        this.isLoadingResults = true;
         const vnfInstanceData: {}[] = [];
         this.restService.getResource(environment.VNFINSTANCES_URL).subscribe((vnfInstancesData: VNFInstanceDetails[]): void => {
             vnfInstancesData.forEach((vnfData: VNFInstanceDetails): void => {
+                const vnfdRef: string = 'vnfd-ref';
+                const memberIndex: string = 'member-vnf-index-ref';
+                const nsrId: string = 'nsr-id-ref';
+                const vnfId: string = 'vnfd-id';
                 const vnfDataObj: {} =
                 {
-                    VNFD: vnfData['vnfd-ref'],
+                    // eslint-disable-next-line security/detect-object-injection
+                    VNFD: vnfData[vnfdRef],
                     VNFInstanceId: vnfData._id,
-                    MemberIndex: vnfData['member-vnf-index-ref'],
-                    NS: vnfData['nsr-id-ref'],
-                    VNFID: vnfData['vnfd-id']
+                    // eslint-disable-next-line security/detect-object-injection
+                    MemberIndex: vnfData[memberIndex],
+                    // eslint-disable-next-line security/detect-object-injection
+                    NS: vnfData[nsrId],
+                    // eslint-disable-next-line security/detect-object-injection
+                    VNFID: vnfData[vnfId]
                 };
                 vnfInstanceData.push(vnfDataObj);
             });
             const nsId: string = 'NS';
             // eslint-disable-next-line security/detect-object-injection
             this.nsIdFilteredData = vnfInstanceData.filter((vnfdData: {}[]): boolean => vnfdData[nsId] === this.params.id);
-            this.nsIdFilteredData.forEach((resVNF: {}[]): void => {
-                const memberIndex: string = 'MemberIndex';
-                const vnfinstanceID: string = 'VNFInstanceId';
+            this.nsIdFilteredData.forEach((resVNF: InstanceData): void => {
                 const assignMemberIndex: {} = {
-                    // eslint-disable-next-line security/detect-object-injection
-                    id: resVNF[memberIndex],
-                    // eslint-disable-next-line security/detect-object-injection
-                    vnfinstanceId: resVNF[vnfinstanceID]
+                    id: resVNF.MemberIndex,
+                    vnfinstanceId: resVNF.VNFInstanceId
                 };
                 this.memberVnfIndex.push(assignMemberIndex);
             });
@@ -190,7 +195,7 @@
         let memberIndexFilteredData: {}[] = [];
         const memberIndex: string = 'MemberIndex';
         memberIndexFilteredData = this.nsIdFilteredData.filter((vnfdData: {}[]): boolean =>
-        // eslint-disable-next-line security/detect-object-injection
+            // eslint-disable-next-line security/detect-object-injection
             vnfdData[memberIndex] === this.memberIndexValue);
         const vnfId: string = 'VNFID';
         const selectedvnfId: string = 'VNFD';
@@ -297,7 +302,7 @@
                             this.onSubmit();
                         }
                     }).catch((): void => { //empty
-                     }
+                    }
                     );
                 } else {
                     // eslint-disable-next-line security/detect-non-literal-fs-filename
@@ -310,7 +315,7 @@
                             this.onSubmit();
                         }
                     }).catch((): void => { //empty
-                     });
+                    });
                 }
             }, (error: ERRORDATA): void => {
                 this.restService.handleError(error, 'get');
diff --git a/src/app/utilities/scaling/ScalingComponent.html b/src/app/utilities/scaling/ScalingComponent.html
index 4bcb084..803a320 100644
--- a/src/app/utilities/scaling/ScalingComponent.html
+++ b/src/app/utilities/scaling/ScalingComponent.html
@@ -30,8 +30,8 @@
             </label>
             <div class="col-sm-12">
                 <ng-select formControlName="memberIndex" [clearable]="false"
-                    (change)="getScalingGroupDescriptorName($event.name)" placeholder="Select Member VNF Index *"
-                    [items]="memberVNFIndex" bindLabel="id" bindValue="id"
+                    (change)="getScalingGroupDescriptorName($event.vnfdRef)" placeholder="Select Member VNF Index *"
+                    [items]="memberTypes" bindLabel="id" bindValue="id"
                     [ngClass]="{ 'is-invalid': submitted && f.memberIndex.errors }">
                 </ng-select>
                 <small class="form-text text-muted" *ngIf="selectedVNFID !== ''">vnfd-id : {{ selectedVNFID }}</small>
diff --git a/src/app/utilities/scaling/ScalingComponent.ts b/src/app/utilities/scaling/ScalingComponent.ts
index ff5ec06..be15660 100644
--- a/src/app/utilities/scaling/ScalingComponent.ts
+++ b/src/app/utilities/scaling/ScalingComponent.ts
@@ -27,11 +27,10 @@
 import { TranslateService } from '@ngx-translate/core';
 import { APIURLHEADER, ERRORDATA, MODALCLOSERESPONSEDATA, URLPARAMS } from 'CommonModel';
 import { environment } from 'environment';
-import { DF as NSDF, VNFPROFILE } from 'NSDModel';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
 import { DF, SCALING, VNFD } from 'VNFDModel';
-
+import { InstanceData, VNFInstanceDetails } from 'VNFInstanceModel';
 /**
  * Creating component
  * @Component takes ScalingComponent.html as template url
@@ -53,7 +52,9 @@
     /** Contains the scaling group descriptor names @public */
     public scalingGroup: {}[];
     /** Member index of the NS @public */
-    public memberVNFIndex: {}[];
+    public memberVNFIndex: {}[] = [];
+    /** Items for the memberVNFIndex @public */
+    public memberTypes: {}[];
     /** handles the selected VNFID @public */
     public selectedVNFID: string = '';
     /** Items for the Scale Types @public */
@@ -62,6 +63,8 @@
     public scalingForm: FormGroup;
     /** Form valid on submit trigger @public */
     public submitted: boolean = false;
+    /** Array holds VNFR Data filtered with nsr ID @private */
+    private nsIdFilteredData: {}[] = [];
     /** FormBuilder instance added to the formBuilder @private */
     private formBuilder: FormBuilder;
     /** Instance of the rest service @private */
@@ -118,19 +121,45 @@
 
     /** Get the member-vnf-index from NS Package -> vnf-profile @public */
     public getmemberIndex(): void {
-        if (this.params.nsd.df.length > 0) {
-            const getconstituentVNFD: {}[] = [];
-            this.params.nsd.df.forEach((data: NSDF): void => {
-                data['vnf-profile'].forEach((vnfProfile: VNFPROFILE): void => {
-                    const assignMemberIndex: {} = {
-                        id: vnfProfile.id,
-                        name: vnfProfile['vnfd-id']
-                    };
-                    getconstituentVNFD.push(assignMemberIndex);
-                });
+        this.isLoadingResults = true;
+        const vnfInstanceData: {}[] = [];
+        this.restService.getResource(environment.VNFINSTANCES_URL).subscribe((vnfInstancesData: VNFInstanceDetails[]): void => {
+            vnfInstancesData.forEach((vnfData: VNFInstanceDetails): void => {
+                const vnfdRef: string = 'vnfd-ref';
+                const memberIndex: string = 'member-vnf-index-ref';
+                const nsrId: string = 'nsr-id-ref';
+                const vnfId: string = 'vnfd-id';
+                const vnfDataObj: {} =
+                {
+                    // eslint-disable-next-line security/detect-object-injection
+                    VNFD: vnfData[vnfdRef],
+                    VNFInstanceId: vnfData._id,
+                    // eslint-disable-next-line security/detect-object-injection
+                    MemberIndex: vnfData[memberIndex],
+                    // eslint-disable-next-line security/detect-object-injection
+                    NS: vnfData[nsrId],
+                    // eslint-disable-next-line security/detect-object-injection
+                    VNFID: vnfData[vnfId]
+                };
+                vnfInstanceData.push(vnfDataObj);
             });
-            this.memberVNFIndex = getconstituentVNFD;
-        }
+            const nsId: string = 'NS';
+            // eslint-disable-next-line security/detect-object-injection
+            this.nsIdFilteredData = vnfInstanceData.filter((vnfdData: {}[]): boolean => vnfdData[nsId] === this.params.id);
+            this.nsIdFilteredData.forEach((resVNF: InstanceData): void => {
+                const assignMemberIndex: {} = {
+                    id: resVNF.MemberIndex,
+                    vnfinstanceId: resVNF.VNFInstanceId,
+                    vnfdRef: resVNF.VNFD
+                };
+                this.memberVNFIndex.push(assignMemberIndex);
+            });
+            this.memberTypes = this.memberVNFIndex;
+            this.isLoadingResults = false;
+        }, (error: ERRORDATA): void => {
+            this.restService.handleError(error, 'get');
+            this.isLoadingResults = false;
+        });
     }
 
     /** Get the scaling-group-descriptor name @public */
diff --git a/src/app/utilities/start-stop-rebuild/StartStopRebuildComponent.ts b/src/app/utilities/start-stop-rebuild/StartStopRebuildComponent.ts
index bde04ba..9940129 100644
--- a/src/app/utilities/start-stop-rebuild/StartStopRebuildComponent.ts
+++ b/src/app/utilities/start-stop-rebuild/StartStopRebuildComponent.ts
@@ -30,7 +30,7 @@
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
 import { DF, VNFD } from 'VNFDModel';
-import { VDUR, VNFInstanceDetails } from 'VNFInstanceModel';
+import { InstanceData, VDUR, VNFInstanceDetails } from 'VNFInstanceModel';
 
 /**
  * Creating component
@@ -121,30 +121,35 @@
 
     /** Getting MemberVnfIndex using VNFInstances API @public */
     public getMemberVnfIndex(): void {
+        this.isLoadingResults = true;
         const vnfInstanceData: {}[] = [];
         this.restService.getResource(environment.VNFINSTANCES_URL).subscribe((vnfInstancesData: VNFInstanceDetails[]): void => {
             vnfInstancesData.forEach((vnfData: VNFInstanceDetails): void => {
+                const vnfdRef: string = 'vnfd-ref';
+                const memberIndex: string = 'member-vnf-index-ref';
+                const nsrId: string = 'nsr-id-ref';
+                const vnfId: string = 'vnfd-id';
                 const vnfDataObj: {} =
                 {
-                    VNFD: vnfData['vnfd-ref'],
+                    // eslint-disable-next-line security/detect-object-injection
+                    VNFD: vnfData[vnfdRef],
                     VNFInstanceId: vnfData._id,
-                    MemberIndex: vnfData['member-vnf-index-ref'],
-                    NS: vnfData['nsr-id-ref'],
-                    VNFID: vnfData['vnfd-id']
+                    // eslint-disable-next-line security/detect-object-injection
+                    MemberIndex: vnfData[memberIndex],
+                    // eslint-disable-next-line security/detect-object-injection
+                    NS: vnfData[nsrId],
+                    // eslint-disable-next-line security/detect-object-injection
+                    VNFID: vnfData[vnfId]
                 };
                 vnfInstanceData.push(vnfDataObj);
             });
             const nsId: string = 'NS';
             // eslint-disable-next-line security/detect-object-injection
             this.nsIdFilteredData = vnfInstanceData.filter((vnfdData: {}[]): boolean => vnfdData[nsId] === this.params.id);
-            this.nsIdFilteredData.forEach((resVNF: {}[]): void => {
-                const memberIndex: string = 'MemberIndex';
-                const vnfinstanceID: string = 'VNFInstanceId';
+            this.nsIdFilteredData.forEach((resVNF: InstanceData): void => {
                 const assignMemberIndex: {} = {
-                    // eslint-disable-next-line security/detect-object-injection
-                    id: resVNF[memberIndex],
-                    // eslint-disable-next-line security/detect-object-injection
-                    vnfinstanceId: resVNF[vnfinstanceID]
+                    id: resVNF.MemberIndex,
+                    vnfinstanceId: resVNF.VNFInstanceId
                 };
                 this.memberVnfIndex.push(assignMemberIndex);
             });
@@ -175,7 +180,6 @@
                             {
                                 'count-index': vdu['count-index'],
                                 VDU: vdu['vdu-id-ref']
-
                             };
                             vnfInstanceData.push(vnfInstanceDataObj);
                         });
diff --git a/src/app/utilities/vertical-scaling/VerticalScalingComponent.ts b/src/app/utilities/vertical-scaling/VerticalScalingComponent.ts
index 4d96f8a..7b4c087 100644
--- a/src/app/utilities/vertical-scaling/VerticalScalingComponent.ts
+++ b/src/app/utilities/vertical-scaling/VerticalScalingComponent.ts
@@ -31,7 +31,7 @@
 import { VerticalScaling } from 'NSInstanceModel';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
-import { VDUR, VNFInstanceDetails } from 'VNFInstanceModel';
+import { InstanceData, VDUR, VNFInstanceDetails } from 'VNFInstanceModel';
 
 /**
  * Creating component
@@ -125,30 +125,35 @@
 
     /** Getting MemberVnfIndex using VNFInstances API @public */
     public getMemberVnfIndex(): void {
+        this.isLoadingResults = true;
         const vnfInstanceData: {}[] = [];
         this.restService.getResource(environment.VNFINSTANCES_URL).subscribe((vnfInstancesData: VNFInstanceDetails[]): void => {
             vnfInstancesData.forEach((vnfData: VNFInstanceDetails): void => {
+                const vnfdRef: string = 'vnfd-ref';
+                const memberIndex: string = 'member-vnf-index-ref';
+                const nsrId: string = 'nsr-id-ref';
+                const vnfId: string = 'vnfd-id';
                 const vnfDataObj: {} =
                 {
-                    VNFD: vnfData['vnfd-ref'],
+                    // eslint-disable-next-line security/detect-object-injection
+                    VNFD: vnfData[vnfdRef],
                     VNFInstanceId: vnfData._id,
-                    MemberIndex: vnfData['member-vnf-index-ref'],
-                    NS: vnfData['nsr-id-ref'],
-                    VNFID: vnfData['vnfd-id']
+                    // eslint-disable-next-line security/detect-object-injection
+                    MemberIndex: vnfData[memberIndex],
+                    // eslint-disable-next-line security/detect-object-injection
+                    NS: vnfData[nsrId],
+                    // eslint-disable-next-line security/detect-object-injection
+                    VNFID: vnfData[vnfId]
                 };
                 vnfInstanceData.push(vnfDataObj);
             });
             const nsId: string = 'NS';
             // eslint-disable-next-line security/detect-object-injection
             this.nsIdFilteredData = vnfInstanceData.filter((vnfdData: {}[]): boolean => vnfdData[nsId] === this.params.id);
-            this.nsIdFilteredData.forEach((resVNF: {}[]): void => {
-                const memberIndex: string = 'MemberIndex';
-                const vnfinstanceID: string = 'VNFInstanceId';
+            this.nsIdFilteredData.forEach((resVNF: InstanceData): void => {
                 const assignMemberIndex: {} = {
-                    // eslint-disable-next-line security/detect-object-injection
-                    id: resVNF[memberIndex],
-                    // eslint-disable-next-line security/detect-object-injection
-                    vnfinstanceId: resVNF[vnfinstanceID]
+                    id: resVNF.MemberIndex,
+                    vnfinstanceId: resVNF.VNFInstanceId
                 };
                 this.memberVnfIndex.push(assignMemberIndex);
             });
@@ -179,7 +184,6 @@
                             {
                                 'count-index': vdu['count-index'],
                                 VDU: vdu['vdu-id-ref']
-
                             };
                             vnfInstanceData.push(vnfInstanceDataObj);
                         });
diff --git a/src/app/utilities/vm-migration/VmMigrationComponent.ts b/src/app/utilities/vm-migration/VmMigrationComponent.ts
index e53ea11..b629497 100644
--- a/src/app/utilities/vm-migration/VmMigrationComponent.ts
+++ b/src/app/utilities/vm-migration/VmMigrationComponent.ts
@@ -29,7 +29,7 @@
 import { VMMIGRATION } from 'NSInstanceModel';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
-import { VDUR, VNFInstanceDetails } from 'VNFInstanceModel';
+import { InstanceData, VDUR, VNFInstanceDetails } from 'VNFInstanceModel';
 
 /**
  * Creating component
@@ -115,30 +115,32 @@
 
     /** Getting MemberVnfIndex using NSDescriptor API @public */
     public getMemberVnfIndex(): void {
-        const vnfInstanceData: {}[] = [];
         this.isLoadingResults = true;
+        const vnfInstanceData: {}[] = [];
         this.restService.getResource(environment.VNFINSTANCES_URL).subscribe((vnfInstancesData: VNFInstanceDetails[]): void => {
             vnfInstancesData.forEach((vnfData: VNFInstanceDetails): void => {
+                const vnfdRef: string = 'vnfd-ref';
+                const memberIndex: string = 'member-vnf-index-ref';
+                const nsrId: string = 'nsr-id-ref';
                 const vnfDataObj: {} =
                 {
-                    VNFD: vnfData['vnfd-ref'],
+                    // eslint-disable-next-line security/detect-object-injection
+                    VNFD: vnfData[vnfdRef],
                     VNFInstanceId: vnfData._id,
-                    MemberIndex: vnfData['member-vnf-index-ref'],
-                    NS: vnfData['nsr-id-ref']
+                    // eslint-disable-next-line security/detect-object-injection
+                    MemberIndex: vnfData[memberIndex],
+                    // eslint-disable-next-line security/detect-object-injection
+                    NS: vnfData[nsrId]
                 };
                 vnfInstanceData.push(vnfDataObj);
             });
             const nsId: string = 'NS';
             // eslint-disable-next-line security/detect-object-injection
             this.nsIdFilteredData = vnfInstanceData.filter((vnfdData: {}[]): boolean => vnfdData[nsId] === this.params.id);
-            this.nsIdFilteredData.forEach((resVNF: {}[]): void => {
-                const memberIndex: string = 'MemberIndex';
-                const vnfinstanceID: string = 'VNFInstanceId';
+            this.nsIdFilteredData.forEach((resVNF: InstanceData): void => {
                 const assignMemberIndex: {} = {
-                    // eslint-disable-next-line security/detect-object-injection
-                    id: resVNF[memberIndex],
-                    // eslint-disable-next-line security/detect-object-injection
-                    vnfinstanceId: resVNF[vnfinstanceID]
+                    id: resVNF.MemberIndex,
+                    vnfinstanceId: resVNF.VNFInstanceId
                 };
                 this.memberVnfIndex.push(assignMemberIndex);
             });
@@ -170,7 +172,6 @@
                             {
                                 'count-index': vdu['count-index'],
                                 VDU: vdu['vdu-id-ref']
-
                             };
                             vnfInstanceData.push(vnfInstanceDataObj);
                         });
diff --git a/src/models/VNFInstanceModel.ts b/src/models/VNFInstanceModel.ts
index de69c1e..4fd63db 100644
--- a/src/models/VNFInstanceModel.ts
+++ b/src/models/VNFInstanceModel.ts
@@ -79,3 +79,9 @@
     VNFD?: string;
     VNFID?: string;
 }
+/** interface for the nsdInstanceData */
+export interface InstanceData {
+    MemberIndex?: string;
+    VNFInstanceId?: string;
+    VNFD?: string;
+}
