Index: /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/backup/backup.controller.js
===================================================================
--- /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/backup/backup.controller.js	(revision 2514)
+++ /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/backup/backup.controller.js	(working copy)
@@ -14,27 +14,42 @@
             let backupModel = this;
 
             backupModel.dataList = [];
+            backupModel.backupScheduleList = [];
+            backupModel.dayOfWeek = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
 
             function getBackupStatus() {
                 backupModel.dataList = [];
                 systemService
-                    .getBackupStatus()
+                    .getBackupFiles()
                     .then(function (res) {
                         if (res && res.status === 200) {
-                            let backupStatusResponse = res.data;
-                            if (!Object.keys(backupStatusResponse).includes('download_url')){
-                                backupStatusResponse['download_url'] = 'N/A';
+                            backupModel.dataList = res.data;
+                        }
+                    });
+            }
+
+            function getBackupSchedule() {
+                backupModel.backupScheduleList = [];
+                systemService
+                    .getBackupSchedule()
+                    .then(function (res) {
+                        if (res && res.status === 200) {
+                            if (res.data && res.data.message) {
+                                backupModel.backupScheduleList = [];
+                            } else {
+                                backupModel.backupScheduleList = [res.data];
                             }
-                            backupModel.dataList = [backupStatusResponse];
                         }
                     });
             }
 
             getBackupStatus();
+            getBackupSchedule();
 
             if (!angular.isDefined($scope.DataTimer)) {
                 $scope.DataTimer = $interval(function () {
                     getBackupStatus();
+                    getBackupSchedule();
                 }, 10000);
             }
 
@@ -46,13 +61,57 @@
             });
 
             backupModel.startBackup = function () {
+                let modalInstance = $uibModal.open({
+                    templateUrl: 'app/modules/system/submenu/backup/modal/initiate-backup.html',
+                    controller: 'deviceBackupModalCtrl',
+                    controllerAs: 'deviceBackupModal',
+                    resolve: {}
+                });
+                modalInstance.result.then(function (selectedItem) {
+                    if (selectedItem) {
+                        backupModel.refresh();
+                    }
+                });
+            }
+
+            backupModel.startBackupSchedule = function (payload = null) {
+                let modalData = {
+                    modalData: payload
+                }
+                let modalInstance = $uibModal.open({
+                    templateUrl: 'app/modules/system/submenu/backup/modal/initiate-schedule.html',
+                    controller: 'deviceBackupScheduleModalCtrl',
+                    controllerAs: 'deviceBackupScheduleModal',
+                    resolve: modalData
+                });
+                modalInstance.result.then(function (selectedItem) {
+                    backupModel.refresh();
+                });
+            }
+
+            backupModel.deleteBackup = function (filename) {
                 backupModel.showProgressBar();
                 systemService
-                    .startBackup({})
+                    .deleteBackup(filename)
                     .then(function (res) {
                         $rootScope.$broadcast('endLoading', true);
                         if (res && res.status === 200) {
                             $rootScope.TipService.setMessage($filter('T')(res.data.message));
+                            getBackupStatus();
+                        } else {
+                            $rootScope.TipService.setMessage($filter('T')("The attempt to back up the system failed."));
+                        }
+                    })
+            }
+            backupModel.deleteBackupSchedule = function (schedule) {
+                backupModel.showProgressBar();
+                systemService
+                    .deleteBackupSchedule()
+                    .then(function (res) {
+                        $rootScope.$broadcast('endLoading', true);
+                        if (res && res.status === 200) {
+                            $rootScope.TipService.setMessage($filter('T')(res.data.message));
+                            getBackupSchedule();
                         } else {
                             $rootScope.TipService.setMessage($filter('T')("The attempt to back up the system failed."));
                         }
@@ -78,3 +137,4 @@
         }
     ]);
 
+
Index: /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/backup/backup.html
===================================================================
--- /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/backup/backup.html	(revision 2514)
+++ /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/backup/backup.html	(working copy)
@@ -2,6 +2,48 @@
     <div class="col-lg-12">
         <div class="widget">
             <div class="widget-header">
+                <span>{{ 'Schedule Backup' | T }}</span>
+            </div>
+            <br>
+            <div class="align-right" ng-if="backup.backupScheduleList.length === 0">
+                <button class="btn btn-primary" ng-click="backup.startBackupSchedule()" style="margin-right: 4px">
+                    {{ 'Create Schedule' | T }}
+                </button>
+            </div>
+            <br>
+            <div class="table-responsive">
+                <table st-table="bScheduleCollection" st-safe-src="backup.backupScheduleList"
+                       class="table table-hover table-striped">
+                    <thead>
+                    <tr>
+                        <th class="d-num">No.</th>
+                        <th class="d-name">{{ 'Schedule' | T }}</th>
+                        <th class="d-action">{{ 'Action' | T }}</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr ng-repeat="item in bScheduleCollection">
+                        <td class="d-num">{{ $index + 1 }}</td>
+                        <td>
+                            Frequency: {{item.frequency}},
+                            <span ng-if="item.day_of_the_month != null">Day of Month: {{item.day_of_the_month}},</span>
+                            <span ng-if="item.day_of_the_week != null">Day of Week: {{backup.dayOfWeek[item.day_of_the_week]}},</span>
+                            Time : {{item.time}}</td>
+                        <td>
+                            <a class="name" ng-click="backup.startBackupSchedule(item)"> <i class="fa fa-edit"></i> </a>
+                            &nbsp;&nbsp;&nbsp;&nbsp;
+                            <a class="name" ng-click="backup.deleteBackupSchedule(item)"> <i class="fa fa-remove"></i> </a>
+                        </td>
+                    </tr>
+                    <tr ng-if="backup.backupScheduleList.length === 0">
+                        <td colspan="5" class="text-center">No matching records found.</td>
+                    </tr>
+                    </tbody>
+                </table>
+            </div>
+        </div>
+        <div class="widget">
+            <div class="widget-header">
                 <span>{{ 'Backup' | T }}</span>
             </div>
             <br>
@@ -17,22 +59,31 @@
                     <thead>
                     <tr>
                         <th class="d-num">No.</th>
+                        <th class="d-name">{{ 'Backup file name' | T }}</th>
+                        <th class="d-name">{{ 'Timestamp' | T }}</th>
                         <th class="d-name">{{ 'Status' | T }}</th>
-                        <th class="d-name">{{ 'Action' | T }}</th>
+                        <th class="d-action">{{ 'Action' | T }}</th>
                     </tr>
                     </thead>
                     <tbody>
                     <tr ng-repeat="item in displayedCollection">
                         <td class="d-num">{{ $index + 1 }}</td>
-                        <td>{{item.message}}</td>
+                        <td>{{item.filename}}</td>
+                        <td>{{item.time}}</td>
+                        <td>{{item.status}}</td>
                         <td>
-                            <a class="name" href="{{item.download_url}}" ng-if="item.download_url != 'N/A'"> <i
-                                class="fa fa-2x fa-download"></i> </a>
-                            <span ng-if="item.download_url == 'N/A'"> {{item.download_url}}</span>
+                            <a class="name" href="/backup/download?filename={{item.filename}}"
+                               ng-if="item.status == 'Completed' && item.destination == 'local'"> <i
+                                class="fa fa-download"></i> </a>
+                            &nbsp;&nbsp;&nbsp;
+                            <a class="name" ng-click="backup.deleteBackup(item.filename)"
+                               ng-if="item.status == 'Completed' && item.destination == 'local'"> <i
+                                class="fa fa-remove"></i> </a>
+                            <span ng-if="item.status != 'Completed' || item.destination == 'remote'">N/A</span>
                         </td>
                     </tr>
                     <tr ng-if="backup.dataList.length === 0">
-                        <td colspan="3" class="text-center">No matching records found.</td>
+                        <td colspan="5" class="text-center">No matching records found.</td>
                     </tr>
                     </tbody>
                 </table>
Index: /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/backup/modal/initiate-backup.controller.js
===================================================================
--- /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/backup/modal/initiate-backup.controller.js	(revision 0)
+++ /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/backup/modal/initiate-backup.controller.js	(working copy)
@@ -0,0 +1,106 @@
+angular.module('cm.system')
+    .controller('deviceBackupModalCtrl', [
+        '$scope',
+        '$rootScope',
+        '$state',
+        '$stateParams',
+        '$uibModalInstance',
+        '$uibModal',
+        'systemService',
+        '$filter',
+        'localStorageService',
+        function ($scope, $rootScope, $state, $stateParams, $uibModalInstance, $uibModal, systemService, $filter, localStorageService) {
+            let  deviceBackupModal = this;
+            deviceBackupModal.targetList = [
+                {"displayName": "Local", value: "local"},
+                {"displayName": "Remote", value: "remote"}
+            ];
+            deviceBackupModal.target = "local";
+            deviceBackupModal.ip_address = "";
+            deviceBackupModal.username = "";
+            deviceBackupModal.password = "";
+            deviceBackupModal.path = "/tmp";
+
+            deviceBackupModal.close = function () {
+                $uibModalInstance.dismiss('cancel');
+            };
+
+            deviceBackupModal.showProgressBar = function () {
+                let modalInstance = $uibModal.open({
+                    templateUrl: 'app/modules/common/templates/progress.html',
+                    controller: 'showProgressCtrl',
+                    controllerAs: 'progress',
+                    backdrop: false
+                });
+            };
+
+            function getRemoteStorageConfig() {
+                systemService
+                    .getRemoteStorageConfig()
+                    .then(function (res) {
+                        if (res && res.status === 200) {
+                            let remoteStorageConfig = res.data;
+                            if (remoteStorageConfig.ip) {
+                                deviceBackupModal.ip_address = remoteStorageConfig.ip;
+                            }
+                            if (remoteStorageConfig.username) {
+                                deviceBackupModal.username = remoteStorageConfig.username;
+                            }
+                            if (remoteStorageConfig.password) {
+                                deviceBackupModal.password = remoteStorageConfig.password;
+                            }
+                            if (remoteStorageConfig.path) {
+                                deviceBackupModal.path = remoteStorageConfig.path;
+                            }
+                        }
+                    });
+            }
+
+            deviceBackupModal.submit = function () {
+                if (deviceBackupModal.target === "remote") {
+                    updateRemoteStorage({
+                        "ip_address": deviceBackupModal.ip_address,
+                        "username": deviceBackupModal.username,
+                        "password": deviceBackupModal.password,
+                        "path": deviceBackupModal.path
+                    })
+                } else {
+                    startBackup(deviceBackupModal.target);
+                }
+            }
+
+            function startBackup(target) {
+                deviceBackupModal.showProgressBar();
+                systemService
+                    .startBackup({
+                        "backup_target": target
+                    })
+                    .then(function (res) {
+                        $rootScope.$broadcast('endLoading', true);
+                        if (res && res.status === 200) {
+                            $rootScope.TipService.setMessage($filter('T')(res.data.message));
+                            $uibModalInstance.dismiss('cancel');
+                        } else {
+                            $rootScope.TipService.setMessage($filter('T')("The attempt to back up the system failed."));
+                        }
+                    })
+            }
+
+            function updateRemoteStorage(payload) {
+                deviceBackupModal.showProgressBar();
+                systemService
+                    .updateRemoteStorageConfig(payload)
+                    .then(function (res) {
+                        $rootScope.$broadcast('endLoading', true);
+                        if (res && res.status === 200) {
+                            startBackup(deviceBackupModal.target);
+                        } else {
+                            $rootScope.TipService.setMessage($filter('T')("The attempt to back up the system failed."));
+                        }
+                    })
+            }
+
+            getRemoteStorageConfig();
+        }
+    ])
+
Index: /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/backup/modal/initiate-backup.html
===================================================================
--- /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/backup/modal/initiate-backup.html	(revision 0)
+++ /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/backup/modal/initiate-backup.html	(working copy)
@@ -0,0 +1,81 @@
+<div>
+    <div class="modal-header">
+        <button type="button" class="close" ng-click="deviceBackupModal.close()" aria-label="Close"><span
+            aria-hidden="true">&times;</span>
+        </button>
+        <h6 class="modal-title">{{ 'Create Backup' | T}}</h6>
+
+    </div>
+    <div class="modal-body">
+        <form class="form-horizontal" name="addDeviceForm" verify-scope="tipStyle: 1">
+            <div class="form-group">
+                <label for="target" class="col-md-3 control-label"><sup>*</sup>{{ 'Target' | T }}</label>
+                <div class="col-md-8">
+                    <select ng-verify="required:true" id="target" class="form-control"
+                            ng-model="deviceBackupModal.target">
+                        <option ng-repeat="row in deviceBackupModal.targetList" value="{{row.value}}">
+                            {{row.displayName}}
+                        </option>
+                    </select>
+                </div>
+            </div>
+            <div class="form-group" ng-if="deviceBackupModal.target == 'remote'">
+                <label for="target" class="col-md-3 control-label"><sup>*</sup>{{ 'IP Address' | T }}</label>
+                <div class="col-md-8">
+                    <input ng-verify="required:true" type="ip" class="form-control ip-input"
+                           ng-model="deviceBackupModal.ip_address">
+                </div>
+            </div>
+
+            <div class="form-group" ng-if="deviceBackupModal.target == 'remote'">
+                <label for="username" class="col-md-3 control-label"><sup>*</sup>{{ 'Username' | T }}</label>
+                <div class="col-md-8">
+                    <i class="array-user"></i>
+                    <input ng-verify="required:true" type="text" id="username" class="form-control"
+                           ng-model="deviceBackupModal.username" placeholder="{{ 'Username' | T}}">
+                </div>
+            </div>
+            <div class="form-group" ng-if="deviceBackupModal.target == 'remote'">
+                <label for="password" class="col-md-3 control-label"><sup>*</sup>{{ 'Password' | T }}</label>
+                <div class="col-md-8">
+                    <i class="array-password"></i>
+                    <input ng-verify="required:true" type="password" class="form-control" id="password"
+                           ng-model="deviceBackupModal.password" placeholder="{{ 'Password' | T}}">
+                </div>
+            </div>
+
+            <div class="form-group" ng-if="deviceBackupModal.target == 'remote'">
+                <label for="filePath" class="col-md-3 control-label"><sup>*</sup>{{ 'Path' | T }}</label>
+                <div class="col-md-8">
+                    <input ng-verify="required:true" type="text" class="form-control" id="filePath"
+                           ng-model="deviceBackupModal.path"
+                           maxlength="128">
+                </div>
+            </div>
+
+            <div class="form-group">
+                <div class="col-md-offset-3 col-md-8 errorMsg">{{ deviceBackupModal.failed }}</div>
+            </div>
+
+            <div class="form-group">
+                <div class="col-md-offset-3 col-md-8">
+                    <button ng-verify="control:'addDeviceForm'" class="btn btn-primary"
+                            ng-click="deviceBackupModal.submit()"
+                            id="addSubmit">{{ 'Create' | T}}
+                    </button>
+                    <button class="btn btn-default" ng-click="deviceBackupModal.close()">{{ 'Cancel' | T}}</button>
+                </div>
+            </div>
+
+        </form>
+    </div>
+
+</div>
+
+<style>
+    .modal-dialog {
+        margin-top: 30px;
+        width: 940px;
+    }
+</style>
+
Index: /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/restore/modal/initiate-restore.controller.js
===================================================================
--- /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/restore/modal/initiate-restore.controller.js	(revision 0)
+++ /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/restore/modal/initiate-restore.controller.js	(working copy)
@@ -0,0 +1,161 @@
+angular.module('cm.system')
+    .controller('deviceRestoreModalCtrl', [
+        '$scope',
+        '$rootScope',
+        '$state',
+        '$stateParams',
+        '$uibModalInstance',
+        '$uibModal',
+        'systemService',
+        '$filter',
+        'FileUploader',
+        function ($scope, $rootScope, $state, $stateParams, $uibModalInstance, $uibModal, systemService, $filter, FileUploader) {
+            let  deviceRestoreModal = this;
+            deviceRestoreModal.targetList = [
+                {"displayName": "Local", value: "local"},
+                {"displayName": "Remote", value: "remote"}
+            ];
+            deviceRestoreModal.target = "local";
+            deviceRestoreModal.ip_address = "";
+            deviceRestoreModal.username = "";
+            deviceRestoreModal.password = "";
+            deviceRestoreModal.path = "/tmp";
+
+            deviceRestoreModal.close = function () {
+                $uibModalInstance.dismiss('cancel');
+            };
+
+            deviceRestoreModal.showProgressBar = function () {
+                let modalInstance = $uibModal.open({
+                    templateUrl: 'app/modules/common/templates/progress.html',
+                    controller: 'showProgressCtrl',
+                    controllerAs: 'progress',
+                    backdrop: false
+                });
+            };
+
+            function getRemoteStorageConfig() {
+                systemService
+                    .getRemoteStorageConfig()
+                    .then(function (res) {
+                        if (res && res.status === 200) {
+                            let remoteStorageConfig = res.data;
+                            if (remoteStorageConfig.ip) {
+                                deviceRestoreModal.ip_address = remoteStorageConfig.ip;
+                            }
+                            if (remoteStorageConfig.username) {
+                                deviceRestoreModal.username = remoteStorageConfig.username;
+                            }
+                            if (remoteStorageConfig.password) {
+                                deviceRestoreModal.password = remoteStorageConfig.password;
+                            }
+                            if (remoteStorageConfig.path) {
+                                deviceRestoreModal.path = remoteStorageConfig.path;
+                            }
+                        }
+                    });
+            }
+
+            deviceRestoreModal.performDeviceRestore = function () {
+                if (deviceRestoreModal.target === "remote") {
+                    updateRemoteStorage({
+                        "ip_address": deviceRestoreModal.ip_address,
+                        "username": deviceRestoreModal.username,
+                        "password": deviceRestoreModal.password,
+                        "path": deviceRestoreModal.path,
+                        "filename": deviceRestoreModal.filename,
+                    })
+                } else {
+                    startRestore({
+                        "filename": deviceRestoreModal.filename,
+                        "backup_target": deviceRestoreModal.target
+                    });
+                }
+            }
+
+            function startRestore(payload) {
+                deviceRestoreModal.showProgressBar();
+                systemService
+                    .startRestore(payload)
+                    .then(function (res) {
+                        $rootScope.$broadcast('endLoading', true);
+                        if (res && res.status === 200) {
+                            $rootScope.TipService.setMessage($filter('T')(res.data.message) + "The system will go for a reboot. Please refresh the page after sometime.");
+                        } else {
+                            $rootScope.TipService.setMessage($filter('T')("The attempt to restore the system failed."));
+                        }
+                    })
+                deviceRestoreModal.showProgressBar();
+            }
+
+            function updateRemoteStorage(payload) {
+                deviceRestoreModal.showProgressBar();
+                systemService
+                    .updateRemoteStorageConfig(payload)
+                    .then(function (res) {
+                        $rootScope.$broadcast('endLoading', true);
+                        if (res && res.status === 200) {
+                            startRestore({
+                                "filename": deviceRestoreModal.path,
+                                "backup_target": deviceRestoreModal.target
+                            });
+                        } else {
+                            $rootScope.TipService.setMessage($filter('T')("The attempt to restore the system failed."));
+                        }
+                    })
+            }
+
+            let fileUploader = deviceRestoreModal.file_uploader = new FileUploader({
+                queueLimit: 1,
+                url: '/upload',
+                autoUpload: true,
+                removeAfterUpload: true,
+            });
+
+            fileUploader.onBeforeUploadItem = function (item) {
+                showProgressBar();
+            };
+
+            fileUploader.onSuccessItem = function (item, response, status, headers) {
+                if (!response.error) {
+                    deviceRestoreModal.local = response.files[0].url;
+                    $rootScope.$broadcast('endLoading', true);
+                }
+            };
+
+            fileUploader.onProgressItem = function (item, progress) {
+                $rootScope.$broadcast('upLoading', progress);
+            };
+
+            deviceRestoreModal.submit = function () {
+                if (deviceRestoreModal.target === "local") {
+                    let filename = document.getElementById('textfield').value;
+                    if (!filename || filename.length === 0) {
+                        $rootScope.TipService.setMessage("Please choose a valid file.");
+                        return;
+                    }
+                    deviceRestoreModal.filename = filename;
+                }
+                let confirm_msg = $filter('T')("Before initiating the system restore process, please note that your system may experience a temporary period of unavailability upon completion. Would you like to proceed with the restoration now?");
+                if (confirm(confirm_msg)) {
+                    deviceRestoreModal.performDeviceRestore();
+                }
+            }
+            let showProgressBar = function () {
+                let modalInstance = $uibModal.open({
+                    templateUrl: 'app/modules/common/templates/progress_with_value.html',
+                    controller: 'showProgressCtrlWithValue',
+                    controllerAs: 'progress',
+                    backdrop: false
+                });
+                modalInstance.result.then(function () {
+                    fileUploader.cancelAll();
+                    fileUploader.clearQueue();
+                    document.getElementById('textfield').value = "";
+                    document.getElementById('uploadfield').value = "";
+                });
+            };
+            getRemoteStorageConfig();
+        }
+    ])
+
Index: /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/restore/modal/initiate-restore.html
===================================================================
--- /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/restore/modal/initiate-restore.html	(revision 0)
+++ /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/restore/modal/initiate-restore.html	(working copy)
@@ -0,0 +1,103 @@
+<div>
+    <div class="modal-header">
+        <button type="button" class="close" ng-click="deviceRestoreModal.close()" aria-label="Close"><span
+            aria-hidden="true">&times;</span>
+        </button>
+        <h6 class="modal-title">{{ 'Restore' | T}}</h6>
+    </div>
+    <div class="modal-body">
+        <form class="form-horizontal" name="addDeviceForm" verify-scope="tipStyle: 1">
+            <div class="form-group">
+                <label for="target" class="col-md-3 control-label"><sup>*</sup>{{ 'Target' | T }}</label>
+                <div class="col-md-8">
+                    <select ng-verify="required:true" id="target" class="form-control"
+                            ng-model="deviceRestoreModal.target">
+                        <option ng-repeat="row in deviceRestoreModal.targetList" value="{{row.value}}">
+                            {{row.displayName}}
+                        </option>
+                    </select>
+                </div>
+            </div>
+            <div class="form-group" ng-if="deviceRestoreModal.target == 'local'">
+                <div class="align-right">
+                    <div class="col-md-3"></div>
+                    <div class="col-md-6">
+                        <div class="align-center">
+                            <input type="file" id="uploadBackupFile" class="file form-control" nv-file-select
+                                   uploader="deviceRestoreModal.file_uploader"
+                                   onchange="document.getElementById('textfield').value=this.value.split('\\').pop()">
+                            <input type="text" id="textfield" class="form-control">
+                        </div>
+                    </div>
+                    <div class="col-md-3"></div>
+                </div>
+            </div>
+            <div class="form-group" ng-if="deviceRestoreModal.target == 'remote'">
+                <label for="target" class="col-md-3 control-label"><sup>*</sup>{{ 'IP Address' | T }}</label>
+                <div class="col-md-8">
+                    <input ng-verify="required:true" type="ip" class="form-control ip-input"
+                           ng-model="deviceRestoreModal.ip_address">
+                </div>
+            </div>
+
+            <div class="form-group" ng-if="deviceRestoreModal.target == 'remote'">
+                <label for="username" class="col-md-3 control-label"><sup>*</sup>{{ 'Username' | T }}</label>
+                <div class="col-md-8">
+                    <i class="array-user"></i>
+                    <input ng-verify="required:true" type="text" id="username" class="form-control"
+                           ng-model="deviceRestoreModal.username" placeholder="{{ 'Username' | T}}">
+                </div>
+            </div>
+            <div class="form-group" ng-if="deviceRestoreModal.target == 'remote'">
+                <label for="password" class="col-md-3 control-label"><sup>*</sup>{{ 'Password' | T }}</label>
+                <div class="col-md-8">
+                    <i class="array-password"></i>
+                    <input ng-verify="required:true" type="password" class="form-control" id="password"
+                           ng-model="deviceRestoreModal.password" placeholder="{{ 'Password' | T}}">
+                </div>
+            </div>
+
+            <div class="form-group" ng-if="deviceRestoreModal.target == 'remote'">
+                <label for="filePath" class="col-md-3 control-label"><sup>*</sup>{{ 'Path' | T }}</label>
+                <div class="col-md-8">
+                    <input ng-verify="required:true" type="text" class="form-control" id="filePath"
+                           ng-model="deviceRestoreModal.path"
+                           maxlength="128">
+                </div>
+            </div>
+
+            <div class="form-group" ng-if="deviceRestoreModal.target == 'remote'">
+                <label for="filename" class="col-md-3 control-label"><sup>*</sup>{{ 'Filename' | T }}</label>
+                <div class="col-md-8">
+                    <input ng-verify="required:true" type="text" class="form-control" id="filename"
+                           ng-model="deviceRestoreModal.filename"
+                           maxlength="128">
+                </div>
+            </div>
+
+            <div class="form-group">
+                <div class="col-md-offset-3 col-md-8 errorMsg">{{ deviceRestoreModal.failed }}</div>
+            </div>
+
+            <div class="form-group">
+                <div class="col-md-offset-3 col-md-8">
+                    <button ng-verify="control:'addDeviceForm'" class="btn btn-primary"
+                            ng-click="deviceRestoreModal.submit()"
+                            id="addSubmit">{{ 'Restore' | T}}
+                    </button>
+                    <button class="btn btn-default" ng-click="deviceRestoreModal.close()">{{ 'Cancel' | T}}</button>
+                </div>
+            </div>
+
+        </form>
+    </div>
+
+</div>
+
+<style>
+    .modal-dialog {
+        margin-top: 30px;
+        width: 940px;
+    }
+</style>
+
Index: /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/restore/restore.controller.js
===================================================================
--- /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/restore/restore.controller.js	(revision 2514)
+++ /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/restore/restore.controller.js	(working copy)
@@ -8,8 +8,7 @@
         '$filter',
         'systemService',
         '$interval',
-        'FileUploader',
-        function ($scope, $rootScope, $state, $uibModal, $filter, systemService, $interval, FileUploader) {
+        function ($scope, $rootScope, $state, $uibModal, $filter, systemService, $interval) {
             $rootScope.title = "Restore";
             $rootScope.allow_config = true;
             let restoreModel = this;
@@ -46,17 +45,17 @@
             });
 
             restoreModel.startRestore = function () {
-                restoreModel.showProgressBar();
-                systemService
-                    .startRestore({})
-                    .then(function (res) {
-                        $rootScope.$broadcast('endLoading', true);
-                        if (res && res.status === 200) {
-                            $rootScope.TipService.setMessage($filter('T')(res.data.message));
-                        } else {
-                            $rootScope.TipService.setMessage($filter('T')("The attempt to back up the system failed."));
-                        }
-                    })
+                let modalInstance = $uibModal.open({
+                    templateUrl: 'app/modules/system/submenu/restore/modal/initiate-restore.html',
+                    controller: 'deviceRestoreModalCtrl',
+                    controllerAs: 'deviceRestoreModal',
+                    resolve: {}
+                });
+                modalInstance.result.then(function (selectedItem) {
+                    if (selectedItem) {
+                        restoreModel.refresh();
+                    }
+                });
             }
 
             restoreModel.showProgressBar = function () {
@@ -74,68 +73,6 @@
                     $rootScope.$broadcast('endLoading', true);
                 });
             };
-
-            let showProgressBar = function () {
-                let modalInstance = $uibModal.open({
-                    templateUrl: 'app/modules/common/templates/progress_with_value.html',
-                    controller: 'showProgressCtrlWithValue',
-                    controllerAs: 'progress',
-                    backdrop: false
-                });
-                modalInstance.result.then(function () {
-                    fileUploader.cancelAll();
-                    fileUploader.clearQueue();
-                    document.getElementById('textfield').value = "";
-                    document.getElementById('uploadfield').value = "";
-                });
-            };
-
-            let fileUploader = restoreModel.file_uploader = new FileUploader({
-                queueLimit: 1,
-                url: '/upload',
-                autoUpload: true,
-                removeAfterUpload: true,
-            });
-
-            fileUploader.onBeforeUploadItem = function (item) {
-                showProgressBar();
-            };
-
-            fileUploader.onSuccessItem = function (item, response, status, headers) {
-                if (!response.error) {
-                    restoreModel.local = response.files[0].url;
-                    $rootScope.$broadcast('endLoading', true);
-                }
-            };
-
-            fileUploader.onProgressItem = function (item, progress) {
-                $rootScope.$broadcast('upLoading', progress);
-            };
-
-            restoreModel.submit = function () {
-                let filename = document.getElementById('textfield').value;
-                if (!filename || filename.length === 0) {
-                    $rootScope.TipService.setMessage("Please choose a valid file.");
-                    return;
-                }
-                let confirm_msg = $filter('T')("Before initiating the system restore process, please note that your system may experience a temporary period of unavailability upon completion. Would you like to proceed with the restoration now?");
-                if (confirm(confirm_msg)) {
-                    restoreModel.showProgressBar();
-                    systemService
-                        .startRestore({"filename": filename})
-                        .then(function (res) {
-                            $rootScope.$broadcast('endLoading', true);
-                            if (res && res.status === 200) {
-                                if (res.data && res.data.error === 400) {
-                                    $rootScope.TipService.setMessage(res.data.message);
-                                    $rootScope.$broadcast('endLoading', true);
-                                }
-                            } else {
-                                $rootScope.TipService.setMessage("Failed to restore the AMP, please try again.");
-                                $rootScope.$broadcast('endLoading', true);
-                            }
-                        })
-                }
-            }
         }
     ]);
+
Index: /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/restore/restore.html
===================================================================
--- /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/restore/restore.html	(revision 2514)
+++ /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/restore/restore.html	(working copy)
@@ -5,7 +5,8 @@
                 <span>{{ 'Restore' | T }}</span>
             </div>
             <br>
-            <div class="align-right" ng-if="">
+            <div class="align-right"
+                 ng-if="restore.status=='Not started' || restore.status=='N/A' || restore.status=='Completed' || restore.status=='Failed'">
                 <button class="btn btn-primary" ng-click="restore.startRestore()" style="margin-right: 4px">
                     {{ 'Create Restore' | T }}
                 </button>
@@ -19,26 +20,16 @@
                     </div>
                 </div>
                 <div class="form-group"
-                     ng-if="restore.status=='N/A' || restore.status=='Completed' || restore.status=='FAILED'">
+                     ng-if="restore.status=='N/A' || restore.status=='Completed' || restore.status=='Failed'">
                     <div ng-if="restore.status=='Completed'">
-                        <span class="system-restore success">The recent system restore operation has been completed successfully.</span>
+                        <div class="align-center">
+                            <span class="system-restore success">The recent system restore operation has been completed successfully.</span>
+                        </div>
                     </div>
                     <div ng-if="restore.status=='Failed'">
-                        <span class="system-restore failure">An error occurred during the recent system restore operation.</span>
-                    </div>
-                    <div class="align-right">
-                        <div class="col-md-3"></div>
-                        <div class="col-md-6">
-                            <div class="align-center">
-                                <input type="file" id="uploadBackupFile" class="file form-control" nv-file-select
-                                       uploader="restore.file_uploader"
-                                       onchange="document.getElementById('textfield').value=this.value.split('\\').pop()">
-                                <input type="text" id="textfield" class="form-control">
-                                <br>
-                                <button class="btn btn-primary" ng-click="restore.submit()">{{'Restore' | T}}</button>
-                            </div>
+                        <div class="align-center">
+                            <span class="system-restore failure">An error occurred during the recent system restore operation.</span>
                         </div>
-                        <div class="col-md-3"></div>
                     </div>
                 </div>
             </div>
@@ -73,3 +64,4 @@
     }
 </style>
 
+
Index: /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/system.service.js
===================================================================
--- /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/system.service.js	(revision 2514)
+++ /branches/amp_3_7/src/webui/webui/htdocs/new/src/client/app/modules/system/system.service.js	(working copy)
@@ -81,9 +81,19 @@
                 //Backup
                 getBackupStatus: getBackupStatus,
                 startBackup: startBackup,
+                getBackupFiles: getBackupFiles,
+                getRemoteStorageConfig: getRemoteStorageConfig,
+                updateRemoteStorageConfig: updateRemoteStorageConfig,
+                deleteBackup: deleteBackup,
+
                 //Restore from Backup
                 getRestoreStatus: getRestoreStatus,
                 startRestore: startRestore,
+
+                // Schedule Backup
+                getBackupSchedule: getBackupSchedule,
+                updateBackupSchedule: updateBackupSchedule,
+                deleteBackupSchedule: deleteBackupSchedule,
             };
 
             function getUpdateVersion() {
@@ -370,8 +380,20 @@
             function getBackupStatus() {
                 return apiService.get('/backup/status');
             }
+            function getBackupFiles() {
+                return apiService.get('/backup/files');
+            }
             function startBackup(payload) {
-                return apiService.post2('/backup/start', payload);
+                return apiService.post2('/backup/start', JSON.stringify(payload));
+            }
+            function deleteBackup(filename) {
+                return apiService.delete('/backup/file?filename=' + filename);
+            }
+            function getRemoteStorageConfig() {
+                return apiService.get('/backup/remote_storage');
+            }
+            function updateRemoteStorageConfig(payload) {
+                return apiService.post2('/backup/remote_storage', JSON.stringify(payload));
             }
             function getRestoreStatus() {
                 return apiService.get('/restore/status');
@@ -379,4 +401,14 @@
             function startRestore(payload) {
                 return apiService.post2('/restore/start', JSON.stringify(payload));
             }
+            function getBackupSchedule() {
+                return apiService.get('/backup/schedule');
+            }
+            function updateBackupSchedule(payload) {
+                return apiService.post2('/backup/schedule', JSON.stringify(payload));
+            }
+            function deleteBackupSchedule() {
+                return apiService.delete('/backup/schedule');
+            }
         }]);
+
