diff --git a/src/app/vnfs/build-artifacts/parameter-definitions/parameter.component.ts b/src/app/vnfs/build-artifacts/parameter-definitions/parameter.component.ts
index 3c95859..8725c3c 100644
--- a/src/app/vnfs/build-artifacts/parameter-definitions/parameter.component.ts
+++ b/src/app/vnfs/build-artifacts/parameter-definitions/parameter.component.ts
@@ -3,6 +3,8 @@
 ===================================================================
 Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
 ===================================================================
+Copyright (C) 2018 IBM.
+===================================================================
 
 Unless otherwise specified, all software contained herein is licensed
 under the Apache License, Version 2.0 (the License);
@@ -33,7 +35,6 @@
 import 'rxjs/add/operator/map';
 import { NgProgress } from 'ngx-progressbar';
 
-
 let YAML = require('yamljs');
 
 declare var $: any;
@@ -254,7 +255,11 @@
             if (this.paramShareService.getSessionParamData() != undefined && this.paramShareService.getSessionParamData().length > 0) {
                 this.getPDFromSession();
             } else {
+                this.ngProgress.start();
                 this.getPD();
+                setTimeout(() => {
+                this.ngProgress.done();
+            }, 3500);
             }
         } else {
             this.nService.error('Error', 'Please enter Action and VNF type in Reference Data screen');
@@ -275,7 +280,6 @@
             }
         };
         let artifactContent: any;
-        this.ngProgress.start();
         return this.httpService.post({
             url: environment.getDesigns,
             data: input
@@ -286,14 +290,11 @@
                 let fileModel = pdObject['vnf-parameter-list'];
                 this.displayParamObjects = this.parameterDefinitionService.populatePD(fileModel);
             }
-            else {
-
-            }
-            this.ngProgress.done();
+                       
         },
 
             error => this.nService.error('Error', 'Error in connecting APPC Server'));
-
+         
     }
 
     public getPDFromSession() {
@@ -340,7 +341,6 @@
 
     //========================== End of ngOnDestroy() Method============================================
 
-    //========================== End of createOrUpdateParameterDefinitionData() Method============================================
     public showUpload() {
         this.selectedUploadType = this.uploadTypes[0].value;
     };
@@ -357,8 +357,7 @@
                     this.displayParamObjects = this.parameterDefinitionService.processPDfile(this.myPdFileName, result);
                 }
             });
-        } else {
-            //this.notificationService.notifyErrorMessage('Failed to read file!Please try again.');
+            
         }
     }
 
