diff --git a/proxy.conf.json b/proxy.conf.json
index 86e0c8f7a51a795c65c599fc11653a4008994b31..64aac1fae4c1ba022285310c6df4fadf402edbd7 100644
--- a/proxy.conf.json
+++ b/proxy.conf.json
@@ -15,6 +15,14 @@
     },
 		"logLevel": "debug"
   },
+  "/api/bonustoken": {
+    "target": "http://localhost:8088",
+    "secure": false,
+    "pathRewrite": {
+      "^/api": ""
+    },
+		"logLevel": "debug"
+  },
   "/api/settings": {
     "target": "http://localhost:8088",
     "secure": false,
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 75d38da8e968e9955baa865528047cc149bf2a2f..7720c73aca2fd1f54c9c2cc65c12b655f9825028 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -41,6 +41,7 @@ import { DemoVideoComponent } from './components/home/_dialogs/demo-video/demo-v
 import { HomeCreatorPageComponent } from './components/home/home-creator-page/home-creator-page.component';
 import { HomeParticipantPageComponent } from './components/home/home-participant-page/home-participant-page.component';
 import { CommentSettingsService } from './services/http/comment-settings.service';
+import { BonusTokenService } from './services/http/bonus-token.service';
 import { ModeratorModule } from './components/moderator/moderator.module';
 import { ImprintComponent } from './components/home/_dialogs/imprint/imprint.component';
 import { DataProtectionComponent } from './components/home/_dialogs/data-protection/data-protection.component';
@@ -150,6 +151,7 @@ export function initializeApp(appConfig: AppConfig) {
     VoteService,
     ModeratorService,
     CommentSettingsService,
+    BonusTokenService,
     WsConnectorService,
     {
       provide: MatDialogRef,
diff --git a/src/app/components/creator/_dialogs/bonus-token/bonus-token.component.html b/src/app/components/creator/_dialogs/bonus-token/bonus-token.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..0bf87b73ce8ab524580ed75266029ba3ea56fd35
--- /dev/null
+++ b/src/app/components/creator/_dialogs/bonus-token/bonus-token.component.html
@@ -0,0 +1,9 @@
+<div mat-dialog-content>
+  <h1>{{'room-page.bonus-token-header' | translate }}</h1>
+  <mat-divider></mat-divider>
+  <div fxLayout="row" *ngFor="let bonusToken of bonusTokens">
+    <h2>
+      {{bonusToken.token}}
+    </h2>
+  </div>
+</div>
diff --git a/src/app/components/creator/_dialogs/bonus-token/bonus-token.component.scss b/src/app/components/creator/_dialogs/bonus-token/bonus-token.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..1ca5302796251bf2d66dd74a6cf6e228464b83ad
--- /dev/null
+++ b/src/app/components/creator/_dialogs/bonus-token/bonus-token.component.scss
@@ -0,0 +1,3 @@
+h1,h2,h3,h4,h5,p{
+  color: var(--on-surface);
+}
diff --git a/src/app/components/creator/_dialogs/bonus-token/bonus-token.component.ts b/src/app/components/creator/_dialogs/bonus-token/bonus-token.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f270f68dcdd1d977265ab74a954be4eae6f1c59d
--- /dev/null
+++ b/src/app/components/creator/_dialogs/bonus-token/bonus-token.component.ts
@@ -0,0 +1,25 @@
+import { Component, OnInit } from '@angular/core';
+import { BonusTokenService } from '../../../../services/http/bonus-token.service';
+import { BonusToken } from '../../../../models/bonus-token';
+
+@Component({
+  selector: 'app-bonus-token',
+  templateUrl: './bonus-token.component.html',
+  styleUrls: ['./bonus-token.component.scss']
+})
+export class BonusTokenComponent implements OnInit {
+  roomId: string;
+  bonusTokens: BonusToken[] = [];
+
+  constructor(
+    private bonusTokenService: BonusTokenService
+  ) {
+
+  }
+
+  ngOnInit() {
+    this.bonusTokenService.getTokensByRoomId(this.roomId).subscribe( list => {
+      this.bonusTokens = list;
+    });
+  }
+}
diff --git a/src/app/components/creator/creator.module.ts b/src/app/components/creator/creator.module.ts
index 049446dea46f00237b10a7f811c3b77c2431542c..b6ec2e716b7c1a2c85e344ab1f5620fe5eee073a 100644
--- a/src/app/components/creator/creator.module.ts
+++ b/src/app/components/creator/creator.module.ts
@@ -23,6 +23,7 @@ import { ContentEditComponent } from './_dialogs/content-edit/content-edit.compo
 import { ContentPresentationComponent } from './content-presentation/content-presentation.component';
 import { CommentExportComponent } from './_dialogs/comment-export/comment-export.component';
 import { ModeratorsComponent } from './_dialogs/moderators/moderators.component';
+import { BonusTokenComponent } from './_dialogs/bonus-token/bonus-token.component';
 import { CommentSettingsComponent } from './_dialogs/comment-settings/comment-settings.component';
 import { ModeratorDeleteComponent } from './_dialogs/moderator-delete/moderator-delete.component';
 import { DeleteCommentComponent } from './_dialogs/delete-comment/delete-comment.component';
@@ -59,6 +60,7 @@ import { DeleteCommentsComponent } from './_dialogs/delete-comments/delete-comme
     ContentPresentationComponent,
     CommentExportComponent,
     ModeratorsComponent,
+    BonusTokenComponent,
     CommentSettingsComponent,
     ModeratorDeleteComponent,
     DeleteCommentsComponent,
@@ -77,6 +79,7 @@ import { DeleteCommentsComponent } from './_dialogs/delete-comments/delete-comme
     ContentEditComponent,
     CommentExportComponent,
     ModeratorsComponent,
+    BonusTokenComponent,
     CommentSettingsComponent,
     ModeratorDeleteComponent,
     DeleteCommentsComponent,
diff --git a/src/app/components/creator/room-creator-page/room-creator-page.component.html b/src/app/components/creator/room-creator-page/room-creator-page.component.html
index 0c0c5543a6cd1ed6bbfc9ddf0fed4ab884b6b002..f0f4c815087cc77be517c68994ebe2d6bbce2ea3 100644
--- a/src/app/components/creator/room-creator-page/room-creator-page.component.html
+++ b/src/app/components/creator/room-creator-page/room-creator-page.component.html
@@ -35,6 +35,10 @@
             <mat-icon>gavel</mat-icon>
             {{ 'room-page.moderators' | translate}}
           </button>
+          <button mat-menu-item (click)="showBonusTokenDialog()" aria-labelledby= "person">
+            <mat-icon>grade</mat-icon>
+            {{ 'room-page.bonus-token' | translate}}
+          </button>
         </mat-menu>
         <button  id="settings-menu"
                  mat-icon-button class="corner-icons" [matMenuTriggerFor]="settingsMenu" aria-labelledby="settings">
diff --git a/src/app/components/creator/room-creator-page/room-creator-page.component.ts b/src/app/components/creator/room-creator-page/room-creator-page.component.ts
index fa6f258398399ad74357c924dd170665b3441f49..a21e930f5e76d8317b134d86634e5ce93794b275 100644
--- a/src/app/components/creator/room-creator-page/room-creator-page.component.ts
+++ b/src/app/components/creator/room-creator-page/room-creator-page.component.ts
@@ -14,6 +14,7 @@ import { TSMap } from 'typescript-map';
 import { WsCommentServiceService } from '../../../services/websockets/ws-comment-service.service';
 import { CommentService } from '../../../services/http/comment.service';
 import { ModeratorsComponent } from '../_dialogs/moderators/moderators.component';
+import { BonusTokenComponent } from '../_dialogs/bonus-token/bonus-token.component';
 import { CommentSettingsComponent } from '../_dialogs/comment-settings/comment-settings.component';
 import { LiveAnnouncer } from '@angular/cdk/a11y';
 import { EventService } from '../../../services/util/event.service';
@@ -202,6 +203,13 @@ export class RoomCreatorPageComponent extends RoomPageComponent implements OnIni
     dialogRef.componentInstance.roomId = this.room.id;
   }
 
+  showBonusTokenDialog(): void {
+    const dialogRef = this.dialog.open(BonusTokenComponent, {
+      width: '400px'
+    });
+    dialogRef.componentInstance.roomId = this.room.id;
+  }
+
   copyShortId(): void {
     const selBox = document.createElement('textarea');
     selBox.style.position = 'fixed';
diff --git a/src/app/components/shared/_dialogs/user-bonus-token/user-bonus-token.component.html b/src/app/components/shared/_dialogs/user-bonus-token/user-bonus-token.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..6584f5b1de946ac9e3748e70b4b665a5211d10bf
--- /dev/null
+++ b/src/app/components/shared/_dialogs/user-bonus-token/user-bonus-token.component.html
@@ -0,0 +1,9 @@
+<div mat-dialog-content>
+  <h1>{{'user-bonus-token-dialog.header' | translate }}</h1>
+  <mat-divider></mat-divider>
+  <div fxLayout="row" *ngFor="let bonusToken of bonusTokens">
+    <h2>
+      {{bonusToken.token}}
+    </h2>
+  </div>
+</div>
diff --git a/src/app/components/shared/_dialogs/user-bonus-token/user-bonus-token.component.scss b/src/app/components/shared/_dialogs/user-bonus-token/user-bonus-token.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..1ca5302796251bf2d66dd74a6cf6e228464b83ad
--- /dev/null
+++ b/src/app/components/shared/_dialogs/user-bonus-token/user-bonus-token.component.scss
@@ -0,0 +1,3 @@
+h1,h2,h3,h4,h5,p{
+  color: var(--on-surface);
+}
diff --git a/src/app/components/shared/_dialogs/user-bonus-token/user-bonus-token.component.ts b/src/app/components/shared/_dialogs/user-bonus-token/user-bonus-token.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e9cab7ee728e1424e830fb68aa58f49d3133843e
--- /dev/null
+++ b/src/app/components/shared/_dialogs/user-bonus-token/user-bonus-token.component.ts
@@ -0,0 +1,25 @@
+import { Component, OnInit } from '@angular/core';
+import { BonusTokenService } from '../../../../services/http/bonus-token.service';
+import { BonusToken } from '../../../../models/bonus-token';
+
+@Component({
+  selector: 'app-user-bonus-token',
+  templateUrl: './user-bonus-token.component.html',
+  styleUrls: ['./user-bonus-token.component.scss']
+})
+export class UserBonusTokenComponent implements OnInit {
+  userId: string;
+  bonusTokens: BonusToken[] = [];
+
+  constructor(
+    private bonusTokenService: BonusTokenService
+  ) {
+
+  }
+
+  ngOnInit() {
+    this.bonusTokenService.getTokensByUserId(this.userId).subscribe( list => {
+      this.bonusTokens = list;
+    });
+  }
+}
diff --git a/src/app/components/shared/comment-list/comment-list.component.ts b/src/app/components/shared/comment-list/comment-list.component.ts
index ee51099102650c28e50b1a45203fe49f5e7fbf75..d24eb3271adc0b8eb4a059c1aafd0065071fa553 100644
--- a/src/app/components/shared/comment-list/comment-list.component.ts
+++ b/src/app/components/shared/comment-list/comment-list.component.ts
@@ -196,8 +196,8 @@ export class CommentListComponent implements OnInit {
                   this.comments[i].favorite = <boolean>value;
                   console.log(this.comments[i]);
                   if (this.user.id === this.comments[i].creatorId && <boolean>value) {
-                    this.translateService.get('comment-list.comment-got-favorited').subscribe( msg => {
-                      this.notificationService.show(msg);
+                    this.translateService.get('comment-list.comment-got-favorited').subscribe(ret => {
+                      this.notificationService.show(ret);
                     });
                   }
                   break;
diff --git a/src/app/components/shared/header/header.component.html b/src/app/components/shared/header/header.component.html
index 2787fecc6b79c305f1a721693e403231ccc366c1..29c3faa3c7a14304a28900e8c76ee85df985f34f 100644
--- a/src/app/components/shared/header/header.component.html
+++ b/src/app/components/shared/header/header.component.html
@@ -34,6 +34,10 @@
         <span *ngIf="!user.isGuest">{{'header.my-sessions' | translate}}</span>
         <span *ngIf="user.isGuest" svgIcon="meeting_room">{{'header.visited-sessions' | translate}}</span>
       </button>
+      <button mat-menu-item *ngIf="user" (click)="openUserBonusTokenDialog()">
+        <mat-icon color="warn">grade</mat-icon>
+        <span>{{'header.user-bonus-token' | translate}}</span>
+      </button>
       <button mat-menu-item *ngIf="user && !user.isGuest" (click)="openDeleteUserDialog()">
         <mat-icon color="warn">delete</mat-icon>
         <span>{{'header.delete-account' | translate}}</span>
diff --git a/src/app/components/shared/header/header.component.ts b/src/app/components/shared/header/header.component.ts
index 9ebd8deabae25f21d07ef6dc6e8eae502efd3c19..16ad1a1fce8799c76f6c50e85b4c63241d7fac46 100644
--- a/src/app/components/shared/header/header.component.ts
+++ b/src/app/components/shared/header/header.component.ts
@@ -15,6 +15,7 @@ import { AppComponent } from '../../../app.component';
 import { Rescale } from '../../../models/rescale';
 import { KeyboardUtils } from '../../../utils/keyboard';
 import { KeyboardKey } from '../../../utils/keyboard/keys';
+import { UserBonusTokenComponent } from '../_dialogs/user-bonus-token/user-bonus-token.component';
 
 @Component({
   selector: 'app-header',
@@ -151,6 +152,13 @@ export class HeaderComponent implements OnInit {
       });
   }
 
+  openUserBonusTokenDialog() {
+    const dialogRef = this.dialog.open(UserBonusTokenComponent, {
+      width: '600px'
+    });
+    dialogRef.componentInstance.userId = this.user.id;
+  }
+
   cookiesDisabled(): boolean {
     return localStorage.getItem('cookieAccepted') === 'false';
   }
diff --git a/src/app/components/shared/shared.module.ts b/src/app/components/shared/shared.module.ts
index 215e162dc5b3f7945410fe3b26c3f9927776a885..b35a47dba07aca62db06b77f0385f6637b7bf0fa 100644
--- a/src/app/components/shared/shared.module.ts
+++ b/src/app/components/shared/shared.module.ts
@@ -19,6 +19,7 @@ import { ChartsModule } from 'ng2-charts';
 import { StatisticComponent } from './statistic/statistic.component';
 import { RoomJoinComponent } from './room-join/room-join.component';
 import { RoomCreateComponent } from './_dialogs/room-create/room-create.component';
+import { UserBonusTokenComponent } from './_dialogs/user-bonus-token/user-bonus-token.component';
 import { LoginComponent } from './login/login.component';
 import { StatisticHelpComponent } from './_dialogs/statistic-help/statistic-help.component';
 import { CommentComponent } from './comment/comment.component';
@@ -54,6 +55,7 @@ import { MatRippleModule } from '@angular/material';
     ListStatisticComponent,
     StatisticComponent,
     RoomCreateComponent,
+    UserBonusTokenComponent,
     LoginComponent,
     StatisticHelpComponent,
     CommentComponent,
@@ -88,7 +90,8 @@ import { MatRippleModule } from '@angular/material';
     StatisticHelpComponent,
     CreateCommentComponent,
     PresentCommentComponent,
-    DeleteAccountComponent
+    DeleteAccountComponent,
+    UserBonusTokenComponent
   ]
 })
 export class SharedModule {
diff --git a/src/app/models/bonus-token.ts b/src/app/models/bonus-token.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2c1ac3fd2cb3dada67b59926076f0f22b1205001
--- /dev/null
+++ b/src/app/models/bonus-token.ts
@@ -0,0 +1,15 @@
+export class BonusToken {
+  roomId: string;
+  userId: string;
+  token: string;
+
+  constructor(
+    roomId: string,
+    userId: string,
+    token: string
+  ) {
+    this.roomId = roomId;
+    this.userId = userId;
+    this.token = token;
+  }
+}
diff --git a/src/app/services/http/bonus-token.service.ts b/src/app/services/http/bonus-token.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e85583249af7624fe545d01be0bef5b2ffa16354
--- /dev/null
+++ b/src/app/services/http/bonus-token.service.ts
@@ -0,0 +1,47 @@
+import { Injectable } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Observable } from 'rxjs';
+import { BonusToken } from '../../models/bonus-token';
+import { catchError, tap } from 'rxjs/operators';
+import { BaseHttpService } from './base-http.service';
+
+const httpOptions = {
+  headers: new HttpHeaders({ 'Content-Type': 'application/json' })
+};
+
+@Injectable()
+export class BonusTokenService extends BaseHttpService {
+  private apiUrl = {
+    base: '/api',
+    bonustoken: '/bonustoken',
+    find: '/find'
+  };
+
+  constructor(private http: HttpClient) {
+    super();
+  }
+
+  getTokensByRoomId(roomId: string): Observable<BonusToken[]> {
+    const connectionUrl = `${this.apiUrl.base + this.apiUrl.bonustoken + this.apiUrl.find}`;
+    return this.http.post<BonusToken[]>(connectionUrl, {
+      properties: {
+        roomId: roomId
+      }
+    }).pipe(
+      tap(() => ''),
+      catchError(this.handleError<BonusToken[]>(`get bonus token by roomid = ${roomId}`))
+    );
+  }
+
+  getTokensByUserId(userId: string): Observable<BonusToken[]> {
+    const connectionUrl = `${this.apiUrl.base + this.apiUrl.bonustoken + this.apiUrl.find}`;
+    return this.http.post<BonusToken[]>(connectionUrl, {
+      properties: {
+        userId: userId
+      }
+    }).pipe(
+      tap(() => ''),
+      catchError(this.handleError<BonusToken[]>(`get bonus token by userId = ${userId}`))
+    );
+  }
+}
diff --git a/src/assets/i18n/creator/de.json b/src/assets/i18n/creator/de.json
index 187d4f215e99663057f7cd171a8e529ed783caa3..9e77aad3f1c3b2dee85e282048aad762d9898379 100644
--- a/src/assets/i18n/creator/de.json
+++ b/src/assets/i18n/creator/de.json
@@ -161,6 +161,8 @@
     "a11y-threshold": "Schieberegler zum Einstellen des Schwellenwerts für sichtbare Fragen",
     "abort": "Abbrechen",
     "answer-statistics": "Statistiken",
+    "bonus-token": "Tokens für Bonuspunkte",
+    "bonus-token-header": "Tokens für Bonuspunkte",
     "cancel": "Abbrechen",
     "cancel-description": "Abbrechen",
     "changes-successful": "Änderungen gespeichert.",
diff --git a/src/assets/i18n/creator/en.json b/src/assets/i18n/creator/en.json
index 8213a39016821a2453d9aca055f73972feba0e45..3d501f59f634efd176566b1fb1f32485e0db9c4f 100644
--- a/src/assets/i18n/creator/en.json
+++ b/src/assets/i18n/creator/en.json
@@ -162,6 +162,8 @@
     "a11y-threshold": "Slider for setting the threshold for visible questions",
     "abort": "Abort",
     "answer-statistics": "Statistics",
+    "bonus-token": "Tokens for bonus points",
+    "bonus-token-header": "Tokens for bonus points",
     "cancel": "Cancel",
     "cancel-description": "Cancel",
     "changes-successful": "Successfully updated.",
diff --git a/src/assets/i18n/home/de.json b/src/assets/i18n/home/de.json
index 17fd185d8836bb310c1e98e1e57bb0d80748b3c3..817940cc1f27bda5d91dc94b7d21c28d05d83fbc 100644
--- a/src/assets/i18n/home/de.json
+++ b/src/assets/i18n/home/de.json
@@ -59,6 +59,7 @@
     "my-sessions": "Meine Sitzungen",
     "really-delete-account": "Willst du dein Konto mit allen Sitzungen unwiderruflich löschen?",
     "sure": "Bist du sicher?",
+    "user-bonus-token": "Zu deinen Bonus Tokens",
     "visited-sessions": "Besuchte Sitzungen"
   },
   "help": {
@@ -220,5 +221,8 @@
     "activation-key-input-description": "Gib hier den Aktivierungs-Schlüssel ein, den du per E-Mail zugesendet bekommen hast.",
     "cancel": "Abbrechen",
     "cancel-description": "Abbrechen"
+  },
+  "user-bonus-token": {
+    "header": "Tokens für Bonuspunkte"
   }
 }
diff --git a/src/assets/i18n/home/en.json b/src/assets/i18n/home/en.json
index c863114fa9e4b3eee0f5d9d7b67a3b878e77137f..6c0a845a53e56afbbb24f8f4be49eeb030243761 100644
--- a/src/assets/i18n/home/en.json
+++ b/src/assets/i18n/home/en.json
@@ -60,6 +60,7 @@
     "my-sessions": "My sessions",
     "really-delete-account": "Do you really want to irrevocably delete your account with the associated sessions?",
     "sure": "Are you sure?",
+    "user-bonus-token": "See your bonus tokens",
     "visited-sessions": "Visited sessions"
   },
   "help": {
@@ -222,5 +223,8 @@
     "activation-key-input-description": "Enter the activation key that you received by e-mail.",
     "cancel": "Cancel",
     "cancel-description": "Cancel"
+  },
+  "user-bonus-token-dialog": {
+    "header": "Tokens for bonus points"
   }
 }