diff --git a/src/game/coordinate.entity.ts b/src/game/coordinate.entity.ts
index 65ad6545eb030813a796cb4fef836030bf247154..e0087ba1c338d1b9420a3edf1db843e6bbf94275 100644
--- a/src/game/coordinate.entity.ts
+++ b/src/game/coordinate.entity.ts
@@ -13,6 +13,7 @@ import {
     GameEntity,
   } from './game.entity';
   import { FactionEntity } from './faction.entity';
+import { type } from 'os';
   
   @Entity('MapDrawing')
   export class MapDrawingEntity {
@@ -22,9 +23,20 @@ import {
   
     @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;
+  }
   
\ No newline at end of file
diff --git a/src/game/faction.entity.ts b/src/game/faction.entity.ts
index b0a99df8f152d4572ba528cc8149a8d0021beac7..135d73a4108b3191e29c9e8921f1fbf5dffc9a37 100644
--- a/src/game/faction.entity.ts
+++ b/src/game/faction.entity.ts
@@ -19,18 +19,10 @@ 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)
-  game: GameEntity;
+  @ManyToOne(type => GameEntity, game => game.id)
+  gameId: GameEntity;
 }
 
 @Entity('PowerUp')
@@ -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 0ef442c04c6d4b2cf6b6f6089c045fb1b88aad51..739e02a0a7bbd77b0267ba723e7a6b622af5ee83 100644
--- a/src/game/game.entity.ts
+++ b/src/game/game.entity.ts
@@ -11,8 +11,8 @@ import {
 
 import { PersonEntity } from '../user/user.entity';
 import { GameGroupEntity } from './group.entity';
-import { FactionEntity } from './faction.entity';
-import { MapDrawingEntity } from './coordinate.entity';
+import { FactionEntity, TaskEntity } from './faction.entity';
+import { MapDrawingEntity, Game_Person_MapDrawingEntity } from './coordinate.entity';
 
 // table that stores all created games
 @Entity('Game')
@@ -24,8 +24,9 @@ export class GameEntity {
   @Column({ type: 'json', nullable: true }) map: 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)
@@ -47,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',
@@ -75,11 +76,6 @@ export class ObjectivePointEntity {
   coordinate: MapDrawingEntity;
   @ManyToOne(type => GameEntity, game => game.objective_points)
   game: GameEntity;
-  @OneToMany(
-    type => ObjectivePoint_HistoryEntity,
-    op_history => op_history.objective_point,
-  )
-  op_history: Game_PersonEntity[];
 }
 
 @Entity('ObjectivePoint_History')
@@ -90,7 +86,7 @@ export class ObjectivePoint_HistoryEntity {
 
   @ManyToOne(
     type => ObjectivePointEntity,
-    objective_point => objective_point.op_history,
+    objective_point => objective_point.objectivePointId,
   )
   objective_point: ObjectivePointEntity;
 }
diff --git a/src/game/game.service.ts b/src/game/game.service.ts
index ec89d51b81276bc07ef1a282b2f4329428013049..44b38fca6b800a960312599362ef1c6874b405b8 100644
--- a/src/game/game.service.ts
+++ b/src/game/game.service.ts
@@ -34,7 +34,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({
@@ -63,7 +63,7 @@ export class GameService {
       // update game entry in db
       const updatedGame = await this.gameRepository.create({
         ...gameData,
-        factions: null,
+        factionsId: null,
       });
       updatedGame['id'] = id;
       const gameId = await this.gameRepository.save(updatedGame);
@@ -78,7 +78,7 @@ export class GameService {
           if (!Object.values(factionNames).includes(faction.factionName)) {
             let name = await this.factionRepository.create({
               ...faction,
-              game: gameId,
+              gameId: gameId,
             });
             await this.factionRepository.insert(name);
           }
diff --git a/src/mapmarkers/mapmarker.entity.ts b/src/mapmarkers/mapmarker.entity.ts
index b83b1d9ad56c6de51563aa0e1a5fe024e5cf9665..237951a9f362fe774515f82d2fd63dfc1ed7415a 100644
--- a/src/mapmarkers/mapmarker.entity.ts
+++ b/src/mapmarkers/mapmarker.entity.ts
@@ -7,20 +7,21 @@ import {
   } from 'typeorm';
   
   import { PersonEntity } from '../user/user.entity';
+import { GameEntity, Game_PersonEntity } from 'src/game/game.entity';
   
   /*
   Entity: MapMarker 
   - represents data that database contains on mapmarker
   */
   
-  @Entity('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;
+    @ManyToOne(type => Game_PersonEntity, player => player.markers)
+    player: Game_PersonEntity;
   }
-  
\ No newline at end of file
+  */
\ No newline at end of file
diff --git a/src/mapmarkers/mapmarkers.module.ts b/src/mapmarkers/mapmarkers.module.ts
index 9fda8c9309e32239634c65ce72c4816860aa8cec..a69970ec970f6f70adc8b38351364698c9e61a1e 100644
--- a/src/mapmarkers/mapmarkers.module.ts
+++ b/src/mapmarkers/mapmarkers.module.ts
@@ -3,7 +3,7 @@ import { TypeOrmModule } from '@nestjs/typeorm';
 
 import { MapMarkersController } from './mapmarkers.controller';
 import { MapMarkerService } from './mapmarker.service';
-import { MapMarkerEntity } from './mapmarker.entity';
+/*import { MapMarkerEntity } from './mapmarker.entity';
 import { PersonEntity } from '../user/user.entity';
 
 @Module({
@@ -11,4 +11,4 @@ import { PersonEntity } from '../user/user.entity';
   controllers: [MapMarkersController],
   providers: [MapMarkerService]
 })
-export class MapMarkerModule {}
+export class MapMarkerModule {}*/
diff --git a/src/shared/roles.controller.ts b/src/shared/roles.controller.ts
new file mode 100644
index 0000000000000000000000000000000000000000..76f56300b3abd944e86a9c5bdbfb651e322e8ab6
--- /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();
+    }
+});*/
\ No newline at end of file
diff --git a/src/user/user.entity.ts b/src/user/user.entity.ts
index 6323836fdcaf3fbd91a3be97268e9a659e142b41..99dbea97b97aaa448e723e0602369991c6b243e1 100644
--- a/src/user/user.entity.ts
+++ b/src/user/user.entity.ts
@@ -7,8 +7,6 @@ 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'
 
 @Entity('Person')
@@ -16,8 +14,7 @@ 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[];