diff --git a/mCordPortal/src/app/services/rest/enodeb.js b/mCordPortal/src/app/services/rest/enodeb.js
index d1b9e50..aa28702 100644
--- a/mCordPortal/src/app/services/rest/enodeb.js
+++ b/mCordPortal/src/app/services/rest/enodeb.js
@@ -1,14 +1,32 @@
 (function () {
   angular.module('mCord')
-  .service('Enodeb', function($resource, $q, $http, baseUrl){
-    const r = $resource(`${baseUrl}api/enodeb/:id`, {id: '@eNBId'}, {
-      save: {method: 'PUT'}
+  .service('Enodeb', function($injector, $resource, $q, $http, baseUrl){
+    const r = $resource(`${baseUrl}onos/progran/enodeb/:id`, {id: '@eNBId'}, {
+      save: {method: 'PUT'},
+      query: {
+        array: false,
+        interceptor: {
+          response: function(res){
+            const Enodeb = $injector.get('Enodeb');
+            return res.data.EnodeBArray.map(n => new Enodeb(n));
+          }
+        }
+      },
+      get: {
+        array: false,
+        interceptor: {
+          response: function(res){
+            const Enodeb = $injector.get('Enodeb');
+            return new Enodeb(res.data.EnodeBArray[0]);
+          }
+        }
+      }
     });
 
     r.prototype.getProfiles = function(){
       const d = $q.defer();
 
-      $http.get(`${baseUrl}api/enodeb/${this.eNBId}/profile`)
+      $http.get(`${baseUrl}onos/progran/enodeb/${this.eNBId}/profile`)
       .then(res => {
         d.resolve(res.data);
       })
@@ -21,8 +39,7 @@
 
     r.prototype.getStats = function(){
       const d = $q.defer();
-
-      $http.get(`${baseUrl}api/stats/enodeb/${this.eNBId}/10`)
+      $http.get(`${baseUrl}onos/progran/stats/enodeb/${this.eNBId}/10`)
       .then(res => {
         d.resolve(res.data);
       })
diff --git a/mCordPortal/src/app/services/rest/imsi.js b/mCordPortal/src/app/services/rest/imsi.js
index 8e93aac..2359fe1 100644
--- a/mCordPortal/src/app/services/rest/imsi.js
+++ b/mCordPortal/src/app/services/rest/imsi.js
@@ -1,14 +1,32 @@
 (function () {
   angular.module('mCord')
-    .service('Imsi', function($resource, $q, $http, baseUrl){
-      const r = $resource(`${baseUrl}api/imsi/:id`, {id: '@IMSI'}, {
-        save: {method: 'PUT'}
+    .service('Imsi', function($injector, $resource, $q, $http, baseUrl){
+      const r = $resource(`${baseUrl}onos/progran/imsi/:id`, {id: '@IMSI'}, {
+        save: {method: 'PUT'},
+        query: {
+          array: false,
+          interceptor: {
+            response: function(res){
+              const Imsi = $injector.get('Imsi');
+              return res.data.ImsiArray.map(i => new Imsi(i));
+            }
+          }
+        },
+        get: {
+          array: false,
+          interceptor: {
+            response: function(res){
+              const Imsi = $injector.get('Imsi');
+              return new Imsi(res.data.ImsiArray[0]);
+            }
+          }
+        }
       });
 
       r.prototype.getProfiles = function(){
         const d = $q.defer();
 
-        $http.get(`${baseUrl}api/imsi/${this.IMSI}/profile`)
+        $http.get(`${baseUrl}onos/progran/imsi/${this.IMSI}/profile`)
           .then(res => {
             d.resolve(res.data);
           })
@@ -21,7 +39,7 @@
 
       r.prototype.deleteProfile = function(id){
         const d = $q.defer();
-        $http.delete(`${baseUrl}api/imsi/${this.IMSI}/profile/${id}`)
+        $http.delete(`${baseUrl}onos/progran/imsi/${this.IMSI}/profile/${id}`)
           .then(res => {
             d.resolve(res.data);
           })
diff --git a/mCordPortal/src/app/services/rest/profiles.js b/mCordPortal/src/app/services/rest/profiles.js
index a6e0d3c..6582784 100644
--- a/mCordPortal/src/app/services/rest/profiles.js
+++ b/mCordPortal/src/app/services/rest/profiles.js
@@ -1,12 +1,32 @@
 (function () {
   angular.module('mCord')
-  .service('Profile', function($resource, $q, $http, baseUrl){
-    const r = $resource(`${baseUrl}api/profile/:id`, {id: '@Name'});
+  .service('Profile', function($injector, $resource, $q, $http, baseUrl){
+    const r = $resource(`${baseUrl}onos/progran/profile/:id`, {id: '@Name'}, {
+      save: {method: 'PUT'},
+      query: {
+        array: false,
+        interceptor: {
+          response: function(res){
+            const Profile = $injector.get('Profile');
+            return res.data.ProfileArray.map(p => new Profile(p));
+          }
+        }
+      },
+      get: {
+        array: false,
+        interceptor: {
+          response: function(res){
+            const Profile = $injector.get('Profile');
+            return new Profile(res.data.ProfileArray[0]);
+          }
+        }
+      }
+    });
 
     r.prototype.getImsis = function(){
       const d = $q.defer();
 
-      $http.get(`${baseUrl}api/profile/${this.Name}/imsi`)
+      $http.get(`${baseUrl}onos/progran/profile/${this.Name}/imsi`)
       .then(res => {
         d.resolve(res.data);
       })
@@ -20,7 +40,7 @@
     r.prototype.deleteImsis = function(){
       const d = $q.defer();
 
-      $http.delete(`${baseUrl}api/profile/${this.Name}/imsi`)
+      $http.delete(`${baseUrl}onos/progran/profile/${this.Name}/imsi`)
       .then(res => {
         d.resolve(res.data);
       })
@@ -34,7 +54,7 @@
     r.prototype.deleteImsi = function(id){
       const d = $q.defer();
 
-      $http.delete(`${baseUrl}api/profile/${this.Name}/imsi/${id}`)
+      $http.delete(`${baseUrl}onos/progran/profile/${this.Name}/imsi/${id}`)
       .then(res => {
         d.resolve(res.data);
       })
@@ -48,7 +68,7 @@
     r.prototype.getEnodes = function(){
       const d = $q.defer();
 
-      $http.get(`${baseUrl}api/profile/${this.Name}/enodeb`)
+      $http.get(`${baseUrl}onos/progran/profile/${this.Name}/enodeb`)
       .then(res => {
         d.resolve(res.data);
       })
@@ -62,7 +82,7 @@
     r.prototype.deleteEnodes = function(){
       const d = $q.defer();
 
-      $http.delete(`${baseUrl}api/profile/${this.Name}/enodeb`)
+      $http.delete(`${baseUrl}onos/progran/profile/${this.Name}/enodeb`)
       .then(res => {
         d.resolve(res.data);
       })
@@ -76,7 +96,7 @@
     r.prototype.deleteEnode = function(id){
       const d = $q.defer();
 
-      $http.delete(`${baseUrl}api/profile/${this.Name}/enodeb/${id}`)
+      $http.delete(`${baseUrl}onos/progran/profile/${this.Name}/enodeb/${id}`)
       .then(res => {
         d.resolve(res.data);
       })
