diff --git a/xos/gui/conf/webpack-dist.conf.js b/xos/gui/conf/webpack-dist.conf.js
index 36fbd97..7dfebfa 100755
--- a/xos/gui/conf/webpack-dist.conf.js
+++ b/xos/gui/conf/webpack-dist.conf.js
@@ -105,7 +105,10 @@
       '.web.js',
       '.js',
       '.ts'
-    ]
+    ],
+    alias: {
+      "ngprogress": path.resolve(__dirname, '../node_modules/ngprogress/build/ngProgress.js')
+    }
   },
   entry: {
     app: `./${conf.path.src('index')}`,
diff --git a/xos/gui/package.json b/xos/gui/package.json
index 00b888b..69ce745 100644
--- a/xos/gui/package.json
+++ b/xos/gui/package.json
@@ -115,4 +115,4 @@
       "xo-space/esnext"
     ]
   }
-}
\ No newline at end of file
+}
diff --git a/xos/gui/src/app/components/vtr/vtr-dashboard.ts b/xos/gui/src/app/components/vtr/vtr-dashboard.ts
index 5cec27b..eb8abec 100644
--- a/xos/gui/src/app/components/vtr/vtr-dashboard.ts
+++ b/xos/gui/src/app/components/vtr/vtr-dashboard.ts
@@ -30,7 +30,8 @@
   public truckroll: any;
   public loader: boolean;
   public error: string;
-  private tenants = [];
+
+  private services = [];
   private Truckroll;
 
   constructor(
@@ -45,15 +46,14 @@
     this.XosModelStore.query('CordSubscriberRoot', '/volt/cordsubscriberroots')
       .subscribe(
         res => {
-          console.log(res);
           this.subscribers = res;
         }
       );
 
-    this.XosModelStore.query('Tenant')
+    this.XosModelStore.query('VTRService')
       .subscribe(
         res => {
-          this.tenants = res;
+          this.services = res;
         }
       );
   }
@@ -69,8 +69,7 @@
     delete this.error;
 
     this.truckroll.target_type = this.getSubscriberContentTypeId(this.truckroll.target_id);
-    
-    this.truckroll.subscriber_tenant_id = this.getVsgTenantForSubscriber(this.truckroll.target_id);
+    this.truckroll.owner_id = this.getServiceInstanceOwnerId();
 
     console.log(this.truckroll);
 
@@ -82,16 +81,14 @@
     });
   };
 
-  private getVsgTenantForSubscriber(subscriberId: number): number {
-    const voltTenant = _.find(this.tenants, {subscriber_root_id: subscriberId});
-    const vsgTenant = _.find(this.tenants, {subscriber_tenant_id: voltTenant.id});
-    return vsgTenant.id;
-  }
-
   private getSubscriberContentTypeId(subscriberId: number) {
     return _.find(this.subscribers, {id: subscriberId}).self_content_type_id;
   }
 
+  private getServiceInstanceOwnerId(): number {
+    return this.services[0].id;
+  }
+
   private waitForTest(id: number) {
 
         this.Truckroll.get({id: id}).$promise
@@ -107,13 +104,14 @@
           // or
           // if is synced
           if (
-              testResult.backend_status.indexOf('2') >= 0 ||
-              testResult.backend_status.indexOf('1') >= 0 ||
+              testResult.backend_code == 2 ||
+              testResult.backend_code == 1 ||
+              angular.isDefined(testResult.result) ||
               testResult.is_synced
             ) {
             this.truckroll = angular.copy(testResult);
             this.loader = false;
-            // this.Truckroll.delete({id: id});
+            this.Truckroll.delete({id: id});
           }
           // else keep polling
           else {
