diff --git a/src/app/AppModule.ts b/src/app/AppModule.ts
index 451e0f1..06d1004 100644
--- a/src/app/AppModule.ts
+++ b/src/app/AppModule.ts
@@ -77,6 +77,7 @@
 import { UsersActionComponent } from 'UsersActionComponent';
 import { UserSettingsComponent } from 'UserSettingsComponent';
 import { VimAccountsActionComponent } from 'VimAccountsAction';
+import { VmMigrationComponent } from 'VmMigrationComponent';
 import { VNFInstancesActionComponent } from 'VNFInstancesActionComponent';
 import { VNFLinkComponent } from 'VNFLinkComponent';
 import { VNFPackagesActionComponent } from 'VNFPackagesAction';
@@ -127,7 +128,8 @@
         SwitchProjectComponent,
         GoToTopDirective,
         ScalingComponent,
-        ChangePasswordComponent
+        ChangePasswordComponent,
+        VmMigrationComponent
     ],
     imports: [
         NotifierModule.withConfig(customNotifierOptions),
@@ -201,7 +203,8 @@
         SDNControllerActionComponent,
         SwitchProjectComponent,
         ScalingComponent,
-        ChangePasswordComponent
+        ChangePasswordComponent,
+        VmMigrationComponent
     ]
 })
 
diff --git a/src/app/utilities/ns-instances-action/NSInstancesActionComponent.html b/src/app/utilities/ns-instances-action/NSInstancesActionComponent.html
index 8a32bb7..df5bbd7 100644
--- a/src/app/utilities/ns-instances-action/NSInstancesActionComponent.html
+++ b/src/app/utilities/ns-instances-action/NSInstancesActionComponent.html
@@ -43,6 +43,10 @@
                 placement="left" data-container="body" ngbTooltip="{{'SCALING' | translate}}">
                 <i class="fas fa-cubes"></i> {{'SCALING' | translate}}
             </button>
+            <button type="button" class="btn btn-primary dropdown-item" (click)="openVmMigration()" placement="left" data-container="body"
+                [disabled]="operationalStatus === 'failed' || configStatus === 'failed'" ngbTooltip="{{'VMMIGRATION' | translate}}">
+                <i class="fas fa-angle-double-left"></i> {{'VMMIGRATION' | translate}}
+            </button>
             <button type="button" class="btn btn-primary dropdown-item" (click)="historyOfOperations()" placement="left" container="body" ngbTooltip="{{'HISTORYOFOPERATIONS' | translate}}">
                 <i class="fas fa-history"></i> {{'HISTORYOFOPERATIONS' | translate}}
             </button>
diff --git a/src/app/utilities/ns-instances-action/NSInstancesActionComponent.ts b/src/app/utilities/ns-instances-action/NSInstancesActionComponent.ts
index b5f7b01..fb52423 100644
--- a/src/app/utilities/ns-instances-action/NSInstancesActionComponent.ts
+++ b/src/app/utilities/ns-instances-action/NSInstancesActionComponent.ts
@@ -35,6 +35,7 @@
 import { SharedService } from 'SharedService';
 import { ShowInfoComponent } from 'ShowInfoComponent';
 import { isNullOrUndefined } from 'util';
+import { VmMigrationComponent } from 'VmMigrationComponent';
 import { DF, VDU, VNFD } from 'VNFDModel';
 /**
  * Creating component
@@ -256,6 +257,19 @@
     }).catch();
   }
 
+  /** To open VM Migration in NS Instances */
+  public openVmMigration(): void {
+    const modalRef: NgbModalRef = this.modalService.open(VmMigrationComponent, { backdrop: 'static' });
+    modalRef.componentInstance.params = {
+      id: this.instanceID
+    };
+    modalRef.result.then((result: MODALCLOSERESPONSEDATA): void => {
+      if (result) {
+        this.sharedService.callData();
+      }
+    }).catch();
+  }
+
   /**
    * Check any changes in the child component @public
    */
diff --git a/src/app/utilities/vm-migration/VmMigrationComponent.html b/src/app/utilities/vm-migration/VmMigrationComponent.html
new file mode 100644
index 0000000..343a6be
--- /dev/null
+++ b/src/app/utilities/vm-migration/VmMigrationComponent.html
@@ -0,0 +1,81 @@
+<!--
+Copyright 2020 TATA ELXSI
+
+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.
+
+Author: SANDHYA JS (sandhya.j@tataelxsi.co.in)
+-->
+<div class="modal-header">
+    <h4 class="modal-title" id="modal-basic-title">  {{'VMMIGRATION' | translate}} </h4>
+    <button class="button-xs" type="button" class="close" aria-label="Close" (click)="activeModal.close()">
+        <i class="fas fa-times-circle text-danger"></i>
+    </button>
+</div>
+<form [formGroup]="migrationForm" (ngSubmit)="triggerMigration()" autocomplete="off">
+    <div class="modal-body">
+        <div class="form-group row">
+            <label class="col-sm-12 col-form-label mandatory-label"
+                [ngClass]="{'text-danger': migrationForm.invalid === true && submitted === true}">
+                {{'MANDATORYCHECK' | translate}}
+            </label>
+            <div class="col-sm-6">
+                <label for="memberVnfIndex"> {{'MEMBERVNFINDEX' | translate}} *</label>
+            </div>
+            <div class="col-sm-6">
+                <ng-select (change)="getVdu($event.vnfinstanceId)" formControlName="memberVnfIndex" [clearable]="false"
+                    placeholder="{{'SELECTMEMBERVNFINDEX' | translate}}" [items]="memberTypes" bindLabel="id"
+                    bindValue="id" [ngClass]="{ 'is-invalid': submitted && f.memberVnfIndex.errors }">
+                </ng-select>
+                <small class="form-text text-muted" *ngIf="selectedvnfId !== ''">vnfd-id : {{ selectedvnfId }}</small>
+            </div>
+        </div>
+        <div class="form-group row">
+            <div class="col-sm-6">
+                <label for="vduid"> {{'VDUID' | translate}}</label>
+            </div>
+            <div class="col-sm-6">
+                <ng-select formControlName="vduId" [clearable]="false"
+                    placeholder="{{'SELECT' | translate}} {{'VDUID' | translate}}" [items]="vdu" bindLabel="VDU"
+                    bindValue="VDU" [ngClass]="{ 'is-invalid': submitted && f.vduId.errors }">
+                </ng-select>
+            </div>
+        </div>
+        <div class="form-group row">
+            <div class="col-sm-6">
+                <label for="countIndex"> {{'COUNTINDEX' | translate}}</label>
+            </div>
+            <div class="col-sm-6">
+                <ng-select formControlName="countIndex" [clearable]="false"
+                    placeholder="{{'SELECT' | translate}} {{'COUNTINDEX' | translate}}" [items]="vdu"
+                    bindLabel="count-index" bindValue="count-index"
+                    [ngClass]="{ 'is-invalid': submitted && f.countIndex.errors }">
+                </ng-select>
+            </div>
+        </div>
+        <div class="form-group row">
+            <div class="col-sm-6">
+                <label for="migrateToHost"> {{'MIGRATETOHOST' | translate}}</label>
+            </div>
+            <div class="col-sm-6">
+                <input autocomplete="off" class="form-control" placeholder="{{'MIGRATETOHOST' | translate}}" type="text"
+                    formControlName="migrateToHost" id="migrateToHost"
+                    [ngClass]="{ 'is-invalid': submitted && f.migrateToHost.errors }">
+            </div>
+        </div>
+    </div>
+    <div class="modal-footer">
+        <button type="button" (click)="activeModal.close()" class="btn btn-danger">{{'CANCEL' | translate}}</button>
+        <button type="submit" class="btn btn-primary">{{'APPLY' | translate }}</button>
+    </div>
+</form>
+<app-loader [waitingMessage]="message" *ngIf="isLoadingResults"></app-loader>
\ No newline at end of file
diff --git a/src/app/utilities/vm-migration/VmMigrationComponent.scss b/src/app/utilities/vm-migration/VmMigrationComponent.scss
new file mode 100644
index 0000000..c55461a
--- /dev/null
+++ b/src/app/utilities/vm-migration/VmMigrationComponent.scss
@@ -0,0 +1,17 @@
+/*
+ Copyright 2020 TATA ELXSI
+
+ 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.
+
+ Author: SANDHYA JS (sandhya.j@tataelxsi.co.in)
+*/
\ No newline at end of file
diff --git a/src/app/utilities/vm-migration/VmMigrationComponent.ts b/src/app/utilities/vm-migration/VmMigrationComponent.ts
new file mode 100644
index 0000000..0ec8bc4
--- /dev/null
+++ b/src/app/utilities/vm-migration/VmMigrationComponent.ts
@@ -0,0 +1,230 @@
+/*
+ Copyright 2020 TATA ELXSI
+
+ 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.
+
+ Author: SANDHYA JS (sandhya.j@tataelxsi.co.in)
+*/
+/**
+ * @file Vm Migration Component
+ */
+import { HttpHeaders } from '@angular/common/http';
+import { Component, Injector, Input, OnInit } from '@angular/core';
+import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
+import { Router } from '@angular/router';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { APIURLHEADER, ERRORDATA, MODALCLOSERESPONSEDATA, URLPARAMS } from 'CommonModel';
+import { environment } from 'environment';
+import { VMMIGRATION } from 'NSInstanceModel';
+import { RestService } from 'RestService';
+import { SharedService } from 'SharedService';
+import { isNullOrUndefined } from 'util';
+import { VDUR, VNFInstanceDetails } from 'VNFInstanceModel';
+
+/**
+ * Creating component
+ * @Component takes VmMigrationComponent.html as template url
+ */
+@Component({
+    selector: 'app-vm-migration',
+    templateUrl: './VmMigrationComponent.html',
+    styleUrls: ['./VmMigrationComponent.scss']
+})
+export class VmMigrationComponent implements OnInit {
+    /** To inject services @public */
+    public injector: Injector;
+    /** Instance for active modal service @public */
+    public activeModal: NgbActiveModal;
+    /** Check the loading results @public */
+    public isLoadingResults: Boolean = false;
+    /** Give the message for the loading @public */
+    public message: string = 'PLEASEWAIT';
+    /** FormGroup instance added to the form @ html @public */
+    public migrationForm: FormGroup;
+    /** Items for the vdu-Id and count-index @public */
+    public vdu: {}[];
+    /** Selected VNFInstanceId @public */
+    public selectedvnfId: string = '';
+    /** Array holds VNFR Data filtered with nsr ID @public */
+    public nsIdFilteredData: {}[] = [];
+    /** Items for the member types @public */
+    public memberTypes: {}[];
+    /** Contains MemberVNFIndex values @public */
+    public memberVnfIndex: {}[] = [];
+    /** Contains vnfInstanceId of the selected MemberVnfIndex  @public */
+    public instanceId: string;
+    /** Form valid on submit trigger @public */
+    public submitted: boolean = false;
+    /** Input contains component objects @private */
+    @Input() private params: URLPARAMS;
+    /** FormBuilder instance added to the formBuilder @private */
+    private formBuilder: FormBuilder;
+    /** Instance of the rest service @private */
+    private restService: RestService;
+    /** Controls the header form @private */
+    private headers: HttpHeaders;
+    /** Contains all methods related to shared @private */
+    private sharedService: SharedService;
+    /** Holds the instance of AuthService class of type AuthService @private */
+    private router: Router;
+    constructor(injector: Injector) {
+        this.injector = injector;
+        this.restService = this.injector.get(RestService);
+        this.activeModal = this.injector.get(NgbActiveModal);
+        this.formBuilder = this.injector.get(FormBuilder);
+        this.sharedService = this.injector.get(SharedService);
+        this.router = this.injector.get(Router);
+    }
+    /** convenience getter for easy access to form fields */
+    get f(): FormGroup['controls'] { return this.migrationForm.controls; }
+    /**
+     * Lifecyle Hooks the trigger before component is instantiate
+     */
+    public ngOnInit(): void {
+        this.initializeForm();
+        this.getMemberVnfIndex();
+        this.headers = new HttpHeaders({
+            'Content-Type': 'application/json',
+            Accept: 'application/json',
+            'Cache-Control': 'no-cache, no-store, must-revalidate, max-age=0'
+        });
+    }
+    /** Initialize Migration Forms @public */
+    public initializeForm(): void {
+        this.migrationForm = this.formBuilder.group({
+            memberVnfIndex: [null, [Validators.required]],
+            vduId: [null],
+            countIndex: [null],
+            migrateToHost: [null]
+        });
+    }
+
+    /** Getting MemberVnfIndex using NSDescriptor API @public */
+    public getMemberVnfIndex(): void {
+        const vnfInstanceData: {}[] = [];
+        this.isLoadingResults = true;
+        this.restService.getResource(environment.VNFINSTANCES_URL).subscribe((vnfInstancesData: VNFInstanceDetails[]): void => {
+            vnfInstancesData.forEach((vnfData: VNFInstanceDetails): void => {
+                const vnfDataObj: {} =
+                {
+                    VNFD: vnfData['vnfd-ref'],
+                    VNFInstanceId: vnfData._id,
+                    MemberIndex: vnfData['member-vnf-index-ref'],
+                    NS: vnfData['nsr-id-ref']
+                };
+                vnfInstanceData.push(vnfDataObj);
+            });
+            const nsId: string = 'NS';
+            this.nsIdFilteredData = vnfInstanceData.filter((vnfdData: {}[]): boolean => vnfdData[nsId] === this.params.id);
+            this.nsIdFilteredData.forEach((resVNF: {}[]): void => {
+                const memberIndex: string = 'MemberIndex';
+                const vnfinstanceID: string = 'VNFInstanceId';
+                const assignMemberIndex: {} = {
+                    id: resVNF[memberIndex],
+                    vnfinstanceId: resVNF[vnfinstanceID]
+                };
+                this.memberVnfIndex.push(assignMemberIndex);
+            });
+            this.memberTypes = this.memberVnfIndex;
+            this.isLoadingResults = false;
+        }, (error: ERRORDATA): void => {
+            this.restService.handleError(error, 'get');
+            this.isLoadingResults = false;
+        });
+    }
+
+    /** Getting vdu-id & count-index from VNFInstance API */
+    public getVdu(id: string): void {
+        this.vdu = [];
+        const vnfInstanceData: {}[] = [];
+        this.instanceId = id;
+        this.getFormControl('vduId').setValue(null);
+        this.getFormControl('countIndex').setValue(null);
+        if (!isNullOrUndefined(id)) {
+            this.restService.getResource(environment.VNFINSTANCES_URL + '/' + id).
+                subscribe((vnfInstanceDetail: VNFInstanceDetails[]): void => {
+                    this.selectedvnfId = vnfInstanceDetail['vnfd-ref'];
+                    const VDU: string = 'vdur';
+                    if (vnfInstanceDetail[VDU] !== undefined) {
+                        vnfInstanceDetail[VDU].forEach((vdu: VDUR): void => {
+                            const vnfInstanceDataObj: {} =
+                            {
+                                'count-index': vdu['count-index'],
+                                VDU: vdu['vdu-id-ref']
+
+                            };
+                            vnfInstanceData.push(vnfInstanceDataObj);
+                        });
+                        this.vdu = vnfInstanceData;
+                    }
+                }, (error: ERRORDATA): void => {
+                    this.restService.handleError(error, 'get');
+                    this.isLoadingResults = false;
+                });
+        }
+    }
+
+    /** Trigger VM Migration on submit */
+    public triggerMigration(): void {
+        this.submitted = true;
+        this.sharedService.cleanForm(this.migrationForm);
+        if (this.migrationForm.invalid) { return; } // Proceed, onces form is valid
+        const migrationPayload: VMMIGRATION = {
+            lcmOperationType: 'migrate',
+            vnfInstanceId: this.instanceId
+        };
+        if (!isNullOrUndefined(this.migrationForm.value.migrateToHost)) {
+            migrationPayload.migrateToHost = this.migrationForm.value.migrateToHost;
+        }
+        if (!isNullOrUndefined(this.migrationForm.value.vduId) && !isNullOrUndefined(this.migrationForm.value.countIndex)) {
+            migrationPayload.vdu = {
+                vduId: this.migrationForm.value.vduId,
+                vduCountIndex: this.migrationForm.value.countIndex
+            };
+        } else if (!isNullOrUndefined(this.migrationForm.value.vduId)) {
+            migrationPayload.vdu = {
+                vduId: this.migrationForm.value.vduId
+            };
+        } else if (!isNullOrUndefined(this.migrationForm.value.countIndex)) {
+            migrationPayload.vdu = {
+                vduCountIndex: this.migrationForm.value.countIndex
+            };
+        }
+        this.migrationInitialization(migrationPayload);
+
+    }
+
+    /** Initialize the Vm Migration operation @public */
+    public migrationInitialization(migrationPayload: object): void {
+        this.isLoadingResults = true;
+        const apiURLHeader: APIURLHEADER = {
+            url: environment.NSDINSTANCES_URL + '/' + this.params.id + '/migrate',
+            httpOptions: { headers: this.headers }
+        };
+        const modalData: MODALCLOSERESPONSEDATA = {
+            message: 'Done'
+        };
+        this.restService.postResource(apiURLHeader, migrationPayload).subscribe((result: {}): void => {
+            this.activeModal.close(modalData);
+            this.router.navigate(['/instances/ns/history-operations/' + this.params.id]).catch();
+        }, (error: ERRORDATA): void => {
+            this.restService.handleError(error, 'post');
+            this.isLoadingResults = false;
+        });
+    }
+
+    /** Used to get the AbstractControl of controlName passed @private */
+    private getFormControl(controlName: string): AbstractControl {
+        return this.migrationForm.controls[controlName];
+    }
+}
diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json
index 2447cb9..6d8f8be 100644
--- a/src/assets/i18n/de.json
+++ b/src/assets/i18n/de.json
@@ -166,6 +166,14 @@
     "DEFAULT": "Standard",
     "SOURCE": "Quelle",
     "RESOURCESNOTFOUND": "Ressourcen nicht gefunden",
+    "VNFPKGCHANGE": "CHANGE_VNFPKG",
+    "REMOVEVNF": "REMOVE_VNF",
+    "SELECTMEMBERVNFINDEX": "Wählen Sie Mitglieds-VNF-Index",
+    "MEMBERVNFINDEX": "Mitglieds-VNF-Index",
+    "VDUID": "Vdu-ID",
+    "COUNTINDEX": "Index zählen",
+    "MIGRATETOHOST": "Zum Host migrieren",
+    "VMMIGRATION": "VM-Migration",
     "PAGE": {
         "DASHBOARD": {
             "DASHBOARD": "Instrumententafel",
diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json
index 45313c1..cdf97a9 100644
--- a/src/assets/i18n/en.json
+++ b/src/assets/i18n/en.json
@@ -166,6 +166,12 @@
     "DEFAULT": "Default",
     "SOURCE": "Source",
     "RESOURCESNOTFOUND": "Resources not found",
+    "SELECTMEMBERVNFINDEX": "Select Member VNF Index",
+    "MEMBERVNFINDEX": "Member VNF Index",
+    "VDUID": "VDU Id",
+    "COUNTINDEX": "Count Index",
+    "MIGRATETOHOST": "Migrate To Host",
+    "VMMIGRATION": "Vm Migration",
     "PAGE": {
         "DASHBOARD": {
             "DASHBOARD": "Dashboard",
diff --git a/src/assets/i18n/es.json b/src/assets/i18n/es.json
index 7e2df4d..a6fae2d 100644
--- a/src/assets/i18n/es.json
+++ b/src/assets/i18n/es.json
@@ -166,6 +166,12 @@
     "DEFAULT": "por defecto",
     "SOURCE": "Fuente",
     "RESOURCESNOTFOUND": "Recursos no encontrados",
+    "SELECTMEMBERVNFINDEX": "Seleccione el índice VNF de miembros",
+    "MEMBERVNFINDEX": "Índice VNF de miembros",
+    "VDUID": "Identificación de VDU",
+    "COUNTINDEX": "Índice de conteo",
+    "MIGRATETOHOST": "Migrar a host",
+    "VMMIGRATION": "Migración de máquina virtual",
     "PAGE": {
         "DASHBOARD": {
             "DASHBOARD": "Tablero",
diff --git a/src/assets/i18n/pt.json b/src/assets/i18n/pt.json
index ee257f9..c7f3125 100644
--- a/src/assets/i18n/pt.json
+++ b/src/assets/i18n/pt.json
@@ -166,6 +166,12 @@
     "DEFAULT": "Padrão",
     "SOURCE": "Fonte",
     "RESOURCESNOTFOUND": "Recursos não encontrados",
+    "SELECTMEMBERVNFINDEX": "Selecione o Índice VNF do Membro",
+    "MEMBERVNFINDEX": "Índice VNF de Membro",
+    "VDUID": "'VDUID': 'ID Vdu'",
+    "COUNTINDEX": "Índice de contagem",
+    "MIGRATETOHOST": "Migrar para o host",
+    "VMMIGRATION": "Migração de VM",
     "PAGE": {
         "DASHBOARD": {
             "DASHBOARD": "painel de controle",
diff --git a/src/models/NSInstanceModel.ts b/src/models/NSInstanceModel.ts
index 62b9c5c..1d5fba3 100644
--- a/src/models/NSInstanceModel.ts
+++ b/src/models/NSInstanceModel.ts
@@ -149,6 +149,20 @@
     df: DF[];
 }
 
+/** Interface for Vm Migration */
+export interface VMMIGRATION {
+    lcmOperationType: string;
+    vnfInstanceId: string;
+    migrateToHost?: string;
+    vdu?: VDUPARAM;
+}
+
+/** Interface for vdu for Vm Migration */
+export interface VDUPARAM {
+    vduId?: string;
+    vduCountIndex?: string;
+}
+
 /** Interface for InstantiateParam */
 interface InstantiateParam {
     nsdId: string;
@@ -189,19 +203,19 @@
 }
 
 /** Interface for the operationparams */
-export interface OPERATIONPARAMS{
+export interface OPERATIONPARAMS {
     scaleType?: string;
     scaleVnfData?: SCALEVNFDATA;
 }
 
 /** Interface for the scaleVnfData */
-export interface SCALEVNFDATA{
+export interface SCALEVNFDATA {
     scaleVnfType?: string;
     scaleByStepData?: SCALEBYSTEPDATA;
 }
 
 /** Interface for the scaleByStepData */
-export interface SCALEBYSTEPDATA{
+export interface SCALEBYSTEPDATA {
     'scaling-group-descriptor'?: string;
     'member-vnf-index'?: string;
 }
@@ -295,7 +309,7 @@
 }
 
 /** Interface for the VNFR Info */
-export interface VNFRINFO{
+export interface VNFRINFO {
     vimID: string;
     _id: string;
     ip: string;
diff --git a/src/models/VNFInstanceModel.ts b/src/models/VNFInstanceModel.ts
index 37f3bf3..de69c1e 100644
--- a/src/models/VNFInstanceModel.ts
+++ b/src/models/VNFInstanceModel.ts
@@ -37,7 +37,7 @@
 }
 
 /** Interface for VDUR */
-interface VDUR {
+export interface VDUR {
     'ip-address': string;
     'vim-id': string;
     'internal-connection-point': string[];
diff --git a/tsconfig.json b/tsconfig.json
index abeb17a..eea875a 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -151,7 +151,8 @@
             "ResourcesOverviewComponent": ["src/app/vim-accounts/Resources-Overview/ResourcesOverviewComponent"],
             "SharedModule": ["src/app/vim-accounts/Resources-Overview/SharedModule"],
             "ChangePasswordComponent": ["src/app/utilities/change-password/ChangePasswordComponent"],
-            "ChangePasswordModule": ["src/app/utilities/change-password/ChangePasswordModule"]
+            "ChangePasswordModule": ["src/app/utilities/change-password/ChangePasswordModule"],
+            "VmMigrationComponent":  ["src/app/utilities/vm-migration/VmMigrationComponent"]
         }
     }
 }
\ No newline at end of file
