diff --git a/mCordPortal/src/app/services/helpers.js b/mCordPortal/src/app/services/helpers.js
index c8772a2..9386dd9 100644
--- a/mCordPortal/src/app/services/helpers.js
+++ b/mCordPortal/src/app/services/helpers.js
@@ -23,7 +23,26 @@
       return new Date(
         start.getTime() + Math.random() * (end.getTime() - start.getTime())
       );
-    }
+    };
+
+    this.stringToTime = (string) => {
+      let jsDate;
+      jsDate = new Date();
+
+      let [date, time] = string.split(' ');
+
+      let [day, month, year] = date.split('.');
+      let [hour, minute] = time.split(':');
+
+
+      jsDate.setYear(year);
+      jsDate.setMonth(month);
+      jsDate.setDate(day);
+      jsDate.setHours(hour);
+      jsDate.setMinutes(minute);
+
+      return jsDate;
+    };
   })
   .factory('_', function(){
     return window._;
diff --git a/mCordPortal/src/app/services/rest/enodeb.js b/mCordPortal/src/app/services/rest/enodeb.js
index d7d0f7c..9c1d2a2 100644
--- a/mCordPortal/src/app/services/rest/enodeb.js
+++ b/mCordPortal/src/app/services/rest/enodeb.js
@@ -1,6 +1,6 @@
 (function () {
   angular.module('mCord')
-  .service('Enodeb', function($injector, $resource, $q, $http, baseUrl){
+  .service('Enodeb', function($injector, $resource, $q, $http, baseUrl, Helpers){
     const r = $resource(`${baseUrl}onos/progran/enodeb/:id`, {id: '@eNBId'}, {
       //save: {method: 'PUT'},
       query: {
@@ -42,6 +42,11 @@
 
       $http.get(`${baseUrl}onos/progran/enodeb/${this.eNBId}/profile`)
       .then(res => {
+        res.data = res.data.map(p => {
+          p.jsStart = Helpers.stringToTime(p.Start);
+          p.jsEnd = Helpers.stringToTime(p.End);
+          return p;
+        })
         d.resolve(res.data);
       })
       .catch(err => {
diff --git a/mCordPortal/src/app/services/rest/profiles.js b/mCordPortal/src/app/services/rest/profiles.js
index 5a7d435..432c25a 100644
--- a/mCordPortal/src/app/services/rest/profiles.js
+++ b/mCordPortal/src/app/services/rest/profiles.js
@@ -1,6 +1,7 @@
 (function () {
+
   angular.module('mCord')
-  .service('Profile', function($injector, $resource, $q, $http, baseUrl){
+  .service('Profile', function($injector, $resource, $q, $http, baseUrl, Helpers){
     const r = $resource(`${baseUrl}onos/progran/profile/:id`, {id: '@Name'}, {
       save: {
         method: 'PUT'
@@ -13,7 +14,11 @@
         interceptor: {
           response: function(res){
             const Profile = $injector.get('Profile');
-            return res.data.ProfileArray.map(p => new Profile(p));
+            return res.data.ProfileArray.map(p => new Profile(p)).map(p => {
+              p.jsStart = Helpers.stringToTime(p.Start);
+              p.jsEnd = Helpers.stringToTime(p.End);
+              return p;
+            });
           }
         }
       },
@@ -22,6 +27,8 @@
         interceptor: {
           response: function(res){
             const Profile = $injector.get('Profile');
+            res.data.ProfileArray[0].jsStart = Helpers.stringToTime(res.data.ProfileArray[0].Start);
+            res.data.ProfileArray[0].jsEnd = Helpers.stringToTime(res.data.ProfileArray[0].End);
             return new Profile(res.data.ProfileArray[0]);
           }
         }
@@ -42,6 +49,18 @@
       return {$promise: d.promise};
     };
 
+    r.prototype.$save = function(){
+      const d = $q.defer();
+      $http.put(`${baseUrl}onos/progran/profile/${this.Name}`, this)
+        .then(res => {
+          d.resolve(res.data);
+        })
+        .catch(err => {
+          d.reject(err)
+        });
+      return {$promise: d.promise};
+    };
+
     r.prototype.getImsis = function(){
       const d = $q.defer();
 
