diff --git a/src/app/app.interceptor.ts b/src/app/app.interceptor.ts
index 038576bd23fcc781f79d903de4915eafe2388f1c..639c5488fa00d59a741d863cc7b932f9b1d3c5b0 100644
--- a/src/app/app.interceptor.ts
+++ b/src/app/app.interceptor.ts
@@ -1,7 +1,7 @@
 import { MainDataService } from './maindata.service';
 import { Injectable } from '@angular/core';
 import { HttpInterceptor, HttpRequest,
-  HttpHandler, HttpEvent, HTTP_INTERCEPTORS } from '@angular/common/http';
+  HttpHandler, HttpEvent } from '@angular/common/http';
 import { Observable } from 'rxjs';
 
 @Injectable()
@@ -38,7 +38,3 @@ export class AuthInterceptor implements HttpInterceptor {
     return next.handle(requestA);
   }
 }
-
-export const httpInterceptorProviders = [
-  { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
-];
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 8f8bbe6bade39d6689e34bec4a78a1115f57fc31..7fa451345e4aae791c8ae203e4793d853fe33e6d 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -1,6 +1,6 @@
 import { AboutComponent } from './about/about.component';
 import { BrowserModule } from '@angular/platform-browser';
-import { HttpClientModule } from '@angular/common/http';
+import {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 import { NgModule } from '@angular/core';
 import { ReactiveFormsModule } from '@angular/forms';
@@ -16,7 +16,7 @@ import { StartComponent } from './start/start.component';
 import { LocationStrategy, HashLocationStrategy } from '@angular/common';
 import { FlexLayoutModule } from '@angular/flex-layout';
 import { ErrormsgComponent } from './errormsg/errormsg.component';
-import { httpInterceptorProviders } from './app.interceptor';
+import {AuthInterceptor} from './app.interceptor';
 import { IqbComponentsModule } from 'iqb-components';
 
 
@@ -54,14 +54,16 @@ import { IqbComponentsModule } from 'iqb-components';
   ],
   providers: [
     BackendService,
-    httpInterceptorProviders,
+    {
+      provide: HTTP_INTERCEPTORS,
+      useClass: AuthInterceptor,
+      multi: true
+    },
     {
       provide: LocationStrategy,
       useClass: HashLocationStrategy
     }
   ],
-  entryComponents: [
-  ],
   bootstrap: [AppComponent]
 })
 export class AppModule { }
diff --git a/src/app/maindata.service.ts b/src/app/maindata.service.ts
index 74226b7bc43c305ca28e18262c518740ba513238..186fdc8dfdfc15c3a2630ba606a83d7b9f5ea79a 100644
--- a/src/app/maindata.service.ts
+++ b/src/app/maindata.service.ts
@@ -120,42 +120,6 @@ export class MainDataService {
     return this.loginData$.getValue().testId;
   }
 
-
-  getWorkspaceName(ws: number): string {
-    let myreturn = '';
-    if (ws > 0) {
-      const myLoginData = this.loginData$.getValue();
-      if ((myLoginData !== null) && (myLoginData.workspaces.length > 0)) {
-        for (let i = 0; i < myLoginData.workspaces.length; i++) {
-          // tslint:disable-next-line:triple-equals - one is float, other is int
-          if (myLoginData.workspaces[i].id == ws) {
-            myreturn = myLoginData.workspaces[i].name;
-            break;
-          }
-        }
-      }
-    }
-    return myreturn;
-  }
-
-  getWorkspaceRole(ws: number): string {
-    let myreturn = '';
-    if (ws > 0) {
-      const myLoginData = this.loginData$.getValue();
-      if ((myLoginData !== null) && (myLoginData.workspaces.length > 0)) {
-        for (let i = 0; i < myLoginData.workspaces.length; i++) {
-          // tslint:disable-next-line:triple-equals - one is float, other is int
-          if (myLoginData.workspaces[i].id == ws) {
-            myreturn = myLoginData.workspaces[i].role;
-            break;
-          }
-        }
-      }
-    }
-    return myreturn;
-  }
-
-
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   endBooklet () {
     const myLoginData = this.loginData$.getValue();
diff --git a/src/app/superadmin/backend.service.ts b/src/app/superadmin/backend.service.ts
index 811a8c8307f64f6be807e7936554fb1c515365c2..00da11b36d391cfa6f1b85f92bf27cdc16414e85 100644
--- a/src/app/superadmin/backend.service.ts
+++ b/src/app/superadmin/backend.service.ts
@@ -11,8 +11,7 @@ export class BackendService {
   constructor(
     @Inject('SERVER_URL') private readonly serverUrl: string,
     private http: HttpClient) {
-      this.serverUrl = this.serverUrl + 'php/sys.php/';
-    }
+  }
 
   getUsers(): Observable<IdAndName[]> {
 
diff --git a/src/app/superadmin/superadmin-routing.module.ts b/src/app/superadmin/superadmin-routing.module.ts
index 2ae1f0a3539e3703379ea5a6dd4008c75cee58ff..edbabde86edf28d79a64465db97d6530510f884c 100644
--- a/src/app/superadmin/superadmin-routing.module.ts
+++ b/src/app/superadmin/superadmin-routing.module.ts
@@ -1,12 +1,21 @@
 import { NgModule } from '@angular/core';
 import { Routes, RouterModule } from '@angular/router';
-import {SuperadminComponent} from './superadmin.component';
+
+import { WorkspacesComponent } from './workspaces/workspaces.component';
+import { UsersComponent } from './users/users.component';
+import { SuperadminComponent } from './superadmin.component';
 
 
 const routes: Routes = [
   {
     path: '',
-    component: SuperadminComponent
+    component: SuperadminComponent,
+    children: [
+      {path: '', redirectTo: 'users', pathMatch: 'full'},
+      {path: 'users', component: UsersComponent},
+      {path: 'workspaces', component: WorkspacesComponent},
+      {path: '**', component: UsersComponent}
+    ]
   }
 ];
 
diff --git a/src/app/superadmin/superadmin.component.css b/src/app/superadmin/superadmin.component.css
index 6da29efa857cb699c343691414dd2ccda9286bfb..4b61712221aa644513abf987754994243b54f181 100644
--- a/src/app/superadmin/superadmin.component.css
+++ b/src/app/superadmin/superadmin.component.css
@@ -1,4 +1,35 @@
-p {
-  margin: 10px;
-  color: aliceblue;
+#buttonsContainer {
+  color: white;
+  padding: 0 10px 0 0;
+}
+
+#buttonsContainer .material-icons {
+  font-size: 2.0rem;
+}
+
+#buttonsContainer img {
+  width: 100px;
+}
+
+mat-toolbar {
+  position: fixed;
+  z-index: 100;
+  top: 4px;
+  right: 90px;
+}
+
+#buttonsContainer .material-icons {
+  position: relative;
+  top: -8px;
+  font-size: 36px;
+  padding: 2px;
+}
+
+.adminbackground {
+  flex:  10 0 900px;
+  box-shadow: 5px 10px 20px black;
+  background-color: white;
+  min-height: 85%;
+  margin: 15px;
+  padding: 25px;
 }
diff --git a/src/app/superadmin/superadmin.component.html b/src/app/superadmin/superadmin.component.html
index 53b686b5dfba1a33585add0a1dbc60eb4f898316..d1a5470ae8803453ab9ecf31da9a1067ec3d0a75 100644
--- a/src/app/superadmin/superadmin.component.html
+++ b/src/app/superadmin/superadmin.component.html
@@ -1,4 +1,25 @@
-<p>SuperadminComponent</p>
-<p>Eingeloggt als {{ (mds.loginData$ | async)?.name}}</p>
-<p>&nbsp;</p>
-<p>Sorry - die Einbindung der Administrator-Funktionen in das Testcenter ist noch in Arbeit.</p>
+<div id="buttonsContainer" fxLayout="row" fxLayoutAlign="start center">
+  <a [routerLink]="['/']">
+    <img src="assets/IQB-LogoA.png" matTooltip="Startseite"/>
+  </a>
+  <div fxLayout="row wrap" fxLayoutAlign="space-around center" fxFlex>
+    <div class="error-msg">{{ (mds.globalErrorMsg$ | async)?.labelNice }}</div>
+    <div>IQB-Testcenter Systemverwaltung</div>
+  </div>
+</div>
+<div class="page-body">
+  <div class="adminbackground">
+
+    <nav mat-tab-nav-bar>
+      <a mat-tab-link
+         *ngFor="let link of navLinks"
+         [routerLink]="link.path"
+         routerLinkActive #rla="routerLinkActive"
+         [active]="rla.isActive">
+        {{link.label}}
+      </a>
+    </nav>
+
+    <router-outlet></router-outlet>
+  </div>
+</div>
diff --git a/src/app/superadmin/superadmin.component.ts b/src/app/superadmin/superadmin.component.ts
index 372a55ea5964a5c990abf2d86067ba8f0cc8ae77..b4d9118a64a6b18e0cbe2f7d6844214043909c53 100644
--- a/src/app/superadmin/superadmin.component.ts
+++ b/src/app/superadmin/superadmin.component.ts
@@ -1,17 +1,19 @@
-import { Component, OnInit } from '@angular/core';
-import {MainDataService} from '../maindata.service';
+import { Component } from '@angular/core';
+import { MainDataService } from '../maindata.service';
+
+
 
 @Component({
   templateUrl: './superadmin.component.html',
   styleUrls: ['./superadmin.component.css']
 })
-export class SuperadminComponent implements OnInit {
-
+export class SuperadminComponent {
   constructor(
     public mds: MainDataService
   ) { }
 
-  ngOnInit() {
-  }
-
+  public navLinks = [
+    {path: 'users', label: 'Users'},
+    {path: 'workspaces', label: 'Arbeitsbereiche'}
+  ];
 }
diff --git a/src/app/superadmin/superadmin.module.ts b/src/app/superadmin/superadmin.module.ts
index c1d6b80bf71ad400cda868b1730be3b787af13f3..e53178adda953f574a53222685b07166e8c2763c 100644
--- a/src/app/superadmin/superadmin.module.ts
+++ b/src/app/superadmin/superadmin.module.ts
@@ -9,24 +9,74 @@ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
 import { MatIconModule } from '@angular/material/icon';
 import { MatTableModule } from '@angular/material/table';
 import { MatCheckboxModule } from '@angular/material/checkbox';
+import {MatTabsModule} from "@angular/material/tabs";
+import {MatSelectModule} from "@angular/material/select";
+import {MatSortModule} from "@angular/material/sort";
+import {MatCardModule} from "@angular/material/card";
+import {MatExpansionModule} from "@angular/material/expansion";
+import {ReactiveFormsModule} from "@angular/forms";
+import {MatDialogModule} from "@angular/material/dialog";
+import {MatButtonModule} from "@angular/material/button";
+import {MatTooltipModule} from "@angular/material/tooltip";
+import {MatFormFieldModule} from "@angular/material/form-field";
+import {MatInputModule} from "@angular/material/input";
+import {MatToolbarModule} from "@angular/material/toolbar";
+import {MatSnackBarModule} from "@angular/material/snack-bar";
+import {MatGridListModule} from "@angular/material/grid-list";
+import {FlexLayoutModule} from "@angular/flex-layout";
+import {BackendService} from "./backend.service";
+import {NewpasswordComponent} from "./users/newpassword/newpassword.component";
+import {NewuserComponent} from "./users/newuser/newuser.component";
+import {NewworkspaceComponent} from "./workspaces/newworkspace/newworkspace.component";
+import {EditworkspaceComponent} from "./workspaces/editworkspace/editworkspace.component";
 
 
 @NgModule({
   declarations: [
     SuperadminComponent,
     UsersComponent,
+    NewpasswordComponent,
+    NewuserComponent,
+    NewworkspaceComponent,
+    EditworkspaceComponent,
     WorkspacesComponent
   ],
   imports: [
     CommonModule,
     SuperadminRoutingModule,
-    MatProgressSpinnerModule,
-    MatIconModule,
     MatTableModule,
-    MatCheckboxModule
+    MatTabsModule,
+    MatIconModule,
+    MatSelectModule,
+    MatCheckboxModule,
+    MatSortModule,
+    MatCardModule,
+    MatExpansionModule,
+    ReactiveFormsModule,
+    MatProgressSpinnerModule,
+    MatDialogModule,
+    MatButtonModule,
+    MatTooltipModule,
+    MatFormFieldModule,
+    MatInputModule,
+    MatToolbarModule,
+    MatDialogModule,
+    MatSnackBarModule,
+    MatGridListModule,
+    MatCardModule,
+    FlexLayoutModule,
   ],
   exports: [
     SuperadminComponent
+  ],
+  entryComponents: [
+    NewpasswordComponent,
+    NewuserComponent,
+    NewworkspaceComponent,
+    EditworkspaceComponent
+  ],
+  providers: [
+    BackendService,
   ]
 })
 export class SuperadminModule { }
diff --git a/src/app/superadmin/users/users.component.html b/src/app/superadmin/users/users.component.html
index e20f28032a86975a30ffc0b2a43dd28f8d1ab494..5e1b3d152aef627dc85bed86728eb7ae6920aaaa 100644
--- a/src/app/superadmin/users/users.component.html
+++ b/src/app/superadmin/users/users.component.html
@@ -9,10 +9,12 @@
         <button mat-raised-button (click)="addObject()" matTooltip="Nutzer hinzufügen" matTooltipPosition="above">
             <mat-icon>add</mat-icon>
           </button>
-        <button mat-raised-button (click)="deleteObject()" matTooltip="Markierte Nutzer löschen" matTooltipPosition="above">
+        <button mat-raised-button (click)="deleteObject()"
+                matTooltip="Markierte Nutzer löschen" matTooltipPosition="above">
           <mat-icon>delete</mat-icon>
         </button>
-        <button mat-raised-button (click)="changePassword()" matTooltip="Kennwort ändern" matTooltipPosition="above">
+        <button mat-raised-button (click)="changePassword()"
+                matTooltip="Kennwort ändern" matTooltipPosition="above">
           <mat-icon>edit</mat-icon>
         </button>
     </div>
@@ -47,13 +49,13 @@
   <!-- ============================================= -->
   <div *ngIf="isSuperadmin" fxLayout="column" fxFlex="40">
 
-    <div *ngIf="selectedUser.length == 0">
+    <div *ngIf="selectedUser < 0">
       <div>Zugriffsrechte für Arbeitsbereich(e):</div>
       <div>Bitte links einen Nutzer wählen</div>
     </div>
 
-    <div *ngIf="selectedUser.length > 0" fxLayout="row" fxLayoutAlign="space-between center">
-      <div>Zugriffsrechte für {{ selectedUser }}:</div>
+    <div *ngIf="selectedUser > 0" fxLayout="row" fxLayoutAlign="space-between center">
+      <div>Zugriffsrechte für {{ selectedUserName }}:</div>
         <button mat-raised-button (click)="saveWorkspaces()" matTooltip="Speichern"
             matTooltipPosition="above" [disabled]="!pendingWorkspaceChanges">
           <mat-icon>save</mat-icon>
@@ -62,14 +64,12 @@
 
     <mat-table [dataSource]="WorkspacelistDatasource" matSort>
       <ng-container matColumnDef="selectCheckbox">
-        <mat-header-cell *matHeaderCellDef mat-sort-header>RO | RW | MO</mat-header-cell>
+        <mat-header-cell *matHeaderCellDef mat-sort-header>RO | RW</mat-header-cell>
         <mat-cell *matCellDef="let row" fxFlex="100px">
           <mat-checkbox (change)="selectWorkspace(row, 'RO')" [checked]="row.role === 'RO'" matTooltip="RO">
           </mat-checkbox>
           <mat-checkbox (change)="selectWorkspace(row, 'RW')" [checked]="row.role === 'RW'" matTooltip="RW">
           </mat-checkbox>
-          <mat-checkbox (change)="selectWorkspace(row, 'MO')" [checked]="row.role === 'MO'" matTooltip="MO">
-          </mat-checkbox>
         </mat-cell>
       </ng-container>
 
diff --git a/src/app/superadmin/users/users.component.ts b/src/app/superadmin/users/users.component.ts
index e2c8220ac5ead7b6b21f7b48152eee7b6e197ed1..cdcbb8a3843a7899c954c0964eaa0f95a3a01bae 100644
--- a/src/app/superadmin/users/users.component.ts
+++ b/src/app/superadmin/users/users.component.ts
@@ -30,6 +30,7 @@ export class UsersComponent implements OnInit, OnDestroy {
   private tableselectionCheckbox = new SelectionModel<IdAndName>(true, []);
   private tableselectionRow = new SelectionModel<IdAndName>(false, []);
   private selectedUser = -1;
+  private selectedUserName = '';
 
   private pendingWorkspaceChanges = false;
   public WorkspacelistDatasource: MatTableDataSource<IdRoleData>;
@@ -51,8 +52,10 @@ export class UsersComponent implements OnInit, OnDestroy {
       r => {
         if (r.added.length > 0) {
           this.selectedUser = r.added[0].id;
+          this.selectedUserName = r.added[0].name
         } else {
           this.selectedUser = -1;
+          this.selectedUserName = '';
         }
         this.updateWorkspaceList();
       });
diff --git a/src/app/superadmin/workspaces/workspaces.component.html b/src/app/superadmin/workspaces/workspaces.component.html
index 289abc7259fb8fcbde429c7015c55bcfc0bbcc17..05a42a79cdbb5a2be2f5ccbd4c75b59a2e039ebc 100644
--- a/src/app/superadmin/workspaces/workspaces.component.html
+++ b/src/app/superadmin/workspaces/workspaces.component.html
@@ -9,7 +9,8 @@
         <button mat-raised-button (click)="addObject()" matTooltip="Arbeitsbereich hinzufügen" matTooltipPosition="above">
             <mat-icon>add</mat-icon>
           </button>
-        <button mat-raised-button (click)="deleteObject()" matTooltip="Markierte/n Arbeitsbereich/e löschen" matTooltipPosition="above">
+        <button mat-raised-button (click)="deleteObject()"
+                matTooltip="Markierte/n Arbeitsbereich/e löschen" matTooltipPosition="above">
           <mat-icon>delete</mat-icon>
         </button>
         <button mat-raised-button (click)="changeObject()" matTooltip="Arbeitsbereich umbenennen" matTooltipPosition="above">
diff --git a/src/app/test-controller/test-controller.module.ts b/src/app/test-controller/test-controller.module.ts
index 2b783d383a6e5425247c093142d668b33da6c8c3..7deb84e54b55c2a4011b6363076ff3d0c4a8d0c9 100644
--- a/src/app/test-controller/test-controller.module.ts
+++ b/src/app/test-controller/test-controller.module.ts
@@ -39,7 +39,6 @@ import { StartLockInputComponent } from './start-lock-input/start-lock-input.com
     MatToolbarModule,
     MatIconModule,
     IqbComponentsModule.forChild()
-
   ],
   declarations: [
     UnithostComponent,
diff --git a/src/app/workspace-admin/backend.service.ts b/src/app/workspace-admin/backend.service.ts
index 7ad9ae82c0f2b41afb3d02cd468fea5b343149ca..336c92db42262c6b3305bba6d979a3c33af92597 100644
--- a/src/app/workspace-admin/backend.service.ts
+++ b/src/app/workspace-admin/backend.service.ts
@@ -1,5 +1,5 @@
-import { GetFileResponseData, CheckWorkspaceResponseData, BookletsStarted, SysCheckStatistics,
-  ReviewData, LogData, UnitResponse, ResultData, MonitorData } from './workspace.interfaces';
+import { GetFileResponseData, CheckWorkspaceResponseData, SysCheckStatistics,
+  ReviewData, LogData, UnitResponse, ResultData } from './workspace.interfaces';
 import {Injectable, Inject} from '@angular/core';
 import { HttpClient } from '@angular/common/http';
 import { Observable } from 'rxjs';
@@ -38,35 +38,6 @@ export class BackendService {
       .pipe(catchError(ErrorHandler.handle));
   }
 
-  getBookletsStarted(workspaceId: number, groups: string[]): Observable<BookletsStarted[] | ServerError> {
-
-    return this.http
-      .get<BookletsStarted[]>(this.serverUrl + `workspace/${workspaceId}/booklets/started`, {params: {groups: groups.join(',')}})
-      .pipe(catchError(ErrorHandler.handle));
-  }
-
-  lockBooklets(workspaceId: number, groups: string[]): Observable<boolean | ServerError> {
-
-    return this.http
-      .patch<boolean>(this.serverUrl + `workspace/${workspaceId}/tests/lock`, {groups: groups})
-      .pipe(catchError(ErrorHandler.handle));
-  }
-
-  unlockBooklets(workspaceId: number, groups: string[]): Observable<boolean | ServerError> {
-
-    return this.http
-      .patch<boolean>(this.serverUrl + `workspace/${workspaceId}/tests/unlock`, {groups: groups})
-      .pipe(catchError(ErrorHandler.handle));
-  }
-
-
-  getMonitorData(workspaceId: number): Observable<MonitorData[] | ServerError> {
-
-    return this.http
-      .get<MonitorData[]>(this.serverUrl + `workspace/${workspaceId}/status`, {})
-      .pipe(catchError(ErrorHandler.handle));
-  }
-
   getResultData(workspaceId: number): Observable<ResultData[]> {
 
     return this.http
diff --git a/src/app/workspace-admin/files/files.component.ts b/src/app/workspace-admin/files/files.component.ts
index 4a5061bf64ce782303e872c97b381a39a5b7dac0..06ced970feba139dffbcfabf5535e2b66962ad7a 100644
--- a/src/app/workspace-admin/files/files.component.ts
+++ b/src/app/workspace-admin/files/files.component.ts
@@ -46,7 +46,7 @@ export class FilesComponent implements OnInit, OnDestroy {
     this.wds.workspaceId$.subscribe(workspaceId => {
       this.uploadUrl = this.serverUrl + `workspace/${workspaceId}/file`;
     });
-    this.uploadUrl = this.serverUrl + this.wds.ws + '/file';
+    this.uploadUrl = this.serverUrl + "workspace/" + this.wds.ws + '/file';
   }
 
   ngOnInit() {
diff --git a/src/app/workspace-admin/files/iqb-files/iqbFilesUpload/iqbFilesUpload.component.ts b/src/app/workspace-admin/files/iqb-files/iqbFilesUpload/iqbFilesUpload.component.ts
index 60d7137136aacc694f103a6dc337429493673928..8f8e832caefbf2a15175958dd0826c2571418a4b 100644
--- a/src/app/workspace-admin/files/iqb-files/iqbFilesUpload/iqbFilesUpload.component.ts
+++ b/src/app/workspace-admin/files/iqb-files/iqbFilesUpload/iqbFilesUpload.component.ts
@@ -1,4 +1,4 @@
-import { Component, EventEmitter, Input, OnInit, Output, HostBinding } from '@angular/core';
+import {Component, EventEmitter, Input, OnInit, Output, HostBinding, OnDestroy} from '@angular/core';
 import { HttpClient, HttpEventType, HttpHeaders, HttpParams,
   HttpErrorResponse, HttpEvent } from '@angular/common/http';
 
@@ -10,7 +10,7 @@ import { HttpClient, HttpEventType, HttpHeaders, HttpParams,
     styleUrls: ['../iqb-files.scss'],
   })
 
-  export class IqbFilesUploadComponent implements OnInit {
+  export class IqbFilesUploadComponent implements OnInit, OnDestroy {
     @HostBinding('class') myclass = 'iqb-files-upload';
 
     constructor(
@@ -30,7 +30,7 @@ import { HttpClient, HttpEventType, HttpHeaders, HttpParams,
     // ''''''''''''''''''''''''
     private requestResponseText: string;
     get statustext(): string {
-      let myreturn = '';
+      let myreturn;
       switch (this._status) {
         case UploadStatus.busy: {
           myreturn = 'Bitte warten';
@@ -180,6 +180,11 @@ import { HttpClient, HttpEventType, HttpHeaders, HttpParams,
       this.removeFileRequestEvent.emit(this);
     }
 
+    ngOnDestroy(): void {
+      if (this.fileUploadSubscription) {
+        this.fileUploadSubscription.unsubscribe();
+      }
+    }
 }
 
 export enum UploadStatus {
diff --git a/src/app/workspace-admin/workspace.component.css b/src/app/workspace-admin/workspace.component.css
index b6162710eeaea472d7054f155f74e142018bdcfd..4b61712221aa644513abf987754994243b54f181 100644
--- a/src/app/workspace-admin/workspace.component.css
+++ b/src/app/workspace-admin/workspace.component.css
@@ -1,16 +1,16 @@
-/* --------------------------------------------- */
 #buttonsContainer {
   color: white;
   padding: 0 10px 0 0;
 }
+
 #buttonsContainer .material-icons {
   font-size: 2.0rem;
 }
+
 #buttonsContainer img {
   width: 100px;
 }
 
-/* --------------------------------------------- */
 mat-toolbar {
   position: fixed;
   z-index: 100;
diff --git a/src/app/workspace-admin/workspace.component.ts b/src/app/workspace-admin/workspace.component.ts
index 1b7ed70ce1e0312bc8581cceeefd5fee35e2f799..3958ab13f6ac91b3d8f3915e181c4d71ae02594c 100644
--- a/src/app/workspace-admin/workspace.component.ts
+++ b/src/app/workspace-admin/workspace.component.ts
@@ -22,11 +22,11 @@ export class WorkspaceComponent implements OnInit, OnDestroy {
   ngOnInit() {
     this.routingSubscription = this.route.params.subscribe(params => {
       const ws = Number(params['ws']);
-      this.wds.setWorkspace(ws, this.mds.getWorkspaceRole(ws), this.mds.getWorkspaceName(ws));
+      this.wds.setWorkspace(ws);
     });
 
     this.logindataSubscription = this.mds.loginData$.subscribe(() => {
-      this.wds.setWorkspace(this.wds.ws, this.mds.getWorkspaceRole(this.wds.ws), this.mds.getWorkspaceName(this.wds.ws));
+      this.wds.setWorkspace(this.wds.ws);
     });
   }
 
diff --git a/src/app/workspace-admin/workspace.interceptor.ts b/src/app/workspace-admin/workspace.interceptor.ts
deleted file mode 100644
index fa6ed54646e8f7fbba0f96a004289b2d89bdb77a..0000000000000000000000000000000000000000
--- a/src/app/workspace-admin/workspace.interceptor.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { WorkspaceDataService } from './workspacedata.service';
-import { Injectable } from '@angular/core';
-import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
-import { Observable } from 'rxjs';
-
-@Injectable()
-
-export class WorkspaceInterceptor implements HttpInterceptor {
-  constructor(public wds: WorkspaceDataService) {}
-
-  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
-    const ws = this.wds.workspaceId$.getValue();
-    if (ws >= 0) {
-      const authDataStr = request.headers.get('AuthToken');
-      let authData = {};
-      if (authDataStr) {
-        authData = JSON.parse(authDataStr);
-      }
-      authData['ws'] = ws;
-      return next.handle(request.clone({
-        setHeaders: {
-          AuthToken: JSON.stringify(authData)
-        }
-      }));
-    } else {
-      return next.handle(request);
-    }
-  }
-}
diff --git a/src/app/workspace-admin/workspace.module.ts b/src/app/workspace-admin/workspace.module.ts
index 074fa4877c2806da90c546fcbbee94a21f1dcdbe..3fbecf6ed4c8dfd92c2a2fe869e4adb45aef9cdb 100644
--- a/src/app/workspace-admin/workspace.module.ts
+++ b/src/app/workspace-admin/workspace.module.ts
@@ -29,8 +29,6 @@ import { MatExpansionModule } from '@angular/material/expansion';
 import { MatGridListModule } from '@angular/material/grid-list';
 import { SyscheckComponent } from './syscheck/syscheck.component';
 import { IqbComponentsModule } from 'iqb-components';
-import { HTTP_INTERCEPTORS } from '@angular/common/http';
-import { WorkspaceInterceptor } from './workspace.interceptor';
 import {IqbFilesModule} from './files/iqb-files';
 
 @NgModule({
@@ -70,13 +68,6 @@ import {IqbFilesModule} from './files/iqb-files';
     SyscheckComponent
   ],
   providers: [
-    // interceptor adds ws to AuthToken
-    // not working when module is lazy loaded!
-    {
-      provide: HTTP_INTERCEPTORS,
-      useClass: WorkspaceInterceptor,
-      multi: true
-    },
     BackendService,
     WorkspaceDataService
   ],
diff --git a/src/app/workspace-admin/workspacedata.service.ts b/src/app/workspace-admin/workspacedata.service.ts
index ffb185a94d1e082d770ce359564569fa1149d998..1ad6f0061db1c0b221e74806862009147d89211e 100644
--- a/src/app/workspace-admin/workspacedata.service.ts
+++ b/src/app/workspace-admin/workspacedata.service.ts
@@ -23,52 +23,36 @@ export class WorkspaceDataService {
   public get wsName(): string {
     return this._wsName;
   }
-  public navLinks = [];
-
-
-  private navLinksRW = [
-    {path: 'files', label: 'Dateien'},
-    {path: 'syscheck', label: 'System-Check Berichte'},
-    {path: 'monitor', label: 'Monitor'},
-    {path: 'results', label: 'Ergebnisse'}
-  ];
-  private navLinksRO = [
+  public navLinks = [
     {path: 'files', label: 'Dateien'},
     {path: 'syscheck', label: 'System-Check Berichte'},
-    {path: 'monitor', label: 'Monitor'},
-    {path: 'results', label: 'Ergebnisse'}
-  ];
-  private navLinksMO = [
-    {path: 'monitor', label: 'Monitor'}
+    {path: 'results', label: 'Ergebnisse/Antworten'}
   ];
 
-  constructor() {}
+  constructor(
+    private mds: MainDataService
+  ) {}
 
   setNewErrorMsg(err: ServerError = null) {
     this.globalErrorMsg$.next(err);
   }
 
-  setWorkspace(newId: number, newRole: string, newName: string) {
-    this._wsName = newName;
-    this._wsRole = newRole;
-    switch (newRole.toUpperCase()) {
-      case 'RW': {
-        this.navLinks = this.navLinksRW;
-        break;
-      }
-      case 'RO': {
-        this.navLinks = this.navLinksRO;
-        break;
-      }
-      case 'MO': {
-        this.navLinks = this.navLinksMO;
-        break;
-      }
-      default: {
-        this.navLinks = [];
-        break;
+  setWorkspace(newId: number) {
+    this._wsName = '';
+    this._wsRole = '';
+    if (newId > 0) {
+      const myLoginData = this.mds.loginData$.getValue();
+      if ((myLoginData !== null) && (myLoginData.workspaces.length > 0)) {
+        for (let i = 0; i < myLoginData.workspaces.length; i++) {
+          if (myLoginData.workspaces[i].id == newId) {
+            this._wsName = myLoginData.workspaces[i].name;
+            this._wsRole = myLoginData.workspaces[i].role;
+            break;
+          }
+        }
       }
     }
+
     this.workspaceId$.next(newId);
   }
 }
diff --git a/src/app/workspace-monitor/backend.service.ts b/src/app/workspace-monitor/backend.service.ts
index 724c6f709846587ce8f13808f027fdc79cb2a3e5..2730e41ce6996bfc1cf9d49f7de2623441700a23 100644
--- a/src/app/workspace-monitor/backend.service.ts
+++ b/src/app/workspace-monitor/backend.service.ts
@@ -20,35 +20,32 @@ export class BackendService {
     this.serverUrl = this.serverUrl + 'php/';
   }
 
-  getBookletsStarted(ws: number, groups: string[]): Observable<BookletsStarted[] | ServerError> {
+  getBookletsStarted(workspaceId: number, groups: string[]): Observable<BookletsStarted[] | ServerError> {
+
     return this.http
-      .post<BookletsStarted[]>(this.serverUrl + 'getBookletsStarted.php', {g: groups})
-        .pipe(
-          catchError(ErrorHandler.handle)
-        );
+      .get<BookletsStarted[]>(this.serverUrl + `workspace/${workspaceId}/booklets/started`, {params: {groups: groups.join(',')}})
+      .pipe(catchError(ErrorHandler.handle));
   }
 
-  lockBooklets(ws: number, groups: string[]): Observable<boolean | ServerError> {
+  lockBooklets(workspaceId: number, groups: string[]): Observable<boolean | ServerError> {
+
     return this.http
-      .post<boolean>(this.serverUrlSlim + 'lock', {g: groups})
-        .pipe(
-          catchError(ErrorHandler.handle)
-        );
+      .patch<boolean>(this.serverUrl + `workspace/${workspaceId}/tests/lock`, {groups: groups})
+      .pipe(catchError(ErrorHandler.handle));
   }
 
-  unlockBooklets(ws: number, groups: string[]): Observable<boolean | ServerError> {
+  unlockBooklets(workspaceId: number, groups: string[]): Observable<boolean | ServerError> {
+
     return this.http
-      .post<boolean>(this.serverUrlSlim + 'unlock', {g: groups})
-        .pipe(
-            catchError(ErrorHandler.handle)
-          );
-}
+      .patch<boolean>(this.serverUrl + `workspace/${workspaceId}/tests/unlock`, {groups: groups})
+      .pipe(catchError(ErrorHandler.handle));
+  }
+
+
+  getMonitorData(workspaceId: number): Observable<MonitorData[] | ServerError> {
 
-  getMonitorData(ws: number): Observable<MonitorData[] | ServerError> {
     return this.http
-      .post<MonitorData[]>(this.serverUrl + 'getMonitorData.php', {})
-        .pipe(
-          catchError(ErrorHandler.handle)
-        );
+      .get<MonitorData[]>(this.serverUrl + `workspace/${workspaceId}/status`, {})
+      .pipe(catchError(ErrorHandler.handle));
   }
 }