diff --git a/src/game/coordinate.entity.ts b/src/game/coordinate.entity.ts
index d3d7d016f6abe2e2fd1cd486223c73245c5c4f04..851bb65c1b23ad74c06b2eb479710f5d121b08fa 100644
--- a/src/game/coordinate.entity.ts
+++ b/src/game/coordinate.entity.ts
@@ -1,5 +1,11 @@
-import { Entity, Column, PrimaryGeneratedColumn, ManyToOne } from 'typeorm';
-import { GameEntity } from './game.entity';
+import {
+  Entity,
+  Column,
+  PrimaryGeneratedColumn,
+  ManyToOne,
+  Timestamp,
+} from 'typeorm';
+import { GameEntity, Game_PersonEntity } from './game.entity';
 import { FactionEntity } from './faction.entity';
 
 @Entity('MapDrawing')
@@ -10,8 +16,19 @@ export class MapDrawingEntity {
 
   @Column({ type: 'json', nullable: true }) data: JSON;
 
-  @ManyToOne(type => FactionEntity, faction => faction.mapDrawings)
+  @ManyToOne(type => FactionEntity, faction => faction.factionId)
   faction: FactionEntity;
   @ManyToOne(type => GameEntity, gameEntity => gameEntity.id)
   gameId: GameEntity;
 }
+
+@Entity('Game_Person_MapDrawing')
+export class Game_Person_MapDrawingEntity {
+  @PrimaryGeneratedColumn('uuid') GPmapDrawingId: string;
+  @Column({ type: 'timestamp' }) GPCTimeStamp: Timestamp;
+
+  @ManyToOne(type => Game_PersonEntity, game_person => game_person.gamepersonId)
+  game_person: Game_PersonEntity;
+  @ManyToOne(type => MapDrawingEntity, map_drawing => map_drawing.mapDrawingId)
+  map_drawing: MapDrawingEntity;
+}
diff --git a/src/game/faction.entity.ts b/src/game/faction.entity.ts
index b0a99df8f152d4572ba528cc8149a8d0021beac7..afac7c252189307b977d3376e50fe2dd5afe0d75 100644
--- a/src/game/faction.entity.ts
+++ b/src/game/faction.entity.ts
@@ -19,17 +19,9 @@ export class FactionEntity {
   @Column({ type: 'text' }) factionPassword: string;
   @Column({ type: 'float' }) multiplier: number;
 
-  @OneToMany(type => MapDrawingEntity, mapDrawings => mapDrawings.faction)
-  mapDrawings: MapDrawingEntity[];
-  @OneToMany(type => ScoreEntity, scores => scores.faction)
-  scores: ScoreEntity[];
-  @OneToMany(type => PowerUpEntity, powerUps => powerUps.factions)
-  powerUps: Faction_PowerUpEntity[];
-  @OneToMany(type => TaskEntity, tasks => tasks.faction)
-  tasks: TaskEntity[];
   @OneToMany(type => Game_PersonEntity, game_persons => game_persons.faction)
   game_persons: Game_PersonEntity[];
-  @ManyToOne(type => GameEntity, game => game.factions)
+  @ManyToOne(type => GameEntity, game => game.id)
   game: GameEntity;
 }
 
@@ -41,7 +33,7 @@ export class PowerUpEntity {
   @Column({ type: 'int' }) amount: number;
   @Column({ type: 'time' }) cooldown: string;
 
-  @OneToMany(type => FactionEntity, factions => factions.powerUps)
+  @OneToMany(type => FactionEntity, factions => factions.factionId)
   factions: Faction_PowerUpEntity[];
 }
 
@@ -49,7 +41,7 @@ export class PowerUpEntity {
 export class Faction_PowerUpEntity {
   @PrimaryGeneratedColumn('uuid') faction_powerUpId: string;
 
-  @ManyToOne(type => FactionEntity, faction => faction.powerUps)
+  @ManyToOne(type => FactionEntity, faction => faction.factionId)
   faction: FactionEntity;
   @ManyToOne(type => PowerUpEntity, powerUp => powerUp.factions)
   powerUp: PowerUpEntity;
@@ -75,7 +67,7 @@ export class ScoreEntity {
   @Column({ type: 'float' }) score: number;
   @Column({ type: 'timestamp' }) scoreTimeStamp: Timestamp;
 
-  @ManyToOne(type => FactionEntity, factionName => factionName.scores)
+  @ManyToOne(type => FactionEntity, factionName => factionName.factionId)
   faction: FactionEntity;
 }
 
@@ -87,7 +79,7 @@ export class TaskEntity {
   @Column({ type: 'text' }) taskWinner: string;
   @Column({ type: 'bool' }) taskIsActive: boolean;
 
-  @ManyToOne(type => FactionEntity, faction => faction.tasks)
+  @ManyToOne(type => FactionEntity, faction => faction.factionId)
   faction: FactionEntity;
   /*     @ManyToOne(type => PersonEntity, person => person.tasks)
     person: PersonEntity; */
diff --git a/src/game/game.entity.ts b/src/game/game.entity.ts
index 06b0508bad0d8951dd39f80a87da60b5a2011a94..efa5c486069b25654b14f45cd02b1bfe870683fb 100644
--- a/src/game/game.entity.ts
+++ b/src/game/game.entity.ts
@@ -25,8 +25,8 @@ export class GameEntity {
   @Column({ type: 'json', nullable: true }) nodesettings?: JSON;
   @Column('timestamp') startdate: Timestamp;
   @Column('timestamp') enddate: Timestamp;
-  @OneToMany(type => FactionEntity, faction => faction.game)
-  factions: FactionEntity[];
+  @OneToMany(type => FactionEntity, factions => factions.factionId)
+  factionsId: FactionEntity[];
   @OneToMany(type => Game_PersonEntity, game_persons => game_persons.game)
   game_persons: Game_PersonEntity[];
   @OneToMany(type => GameGroupEntity, group => group.game)
@@ -48,11 +48,11 @@ export class GameEntity {
 export class Game_PersonEntity {
   @PrimaryGeneratedColumn('uuid') gamepersonId: string;
   @Column({ type: 'text', nullable: true }) role: string;
-  @ManyToOne(type => FactionEntity, faction => faction.game_persons)
+  @ManyToOne(type => FactionEntity, faction => faction.factionId)
   faction: FactionEntity;
-  @ManyToOne(type => GameEntity, game => game.game_persons)
+  @ManyToOne(type => GameEntity, game => game.id)
   game: GameEntity;
-  @ManyToOne(type => PersonEntity, person => person.game_persons)
+  @ManyToOne(type => PersonEntity, person => person.id)
   person: PersonEntity;
   @OneToOne(type => GameGroupEntity, group => group.leader, {
     onDelete: 'CASCADE',
@@ -71,17 +71,11 @@ export class ObjectivePointEntity {
   @PrimaryGeneratedColumn('uuid') objectivePointId: string;
   @Column({ type: 'text' }) objectivePointDescription: string;
   @Column({ type: 'float' }) objectivePointMultiplier: number;
-  //@Column('boolean') captureStatus: boolean;
 
   @ManyToOne(type => MapDrawingEntity, coordinate => coordinate.data)
   coordinate: MapDrawingEntity;
   @ManyToOne(type => GameEntity, game => game.objective_points)
   game: GameEntity;
-  @OneToMany(
-    type => ObjectivePoint_HistoryEntity,
-    op_history => op_history.objective_point,
-  )
-  op_history: ObjectivePoint_HistoryEntity[];
 }
 
 @Entity('ObjectivePoint_History')
@@ -95,7 +89,7 @@ export class ObjectivePoint_HistoryEntity {
   owner: FactionEntity;
   @ManyToOne(
     type => ObjectivePointEntity,
-    objective_point => objective_point.op_history,
+    objective_point => objective_point.objectivePointId,
   )
   objective_point: ObjectivePointEntity;
 }
diff --git a/src/game/game.module.ts b/src/game/game.module.ts
index 54520a8aaddb471b050bc7b3d4f1083318858d69..c908e483b7b1a867d5d8dfb8e8fab54ea212ecfe 100644
--- a/src/game/game.module.ts
+++ b/src/game/game.module.ts
@@ -12,6 +12,7 @@ import {
 import { PersonEntity } from '../user/user.entity';
 import { GameGroupEntity } from './group.entity';
 import { FactionEntity } from './faction.entity';
+import { NotificationModule } from '../notifications/notifications.module';
 
 @Module({
   imports: [
@@ -24,6 +25,7 @@ import { FactionEntity } from './faction.entity';
       ObjectivePointEntity,
       ObjectivePoint_HistoryEntity,
     ]),
+    NotificationModule,
   ],
   controllers: [GameController],
   providers: [GameService],
diff --git a/src/game/game.service.ts b/src/game/game.service.ts
index 8efdd8740f31b955880661f8c6a4f279e28b5841..31f31d723c8c9de029b724b2b6cd86c1700365c6 100644
--- a/src/game/game.service.ts
+++ b/src/game/game.service.ts
@@ -47,7 +47,7 @@ export class GameService {
       // else add the game to the database
       const game = await this.gameRepository.create({
         ...gameData,
-        factions: gameData.factions,
+        factionsId: gameData.factions,
       });
       await this.gameRepository.insert(game);
       const gamePerson = await this.game_PersonRepository.create({
@@ -76,7 +76,7 @@ export class GameService {
       // update game entry in db
       const updatedGame = await this.gameRepository.create({
         ...gameData,
-        factions: null,
+        factionsId: null,
         objective_points: null,
       });
       updatedGame['id'] = id;
diff --git a/src/mapmarkers/mapmarker.entity.ts b/src/mapmarkers/mapmarker.entity.ts
index b83b1d9ad56c6de51563aa0e1a5fe024e5cf9665..ed4896cfb1f9a17428494c7ef215ab3f9b38a4f9 100644
--- a/src/mapmarkers/mapmarker.entity.ts
+++ b/src/mapmarkers/mapmarker.entity.ts
@@ -1,26 +1,23 @@
 import {
-    Entity,
-    Column,
-    PrimaryGeneratedColumn,
-    Timestamp,
-    ManyToOne,
-  } from 'typeorm';
-  
-  import { PersonEntity } from '../user/user.entity';
-  
-  /*
+  Entity,
+  Column,
+  PrimaryGeneratedColumn,
+  Timestamp,
+  ManyToOne,
+} from 'typeorm';
+
+import { PersonEntity } from '../user/user.entity';
+
+/*
   Entity: MapMarker 
   - represents data that database contains on mapmarker
   */
-  
-  @Entity('MapMarker')
-  export class MapMarkerEntity {
-    @PrimaryGeneratedColumn('uuid') id: string;
-    @Column({ type: 'text', nullable: true }) latitude: string;
-    @Column({ type: 'text', nullable: true }) longitude: string;
-    @Column({ type: 'timestamp' }) timestamp: Timestamp;
-    @Column({ type: 'json', nullable: true }) features: JSON;
-    @ManyToOne(type => PersonEntity, player => player.markers)
-    player: PersonEntity;
-  }
-  
\ No newline at end of file
+
+@Entity('MapMarker')
+export class MapMarkerEntity {
+  @PrimaryGeneratedColumn('uuid') id: string;
+  @Column({ type: 'text', nullable: true }) latitude: string;
+  @Column({ type: 'text', nullable: true }) longitude: string;
+  @Column({ type: 'timestamp' }) timestamp: Timestamp;
+  @Column({ type: 'json', nullable: true }) features: JSON;
+}
diff --git a/src/mapmarkers/mapmarker.service.ts b/src/mapmarkers/mapmarker.service.ts
index 1a948694810e6ba42b961bde7bd73de02ba24fb6..f320d17b0892cec302281a1ee6f99b13fb788b78 100644
--- a/src/mapmarkers/mapmarker.service.ts
+++ b/src/mapmarkers/mapmarker.service.ts
@@ -1,11 +1,10 @@
-import { Injectable, HttpException, HttpStatus } from '@nestjs/common';
-import { Repository, In } from 'typeorm';
+import { Injectable } from '@nestjs/common';
+import { Repository } from 'typeorm';
 import { InjectRepository } from '@nestjs/typeorm';
 
 import { MapMarkerEntity } from './mapmarker.entity';
 import { MapMarkerDTO } from './mapmarker.dto';
 import { PersonEntity } from '../user/user.entity';
-import { userInfo } from 'os';
 
 @Injectable()
 export class MapMarkerService {
@@ -29,12 +28,11 @@ export class MapMarkerService {
       //create&copy entity properties
       const location = await this.mapmarkerRepository.create({
         ...data,
-        player: user,
       });
       // insert created entity NOTE: insert method doesn't check for duplicates.
       await this.mapmarkerRepository.insert(location);
       // return data and player id&name
-      return { ...data, player: location.player.nameObject() };
+      return { ...data };
     } catch (error) {
       return error;
     }
@@ -49,7 +47,7 @@ export class MapMarkerService {
       });
       // return markers from database with said playerdata
       return markers.map(marker => {
-        return { ...marker, player: marker.player.nameObject() };
+        return { ...marker };
       });
     } catch (error) {
       return error.message;
diff --git a/src/notifications/notifications.module.ts b/src/notifications/notifications.module.ts
index 5441d120b1e633b86c0c4d1db32416b2daf80937..97cf59c1f929cfc14b5335b0308e7615ac10dee8 100644
--- a/src/notifications/notifications.module.ts
+++ b/src/notifications/notifications.module.ts
@@ -6,5 +6,6 @@ import { TypeOrmModule } from '@nestjs/typeorm';
 @Module({
   imports: [TypeOrmModule.forFeature([NotificationEntity])],
   providers: [NotificationGateway],
+  exports: [NotificationGateway],
 })
 export class NotificationModule {}
diff --git a/src/shared/roles.controller.ts b/src/shared/roles.controller.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0d91e061c7fea732af225819e87f8529ff326eab
--- /dev/null
+++ b/src/shared/roles.controller.ts
@@ -0,0 +1,88 @@
+const AccessControl = require('accesscontrol');
+
+const grants = {
+  admin: {
+    mapmarker: {
+      'create:any': [],
+      'delete:any': [],
+      'read:any': [],
+      'update:any': [],
+    },
+    powerup: {
+      'create:any': [],
+      'delete:any': [],
+      'read:any': [],
+      'update:any': [],
+    },
+    faction: {
+      'create:any': [],
+      'delete:any': [],
+      'read:any': [],
+      'update:any': [],
+    },
+    players: {
+      'create:any': [],
+      'delete:any': [],
+      'read:any': [],
+      'update:any': [],
+    },
+  },
+  faction_leader: {
+    mapmarker: {
+      'create:own': [],
+      'delete:own': [],
+      'read:own': [],
+    },
+    powerup: {
+      'read:own': [],
+    },
+    faction: {
+      'read:own': [],
+      'update:own': [],
+    },
+    players: {
+      'read:own': [],
+      'update:own': [],
+    },
+  },
+  //player & spectator
+};
+
+const ac = new AccessControl(grants);
+
+/*const express = require ('express');
+const router express.Router;
+
+const ac = new AccessControl();
+ac.grant('faction_leader')                    // define new or modify existing role. also takes an array.
+    .createOwn('mapmarker')             // equivalent to .createOwn('video', ['*'])
+    .deleteOwn('mapmarker')
+    .readOwn('mapmarker')
+  .grant('admin')                   // switch to another role without breaking the chain
+    .extend('user')                 // inherit role capabilities. also takes an array
+    .updateAny('mapmarker', ['title'])  // explicitly defined attributes
+    .deleteAny('mapmarker')
+    .readAny('mapmarker');
+
+//const
+let permission = ac.can('user').createOwn('mapmarker');
+console.log(permission.granted);    // —> true
+console.log(permission.attributes); // —> ['*'] (all attributes)
+
+permission = ac.can('admin').updateAny('mapmarker');
+console.log(permission.granted);    // —> true
+console.log(permission.attributes); // —> ['title']
+
+router.get('/videos/:title', function (req, res, next) {
+    const permission = ac.can(req.user.role).readAny('video');
+    if (permission.granted) {
+        Video.find(req.params.title, function (err, data) {
+            if (err || !data) return res.status(404).end();
+            // filter data by permission attributes and send.
+            res.json(permission.filter(data));
+        });
+    } else {
+        // resource is forbidden for this user/role
+        res.status(403).end();
+    }
+});*/
diff --git a/src/user/user.entity.ts b/src/user/user.entity.ts
index 6323836fdcaf3fbd91a3be97268e9a659e142b41..ba2578f018a5319b28c3714e031c077eea5653d0 100644
--- a/src/user/user.entity.ts
+++ b/src/user/user.entity.ts
@@ -7,17 +7,13 @@ import {
 } from 'typeorm';
 import * as bcrypt from 'bcryptjs';
 import * as jwt from 'jsonwebtoken';
-import { MapMarkerEntity } from 'src/mapmarkers/mapmarker.entity';
-import {TaskEntity} from '../game/faction.entity'
-import {Game_PersonEntity} from '../game/game.entity'
+import { Game_PersonEntity } from '../game/game.entity';
 
 @Entity('Person')
 export class PersonEntity {
   @PrimaryGeneratedColumn('uuid') id: string;
   @Column({ type: 'text', unique: true }) name: string;
   @Column('text') password: string;
-  @OneToMany(type => MapMarkerEntity, marker => marker.player)
-  markers: MapMarkerEntity[];
   @OneToMany(type => Game_PersonEntity, game_persons => game_persons.person)
   game_persons: Game_PersonEntity[];