diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 1673c4d21defdff88a69d355abedeed9f56db4aa..257a588cc3f227d97239651116484b9be2052a8a 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -49,6 +49,7 @@ import { LicenseAgreementComponent } from './components/license-agreement/licens
 import { QuickDrugTargetComponent } from './components/quick-drug-target/quick-drug-target.component';
 import { QuickDrugComponent } from './components/quick-drug/quick-drug.component';
 import { ToastComponent } from './components/toast/toast.component';
+import { GroupSelectionComponent } from './pages/explorer-page/group-selection/group-selection.component';
 
 
 @NgModule({
@@ -79,6 +80,7 @@ import { ToastComponent } from './components/toast/toast.component';
     QuickDrugTargetComponent,
     QuickDrugComponent,
     ToastComponent,
+    GroupSelectionComponent,
   ],
   imports: [
     BrowserModule,
diff --git a/src/app/config.ts b/src/app/config.ts
index faf3ce176d5811911c0bc192f7db978df01756cc..93aca8fbca01e8abf88d0cbe7515b5a3433ff199 100644
--- a/src/app/config.ts
+++ b/src/app/config.ts
@@ -121,7 +121,7 @@ const defaultNodeGroup: NodeGroup = {
       borderWidthSelected: 2
     };
 const connectorNodeGroup: NodeGroup = JSON.parse(JSON.stringify(defaultNodeGroup));
-connectorNodeGroup.groupName = 'Connector Node';
+connectorNodeGroup.groupName = 'Connector Nodes';
 
 // @ts-ignore
 /**
diff --git a/src/app/pages/explorer-page/explorer-page.component.html b/src/app/pages/explorer-page/explorer-page.component.html
index 82cf955590889b0b59b24050ce07dca17326dabb..f6d1342fe63d406509d75100f06d9bd6b8c2adfa 100644
--- a/src/app/pages/explorer-page/explorer-page.component.html
+++ b/src/app/pages/explorer-page/explorer-page.component.html
@@ -471,7 +471,41 @@
 
             <footer class="card-footer">
               <a
-                (click)="analysis.invertSelection(networkHandler.activeNetwork.currentViewNodes)"
+                (click)="analysis.addAllToSelection()"
+                class="card-footer-item text-primary"
+                tooltipPosition="top"
+                pTooltip="Add all proteins to the selection."
+              >
+                <span class="icon">
+                  <i class="fa fa-plus"></i>
+                </span>
+                <span> Add all </span>
+              </a>
+            </footer>
+            <footer class="card-footer">
+              <a
+                class="card-footer-item text-primary"
+                tooltipPosition="top"
+                pTooltip="Add all proteins to the selection."
+              >
+                <span class="icon">
+                  <i class="fa fa-plus"></i>
+                </span>
+                <span class="is-fullwidth">
+                  <app-group-selection
+                    (selectGroupEmitter)="analysis.addGroupToSelection($event)"
+                    [nodeGroups]="drugstoneConfig.config.nodeGroups"
+                  ></app-group-selection>
+                </span>
+              </a>
+            </footer>
+            <footer class="card-footer">
+              <a
+                (click)="
+                  analysis.invertSelection(
+                    networkHandler.activeNetwork.currentViewNodes
+                  )
+                "
                 class="card-footer-item text-primary"
                 tooltipPosition="top"
                 pTooltip="Invert the current selection."
diff --git a/src/app/pages/explorer-page/explorer-page.component.ts b/src/app/pages/explorer-page/explorer-page.component.ts
index 6a521affe27571a63a15086fdf7fab440842ad3b..bd300ee8eaecc2f71b2868c236a32208e067892f 100644
--- a/src/app/pages/explorer-page/explorer-page.component.ts
+++ b/src/app/pages/explorer-page/explorer-page.component.ts
@@ -591,12 +591,4 @@ export class ExplorerPageComponent implements OnInit, AfterViewInit {
     this.taskEvent.emit(eventObject);
   }
 
-  // //TODO check if used
-  // setInputNetwork(network: any) {
-  //   if (network == null)
-  //     this.analysis.inputNetwork = { nodes: this.proteins, edges: this.edges }
-  //   else
-  //     this.analysis.inputNetwork = network;
-  // }
-//
 }
diff --git a/src/app/pages/explorer-page/group-selection/group-selection.component.html b/src/app/pages/explorer-page/group-selection/group-selection.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..570e6d91b9c9d9e16e0e3a4e5aa5dc3b1e330340
--- /dev/null
+++ b/src/app/pages/explorer-page/group-selection/group-selection.component.html
@@ -0,0 +1,18 @@
+<span class="add-group-selector">
+  <ng-select
+    [items]="_nodeGroupsList"
+    bindLabel="groupName"
+    bindValue="groupName"
+    [virtualScroll]="true"
+    [placeholder]="getAddGroupLabel()"
+    (change)="selectGroup($event)"
+    pTooltip="Select all nodes of a group."
+    [tooltipStyleClass]="'drgstn drgstn-tooltip drgstn-tooltip-right'"
+    tooltipPosition="right"
+    [clearable]="false"
+  >
+    <ng-template ng-option-tmp let-item="item">
+      <span>{{ item.groupName }}</span>
+    </ng-template>
+  </ng-select>
+</span>
diff --git a/src/app/pages/explorer-page/group-selection/group-selection.component.scss b/src/app/pages/explorer-page/group-selection/group-selection.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/app/pages/explorer-page/group-selection/group-selection.component.spec.ts b/src/app/pages/explorer-page/group-selection/group-selection.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5a3acf28b075a0ced6963ac4d247eef611adc2ef
--- /dev/null
+++ b/src/app/pages/explorer-page/group-selection/group-selection.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { GroupSelectionComponent } from './group-selection.component';
+
+describe('GroupSelectionComponent', () => {
+  let component: GroupSelectionComponent;
+  let fixture: ComponentFixture<GroupSelectionComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      declarations: [ GroupSelectionComponent ]
+    })
+    .compileComponents();
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(GroupSelectionComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/pages/explorer-page/group-selection/group-selection.component.ts b/src/app/pages/explorer-page/group-selection/group-selection.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..52baf2c888bdd910bce8e0baf607464ae7626557
--- /dev/null
+++ b/src/app/pages/explorer-page/group-selection/group-selection.component.ts
@@ -0,0 +1,41 @@
+import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
+import { NodeGroup } from 'src/app/config';
+
+@Component({
+  selector: 'app-group-selection',
+  templateUrl: './group-selection.component.html',
+  styleUrls: ['./group-selection.component.scss']
+})
+export class GroupSelectionComponent implements OnInit {
+
+  constructor() { }
+
+  ngOnInit(): void {
+  }
+
+  // undefined groupName is selected node group
+  private unselecableGroups = ['Drug', 'Disorders', undefined, 'Seed Nodes', 'Default Node Group', 'Connector Nodes', 'Found Nodes'];
+  public _nodeGroupsList: NodeGroup[];
+
+  @Output() selectGroupEmitter: EventEmitter<NodeGroup> = new EventEmitter();
+  @Input() set nodeGroups(value: { string: NodeGroup }) {
+    this._nodeGroupsList = Object.values(value).filter(nodeGroup => !this.unselecableGroups.includes(nodeGroup.groupName));
+    console.log(this._nodeGroupsList)
+  }
+  public selectedGroup = null;
+
+  selectGroup(item) {
+    if (item === undefined) {
+      return
+    }
+    this.selectedGroup = item;
+    this.selectGroupEmitter.emit(item);
+  }
+
+  getAddGroupLabel() {
+    if (this.selectedGroup != null)
+      return ""
+    return "Group";
+  }
+
+}
diff --git a/src/app/services/analysis/analysis.service.ts b/src/app/services/analysis/analysis.service.ts
index 40ac700e1cb0bc2a6e4f31bb86d3ca5e7c282577..6ccb84a04b36af7aaf98609d2d7bbd3d1e3c6ecb 100644
--- a/src/app/services/analysis/analysis.service.ts
+++ b/src/app/services/analysis/analysis.service.ts
@@ -7,6 +7,7 @@ import {NetexControllerService} from '../netex-controller/netex-controller.servi
 import {DrugstoneConfigService} from "../drugstone-config/drugstone-config.service";
 import {NetworkHandlerService} from "../network-handler/network-handler.service";
 import { ToastService } from '../toast/toast.service';
+import { NodeGroup } from 'src/app/config';
 
 export type AlgorithmType =
   'trustrank'
@@ -152,28 +153,52 @@ export class AnalysisService {
     this.selectListSubject.next({items: removedWrappers, selected: false});
   }
 
-  public addSeeds(nodes) {
-    const addedWrappers: Wrapper[] = [];
-    nodes.forEach((node) => {
-      if (node.isSeed === true && !this.inSelection(node)) {
-        addedWrappers.push(node);
-        this.selectedItems.set(node.id, node);
+  public addGroupToSelection(group: NodeGroup) {
+    const wrappers: Wrapper[] = [];
+    this.networkHandler.activeNetwork.currentViewNodes.forEach((node) => {
+      if (node.groupName !== group.groupName || node.drugstoneType !== 'protein') {
+        // only consider nodes of group and proteins
+        return
       }
+      wrappers.push(getWrapperFromNode(node));
     });
-    this.selectListSubject.next({items: addedWrappers, selected: true});
+    this.addItems(wrappers)
   }
 
-  public removeSeeds(nodes) {
-    const removedWrappers: Wrapper[] = [];
-    nodes.forEach((node) => {
-      if (node.isSeed === true && this.inSelection(node)) {
-        removedWrappers.push(node);
-        this.selectedItems.delete(node.id);
+  public addAllToSelection() {
+    const wrappers: Wrapper[] = [];
+    this.networkHandler.activeNetwork.currentViewNodes.forEach((node) => {
+      if (node.drugstoneType !== 'protein') {
+        // only consider proteins
+        return
       }
+      wrappers.push(getWrapperFromNode(node));
     });
-    this.selectListSubject.next({items: removedWrappers, selected: false});
+    this.addItems(wrappers)
   }
 
+  // public addSeeds(nodes) {
+  //   const addedWrappers: Wrapper[] = [];
+  //   nodes.forEach((node) => {
+  //     if (node.isSeed === true && !this.inSelection(node)) {
+  //       addedWrappers.push(node);
+  //       this.selectedItems.set(node.id, node);
+  //     }
+  //   });
+  //   this.selectListSubject.next({items: addedWrappers, selected: true});
+  // }
+
+  // public removeSeeds(nodes) {
+  //   const removedWrappers: Wrapper[] = [];
+  //   nodes.forEach((node) => {
+  //     if (node.isSeed === true && this.inSelection(node)) {
+  //       removedWrappers.push(node);
+  //       this.selectedItems.delete(node.id);
+  //     }
+  //   });
+  //   this.selectListSubject.next({items: removedWrappers, selected: false});
+  // }
+
   public invertSelection(nodes) {
     const newSelection = [];
     nodes.forEach((node: Node) => {