Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/package.json
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/package.json	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/package.json	(working copy)
@@ -25,8 +25,10 @@
     "@fortawesome/fontawesome-svg-core": "^6.7.2",
     "@fortawesome/free-regular-svg-icons": "^6.7.2",
     "@fortawesome/free-solid-svg-icons": "^6.7.2",
+    "@types/file-saver": "^2.0.7",
     "echarts": "^5.6.0",
     "express": "^5.1.0",
+    "file-saver": "^2.0.5",
     "ngx-echarts": "^20.0.1",
     "rxjs": "~7.8.0",
     "tslib": "^2.3.0",
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/app.routes.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/app.routes.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/app.routes.ts	(working copy)
@@ -28,6 +28,8 @@
 import {DeviceSslOverview} from './components/sub-components/device-ssl-overview/device-ssl-overview';
 import {DeviceHaOverview} from './components/sub-components/device-ha-overview/device-ha-overview';
 import {DeviceHa} from './components/device-ha/device-ha';
+import {Topology} from './components/topology/topology';
+import {DummyComponent} from './components/sub-components/dummy-component/dummy-component';
 
 
 export const routes: Routes = [
@@ -101,25 +103,55 @@
         path: 'device',
         children: [
           {
-            path: 'ha',
+            path: 'apv/ha',
             component: DeviceHa,
             data: {roles: ['super_admin', 'device_admin', 'common_admin']}
           },
           {
-            path: 'ha/details/:deviceName',
+            path: 'apv/ha/details/:deviceName',
             component: DeviceHaOverview,
             data: {roles: ['super_admin', 'device_admin', 'common_admin']}
           },
           {
-            path: 'ssl',
+            path: 'apv/ssl',
             component: DeviceSsl,
             data: {roles: ['super_admin', 'device_admin', 'common_admin']}
           },
           {
-            path: 'ssl/details/:deviceName/:serviceName/:hostName',
+            path: 'apv/ssl/details/:deviceName/:serviceName/:hostName',
             component: DeviceSslOverview,
             data: {roles: ['super_admin', 'device_admin', 'common_admin']}
           },
+          {
+            path: 'apv/slb',
+            component: Topology,
+            data: {roles: ['super_admin', 'device_admin', 'common_admin']}
+          },
+          {
+            path: 'ssl-vpn',
+            children: [
+              {
+                path: '',
+                component: VpnManagement,
+                data: {roles: ['super_admin', 'device_admin', 'common_admin']}
+              },
+              {
+                path: 'details/acl/:deviceName/:serviceName/:groupName',
+                component: VpnAclGroups,
+                data: {roles: ['super_admin', 'device_admin', 'common_admin']}
+              },
+              {
+                path: 'details/vpn-resource/:deviceName/:serviceName/:groupName',
+                component: VpnResourceGroupOverview,
+                data: {roles: ['super_admin', 'device_admin', 'common_admin']}
+              },
+              {
+                path: 'details/:deviceName/:serviceName',
+                component: VpnDetailsOverview,
+                data: {roles: ['super_admin', 'device_admin', 'common_admin']}
+              },
+            ]
+          },
         ]
       },
       {
@@ -138,31 +170,6 @@
         ]
       },
       {
-        path: 'vpn-management',
-        children: [
-          {
-            path: '',
-            component: VpnManagement,
-            data: {roles: ['super_admin', 'device_admin', 'common_admin']}
-          },
-          {
-            path: 'details/acl/:deviceName/:serviceName/:groupName',
-            component: VpnAclGroups,
-            data: {roles: ['super_admin', 'device_admin', 'common_admin']}
-          },
-          {
-            path: 'details/vpn-resource/:deviceName/:serviceName/:groupName',
-            component: VpnResourceGroupOverview,
-            data: {roles: ['super_admin', 'device_admin', 'common_admin']}
-          },
-          {
-            path: 'details/:deviceName/:serviceName',
-            component: VpnDetailsOverview,
-            data: {roles: ['super_admin', 'device_admin', 'common_admin']}
-          },
-        ]
-      },
-      {
         path: 'upgrade-centre',
         component: UpgradeCentre,
         data: {roles: ['super_admin', 'device_admin', 'common_admin']}
@@ -182,7 +189,7 @@
         ]
       },
       {path: '', redirectTo: 'dashboard', pathMatch: 'full'},
-      {path: '**', redirectTo: 'dashboard'}
+      // {path: '**', redirectTo: 'dashboard'}
     ]
   },
   {path: '**', redirectTo: 'login'}
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/device-ha-overview/device-ha-overview.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/device-ha-overview/device-ha-overview.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/device-ha-overview/device-ha-overview.ts	(working copy)
@@ -34,7 +34,7 @@
   }
 
   managedHADevices(): void {
-    this.router.navigate(['/device/ha']);
+    this.router.navigate(['/device/apv/ha']);
   }
 
   ngOnInit(): void {
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/device-ssl-overview/device-ssl-overview.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/device-ssl-overview/device-ssl-overview.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/device-ssl-overview/device-ssl-overview.ts	(working copy)
@@ -55,7 +55,7 @@
   }
 
   backToSSLCertificateManagement(): void {
-    this._router.navigate(['/device/ssl']);
+    this._router.navigate(['/device/apv/ssl']);
   }
 
   private updateQueryParams(tabIndex: number): void {
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/real-services-topology-overview/real-services-topology-overview.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/real-services-topology-overview/real-services-topology-overview.html	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/real-services-topology-overview/real-services-topology-overview.html	(working copy)
@@ -0,0 +1 @@
+<p>real-services-topology-overview works!</p>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/real-services-topology-overview/real-services-topology-overview.scss	(added)
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/real-services-topology-overview/real-services-topology-overview.scss	(revision 0)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/real-services-topology-overview/real-services-topology-overview.scss	(revision 0)
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/real-services-topology-overview/real-services-topology-overview.spec.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/real-services-topology-overview/real-services-topology-overview.spec.ts	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/real-services-topology-overview/real-services-topology-overview.spec.ts	(working copy)
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { RealServicesTopologyOverview } from './real-services-topology-overview';
+
+describe('RealServicesTopologyOverview', () => {
+  let component: RealServicesTopologyOverview;
+  let fixture: ComponentFixture<RealServicesTopologyOverview>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [RealServicesTopologyOverview]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(RealServicesTopologyOverview);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/real-services-topology-overview/real-services-topology-overview.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/real-services-topology-overview/real-services-topology-overview.ts	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/real-services-topology-overview/real-services-topology-overview.ts	(working copy)
@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+
+@Component({
+  selector: 'app-real-services-topology-overview',
+  imports: [],
+  templateUrl: './real-services-topology-overview.html',
+  styleUrl: './real-services-topology-overview.scss'
+})
+export class RealServicesTopologyOverview {
+
+}
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-real-service-overview/slb-real-service-overview.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-real-service-overview/slb-real-service-overview.html	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-real-service-overview/slb-real-service-overview.html	(nonexistent)
@@ -1 +0,0 @@
-<p>slb-real-service-overview works!</p>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-real-service-overview/slb-real-service-overview.scss	(deleted)
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-real-service-overview/slb-real-service-overview.scss	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-real-service-overview/slb-real-service-overview.scss	(working copy)
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-real-service-overview/slb-real-service-overview.spec.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-real-service-overview/slb-real-service-overview.spec.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-real-service-overview/slb-real-service-overview.spec.ts	(nonexistent)
@@ -1,23 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { SlbRealServiceOverview } from './slb-real-service-overview';
-
-describe('SlbRealServiceOverview', () => {
-  let component: SlbRealServiceOverview;
-  let fixture: ComponentFixture<SlbRealServiceOverview>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      imports: [SlbRealServiceOverview]
-    })
-    .compileComponents();
-
-    fixture = TestBed.createComponent(SlbRealServiceOverview);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-real-service-overview/slb-real-service-overview.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-real-service-overview/slb-real-service-overview.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-real-service-overview/slb-real-service-overview.ts	(nonexistent)
@@ -1,11 +0,0 @@
-import { Component } from '@angular/core';
-
-@Component({
-  selector: 'app-slb-real-service-overview',
-  imports: [],
-  templateUrl: './slb-real-service-overview.html',
-  styleUrl: './slb-real-service-overview.scss'
-})
-export class SlbRealServiceOverview {
-
-}
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-topology/slb-topology.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-topology/slb-topology.html	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-topology/slb-topology.html	(nonexistent)
@@ -1 +0,0 @@
-<p>slb-topology works!</p>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-topology/slb-topology.scss	(deleted)
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-topology/slb-topology.scss	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-topology/slb-topology.scss	(working copy)
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-topology/slb-topology.spec.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-topology/slb-topology.spec.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-topology/slb-topology.spec.ts	(nonexistent)
@@ -1,23 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { SlbTopology } from './slb-topology';
-
-describe('SlbTopology', () => {
-  let component: SlbTopology;
-  let fixture: ComponentFixture<SlbTopology>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      imports: [SlbTopology]
-    })
-    .compileComponents();
-
-    fixture = TestBed.createComponent(SlbTopology);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-topology/slb-topology.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-topology/slb-topology.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/slb-topology/slb-topology.ts	(nonexistent)
@@ -1,11 +0,0 @@
-import { Component } from '@angular/core';
-
-@Component({
-  selector: 'app-slb-topology',
-  imports: [],
-  templateUrl: './slb-topology.html',
-  styleUrl: './slb-topology.scss'
-})
-export class SlbTopology {
-
-}
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/system-backup-restore/system-backup-restore.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/system-backup-restore/system-backup-restore.html	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/system-backup-restore/system-backup-restore.html	(working copy)
@@ -32,10 +32,18 @@
           <th mat-header-cell *matHeaderCellDef class="action-header w-10"> Action</th>
           <td mat-cell *matCellDef="let element">
             <div class="row-action a-link">
-              <fa-icon [icon]="['far', 'circle-down']" size="lg"
-                       [ngClass]="{'disabled-icon': element?.status !== 'Completed'}"
-                       matTooltip="Download Backup"
-                       (click)="element?.status === 'Completed' && downloadBackup(element)"></fa-icon>
+              @if (element?.status === 'Completed') {
+                <a [href]="'/api/backup/download?filename=' + element?.filename"
+                   [download]="element?.filename"
+                   target="_blank"
+                   rel="noopener">
+                  <fa-icon [icon]="['far', 'circle-down']" size="lg" matTooltip="Download Backup"></fa-icon>
+                </a>
+              } @else {
+                <fa-icon [icon]="['far', 'circle-down']" size="lg"
+                         [ngClass]="{'disabled-icon': element?.status !== 'Completed'}"
+                         matTooltip="Download Backup"></fa-icon>
+              }
               <fa-icon [icon]="['far', 'trash-can']" size="lg" class="delete-icon"
                        matTooltip="Delete Backup" (click)="deleteBackup(element)"></fa-icon>
             </div>
@@ -115,7 +123,7 @@
       <button mat-raised-button (click)="restoreBackup()" matTooltip="Restore from Backup">Restore</button>
     </div>
     <div style="text-align: center;">
-      <p><b>Last update: </b>{{systemRestoreStatus.status}} - {{systemRestoreStatus.message}}</p>
+      <p><b>Last update: </b>{{ systemRestoreStatus.status }} - {{ systemRestoreStatus.message }}</p>
     </div>
     <div style="text-align: center;">
       <p><b>Note: </b>The restore process will substitute your current information with the backup data.</p>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/system-backup-restore/system-backup-restore.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/system-backup-restore/system-backup-restore.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/system-backup-restore/system-backup-restore.ts	(working copy)
@@ -1,4 +1,13 @@
-import {AfterViewInit, ChangeDetectorRef, Component, inject, OnDestroy, OnInit, ViewChild} from '@angular/core';
+import {
+  AfterViewInit,
+  ChangeDetectorRef,
+  Component,
+  ElementRef,
+  inject,
+  OnDestroy,
+  OnInit,
+  ViewChild
+} from '@angular/core';
 import {SystemService} from '../../../services/system-service';
 import {SharedModule} from '../../../shared/shared-module';
 import {take} from 'rxjs/operators';
@@ -9,7 +18,9 @@
 import {FormBuilder, FormGroup, Validators} from '@angular/forms';
 import {CustomValidators} from '../../../utils/custom-validators';
 import {MatPaginator} from '@angular/material/paginator';
-import {Subject} from 'rxjs';
+import {catchError, Subject, throwError} from 'rxjs';
+import {HttpClient, HttpErrorResponse} from '@angular/common/http';
+import {saveAs} from 'file-saver';
 
 @Component({
   selector: 'app-system-backup-restore',
@@ -43,6 +54,7 @@
     private notification: NotificationService,
     private confirmationService: Confirmation,
     private cdRef: ChangeDetectorRef,
+    private _http: HttpClient,
   ) {
   }
 
@@ -173,18 +185,6 @@
     })
   }
 
-  downloadBackup(_schedule: any) {
-    const filename: string = _schedule?.filename;
-    const downloadUrl = `/backup/download?filename=${filename}`;
-
-    const link = document.createElement('a');
-    link.href = downloadUrl;
-    link.download = filename;
-    document.body.appendChild(link);
-    link.click();
-    document.body.removeChild(link);
-  }
-
   deleteBackup(_schedule: any) {
     let confirmMsg = `Are you sure you want to delete "${_schedule?.filename}"? This action cannot be undone.`
     this.confirmationService.openConfirmDialog({
@@ -249,8 +249,13 @@
       })
   }
 
-  // ToDo: Implement Restore System Backup functionality.
   restoreBackup() {
+    const dialogRef = this.dialog.open(SystemRestoreDialog, this.dialogConfig);
+    dialogRef.afterClosed().subscribe((isCreated: boolean) => {
+      if (isCreated) {
+        this.getSystemBackupFiles();
+      }
+    })
   }
 
   ngOnDestroy(): void {
@@ -498,11 +503,188 @@
         },
         error: () => {
           this.notification.showError('Failed to create the backup.');
+        }
+      })
+  }
+
+  onCancel() {
+    this.dialogRef.close(false);
+  }
+}
+
+@Component({
+  selector: 'system-restore',
+  templateUrl: './system-restore.html',
+  imports: [SharedModule]
+})
+export class SystemRestoreDialog implements OnInit {
+
+  readonly data = inject(MAT_DIALOG_DATA);
+  readonly dialogRef = inject(MatDialogRef<SystemRestoreDialog>);
+  configForm: FormGroup;
+
+  constructor(
+    private _fB: FormBuilder,
+    private _system: SystemService,
+    private _notification: NotificationService,
+    private _cdRef: ChangeDetectorRef,
+  ) {
+    this.configForm = this._fB.group({
+      backup_target: ['local', [Validators.required]],
+      upload_file: ['', [Validators.required]],
+      upload_path: ['', [Validators.required]],
+      ip: ['', [Validators.required, CustomValidators.ipv4()]],
+      username: ['', [Validators.required]],
+      password: ['', [Validators.required]],
+      path: ['/var', [Validators.required]],
+      filename: ['', [Validators.required]],
+    });
+  }
+
+  ngOnInit() {
+    this.updateValidators(this.configForm.get('backup_target')?.value);
+    this.configForm.get('backup_target')?.valueChanges.subscribe(target => {
+      this.updateValidators(target);
+    });
+    setTimeout(() => {
+      this.getSystemBackupRemoteStorage();
+    })
+  }
+
+  private updateValidators(target: string) {
+    const uploadFileControl: any = this.configForm.get('upload_file');
+    const remoteControls = [
+      this.configForm.get('ip'),
+      this.configForm.get('username'),
+      this.configForm.get('password'),
+      this.configForm.get('path'),
+      this.configForm.get('filename'),
+    ];
+
+    if (target === 'local') {
+      // Set validators for local backup fields
+      uploadFileControl.setValidators([Validators.required]);
+
+      // Clear validators for remote backup fields
+      remoteControls.forEach((control: any) => control?.clearValidators());
+
+    } else if (target === 'remote') {
+      // Set validators for remote backup fields
+      this.configForm.get('ip')?.setValidators([Validators.required, CustomValidators.ipv4()]);
+      this.configForm.get('username')?.setValidators([Validators.required]);
+      this.configForm.get('password')?.setValidators([Validators.required]);
+      this.configForm.get('path')?.setValidators([Validators.required]);
+      this.configForm.get('filename')?.setValidators([Validators.required]);
+
+      // Clear validators for local backup fields
+      uploadFileControl.clearValidators();
+    }
+
+    // After changing validators, manually update the validity of the form controls.
+    uploadFileControl.updateValueAndValidity();
+    remoteControls.forEach((control: any) => control?.updateValueAndValidity());
+
+    // Force change detection to reflect the new validation status in the UI
+    this._cdRef.detectChanges();
+  }
+
+  getSystemBackupRemoteStorage() {
+    this._system.getSystemBackupRemoteStorage()
+      .pipe(take(1)).subscribe({
+      next: (result: any) => {
+        this.configForm.patchValue(result);
+        this._cdRef.detectChanges();
+      },
+      error: (error: any) => {
+        this._notification.showError(`Error: ${error?.message}`);
+      }
+    })
+  }
+
+  onSubmit() {
+    if (this.configForm.invalid) {
+      console.log(this.configForm.value);
+      this.configForm.markAllAsTouched();
+      return;
+    }
+    if (this.configForm.value.backup_target === 'local') {
+      this.createSystemRestore({backup_target: this.configForm.value.backup_target, filename: this.selectedFile?.name});
+    } else {
+      this.updateSystemBackupRemoteStorage(this.configForm.value);
+    }
+  }
+
+  updateSystemBackupRemoteStorage(payload: any) {
+    this._system.updateSystemBackupRemoteStorage(payload)
+      .pipe(take(1))
+      .subscribe({
+        next: (result: any) => {
+          this.createSystemRestore({backup_target: this.configForm.value.backup_target});
+        },
+        error: () => {
+          this._notification.showError('Failed to create the backup.');
         }
       })
   }
 
+  createSystemRestore(payload: any) {
+    this._system.createSystemRestore(payload)
+      .pipe(take(1))
+      .subscribe({
+        next: (result: any) => {
+          this.dialogRef.close(true);
+        },
+        error: () => {
+          this._notification.showError('Failed to perform the system restore backup.');
+        }
+      })
+  }
+
   onCancel() {
     this.dialogRef.close(false);
   }
+
+  selectedFile: File | null = null;
+  upload_path: string = '';
+
+  onFileUploadToServer(event: Event): void {
+    const input = event.target as HTMLInputElement;
+    const file = input.files?.[0];
+
+    if (!file) {
+      this.selectedFile = null;
+      this.upload_path = '';
+      this.configForm.get('upload_file')?.setValue(null);
+      this.configForm.get('upload_path')?.setValue(null);
+      this.configForm.get('upload_file')?.updateValueAndValidity();
+      this.configForm.get('upload_path')?.updateValueAndValidity();
+      return;
+    }
+
+    this.selectedFile = file;
+
+    let payload = new FormData();
+    payload.append('file', file, file.name);
+
+    this._system.upload(null, payload)
+      .pipe(take(1))
+      .subscribe({
+        next: (result: any) => {
+          if (result.files && result.files.length > 0) {
+            this.upload_path = result.files[0].url;
+            this.configForm.get('upload_path')?.setValue(this.upload_path);
+            this.configForm.get('upload_path')?.updateValueAndValidity();
+          }
+        },
+        error: error => {
+          this._notification.showError(`Error: ${error?.message || 'File upload failed'}`);
+          console.error('File upload error:', error);
+          this.selectedFile = null;
+          this.upload_path = '';
+          this.configForm.get('upload_path')?.setValue(null);
+          this.configForm.get('upload_path')?.updateValueAndValidity();
+          input.value = '';
+        }
+      });
+  }
 }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/system-backup-restore/system-restore.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/system-backup-restore/system-restore.html	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/system-backup-restore/system-restore.html	(working copy)
@@ -0,0 +1,150 @@
+<h2 mat-dialog-title>Restore</h2>
+<mat-dialog-content>
+  <form
+    (ngSubmit)="onSubmit()"
+    [formGroup]="configForm"
+  >
+    <div class="form-field-wrapper">
+      <label for="backup_target" class="form-label">Backup Target *</label>
+      <mat-radio-group formControlName="backup_target">
+        <mat-radio-button value="local">Local</mat-radio-button>
+        <mat-radio-button value="remote">Remote</mat-radio-button>
+      </mat-radio-group>
+    </div>
+    @if (configForm.get('backup_target')?.value == 'local') {
+      <div class="form-field-wrapper">
+        <label for="upload_file" class="form-label">Upload Build File *</label>
+        <input formControlName="upload_file" type="file" (change)="onFileUploadToServer($event)">
+        @if (configForm.get('upload_file')?.invalid && configForm.get('upload_file')?.touched) {
+          <mat-error>
+            @if (configForm.get('upload_file')?.errors?.['required']) {
+              Backup file is required.
+            } @else {
+              Invalid package format.
+            }
+          </mat-error>
+        }
+      </div>
+    } @else if (configForm.get('backup_target')?.value == 'remote') {
+      <div class="form-field-wrapper">
+        <label for="ip" class="form-label">IP Address *</label>
+        <mat-form-field appearance="outline" subscriptSizing="dynamic">
+          <input
+            id="ip"
+            formControlName="ip"
+            matInput
+            placeholder="IP Address"
+            type="text"
+          />
+          @if (configForm.get('ip')?.invalid && configForm.get('ip')?.touched) {
+            <mat-error>
+              @if (configForm.get('ip')?.errors?.['required']) {
+                IPv4 address is required.
+              } @else if (configForm.get('ip')?.errors?.['ipv4']) {
+                Invalid IPv4 address format.
+              }
+            </mat-error>
+          }
+        </mat-form-field>
+      </div>
+      <div class="form-field-wrapper">
+        <label for="username" class="form-label">Username *</label>
+        <mat-form-field appearance="outline" subscriptSizing="dynamic">
+          <input
+            id="username"
+            formControlName="username"
+            matInput
+            placeholder="Username"
+            type="text"
+          />
+          @if (configForm.get('username')?.invalid && configForm.get('username')?.touched) {
+            <mat-error>
+              @if (configForm.get('username')?.errors?.['required']) {
+                Username is required.
+              } @else if (configForm.get('username')?.errors) {
+                Invalid username format.
+              }
+            </mat-error>
+          }
+        </mat-form-field>
+      </div>
+      <div class="form-field-wrapper">
+        <label for="password" class="form-label">Password *</label>
+        <mat-form-field appearance="outline" subscriptSizing="dynamic">
+          <input
+            id="password"
+            formControlName="password"
+            matInput
+            placeholder="Password"
+            type="password"
+          />
+          @if (configForm.get('password')?.invalid && configForm.get('password')?.touched) {
+            <mat-error>
+              @if (configForm.get('password')?.errors?.['required']) {
+                Password is required.
+              } @else if (configForm.get('password')?.errors) {
+                Invalid password format.
+              }
+            </mat-error>
+          }
+        </mat-form-field>
+      </div>
+      <div class="form-field-wrapper">
+        <label for="path" class="form-label">Path *</label>
+        <mat-form-field appearance="outline" subscriptSizing="dynamic">
+          <input
+            id="path"
+            formControlName="path"
+            matInput
+            placeholder="Path"
+            type="text"
+          />
+          @if (configForm.get('path')?.invalid && configForm.get('path')?.touched) {
+            <mat-error>
+              @if (configForm.get('path')?.errors?.['required']) {
+                Path is required.
+              } @else if (configForm.get('path')?.errors) {
+                Invalid path format.
+              }
+            </mat-error>
+          }
+        </mat-form-field>
+      </div>
+      <div class="form-field-wrapper">
+        <label for="filename" class="form-label">Filename *</label>
+        <mat-form-field appearance="outline" subscriptSizing="dynamic">
+          <input
+            id="filename"
+            formControlName="filename"
+            matInput
+            placeholder="Filename"
+            type="text"
+          />
+          @if (configForm.get('filename')?.invalid && configForm.get('filename')?.touched) {
+            <mat-error>
+              @if (configForm.get('filename')?.errors?.['required']) {
+                Filename is required.
+              } @else if (configForm.get('filename')?.errors) {
+                Invalid filename format.
+              }
+            </mat-error>
+          }
+        </mat-form-field>
+      </div>
+    }
+  </form>
+</mat-dialog-content>
+<mat-dialog-actions>
+  <button
+    mat-button
+    color="basic"
+    (click)="onCancel()">
+    Cancel
+  </button>
+  <button
+    mat-raised-button
+    color="primary"
+    (click)="onSubmit()">
+    Submit
+  </button>
+</mat-dialog-actions>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.html	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.html	(working copy)
@@ -0,0 +1,97 @@
+<div class="table-container">
+  <table mat-table [dataSource]="dataSource" class="mat-elevation-z1">
+    <ng-container matColumnDef="serial">
+      <th mat-header-cell *matHeaderCellDef>No.</th>
+      <td mat-cell *matCellDef="let element; let i = index;">{{ i | globalSerial: paginator }}</td>
+    </ng-container>
+    <ng-container matColumnDef="serviceName">
+      <th mat-header-cell *matHeaderCellDef>Service Name</th>
+      <td mat-cell *matCellDef="let element">
+        <a class="details-page-link" (click)="updateRealService(element)">{{ element?.service_name }}</a>
+      </td>
+    </ng-container>
+    <ng-container matColumnDef="protocol">
+      <th mat-header-cell *matHeaderCellDef>Protocol</th>
+      <td mat-cell *matCellDef="let element">{{ element?.protocol }}</td>
+    </ng-container>
+    <ng-container matColumnDef="deviceName">
+      <th mat-header-cell *matHeaderCellDef>Device Name</th>
+      <td mat-cell *matCellDef="let element">
+        <a class="details-page-link" (click)="deviceDetails(element)">{{ element?.device_name }}</a>
+      </td>
+    </ng-container>
+    <ng-container matColumnDef="deviceGroup">
+      <th mat-header-cell *matHeaderCellDef>Device Group</th>
+      <td mat-cell *matCellDef="let element">{{ element?.device_group }}</td>
+    </ng-container>
+    <ng-container matColumnDef="ip">
+      <th mat-header-cell *matHeaderCellDef>IP Address</th>
+      <td mat-cell *matCellDef="let element">{{ element?.ip }}</td>
+    </ng-container>
+    <ng-container matColumnDef="port">
+      <th mat-header-cell *matHeaderCellDef>Port</th>
+      <td mat-cell *matCellDef="let element">{{ element?.port }}</td>
+    </ng-container>
+    <ng-container matColumnDef="enabled">
+      <th mat-header-cell *matHeaderCellDef>Enabled</th>
+      <td mat-cell *matCellDef="let element">
+        @if (element?.enable) {
+          <fa-icon [icon]="['far', 'check-circle']" class="success-icon"></fa-icon>
+        } @else {
+          <fa-icon [icon]="['far', 'xmark-circle']" class="delete-icon"></fa-icon>
+        }
+      </td>
+    </ng-container>
+    <ng-container matColumnDef="status">
+      <th mat-header-cell *matHeaderCellDef>Status</th>
+      <td mat-cell *matCellDef="let element">
+        @if (element?.upDown === 'UP') {
+          <fa-icon [icon]="['far', 'check-circle']" class="success-icon"></fa-icon> {{ element?.upDown }}
+        } @else {
+          <fa-icon [icon]="['far', 'xmark-circle']" class="delete-icon"></fa-icon> {{ element?.upDown }}
+        }
+      </td>
+    </ng-container>
+    <ng-container matColumnDef="groupWeight">
+      <th mat-header-cell *matHeaderCellDef>Group Weight</th>
+      <td mat-cell *matCellDef="let element">
+        @if (element?.groups.length > 0) {
+          <table>
+            <tbody>
+              @for (_group of element?.groups; track _group) {
+                <tr>
+                  <td matTooltip="Group Name">{{ _group.group_name }}</td>
+                  <td matTooltip="Group Method">{{ _group.group_method }}</td>
+                  <td matTooltip="Group Weight">{{ _group.weight }}</td>
+                </tr>
+              }
+            </tbody>
+          </table>
+        }
+      </td>
+    </ng-container>
+    <ng-container matColumnDef="maxConn">
+      <th mat-header-cell *matHeaderCellDef>Max Connection</th>
+      <td mat-cell *matCellDef="let element">{{ element?.max_conn }}</td>
+    </ng-container>
+    <ng-container matColumnDef="upCheck">
+      <th mat-header-cell *matHeaderCellDef>Up Check</th>
+      <td mat-cell *matCellDef="let element">{{ element?.hc_up }}</td>
+    </ng-container>
+    <ng-container matColumnDef="downCheck">
+      <th mat-header-cell *matHeaderCellDef>Down Check</th>
+      <td mat-cell *matCellDef="let element">{{ element?.hc_down }}</td>
+    </ng-container>
+    <tr mat-header-row *matHeaderRowDef="dataColumns"></tr>
+    <tr mat-row *matRowDef="let row; columns: dataColumns;"></tr>
+    <tr class="mat-row table-no-data" *matNoDataRow>
+      <td class="mat-cell" colspan="9">No results found.</td>
+    </tr>
+  </table>
+  <mat-paginator
+    [pageSizeOptions]="[5, 10, 15]"
+    [pageSize]="5"
+    [length]="totalRecords"
+    showFirstLastButtons
+  ></mat-paginator>
+</div>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.scss	(added)
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.scss	(revision 0)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.scss	(revision 0)
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.spec.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.spec.ts	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.spec.ts	(working copy)
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { TopologySlbRealService } from './topology-slb-real-service';
+
+describe('TopologySlbRealService', () => {
+  let component: TopologySlbRealService;
+  let fixture: ComponentFixture<TopologySlbRealService>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [TopologySlbRealService]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(TopologySlbRealService);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.ts	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.ts	(working copy)
@@ -0,0 +1,159 @@
+import {ChangeDetectorRef, Component, inject, OnInit, ViewChild} from '@angular/core';
+import {MatPaginator} from '@angular/material/paginator';
+import {DeviceService} from '../../../services/device-service';
+import {NotificationService} from '../../../services/notification';
+import {Router} from '@angular/router';
+import {take} from 'rxjs/operators';
+import {GlobalSerialPipe} from '../../../pipes/global-serial-pipe';
+import {SharedModule} from '../../../shared/shared-module';
+import {MatTableDataSource} from '@angular/material/table';
+import {MAT_DIALOG_DATA, MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';
+import {FormBuilder, FormGroup, Validators} from '@angular/forms';
+import {VpnService} from '../../../services/vpn-service';
+
+@Component({
+  selector: 'app-topology-slb-real-service',
+  imports: [
+    GlobalSerialPipe,
+    SharedModule
+  ],
+  templateUrl: './topology-slb-real-service.html',
+  styleUrl: './topology-slb-real-service.scss'
+})
+export class TopologySlbRealService implements OnInit {
+
+  totalRecords: number = 0;
+  dataSource: MatTableDataSource<any> = new MatTableDataSource();
+  dataColumns: string[] = ['serial', 'serviceName', 'protocol', 'deviceName', 'deviceGroup', 'ip', 'port', 'enabled', 'status', 'groupWeight', 'maxConn', 'upCheck', 'downCheck'];
+  @ViewChild(MatPaginator) paginator!: MatPaginator;
+  deviceServices: any = [];
+
+  constructor(
+    private _device: DeviceService,
+    private _notification: NotificationService,
+    private _cdRef: ChangeDetectorRef,
+    private _router: Router,
+  ) {
+    this.dataSource.paginator = this.paginator;
+  }
+
+  ngOnInit(): void {
+    setTimeout(() => {
+      this.getRealServices();
+    })
+  }
+
+  getRealServices() {
+    this.deviceServices = [];
+    this._device.getRealServices()
+      .pipe(take(1))
+      .subscribe({
+        next: (result: any) => {
+          for (let _device in result) {
+            result[_device]?.RealService.forEach((_service: any) => {
+              let tmp: any = _service;
+              tmp.device_name = result[_device]?.device?.name;
+              tmp.device_group = result[_device]?.device?.device_group;
+              this.deviceServices.push(tmp);
+            })
+          }
+          this.dataSource.data = this.deviceServices;
+          this.dataSource.paginator = this.paginator;
+          this.totalRecords = this.dataSource.data.length;
+        },
+        error: (err: any) => {
+        },
+      })
+  }
+
+  dialog = inject(MatDialog);
+  dialogConfig = new MatDialogConfig();
+
+  updateRealService(_service: any) {
+    this.dialogConfig.data = {
+      service: _service
+    };
+    this.dialogConfig.disableClose = true;
+    const dialogRef = this.dialog.open(UpdateDeviceRealServiceDialog, this.dialogConfig);
+    dialogRef.afterClosed().subscribe((isAdded: boolean) => {
+      if (isAdded) {
+        this.getRealServices();
+      }
+    })
+  }
+
+  deviceDetails(device: any) {
+    this._router.navigate(['/inventory/devices'], {});
+  }
+}
+
+@Component({
+  selector: 'update-slb-real-service',
+  templateUrl: './update-slb-real-service.html',
+  imports: [SharedModule]
+})
+export class UpdateDeviceRealServiceDialog implements OnInit {
+
+  readonly data = inject(MAT_DIALOG_DATA);
+  readonly dialogRef = inject(MatDialogRef<UpdateDeviceRealServiceDialog>);
+
+  configForm!: FormGroup;
+
+  constructor(
+    private _vpn: VpnService,
+    private _device: DeviceService,
+    private _notification: NotificationService,
+    private _fB: FormBuilder,
+    private _cdRef: ChangeDetectorRef,
+  ) {
+  }
+
+  ngOnInit(): void {
+    this.configForm = this._fB.group({
+      deviceName: [{value: '', disabled: true}, Validators.required],
+      serviceName: [{value: '', disabled: true}, Validators.required],
+      type: [{value: '', disabled: true}, Validators.required],
+      max_conn: [{value: 0, disabled: true}, Validators.required],
+      hc_up: [{value: 0, disabled: true}, Validators.required],
+      hc_down: [{value: 0, disabled: true}, Validators.required],
+      enable: [false, Validators.required],
+    });
+    this.configForm.patchValue({
+      deviceName: this.data?.service?.device,
+      serviceName: this.data?.service?.service_name,
+      type: this.data?.service?.protocol,
+      max_conn: this.data?.service?.max_conn,
+      hc_up: this.data?.service?.hc_up,
+      hc_down: this.data?.service?.hc_down,
+      enable: this.data?.service?.enable,
+    })
+  }
+
+  onSubmit(): void {
+    if (this.configForm.invalid) {
+      console.log(this.configForm.value);
+      this.configForm.markAllAsTouched();
+      return;
+    }
+    let _payload: any = {
+      device_name: this.data?.service?.device_name,
+      service_name: this.data?.service?.service_name,
+      enable: this.configForm.value?.enable,
+    }
+    this._device.updateRealService([_payload])
+      .pipe(take(1)).subscribe({
+      next: (resp: any) => {
+        this._notification.showSuccess(`The SLB Real service has been updated successfully.`);
+        this.dialogRef.close(true);
+      },
+      error: (error: any) => {
+        this._notification.showError(error?.message);
+      }
+    })
+  }
+
+  onCancel(): void {
+    this.dialogRef.close(false);
+  }
+}
+
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/update-slb-real-service.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/update-slb-real-service.html	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/update-slb-real-service.html	(working copy)
@@ -0,0 +1,98 @@
+<h2 mat-dialog-title>Update Device Real Service - {{data?.service?.service_name}}</h2>
+<mat-dialog-content>
+  <form
+    (ngSubmit)="onSubmit()"
+    [formGroup]="configForm"
+    class="login-form">
+    <div class="form-field-wrapper">
+      <label for="deviceName" class="form-label">Device name</label>
+      <mat-form-field appearance="outline" subscriptSizing="dynamic">
+        <input
+          id="deviceName"
+          formControlName="deviceName"
+          matInput
+          placeholder="Device name"
+          type="text"
+        />
+      </mat-form-field>
+    </div>
+    <div class="form-field-wrapper">
+      <label for="serviceName" class="form-label">Service name</label>
+      <mat-form-field appearance="outline" subscriptSizing="dynamic">
+        <input
+          id="serviceName"
+          formControlName="serviceName"
+          matInput
+          placeholder="Service name"
+          type="text"
+        />
+      </mat-form-field>
+    </div>
+    <div class="form-field-wrapper">
+      <label for="type" class="form-label">Type</label>
+      <mat-form-field appearance="outline" subscriptSizing="dynamic">
+        <input
+          id="type"
+          formControlName="type"
+          matInput
+          placeholder="Type"
+          type="text"
+        />
+      </mat-form-field>
+    </div>
+    <div class="form-field-wrapper">
+      <label for="max_conn" class="form-label">Max Connection</label>
+      <mat-form-field appearance="outline" subscriptSizing="dynamic">
+        <input
+          id="max_conn"
+          formControlName="max_conn"
+          matInput
+          placeholder="Max Connection"
+          type="text"
+        />
+      </mat-form-field>
+    </div>
+    <div class="form-field-wrapper">
+      <label for="hc_up" class="form-label">Health Check Up</label>
+      <mat-form-field appearance="outline" subscriptSizing="dynamic">
+        <input
+          id="hc_up"
+          formControlName="hc_up"
+          matInput
+          placeholder="Health Check Up"
+          type="text"
+        />
+      </mat-form-field>
+    </div>
+    <div class="form-field-wrapper">
+      <label for="hc_down" class="form-label">Health Check Down</label>
+      <mat-form-field appearance="outline" subscriptSizing="dynamic">
+        <input
+          id="hc_down"
+          formControlName="hc_down"
+          matInput
+          placeholder="Health Check Down"
+          type="text"
+        />
+      </mat-form-field>
+    </div>
+    <div class="form-field-wrapper">
+      <label for="enableSSL" class="form-label">Enable</label>
+      <mat-slide-toggle formControlName="enable"></mat-slide-toggle>
+    </div>
+  </form>
+</mat-dialog-content>
+<mat-dialog-actions>
+  <button
+    mat-button
+    color="basic"
+    (click)="onCancel()">
+    Cancel
+  </button>
+  <button
+    mat-raised-button
+    color="primary"
+    (click)="onSubmit()">
+    Submit
+  </button>
+</mat-dialog-actions>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-virtual-service/topology-slb-virtual-service.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-virtual-service/topology-slb-virtual-service.html	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-virtual-service/topology-slb-virtual-service.html	(working copy)
@@ -0,0 +1,62 @@
+<p>
+  SLB topology display depends on APV version. For APV 10.3 version, the required version is 10.3.0.48 and later. For
+  APV 10.3.1 version, the required version is 10.3.1.2 and later. For APV 8.6.1 version, the required version is
+  8.6.1.146 and later. Therefore, if you want to browse the related functions of the topology, please update the
+  corresponding APV version.
+</p>
+<div class="table-container">
+  <table mat-table [dataSource]="dataSource" class="mat-elevation-z1">
+    <ng-container matColumnDef="serial">
+      <th mat-header-cell *matHeaderCellDef>No.</th>
+      <td mat-cell *matCellDef="let element; let i = index;">{{ i | globalSerial: paginator }}</td>
+    </ng-container>
+    <ng-container matColumnDef="serviceName">
+      <th mat-header-cell *matHeaderCellDef>Service Name</th>
+      <td mat-cell *matCellDef="let element">
+        {{ element?.service_name }}
+        <!--        <a class="details-page-link" (click)="serviceDetails(element)">{{ element?.service_name }}</a>-->
+      </td>
+    </ng-container>
+    <ng-container matColumnDef="type">
+      <th mat-header-cell *matHeaderCellDef>Protocol</th>
+      <td mat-cell *matCellDef="let element">{{ element?.protocol }}</td>
+    </ng-container>
+    <ng-container matColumnDef="deviceName">
+      <th mat-header-cell *matHeaderCellDef>Device Name</th>
+      <td mat-cell *matCellDef="let element">
+        <a class="details-page-link" (click)="deviceDetails(element)">{{ element?.device_name }}</a>
+      </td>
+    </ng-container>
+    <ng-container matColumnDef="deviceGroup">
+      <th mat-header-cell *matHeaderCellDef>Device Group</th>
+      <td mat-cell *matCellDef="let element">{{ element?.device_group }}</td>
+    </ng-container>
+    <ng-container matColumnDef="ip">
+      <th mat-header-cell *matHeaderCellDef>IP Address</th>
+      <td mat-cell *matCellDef="let element">{{ element?.vip }}</td>
+    </ng-container>
+    <ng-container matColumnDef="policy">
+      <th mat-header-cell *matHeaderCellDef>Policy</th>
+      <td mat-cell *matCellDef="let element">{{ element?.policy }}</td>
+    </ng-container>
+    <ng-container matColumnDef="group">
+      <th mat-header-cell *matHeaderCellDef>Group</th>
+      <td mat-cell *matCellDef="let element">{{ element?.group }}</td>
+    </ng-container>
+    <ng-container matColumnDef="realService">
+      <th mat-header-cell *matHeaderCellDef>Real Service</th>
+      <td mat-cell *matCellDef="let element">{{ element?.rs }}</td>
+    </ng-container>
+    <tr mat-header-row *matHeaderRowDef="dataColumns"></tr>
+    <tr mat-row *matRowDef="let row; columns: dataColumns;"></tr>
+    <tr class="mat-row table-no-data" *matNoDataRow>
+      <td class="mat-cell" colspan="9">No results found.</td>
+    </tr>
+  </table>
+  <mat-paginator
+    [pageSizeOptions]="[5, 10, 15]"
+    [pageSize]="5"
+    [length]="totalRecords"
+    showFirstLastButtons
+  ></mat-paginator>
+</div>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-virtual-service/topology-slb-virtual-service.scss	(added)
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-virtual-service/topology-slb-virtual-service.scss	(revision 0)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-virtual-service/topology-slb-virtual-service.scss	(revision 0)
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-virtual-service/topology-slb-virtual-service.spec.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-virtual-service/topology-slb-virtual-service.spec.ts	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-virtual-service/topology-slb-virtual-service.spec.ts	(working copy)
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { TopologySlbVirtualService } from './topology-slb-virtual-service';
+
+describe('TopologySlbVirtualService', () => {
+  let component: TopologySlbVirtualService;
+  let fixture: ComponentFixture<TopologySlbVirtualService>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [TopologySlbVirtualService]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(TopologySlbVirtualService);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-virtual-service/topology-slb-virtual-service.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-virtual-service/topology-slb-virtual-service.ts	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-virtual-service/topology-slb-virtual-service.ts	(working copy)
@@ -0,0 +1,147 @@
+import {ChangeDetectorRef, Component, OnInit, ViewChild} from '@angular/core';
+import {MatTableDataSource} from '@angular/material/table';
+import {MatPaginator} from '@angular/material/paginator';
+import {DeviceService} from '../../../services/device-service';
+import {NotificationService} from '../../../services/notification';
+import {Router} from '@angular/router';
+import {take} from 'rxjs/operators';
+import {SharedModule} from '../../../shared/shared-module';
+import {GlobalSerialPipe} from '../../../pipes/global-serial-pipe';
+
+@Component({
+  selector: 'app-topology-slb-virtual-service',
+  imports: [
+    SharedModule,
+    GlobalSerialPipe,
+  ],
+  templateUrl: './topology-slb-virtual-service.html',
+  styleUrl: './topology-slb-virtual-service.scss'
+})
+export class TopologySlbVirtualService implements OnInit {
+
+  totalRecords: number = 0;
+  dataSource: MatTableDataSource<any> = new MatTableDataSource();
+  dataColumns: string[] = ['serial', 'serviceName', 'type', 'deviceName', 'deviceGroup', 'ip', 'policy', 'group', 'realService'];
+  @ViewChild(MatPaginator) paginator!: MatPaginator;
+
+  constructor(
+    private _device: DeviceService,
+    private _notification: NotificationService,
+    private _cdRef: ChangeDetectorRef,
+    private _router: Router,
+  ) {
+    this.dataSource.paginator = this.paginator;
+  }
+
+  ngOnInit() {
+    setTimeout(() => {
+      this.getDeviceGroups();
+    })
+  }
+
+  devices: any = [];
+  groups: any = [];
+  deviceServices: any = [];
+
+  getDeviceGroups() {
+    this.devices = [];
+    this.groups = [];
+    this.deviceServices = [];
+    this.dataSource.data = [];
+    // ToDo: Update with actual RoleId
+    let roleId = "0"
+    let rawPayload = new FormData();
+    rawPayload.set('action', 'FilterRoleDeviceGroups');
+    rawPayload.set('options', JSON.stringify({"role_id": roleId}));
+    this._device.getDeviceGroups(rawPayload)
+      .pipe(take(1))
+      .subscribe({
+        next: (result: any) => {
+          if (result && result.length > 1) {
+            if (result[1] && 'result' in result[1]) {
+              let groups = result[1].result;
+              groups.forEach((group: any) => {
+                this.groups.push(group?.group_name);
+                group?.device_list.forEach((device: any) => {
+                  if (device?.type.toLowerCase() === 'apv' || device?.type.toLowerCase() === 'vapv') {
+                    this.devices.push(device);
+                    this.getDeviceSLBServices(device);
+                  }
+                })
+              })
+            }
+          }
+          this._cdRef.detectChanges();
+        }, error: (error: { message: string; }) => {
+          console.log(error);
+          this._notification.showError(error.message);
+          this._cdRef.detectChanges();
+        }
+      })
+  }
+
+  getDeviceSLBServices(_device: any) {
+    this._device.getSLBServices(_device?.id)
+      .pipe(take(1))
+      .subscribe({
+        next: (result: any) => {
+          if (result && result?.data && result?.data.length > 0) {
+            result?.data.forEach((_service: any) => {
+              let tmp: any = {
+                "service_name": _service.basic.service_name,
+                "protocol": _service.basic.protocol,
+                "device_name": _device.name,
+                "device_group": _device.name,
+                "vip": _service.basic.vip,
+                "policy": [],
+                "group": [],
+                "rs": []
+              }
+              _service['device'] = _device;
+              _service?.policies.forEach((_policy: any) => {
+                if (_policy?.type == "static") {
+                  tmp["policy"].push("StaticPolicy");
+                  if (tmp["rs"].indexOf(_policy?.dst?.name) == -1) {
+                    tmp["rs"].push(_policy?.dst?.name);
+                  }
+                } else {
+                  tmp["policy"].push(_policy?.name);
+                  if (_policy?.dst?.type == "group") {
+                    if (tmp["group"].indexOf(_policy?.dst?.name) == -1) {
+                      tmp["group"].push(_policy?.dst?.name);
+                      _policy?.dst.members.forEach((_member: any) => {
+                        if (tmp["rs"].indexOf(_member?.name) == -1) {
+                          tmp["rs"].push(_member?.name);
+                        }
+                      })
+                    }
+                  }
+                }
+              })
+              tmp.policy = tmp.policy.join(',');
+              tmp.group = tmp.group.join(',');
+              tmp.rs = tmp.rs.join(',');
+              this.deviceServices.push(tmp);
+            })
+          }
+          this.dataSource.data = this.deviceServices;
+          this.dataSource.paginator = this.paginator;
+          this.totalRecords = this.dataSource.data.length;
+        },
+        error: (error: any) => {
+          this._notification.showError(error.message);
+          this._cdRef.detectChanges();
+        }
+      })
+  }
+
+  deviceDetails(device: any) {
+    this._router.navigate(['/inventory/devices'], {});
+  }
+
+  // serviceDetails(device: any) {
+  //   this._router.navigate(['/inventory/devices', device.name], {
+  //     state: {deviceData: device, groups: this.groups}
+  //   });
+  // }
+}
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/vpn-acl-groups/vpn-acl-groups.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/vpn-acl-groups/vpn-acl-groups.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/vpn-acl-groups/vpn-acl-groups.ts	(working copy)
@@ -65,7 +65,7 @@
   }
 
   backToACLGroups(): void {
-    this._router.navigate(['/vpn-management/details', this.deviceName, this.serviceName]);
+    this._router.navigate(['/device/ssl-vpn/details', this.deviceName, this.serviceName]);
   }
 
   private updateQueryParams(tabIndex: number): void {
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/vpn-acl-resource-groups/vpn-acl-resource-groups.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/vpn-acl-resource-groups/vpn-acl-resource-groups.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/vpn-acl-resource-groups/vpn-acl-resource-groups.ts	(working copy)
@@ -140,7 +140,7 @@
   }
 
   goToDetails(_group: any) {
-    this._router.navigate(['/vpn-management/details/acl', this.deviceName, this.serviceName, _group?.name], {
+    this._router.navigate(['/device/ssl-vpn/details/acl', this.deviceName, this.serviceName, _group?.name], {
       state: {}
     });
   }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/vpn-details-overview/vpn-details-overview.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/vpn-details-overview/vpn-details-overview.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/vpn-details-overview/vpn-details-overview.ts	(working copy)
@@ -64,7 +64,7 @@
   }
 
   backToVirtualSites(): void {
-    this._router.navigate(['/vpn-management']);
+    this._router.navigate(['/device/ssl-vpn']);
   }
 
   private updateQueryParams(tabIndex: number): void {
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/vpn-resource-group-overview/vpn-resource-group-overview.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/vpn-resource-group-overview/vpn-resource-group-overview.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/vpn-resource-group-overview/vpn-resource-group-overview.ts	(working copy)
@@ -76,7 +76,7 @@
   }
 
   backToVPNResourceGroups(): void {
-    this._router.navigate(['/vpn-management/details', this.deviceName, this.serviceName]);
+    this._router.navigate(['/device/ssl-vpn/details', this.deviceName, this.serviceName]);
   }
 
   private updateQueryParams(tabIndex: number): void {
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/vpn-resource-groups/vpn-resource-groups.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/vpn-resource-groups/vpn-resource-groups.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/vpn-resource-groups/vpn-resource-groups.ts	(working copy)
@@ -138,7 +138,7 @@
   }
 
   goToDetails(_group: any) {
-    this._router.navigate(['/vpn-management/details/vpn-resource', this.deviceName, this.serviceName, _group?.group_name], {
+    this._router.navigate(['/device/ssl-vpn/details/vpn-resource', this.deviceName, this.serviceName, _group?.group_name], {
       state: {}
     });
   }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/topology/topology.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/topology/topology.html	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/topology/topology.html	(working copy)
@@ -1 +1,18 @@
-<p>topology works!</p>
+<div class="tab-container">
+  <mat-tab-group animationDuration="0ms" [selectedIndex]="selectedTabIndex" (selectedTabChange)="onTabChange($event)">
+    <mat-tab label="SLB Virtual Services">
+      <ng-template matTabContent>
+        <div class="tab-content">
+          <app-topology-slb-virtual-service/>
+        </div>
+      </ng-template>
+    </mat-tab>
+    <mat-tab label="SLB Real Services">
+      <ng-template matTabContent>
+        <div class="tab-content">
+          <app-topology-slb-real-service/>
+        </div>
+      </ng-template>
+    </mat-tab>
+  </mat-tab-group>
+</div>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/topology/topology.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/topology/topology.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/topology/topology.ts	(working copy)
@@ -1,11 +1,60 @@
-import { Component } from '@angular/core';
+import {Component, OnInit} from '@angular/core';
+import {SharedModule} from '../../shared/shared-module';
+import {ActivatedRoute, Router} from '@angular/router';
+import {MatTabChangeEvent} from '@angular/material/tabs';
+import {TopologySlbVirtualService} from '../sub-components/topology-slb-virtual-service/topology-slb-virtual-service';
+import {TopologySlbRealService} from '../sub-components/topology-slb-real-service/topology-slb-real-service';
 
 @Component({
   selector: 'app-topology',
-  imports: [],
+  imports: [
+    SharedModule,
+    TopologySlbVirtualService,
+    TopologySlbRealService
+  ],
   templateUrl: './topology.html',
   styleUrl: './topology.scss'
 })
-export class Topology {
+export class Topology implements OnInit {
 
+  selectedTabIndex: number = 0;
+  private tabNames: string[] = [
+    'SLB Virtual Services',
+    'SLB Real Services',
+  ];
+
+  constructor(private route: ActivatedRoute, private router: Router) {
+  }
+
+  ngOnInit(): void {
+    this.route.queryParams.subscribe(params => {
+      const tabParam = params['tab'];
+      if (tabParam) {
+        const index = this.tabNames.indexOf(tabParam);
+        if (index !== -1) {
+          this.selectedTabIndex = index;
+        } else {
+          this.selectedTabIndex = 0;
+        }
+      } else {
+        this.updateQueryParams(this.selectedTabIndex);
+      }
+    });
+  }
+
+  onTabChange(event: MatTabChangeEvent): void {
+    this.selectedTabIndex = event.index;
+    this.updateQueryParams(event.index);
+  }
+
+  private updateQueryParams(tabIndex: number): void {
+    const tabName = this.tabNames[tabIndex];
+    if (tabName) {
+      this.router.navigate([], {
+        relativeTo: this.route,
+        queryParams: {tab: tabName},
+        queryParamsHandling: 'merge'
+      });
+    }
+  }
 }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/volume-license-overview/volume-license-overview.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/volume-license-overview/volume-license-overview.html	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/volume-license-overview/volume-license-overview.html	(working copy)
@@ -39,7 +39,7 @@
       <td mat-cell *matCellDef="let element"> {{ element.used_bw }} Mbps</td>
     </ng-container>
     <ng-container matColumnDef="capacity">
-      <th mat-header-cell *matHeaderCellDef> vAPV Capacity</th>
+      <th mat-header-cell *matHeaderCellDef> APV Capacity</th>
       <td mat-cell *matCellDef="let element"> {{ element.capacity }}</td>
     </ng-container>
     <ng-container matColumnDef="memoryControl">
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/volume-license/volume-license.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/volume-license/volume-license.html	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/volume-license/volume-license.html	(nonexistent)
@@ -1 +0,0 @@
-<p>volume-license works!</p>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/volume-license/volume-license.scss	(deleted)
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/volume-license/volume-license.scss	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/volume-license/volume-license.scss	(working copy)
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/volume-license/volume-license.spec.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/volume-license/volume-license.spec.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/volume-license/volume-license.spec.ts	(nonexistent)
@@ -1,23 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { VolumeLicense } from './volume-license';
-
-describe('VolumeLicense', () => {
-  let component: VolumeLicense;
-  let fixture: ComponentFixture<VolumeLicense>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      imports: [VolumeLicense]
-    })
-    .compileComponents();
-
-    fixture = TestBed.createComponent(VolumeLicense);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/volume-license/volume-license.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/volume-license/volume-license.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/volume-license/volume-license.ts	(nonexistent)
@@ -1,11 +0,0 @@
-import { Component } from '@angular/core';
-
-@Component({
-  selector: 'app-volume-license',
-  imports: [],
-  templateUrl: './volume-license.html',
-  styleUrl: './volume-license.scss'
-})
-export class VolumeLicense {
-
-}
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/vpn-management/vpn-management.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/vpn-management/vpn-management.html	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/vpn-management/vpn-management.html	(working copy)
@@ -1,6 +1,6 @@
 <mat-card class="page-card-1" appearance="filled">
   <mat-card-header>
-    <mat-card-title>VPN Management</mat-card-title>
+    <mat-card-title>SSL VPN Management</mat-card-title>
   </mat-card-header>
 </mat-card>
 <div class="table-container">
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/vpn-management/vpn-management.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/vpn-management/vpn-management.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/vpn-management/vpn-management.ts	(working copy)
@@ -173,7 +173,7 @@
 
   goToDetails(vsite: any) {
     this.selectedVSite = vsite;
-    this._router.navigate(['/vpn-management/details', vsite?.device_name, vsite?.name], {
+    this._router.navigate(['/device/ssl-vpn/details', vsite?.device_name, vsite?.name], {
       state: {serviceDetails: this.selectedVSite}
     });
   }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/api_urls.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/api_urls.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/api_urls.ts	(working copy)
@@ -41,6 +41,7 @@
   DELETE_SYSTEM_BACKUP_FILE_URL: `${PREFIX}/backup/file`,
   DELETE_SYSTEM_SCHEDULED_BACKUP_URL: `${PREFIX}/backup/schedule`,
   CREATE_SYSTEM_BACKUP_URL: `${PREFIX}/backup/start`,
+  CREATE_SYSTEM_RESTORE_URL: `${PREFIX}/restore/start`,
   GET_SYSTEM_BACKUP_REMOTE_STORAGE_URL: `${PREFIX}/backup/remote_storage`,
   UPDATE_SYSTEM_BACKUP_REMOTE_STORAGE_URL: `${PREFIX}/backup/remote_storage`,
   CREATE_SYSTEM_SCHEDULED_BACKUP_URL: `${PREFIX}/backup/schedule`,
@@ -151,4 +152,7 @@
   GET_DEVICE_HA_UNITS_BY_NAME_URL: `${PREFIX}/cm/get_device_ha_units`,
   GET_DEVICE_HA_GROUPS_BY_NAME_URL: `${PREFIX}/cm/get_device_ha_groups`,
   SWITCH_DEVICE_HA_GROUP_URL: `${PREFIX}/cm/swith_ha_group`,
+  GET_SLB_SERVICES_URL: `${PREFIX}/proxy_req_dev/webui_utils/''`,
+  GET_REAL_SERVICES_URL: `${PREFIX}/real_service?role_id=0`,
+  UPDATE_SLB_REAL_SERVICE_URL: `${PREFIX}/real_service`,
 } as const; // Makes properties readonly
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/menu.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/menu.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/menu.ts	(working copy)
@@ -69,13 +69,13 @@
         roles: ['super_admin', 'device_admin', 'common_admin'],
         permissions: ['sNotifications']
       },
-      {
-        label: 'HA',
-        icon: '',
-        routerLink: '/system/ha',
-        roles: ['super_admin', 'device_admin', 'common_admin'],
-        permissions: ['sHA']
-      }
+      // {
+      //   label: 'HA',
+      //   icon: '',
+      //   routerLink: '/system/ha',
+      //   roles: ['super_admin', 'device_admin', 'common_admin'],
+      //   permissions: ['sHA']
+      // }
     ]
   },
   {
@@ -84,23 +84,38 @@
     expanded: false,
     children: [
       {
-        label: 'HA Management',
+        label: 'APV HA Management',
         icon: '',
-        routerLink: '/device/ha',
+        routerLink: '/device/apv/ha',
         roles: ['super_admin', 'device_admin', 'common_admin'],
         permissions: ['dHA']
       },
       {
-        label: 'SSL Management',
+        label: 'APV SSL Management',
         icon: '',
-        routerLink: '/device/ssl',
+        routerLink: '/device/apv/ssl',
         roles: ['super_admin', 'device_admin', 'common_admin'],
         permissions: ['dSSL']
+      },
+      {
+        label: 'APV SLB',
+        icon: '',
+        expanded: false,
+        routerLink: '/device/apv/slb',
+        roles: ['super_admin', 'device_admin', 'common_admin'],
+        permissions: ['tSLB']
+      },
+      {
+        label: 'SSL VPN Management',
+        icon: '',
+        routerLink: '/device/ssl-vpn',
+        roles: ['super_admin', 'device_admin', 'common_admin'],
+        permissions: ['VPN']
       },
     ]
   },
   {
-    label: 'Volume License',
+    label: 'APV Volume License',
     icon: '',
     expanded: false,
     children: [
@@ -135,20 +150,6 @@
     permissions: ['ConfigurationHub']
   },
   {
-    label: 'Topology',
-    icon: '',
-    expanded: false,
-    children: [
-      {
-        label: 'SLB Topology',
-        icon: '',
-        routerLink: '/topology/slb',
-        roles: ['super_admin', 'device_admin', 'common_admin'],
-        permissions: ['tSLB']
-      }
-    ]
-  },
-  {
     label: 'AVX Management',
     icon: '',
     expanded: false,
@@ -170,13 +171,6 @@
     ]
   },
   {
-    label: 'VPN Management',
-    icon: '',
-    routerLink: '/vpn-management',
-    roles: ['super_admin', 'device_admin', 'common_admin'],
-    permissions: ['VPN']
-  },
-  {
     label: 'Monitoring',
     icon: '',
     expanded: false,
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/device-service.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/device-service.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/device-service.ts	(working copy)
@@ -463,6 +463,24 @@
 
   switchHAGroup(payload: any) {
     return this.http.post(URLS.SWITCH_DEVICE_HA_GROUP_URL, payload, {
+        csrf: true,
+        isFormData: true,
+        csrfInFormData: true
+      }
+    );
+  }
+
+  getSLBServices(deviceId: string | null) {
+    return this.http.get(`${URLS.GET_SLB_SERVICES_URL}`, {},
+      [{name: 'Cm-Data', value: deviceId}, {name: 'Cm-Type', value: 'device'}]);
+  }
+
+  getRealServices() {
+    return this.http.get(URLS.GET_REAL_SERVICES_URL);
+  }
+
+  updateRealService(payload: any) {
+    return this.http.post(URLS.UPDATE_SLB_REAL_SERVICE_URL, payload, {
         csrf: true,
         isFormData: true,
         csrfInFormData: true
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/system-service.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/system-service.ts	(revision 2694)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/system-service.ts	(working copy)
@@ -130,6 +130,10 @@
 
   createSystemBackup(payload: any) {
     return this.http.post(URLS.CREATE_SYSTEM_BACKUP_URL, payload);
+  }
+
+  createSystemRestore(payload: any) {
+    return this.http.post(URLS.CREATE_SYSTEM_RESTORE_URL, payload);
   }
 
   getSystemBackupRemoteStorage() {
