diff --git a/src/app/app-root/admin-starter/admin-starter.component.ts b/src/app/app-root/admin-starter/admin-starter.component.ts
index ce891c06c31bd76b79acf4e5d2800440d4053d43..c5651dbc0d7c4817e31c4585f9dd242e6325ab3c 100644
--- a/src/app/app-root/admin-starter/admin-starter.component.ts
+++ b/src/app/app-root/admin-starter/admin-starter.component.ts
@@ -10,7 +10,7 @@ import { MainDataService } from '../../maindata.service';
   templateUrl: './admin-starter.component.html',
   styles: [
     'mat-card {margin: 10px;}',
-    '.mat-card-gray {background-color: lightgray}'
+    '.mat-card-gray {background-color: var(--tc-box-background)}'
   ]
 })
 
diff --git a/src/app/app-root/code-input/code-input.component.ts b/src/app/app-root/code-input/code-input.component.ts
index 60b37bf747200695c36508ceb25cae5a0cd6be1c..747ed0a6b566f7d17db461d17155ca52d5b6194f 100644
--- a/src/app/app-root/code-input/code-input.component.ts
+++ b/src/app/app-root/code-input/code-input.component.ts
@@ -13,7 +13,7 @@ import { BackendService } from '../../backend.service';
   templateUrl: './code-input.component.html',
   styles: [
     'mat-card {margin: 10px;}',
-    '.mat-card-gray {background-color: lightgray}'
+    '.mat-card-gray {background-color: var(--tc-box-background)}'
   ]
 })
 export class CodeInputComponent implements OnInit {
diff --git a/src/app/app-root/login/login.component.ts b/src/app/app-root/login/login.component.ts
index e9377fb13ad79615d22bfa458a68b4690160ebe5..a2f133f31b273faa305d98d8b481ebd891838175 100644
--- a/src/app/app-root/login/login.component.ts
+++ b/src/app/app-root/login/login.component.ts
@@ -11,8 +11,7 @@ import { BackendService } from '../../backend.service';
   styles: [
     'mat-card {margin: 10px;}',
     '.mat-card-gray {background: var(--tc-box-background)}',
-    '#toggle-show-password {cursor: pointer}',
-    '.mat-card-header {background-color: salmon; padding: 4px;}'
+    '#toggle-show-password {cursor: pointer}'
   ]
 })
 
diff --git a/src/app/app-root/test-starter/test-starter.component.css b/src/app/app-root/test-starter/test-starter.component.css
index 3b5ec57ae392c2fd46e02ace3a907721b9cc15e5..3563ebfab4c3fd2497472aa51f010ee412111b35 100644
--- a/src/app/app-root/test-starter/test-starter.component.css
+++ b/src/app/app-root/test-starter/test-starter.component.css
@@ -20,5 +20,5 @@ mat-card {
 }
 
 .mat-card-gray {
-  background-color: lightgray
+  background-color: var(--tc-box-background)
 }
diff --git a/src/app/config/app.config.ts b/src/app/config/app.config.ts
index 429914b95deb33760178e56026c1ced23dca200d..e14963471f7ae271e4d1c65e7d59605dd7954096 100644
--- a/src/app/config/app.config.ts
+++ b/src/app/config/app.config.ts
@@ -96,42 +96,43 @@ export class AppConfig {
       this.impressum_html = 'Impressum/Datenschutz nicht definiert';
     }
     this.mainLogo = 'assets/IQB-LogoA.png';
-    this.background_body = '';
-    this.background_box = '';
+    const elementStyle = window.getComputedStyle(document.body);
+    this.background_body = elementStyle.getPropertyValue('--tc-body-background');
+    this.background_box = elementStyle.getPropertyValue('--tc-box-background');
     this.trusted_intro_html = null;
     this.trusted_impressum_html = null;
     this.global_warning = '';
     this.global_warning_expired_day = '';
     this.global_warning_expired_hour = '';
     if (appConfig) {
-      Object.keys(appConfig).forEach(k => {
+      appConfig.forEach((v, k) => {
         switch (k) {
           case 'app_title':
-            this.app_title = appConfig[k];
+            this.app_title = v;
             break;
           case 'mainLogo':
-            this.mainLogo = appConfig[k];
+            this.mainLogo = v;
             break;
           case 'background_body':
-            this.background_body = appConfig[k];
+            this.background_body = v;
             break;
           case 'background_box':
-            this.background_box = appConfig[k];
+            this.background_box = v;
             break;
           case 'intro_html':
-            this.intro_html = appConfig[k];
+            this.intro_html = v;
             break;
           case 'impressum_html':
-            this.impressum_html = appConfig[k];
+            this.impressum_html = v;
             break;
           case 'global_warning':
-            this.global_warning = appConfig[k];
+            this.global_warning = v;
             break;
           case 'global_warning_expired_day':
-            this.global_warning_expired_day = appConfig[k];
+            this.global_warning_expired_day = v;
             break;
           case 'global_warning_expired_hour':
-            this.global_warning_expired_hour = appConfig[k];
+            this.global_warning_expired_hour = v;
             break;
           default:
             console.warn(`unknown key in appConfig "${k}"`);
diff --git a/src/app/superadmin/backend.service.ts b/src/app/superadmin/backend.service.ts
index 7fba22e381b3d65c46837d0bf0f55e7aeb384a1e..c55927b8e61b19e46b586ccaabfd9ffe3bb15e7a 100644
--- a/src/app/superadmin/backend.service.ts
+++ b/src/app/superadmin/backend.service.ts
@@ -133,7 +133,7 @@ export class BackendService {
 
   setAppConfig(newConfig: Map<string, string>): Observable<boolean> {
     return this.http
-      .patch<boolean>(`${this.serverUrl}system/config/app`, { newConfig })
+      .patch<boolean>(`${this.serverUrl}system/config/app`, newConfig)
       .pipe(catchError((err: ApiError) => {
         console.warn(`setAppConfig Api-Error: ${err.code} ${err.info}`);
         return of(false);
diff --git a/src/app/superadmin/settings/app-config.component.html b/src/app/superadmin/settings/app-config.component.html
index 88b455d15fc5b1646868eac256f55fe38e8c0255..d53c7758e302782588871115459d5ff1921ce13b 100644
--- a/src/app/superadmin/settings/app-config.component.html
+++ b/src/app/superadmin/settings/app-config.component.html
@@ -39,10 +39,17 @@
               cdkTextareaAutosize
               cdkAutosizeMinRows="6"></textarea>
   </mat-form-field>
+  <mat-form-field fxLayout="column">
+    <mat-label>Hintergrundfarbe Anwendung</mat-label>
+    <input matInput formControlName="backgroundBody" placeholder="Farbe">
+  </mat-form-field>
+  <mat-form-field fxLayout="column">
+    <mat-label>Hintergrundfarbe sekundäre Boxen</mat-label>
+    <input matInput formControlName="backgroundBox" placeholder="Farbe">
+  </mat-form-field>
   <div fxLayout="row" fxLayoutGap="30px" fxLayoutAlign="start start">
     <button mat-raised-button color="primary" [disabled]="!dataChanged" (click)="saveData()">
       Speichern
     </button>
-    <div *ngIf="dataChanged" fxFlex>Nach dem Speichern bitte die Seite neu laden, damit die Änderungen wirksam werden!</div>
   </div>
 </form>
diff --git a/src/app/superadmin/settings/app-config.component.ts b/src/app/superadmin/settings/app-config.component.ts
index 41b216bb135c1632663a28785a24673b26838ece..1c151b85936d517b5ece092f68811f282098c269 100644
--- a/src/app/superadmin/settings/app-config.component.ts
+++ b/src/app/superadmin/settings/app-config.component.ts
@@ -53,19 +53,32 @@ export class AppConfigComponent implements OnInit, OnDestroy {
     private snackBar: MatSnackBar,
     private mds: MainDataService,
     private bs: BackendService
-  ) { }
+  ) {
+    this.configForm = this.fb.group({
+      appTitle: this.fb.control(''),
+      introHtml: this.fb.control(''),
+      impressumHtml: this.fb.control(''),
+      globalWarningText: this.fb.control(''),
+      globalWarningExpiredDay: this.fb.control(''),
+      globalWarningExpiredHour: this.fb.control(''),
+      backgroundBody: this.fb.control(''),
+      backgroundBox: this.fb.control('')
+    });
+  }
 
   ngOnInit(): void {
     setTimeout(() => {
       const appConfig = this.mds.appConfig.getAppConfig();
-      this.configForm = this.fb.group({
-        appTitle: this.fb.control(appConfig.get('app_title')),
-        introHtml: this.fb.control(appConfig.get('intro_html')),
-        impressumHtml: this.fb.control(appConfig.get('impressum_html')),
-        globalWarningText: this.fb.control(appConfig.get('global_warning')),
-        globalWarningExpiredDay: this.fb.control(appConfig.get('global_warning_expired_day')),
-        globalWarningExpiredHour: this.fb.control(appConfig.get('global_warning_expired_hour'))
-      });
+      this.configForm.setValue({
+        appTitle: appConfig.get('app_title'),
+        introHtml: appConfig.get('intro_html'),
+        impressumHtml: appConfig.get('impressum_html'),
+        globalWarningText: appConfig.get('global_warning'),
+        globalWarningExpiredDay: appConfig.get('global_warning_expired_day'),
+        globalWarningExpiredHour: appConfig.get('global_warning_expired_hour'),
+        backgroundBody: appConfig.get('background_body'),
+        backgroundBox: appConfig.get('background_box')
+      }, { emitEvent: false });
       this.warningIsExpired = AppConfig.isWarningExpired(
         appConfig.get('global_warning_expired_day'),
         appConfig.get('global_warning_expired_hour')
@@ -91,9 +104,9 @@ export class AppConfigComponent implements OnInit, OnDestroy {
     appConfig.set('global_warning', this.configForm.get('globalWarningText').value);
     appConfig.set('global_warning_expired_day', this.configForm.get('globalWarningExpiredDay').value);
     appConfig.set('global_warning_expired_hour', this.configForm.get('globalWarningExpiredHour').value);
+    appConfig.set('background_body', this.configForm.get('backgroundBody').value);
+    appConfig.set('background_box', this.configForm.get('backgroundBox').value);
 
-    this.mds.appConfig.setAppConfig(appConfig);
-    this.mds.appConfig.applyBackgroundColors();
     this.bs.setAppConfig(appConfig).subscribe(isOk => {
       if (isOk) {
         this.snackBar.open(
@@ -102,6 +115,7 @@ export class AppConfigComponent implements OnInit, OnDestroy {
         this.dataChanged = false;
         this.mds.appConfig.setAppConfig(appConfig);
         this.mds.appConfig.applyBackgroundColors();
+        this.mds.appTitle$.next(this.configForm.get('appTitle').value);
       } else {
         this.snackBar.open('Konnte Konfigurationsdaten der Anwendung nicht speichern', 'Fehler', { duration: 3000 });
       }
diff --git a/src/app/test-controller/test-status/test-status.component.css b/src/app/test-controller/test-status/test-status.component.css
index c4a9660190a52f9bd12eac69cdc49197418c26d4..4cfb6aa957f273313240920f2e2e16f475ce866a 100644
--- a/src/app/test-controller/test-status/test-status.component.css
+++ b/src/app/test-controller/test-status/test-status.component.css
@@ -8,7 +8,7 @@ mat-card {
 }
 
 .mat-card-gray {
-  background-color: lightgray
+  background-color: var(--tc-box-background)
 }
 
 .active-unit {
diff --git a/src/app/test-controller/unit-menu/unit-menu.component.css b/src/app/test-controller/unit-menu/unit-menu.component.css
index ae2a713279c55ac9857dcea0cdaf5ed619cf3ae0..d8abef87f3c7225c26c5990aebf0ea7188ed37b0 100644
--- a/src/app/test-controller/unit-menu/unit-menu.component.css
+++ b/src/app/test-controller/unit-menu/unit-menu.component.css
@@ -8,7 +8,7 @@ mat-card {
 }
 
 .mat-card-gray {
-  background-color: lightgray
+  background-color: var(--tc-box-background)
 }
 
 .active-unit {