diff --git a/src/app/group-monitor/group-monitor.component.html b/src/app/group-monitor/group-monitor.component.html
index 71b5d87ec43cd608cde30824e35187972f555c21..6f8a0da7f5d5998e030b3513e8622eea4eacfe83 100644
--- a/src/app/group-monitor/group-monitor.component.html
+++ b/src/app/group-monitor/group-monitor.component.html
@@ -110,7 +110,7 @@
         <mat-slide-toggle
             color="accent"
             (change)="toggleAlwaysCheckAll($event)"
-            [disabled]="!gms.checkingOptions.disableAutoCheckAll"
+            [disabled]="!gms.checkingOptions.enableAutoCheckAll"
             [checked]="gms.checkingOptions.autoCheckAll"
         >
           Alle Tests gleichzeitig steuern
@@ -207,7 +207,7 @@
                     (change)="toggleCheckAll($event)"
                     [checked]="checkedStats.all"
                     (contextmenu)="invertChecked($event)"
-                  ></mat-checkbox> <!-- TODO cheked!! -->
+                  ></mat-checkbox>
                 </td>
                 <td mat-sort-header="_superState">
                   <mat-icon>person</mat-icon>
@@ -235,15 +235,15 @@
 
             <ng-container *ngFor="let session of gms.sessions$ | async; trackBy: trackSession">
               <tc-test-view
-                  [testSession]="session"
-                  [displayOptions]="displayOptions"
-                  [marked]="markedElement"
-                  (markedElement$)="markElement($event)"
-                  [selected]="selectedElement"
-                  (selectedElement$)="selectElement($event)"
-                  [checked]="gms.isChecked(session)"
-                  (checked$)="toggleChecked($event, session)"
-                  [ngStyle]="{background: getSessionColor(session)}"
+                [testSession]="session"
+                [displayOptions]="displayOptions"
+                [marked]="markedElement"
+                (markedElement$)="markElement($event)"
+                [selected]="selectedElement"
+                (selectedElement$)="selectElement($event)"
+                [checked]="gms.isChecked(session)"
+                (checked$)="toggleChecked($event, session)"
+                [ngStyle]="{background: getSessionColor(session)}"
               >
               </tc-test-view>
             </ng-container>
@@ -254,21 +254,22 @@
   </mat-sidenav-container>
 
   <button
-      class="drawer-button-close"
-      mat-icon-button
-      (click)="sidenav.toggle()"
-      matTooltip=""
-      matTooltipPosition="right"
+    class="drawer-button-close"
+    mat-icon-button
+    (click)="sidenav.toggle()"
+    matTooltip=""
+    matTooltipPosition="right"
   >
     <mat-icon>chevron_right</mat-icon>
   </button>
 
-  <button *ngIf="sidenav.opened"
-          class="drawer-button-open"
-          mat-icon-button
-          (click)="sidenav.toggle()"
-          matTooltip="{{'Test-Steuerung verbergen' | customtext:'gm_hide_controls_tooltip' | async}}"
-          matTooltipPosition="above"
+  <button
+    *ngIf="sidenav.opened"
+    class="drawer-button-open"
+    mat-icon-button
+    (click)="sidenav.toggle()"
+    matTooltip="{{'Test-Steuerung verbergen' | customtext:'gm_hide_controls_tooltip' | async}}"
+    matTooltipPosition="above"
   >
     <mat-icon>chevron_left</mat-icon>
   </button>
diff --git a/src/app/group-monitor/group-monitor.component.spec.ts b/src/app/group-monitor/group-monitor.component.spec.ts
index acdfb6d79f39d3b1be846d69c3aaff67ce399441..8066ea775f42db83bd537efe6fc8b4e0e6299fa9 100644
--- a/src/app/group-monitor/group-monitor.component.spec.ts
+++ b/src/app/group-monitor/group-monitor.component.spec.ts
@@ -54,7 +54,7 @@ class MockBackendService {
 
 class MockGroupMonitorService {
   checkingOptions: CheckingOptions = {
-    disableAutoCheckAll: false,
+    enableAutoCheckAll: false,
     autoCheckAll: true
   };
 
diff --git a/src/app/group-monitor/group-monitor.component.ts b/src/app/group-monitor/group-monitor.component.ts
index e901b2299d7ffdda9710e63a3d7cbd60093c0d84..e41c3d309b8f918333361aae4c37025d893cda8b 100644
--- a/src/app/group-monitor/group-monitor.component.ts
+++ b/src/app/group-monitor/group-monitor.component.ts
@@ -112,7 +112,7 @@ export class GroupMonitorComponent implements OnInit, OnDestroy {
   private onSessionsUpdate(stats: TestSessionSetStats): void {
     this.displayOptions.highlightSpecies = (stats.differentBookletSpecies > 1);
 
-    if (!this.gms.checkingOptions.disableAutoCheckAll) {
+    if (!this.gms.checkingOptions.enableAutoCheckAll) {
       this.displayOptions.manualChecking = true;
     }
   }
@@ -196,7 +196,7 @@ export class GroupMonitorComponent implements OnInit, OnDestroy {
     dialogRef.afterClosed().subscribe((confirmed: boolean) => {
       if (confirmed) {
         this.isClosing = true;
-        this.gms.finishEverything()
+        this.gms.commandFinishEverything()
           .subscribe(() => {
             setTimeout(() => { this.router.navigateByUrl('/r/login'); }, 5000); // go away
           });
@@ -235,7 +235,7 @@ export class GroupMonitorComponent implements OnInit, OnDestroy {
   }
 
   toggleAlwaysCheckAll(event: MatSlideToggleChange): void {
-    if (this.gms.checkingOptions.disableAutoCheckAll && !event.checked) {
+    if (this.gms.checkingOptions.enableAutoCheckAll && !event.checked) {
       this.gms.checkAll();
       this.displayOptions.manualChecking = false;
       this.gms.checkingOptions.autoCheckAll = true;
diff --git a/src/app/group-monitor/group-monitor.interfaces.ts b/src/app/group-monitor/group-monitor.interfaces.ts
index 9ca8795a1212d7733834893608e332ab2df97189..2600e48b67335a31fc85e97395684cf4bfa2e4e7 100644
--- a/src/app/group-monitor/group-monitor.interfaces.ts
+++ b/src/app/group-monitor/group-monitor.interfaces.ts
@@ -111,7 +111,7 @@ export interface TestViewDisplayOptions {
 }
 
 export interface CheckingOptions {
-  disableAutoCheckAll: boolean;
+  enableAutoCheckAll: boolean;
   autoCheckAll: boolean;
 }
 
diff --git a/src/app/group-monitor/group-monitor.service.spec.ts b/src/app/group-monitor/group-monitor.service.spec.ts
index 58876f0f6f8a6305b730464ce96af355c1a794b9..5408c9cf8c42013d82d448c4397d313b434c14e8 100644
--- a/src/app/group-monitor/group-monitor.service.spec.ts
+++ b/src/app/group-monitor/group-monitor.service.spec.ts
@@ -161,7 +161,7 @@ describe('GroupMonitorService', () => {
 
   describe('getSessionSetStats', () => {
     it('should fetch correct stats from sessions', () => {
-      const result = service.getSessionSetStats(unitTestExampleSessions);
+      const result = GroupMonitorService.getSessionSetStats(unitTestExampleSessions, 2);
       const expectation: TestSessionSetStats = {
         number: 3,
         differentBooklets: 3,
diff --git a/src/app/group-monitor/group-monitor.service.ts b/src/app/group-monitor/group-monitor.service.ts
index ff9d488e724c7ca38f60b2bb82f403d6f5e6cc25..7230be0d87a7454864a0c1e60efc23da3458d84d 100644
--- a/src/app/group-monitor/group-monitor.service.ts
+++ b/src/app/group-monitor/group-monitor.service.ts
@@ -31,6 +31,8 @@ import { ConnectionStatus } from '../shared/websocket-backend.service';
  * #--> STAND. getCurrent zählt freie units zum letzten Block ?! (unit test schreiben!)
  * - select all checkbox ist zunächst angewählt
  * - unter-testlet lässt sich auswählen!
+ * - filter namen customisieren
+ * - alle gleichzeitig schlater muss neu rendern zur Folge ahben
  * # kombinierte hintergrundfarben
  * descendantCount -> unit count (not direct!)
  * tidy:
@@ -115,7 +117,7 @@ export class GroupMonitorService {
     this.sortBy$ = new BehaviorSubject<Sort>({ direction: 'asc', active: 'personLabel' });
     this.filters$ = new BehaviorSubject<TestSessionFilter[]>([]);
     this.checkingOptions = {
-      disableAutoCheckAll: true,
+      enableAutoCheckAll: true,
       autoCheckAll: true
     };
 
@@ -159,6 +161,7 @@ export class GroupMonitorService {
     );
   }
 
+  // todo unit test
   private static filterSessions(sessions: TestSession[], filters: TestSessionFilter[]): TestSession[] {
     return sessions
       .filter(session => session.data.testId && session.data.testId > -1) // testsession without testId is deprecated
@@ -204,11 +207,11 @@ export class GroupMonitorService {
   }
 
   private synchronizeChecked(sessions: TestSession[]): void {
-    const sessionsStats = this.getSessionSetStats(sessions);
+    const sessionsStats = GroupMonitorService.getSessionSetStats(sessions);
 
-    this.checkingOptions.disableAutoCheckAll = (sessionsStats.differentBookletSpecies < 2);
+    this.checkingOptions.enableAutoCheckAll = (sessionsStats.differentBookletSpecies < 2);
 
-    if (!this.checkingOptions.disableAutoCheckAll) {
+    if (!this.checkingOptions.enableAutoCheckAll) {
       this.checkingOptions.autoCheckAll = false;
     }
 
@@ -221,7 +224,7 @@ export class GroupMonitorService {
       });
     this._checked = newCheckedSessions;
 
-    this._checkedStats$.next(this.getSessionSetStats(Object.values(this._checked)));
+    this._checkedStats$.next(GroupMonitorService.getSessionSetStats(Object.values(this._checked), sessions.length));
     this._sessionsStats$.next(sessionsStats);
   }
 
@@ -263,6 +266,7 @@ export class GroupMonitorService {
       });
   }
 
+  // todo unit test
   testCommandResume(): void {
     const testIds = this.checked
       .filter(TestSessionService.isPaused)
@@ -276,6 +280,7 @@ export class GroupMonitorService {
     );
   }
 
+  // todo unit test
   testCommandPause(): void {
     const testIds = this.checked
       .filter(session => !TestSessionService.isPaused(session))
@@ -289,6 +294,7 @@ export class GroupMonitorService {
     );
   }
 
+  // todo unit test
   testCommandGoto(selection: Selection): void {
     const allTestIds: number[] = [];
     const groupedByBooklet: {
@@ -324,6 +330,7 @@ export class GroupMonitorService {
     });
   }
 
+  // todo unit test
   testCommandUnlock(): void {
     const testIds = this.checked
       .filter(TestSessionService.isLocked)
@@ -337,10 +344,33 @@ export class GroupMonitorService {
     );
   }
 
+  // todo unit test
+  commandFinishEverything(): Observable<CommandResponse> {
+    const getUnlockedConnectedTestIds = () => Object.values(this._sessions$.getValue())
+      .filter(session => !TestSessionService.hasState(session.data.testState, 'status', 'locked') &&
+        !TestSessionService.hasState(session.data.testState, 'CONTROLLER', 'TERMINATED') &&
+        (TestSessionService.hasState(session.data.testState, 'CONNECTION', 'POLLING') ||
+          TestSessionService.hasState(session.data.testState, 'CONNECTION', 'WEBSOCKET')))
+      .map(session => session.data.testId);
+    const getUnlockedTestIds = () => Object.values(this._sessions$.getValue())
+      .filter(session => session.data.testId > 0)
+      .filter(session => !TestSessionService.hasState(session.data.testState, 'status', 'locked'))
+      .map(session => session.data.testId);
+
+    this.filters$.next([]);
+
+    return this.bs.command('terminate', [], getUnlockedConnectedTestIds())
+      .pipe(
+        delay(1900),
+        flatMap(() => this.bs.lock(this.groupName, getUnlockedTestIds()))
+      );
+  }
+
   isChecked(session: TestSession): boolean {
     return (typeof this._checked[session.id] !== 'undefined');
   }
 
+  // todo unit test
   checkSessionsBySelection(selected: Selection): void {
     if (this.checkingOptions.autoCheckAll) {
       return;
@@ -410,10 +440,11 @@ export class GroupMonitorService {
   }
 
   private onCheckedChanged(): void {
-    this._checkedStats$.next(this.getSessionSetStats(this.checked));
+    this._checkedStats$.next(GroupMonitorService.getSessionSetStats(this.checked));
   }
 
-  getSessionSetStats(sessionSet: TestSession[]): TestSessionSetStats { // TODO only private for test
+  // TODO only public for test
+  static getSessionSetStats(sessionSet: TestSession[], allCount: number = sessionSet.length): TestSessionSetStats {
     const booklets = new Set();
     const bookletSpecies = new Set();
     let paused = 0;
@@ -431,30 +462,9 @@ export class GroupMonitorService {
       number: sessionSet.length,
       differentBooklets: booklets.size,
       differentBookletSpecies: bookletSpecies.size,
-      all: (this.sessions.length === sessionSet.length),
+      all: (allCount === sessionSet.length),
       paused,
       locked
     };
   }
-
-  finishEverything(): Observable<CommandResponse> {
-    const getUnlockedConnectedTestIds = () => Object.values(this._sessions$.getValue())
-      .filter(session => !TestSessionService.hasState(session.data.testState, 'status', 'locked') &&
-                         !TestSessionService.hasState(session.data.testState, 'CONTROLLER', 'TERMINATED') &&
-                         (TestSessionService.hasState(session.data.testState, 'CONNECTION', 'POLLING') ||
-                         TestSessionService.hasState(session.data.testState, 'CONNECTION', 'WEBSOCKET')))
-      .map(session => session.data.testId);
-    const getUnlockedTestIds = () => Object.values(this._sessions$.getValue())
-      .filter(session => session.data.testId > 0)
-      .filter(session => !TestSessionService.hasState(session.data.testState, 'status', 'locked'))
-      .map(session => session.data.testId);
-
-    this.filters$.next([]);
-
-    return this.bs.command('terminate', [], getUnlockedConnectedTestIds())
-      .pipe(
-        delay(1900),
-        flatMap(() => this.bs.lock(this.groupName, getUnlockedTestIds()))
-      );
-  }
 }
diff --git a/src/app/group-monitor/test-session.service.spec.ts b/src/app/group-monitor/test-session.service.spec.ts
index 5922184a8cc02eedf00e2e7b7b30ca518fc22018..f2f428c50e6de4883d310d3278044aff02da6bce 100644
--- a/src/app/group-monitor/test-session.service.spec.ts
+++ b/src/app/group-monitor/test-session.service.spec.ts
@@ -21,7 +21,7 @@ describe('TestSessionService', () => {
       .toBeTruthy();
   });
 
-  fdescribe('getCurrent()', () => {
+  describe('getCurrent()', () => {
     it('should find correct indices for unit, parent and ancestor ( = top-level-testlet or root)', () => {
       const fakeTestlet = (id: string): Testlet => ({
         id,