diff --git a/package-lock.json b/package-lock.json
index fe60e359660e52589b864d983fab69f17b4e7076..01d2eb7272357854133cd7fe3325d9234a86c4cb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -426,11 +426,11 @@
       }
     },
     "@nestjs/common": {
-      "version": "6.2.4",
-      "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.2.4.tgz",
-      "integrity": "sha512-YZvJ6/S7yVQZK+9rupCzMCg4tpbc9DyVvLoTx0NBDqExTCUNcNEcCtn0AZrO/hLqbeYODnJwGE2NxkH1R/qw+w==",
+      "version": "6.5.2",
+      "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.5.2.tgz",
+      "integrity": "sha512-vkB6JLPPckjS35usLMV3Q6vljkgzhN3jgQ+U1VY6cKriyjnkIcUKo37tNQSPYkaAGe1pOLK4IkmwMTSyhNieyg==",
       "requires": {
-        "axios": "0.18.0",
+        "axios": "0.19.0",
         "cli-color": "1.4.0",
         "uuid": "3.3.2"
       }
@@ -1272,12 +1272,19 @@
       "dev": true
     },
     "axios": {
-      "version": "0.18.0",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
-      "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=",
+      "version": "0.19.0",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz",
+      "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==",
       "requires": {
-        "follow-redirects": "^1.3.0",
-        "is-buffer": "^1.1.5"
+        "follow-redirects": "1.5.10",
+        "is-buffer": "^2.0.2"
+      },
+      "dependencies": {
+        "is-buffer": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
+          "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw=="
+        }
       }
     },
     "babel-jest": {
@@ -2172,11 +2179,12 @@
       }
     },
     "d": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
-      "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
+      "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
       "requires": {
-        "es5-ext": "^0.10.9"
+        "es5-ext": "^0.10.50",
+        "type": "^1.0.1"
       }
     },
     "dashdash": {
@@ -2222,6 +2230,7 @@
       "version": "3.2.6",
       "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
       "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+      "dev": true,
       "requires": {
         "ms": "^2.1.1"
       }
@@ -2598,13 +2607,13 @@
       }
     },
     "es6-weak-map": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
-      "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
+      "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
       "requires": {
         "d": "1",
-        "es5-ext": "^0.10.14",
-        "es6-iterator": "^2.0.1",
+        "es5-ext": "^0.10.46",
+        "es6-iterator": "^2.0.3",
         "es6-symbol": "^3.1.1"
       }
     },
@@ -3021,11 +3030,26 @@
       }
     },
     "follow-redirects": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz",
-      "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==",
+      "version": "1.5.10",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
+      "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
       "requires": {
-        "debug": "^3.2.6"
+        "debug": "=3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        }
       }
     },
     "for-in": {
@@ -3101,8 +3125,7 @@
         "ansi-regex": {
           "version": "2.1.1",
           "bundled": true,
-          "dev": true,
-          "optional": true
+          "dev": true
         },
         "aproba": {
           "version": "1.2.0",
@@ -3123,14 +3146,12 @@
         "balanced-match": {
           "version": "1.0.0",
           "bundled": true,
-          "dev": true,
-          "optional": true
+          "dev": true
         },
         "brace-expansion": {
           "version": "1.1.11",
           "bundled": true,
           "dev": true,
-          "optional": true,
           "requires": {
             "balanced-match": "^1.0.0",
             "concat-map": "0.0.1"
@@ -3145,20 +3166,17 @@
         "code-point-at": {
           "version": "1.1.0",
           "bundled": true,
-          "dev": true,
-          "optional": true
+          "dev": true
         },
         "concat-map": {
           "version": "0.0.1",
           "bundled": true,
-          "dev": true,
-          "optional": true
+          "dev": true
         },
         "console-control-strings": {
           "version": "1.1.0",
           "bundled": true,
-          "dev": true,
-          "optional": true
+          "dev": true
         },
         "core-util-is": {
           "version": "1.0.2",
@@ -3275,8 +3293,7 @@
         "inherits": {
           "version": "2.0.3",
           "bundled": true,
-          "dev": true,
-          "optional": true
+          "dev": true
         },
         "ini": {
           "version": "1.3.5",
@@ -3288,7 +3305,6 @@
           "version": "1.0.0",
           "bundled": true,
           "dev": true,
-          "optional": true,
           "requires": {
             "number-is-nan": "^1.0.0"
           }
@@ -3303,7 +3319,6 @@
           "version": "3.0.4",
           "bundled": true,
           "dev": true,
-          "optional": true,
           "requires": {
             "brace-expansion": "^1.1.7"
           }
@@ -3311,14 +3326,12 @@
         "minimist": {
           "version": "0.0.8",
           "bundled": true,
-          "dev": true,
-          "optional": true
+          "dev": true
         },
         "minipass": {
           "version": "2.3.5",
           "bundled": true,
           "dev": true,
-          "optional": true,
           "requires": {
             "safe-buffer": "^5.1.2",
             "yallist": "^3.0.0"
@@ -3337,7 +3350,6 @@
           "version": "0.5.1",
           "bundled": true,
           "dev": true,
-          "optional": true,
           "requires": {
             "minimist": "0.0.8"
           }
@@ -3418,8 +3430,7 @@
         "number-is-nan": {
           "version": "1.0.1",
           "bundled": true,
-          "dev": true,
-          "optional": true
+          "dev": true
         },
         "object-assign": {
           "version": "4.1.1",
@@ -3431,7 +3442,6 @@
           "version": "1.4.0",
           "bundled": true,
           "dev": true,
-          "optional": true,
           "requires": {
             "wrappy": "1"
           }
@@ -3517,8 +3527,7 @@
         "safe-buffer": {
           "version": "5.1.2",
           "bundled": true,
-          "dev": true,
-          "optional": true
+          "dev": true
         },
         "safer-buffer": {
           "version": "2.1.2",
@@ -3554,7 +3563,6 @@
           "version": "1.0.2",
           "bundled": true,
           "dev": true,
-          "optional": true,
           "requires": {
             "code-point-at": "^1.0.0",
             "is-fullwidth-code-point": "^1.0.0",
@@ -3574,7 +3582,6 @@
           "version": "3.0.1",
           "bundled": true,
           "dev": true,
-          "optional": true,
           "requires": {
             "ansi-regex": "^2.0.0"
           }
@@ -3618,14 +3625,12 @@
         "wrappy": {
           "version": "1.0.2",
           "bundled": true,
-          "dev": true,
-          "optional": true
+          "dev": true
         },
         "yallist": {
           "version": "3.0.3",
           "bundled": true,
-          "dev": true,
-          "optional": true
+          "dev": true
         }
       }
     },
@@ -4062,7 +4067,8 @@
     "is-buffer": {
       "version": "1.1.6",
       "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+      "dev": true
     },
     "is-callable": {
       "version": "1.1.4",
@@ -5109,9 +5115,9 @@
       }
     },
     "lodash": {
-      "version": "4.17.11",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
-      "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+      "version": "4.17.14",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz",
+      "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==",
       "dev": true
     },
     "lodash.includes": {
@@ -5382,9 +5388,9 @@
       "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
     },
     "mixin-deep": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
-      "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+      "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
       "dev": true,
       "requires": {
         "for-in": "^1.0.2",
@@ -6652,9 +6658,9 @@
       "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
     },
     "set-value": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
-      "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+      "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
       "dev": true,
       "requires": {
         "extend-shallow": "^2.0.1",
@@ -7641,6 +7647,11 @@
       "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
       "dev": true
     },
+    "type": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/type/-/type-1.0.1.tgz",
+      "integrity": "sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw=="
+    },
     "type-check": {
       "version": "0.3.2",
       "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
@@ -7838,38 +7849,15 @@
       "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="
     },
     "union-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
-      "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+      "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
       "dev": true,
       "requires": {
         "arr-union": "^3.1.0",
         "get-value": "^2.0.6",
         "is-extendable": "^0.1.1",
-        "set-value": "^0.4.3"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
-        "set-value": {
-          "version": "0.4.3",
-          "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
-          "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
-          "dev": true,
-          "requires": {
-            "extend-shallow": "^2.0.1",
-            "is-extendable": "^0.1.1",
-            "is-plain-object": "^2.0.1",
-            "to-object-path": "^0.3.0"
-          }
-        }
+        "set-value": "^2.0.1"
       }
     },
     "unique-string": {
diff --git a/package.json b/package.json
index 7f9b55f7927a8d9c62a905c3334d0d8025fb688a..3677b2a8db9be496cadc813cab1446501627bbc3 100644
--- a/package.json
+++ b/package.json
@@ -20,7 +20,7 @@
     "test:e2e": "jest --config ./test/jest-e2e.json"
   },
   "dependencies": {
-    "@nestjs/common": "^6.0.0",
+    "@nestjs/common": "^6.5.2",
     "@nestjs/core": "^6.0.0",
     "@nestjs/jwt": "^6.1.1",
     "@nestjs/platform-express": "^6.0.0",
diff --git a/src/faction/faction.dto.ts b/src/faction/faction.dto.ts
index 9064f56f285d3ab2aede368ad91c269ad8c2a334..fbc46d3267dc109010c4450a371ede7300c0d1d0 100644
--- a/src/faction/faction.dto.ts
+++ b/src/faction/faction.dto.ts
@@ -9,6 +9,7 @@ import {
   Max,
   IsOptional,
   IsHexColor,
+  IsIn,
 } from 'class-validator';
 
 import { GameEntity } from '../game/game.entity';
@@ -57,6 +58,8 @@ export class GameGroupDTO {
   @IsString()
   @Length(3, 31)
   name: string;
+  @IsIn(['infantry', 'recon', 'mechanized'])
+  class: string;
   @IsUUID('4')
   faction: FactionEntity;
 }
diff --git a/src/faction/faction.entity.ts b/src/faction/faction.entity.ts
index bc0b9269bdc5618364c536632f226c4974877080..5bdd6d933acef37be121d1fad29482e80f411aa4 100644
--- a/src/faction/faction.entity.ts
+++ b/src/faction/faction.entity.ts
@@ -13,6 +13,7 @@ import { GameEntity } from '../game/game.entity';
 import { Game_PersonEntity } from '../game/game.entity';
 import { MapDrawingEntity } from '../draw/coordinate.entity';
 import { Exclude } from 'class-transformer';
+import { ScoreEntity } from 'src/score/score.entity';
 
 //Faction, PowerUp, Faction_powerUp, FP_History, Score
 
@@ -35,6 +36,10 @@ export class FactionEntity {
   game: GameEntity;
   @OneToMany(type => MapDrawingEntity, mapDrawings => mapDrawings.faction)
   mapDrawings: MapDrawingEntity[];
+  @OneToMany(type => ScoreEntity, score => score.scoreId, {
+    onDelete: 'NO ACTION',
+  })
+  scores: ScoreEntity[];
 
   factionObject() {
     const { factionId, factionName, game } = this;
@@ -88,6 +93,7 @@ export class FP_HistoryEntity {
 export class GameGroupEntity {
   @PrimaryGeneratedColumn('uuid') id: string;
   @Column('text') name: string;
+  @Column('text') class: string;
   @OneToOne(type => Game_PersonEntity, person => person.leaderGroup, {
     onDelete: 'CASCADE',
   })
diff --git a/src/replay/replay.controller.ts b/src/replay/replay.controller.ts
index acc2ef50dafc1fb1c7f193c8da4834162b6ff4be..ed23960549f32e8b76e21b72dfb4693a7f389224 100644
--- a/src/replay/replay.controller.ts
+++ b/src/replay/replay.controller.ts
@@ -1,12 +1,19 @@
-import { Controller, Get, Param, Post } from '@nestjs/common';
+import {
+  Controller,
+  Get,
+  Param,
+  Post,
+  UseInterceptors,
+  ClassSerializerInterceptor,
+} from '@nestjs/common';
 import { ReplayService } from './replay.service';
-import { Roles } from 'src/shared/guard.decorator';
 
 @Controller('replay')
 export class ReplayController {
   constructor(private replayservice: ReplayService) {}
 
   @Get(':id')
+  @UseInterceptors(ClassSerializerInterceptor)
   async replayInfo(@Param('id') gameId) {
     return this.replayservice.replayData(gameId);
   }
diff --git a/src/replay/replay.module.ts b/src/replay/replay.module.ts
index c7accefa55f867a49c36e2dbc5cc3e75563b211c..b5dc7c888da8806ecae546a7dd5aecfcc7f10dae 100644
--- a/src/replay/replay.module.ts
+++ b/src/replay/replay.module.ts
@@ -8,8 +8,12 @@ import { FactionEntity, GameGroupEntity } from '../faction/faction.entity';
 import { UserService } from '../user/user.service';
 import { FactionService } from '../faction/faction.service';
 import { TrackingService } from '../tracking/tracking.service';
-import { TrackingEntity } from 'src/tracking/tracking.entity';
-import { PersonEntity } from 'src/user/user.entity';
+import { TrackingEntity } from '../tracking/tracking.entity';
+import { PersonEntity } from '../user/user.entity';
+import {
+  MapDrawingEntity,
+  MapDrawingHistoryEntity,
+} from '../draw/coordinate.entity';
 
 @Module({
   imports: [
@@ -20,6 +24,8 @@ import { PersonEntity } from 'src/user/user.entity';
       TrackingEntity,
       GameGroupEntity,
       Game_PersonEntity,
+      MapDrawingEntity,
+      MapDrawingHistoryEntity,
     ]),
   ],
   controllers: [ReplayController],
diff --git a/src/replay/replay.service.ts b/src/replay/replay.service.ts
index f5430860112e243305a4f0542036b8f9a0bb8a0a..76803d53d827479c5256fb1a74bf6410ca55ab4f 100644
--- a/src/replay/replay.service.ts
+++ b/src/replay/replay.service.ts
@@ -4,11 +4,15 @@ import { Repository } from 'typeorm';
 import * as jwt from 'jsonwebtoken';
 
 import { FactionEntity } from '../faction/faction.entity';
-import { GameEntity } from 'src/game/game.entity';
-import { TrackingService } from 'src/tracking/tracking.service';
-import { UserService } from 'src/user/user.service';
-import { FactionService } from 'src/faction/faction.service';
-import { TrackingEntity } from 'src/tracking/tracking.entity';
+import { GameEntity } from '../game/game.entity';
+import { TrackingService } from '../tracking/tracking.service';
+import { UserService } from '../user/user.service';
+import { FactionService } from '../faction/faction.service';
+import { TrackingEntity } from '../tracking/tracking.entity';
+import {
+  MapDrawingEntity,
+  MapDrawingHistoryEntity,
+} from '../draw/coordinate.entity';
 
 @Injectable()
 export class ReplayService {
@@ -19,36 +23,51 @@ export class ReplayService {
     private gameRepository: Repository<GameEntity>,
     @InjectRepository(TrackingEntity)
     private trackingRepository: Repository<TrackingEntity>,
+    @InjectRepository(MapDrawingEntity)
+    private mapdrawingRepository: Repository<MapDrawingEntity>,
+    @InjectRepository(MapDrawingHistoryEntity)
+    private mapHistoryRepository: Repository<MapDrawingHistoryEntity>,
     private trackingService: TrackingService,
     private userService: UserService,
     private factionService: FactionService,
   ) {}
 
   async replayData(gameId) {
-    const replay = await this.factionRepository.find({
-      where: { game: gameId },
-      relations: ['mapDrawings', 'scores', 'trackdata'],
+    let mapDrawingIds = await this.mapdrawingRepository.find({
+      where: { gameId: gameId },
+      select: ['mapDrawingId'],
     });
-    return replay;
+    let drawings = [];
+    await Promise.all(
+      mapDrawingIds.map(async mapId => {
+        drawings.push(
+          await this.mapHistoryRepository.find({
+            mapdrawing: mapId.mapDrawingId,
+          }),
+        );
+      }),
+    );
+    return drawings;
   }
 
   // get replay data for players
   async getPlayers(gameId) {
     let playerdata = await this.trackingRepository.find({
       where: { game: gameId },
-      relations: ['faction', 'gamepersonId'],
+      relations: ['faction', 'gamepersonId', 'gamepersonId.person'],
     });
-
     // parse data
     const currentdata = await Promise.all(
       playerdata.map(async player => {
+        player.data.map(async data => {
+          data['info'] = [
+            { key: 'icon', value: player.icon },
+            { key: 'colour', value: player.faction.colour },
+            { key: 'name', value: player.gamepersonId.person.name },
+            { key: 'role', value: player.gamepersonId.role },
+          ];
+        });
         return player['data'];
-        /*         return {
-          gamepersonId: player['gamepersonId']['gamepersonId'],
-          gamepersonRole: player['gamepersonId']['role'],
-          factionId: player['faction']['factionId'],
-          coordinates: player['data'],
-        }; */
       }),
     );
 
@@ -62,14 +81,17 @@ export class ReplayService {
       where: { id: gameId },
       relations: ['factions'],
     });
-    for (let i = 0; i < 20; i++) {
+    const groups = await this.factionService.showGroups(
+      game.factions[1].factionId,
+    );
+    for (let i = 0; i < 100; i++) {
       let res = await this.userService.register({
-        name: 'qqqqq' + i,
+        name: 'asdfasa' + i,
         password: 'asd',
       });
       let user = await jwt.verify(res.token, process.env.SECRET);
       users.push(user);
-      let gameperson = await this.factionService.joinFaction(user['id'], {
+      /*       let gameperson = await this.factionService.joinFaction(user['id'], {
         factionId:
           i < 10 ? game.factions[0].factionId : game.factions[1].factionId,
         factionPassword:
@@ -77,15 +99,23 @@ export class ReplayService {
             ? game.factions[0].factionPassword
             : game.factions[1].factionPassword,
         game: gameId,
+      }); */
+      let gameperson = await this.factionService.joinFaction(user['id'], {
+        factionId: game.factions[1].factionId,
+        factionPassword: game.factions[1].factionPassword,
+        game: gameId,
+      });
+      await this.factionService.joinGroup(gameperson, {
+        groupId: groups[Math.floor(Math.random() * 3)],
       });
       gamepersons.push(gameperson);
     }
     let date: number = Date.now();
     let y1 = 25.7;
-    let x1 = 62.3;
+    let x1 = 62.0;
     let y2 = 25.75;
-    let x2 = 62.35;
-    for (let i = 1; i < 16 * 6 * 3; i++) {
+    let x2 = 62.05;
+    for (let i = 1; i < 6; i++) {
       let x = 0;
       date += 10000;
       await Promise.all(
@@ -93,11 +123,11 @@ export class ReplayService {
           x++;
           let dataObject = {
             lat:
-              x < 10
+              x < 50
                 ? x1 + ((i + Math.random()) * 5) / 2000
                 : x2 - ((i + Math.random()) * 5) / 2000,
             lng:
-              x < 10
+              x < 50
                 ? y1 + ((i + Math.random()) * 5) / 2000
                 : y2 - ((i + Math.random()) * 5) / 2000,
             time: date,
diff --git a/src/score/score.service.ts b/src/score/score.service.ts
index 640970c8e5ca99e877982cc2f4174123595792bb..90716c4b2e9f5d72f21971edb574972a2ccfda6d 100644
--- a/src/score/score.service.ts
+++ b/src/score/score.service.ts
@@ -69,7 +69,8 @@ export class ScoreService {
             i => i.faction === current.owner.factionId,
           );
           index !== -1
-            ? await (scoreData[index]['score'] += box.objectivePointMultiplier * current.owner.multiplier)
+            ? await (scoreData[index]['score'] +=
+                box.objectivePointMultiplier * current.owner.multiplier)
             : await scoreData.push({
                 score: box.objectivePointMultiplier,
                 faction: current.owner.factionId,
diff --git a/src/shared/roles.guard.ts b/src/shared/roles.guard.ts
index 359a42d8165ee7d579078c300eded626b760df8b..7ae58d2f0c2d9f1258e41ea1a8341e2e664df15d 100644
--- a/src/shared/roles.guard.ts
+++ b/src/shared/roles.guard.ts
@@ -42,7 +42,7 @@ export class RolesGuard implements CanActivate {
     request.user = await this.getUserObject(request.headers.authorization);
     const role = await this.game_PersonRepository.findOne({
       where: { person: request.user['id'], game: gameId },
-      relations: ['faction'],
+      relations: ['faction', 'group'],
     });
     // add gameperson role to the request
     // @GamePerson decorator can access it and pass it to service
diff --git a/src/tracking/tracking.service.ts b/src/tracking/tracking.service.ts
index ff97aae3993f62c9dbb342ca9ff5744001d32366..b366784ec03f8c4f67e0ec99bbc563a292733d6f 100644
--- a/src/tracking/tracking.service.ts
+++ b/src/tracking/tracking.service.ts
@@ -15,6 +15,12 @@ export class TrackingService {
     private gamepersonrepository: Repository<Game_PersonEntity>,
   ) {}
 
+  private icons = {
+    infantry: 'infantry.svg',
+    recon: 'recon.svg',
+    mechanized: 'mechanized.svg',
+  };
+
   async trackLocation(
     gameperson: Game_PersonEntity,
     gameId,
@@ -37,7 +43,10 @@ export class TrackingService {
       trackdata['time'] = Date.now();
       // initialize data
       trackedperson = await this.trackingrepository.create(trackedperson);
-      trackedperson.icon = 'infantry.svg';
+      // if group exists, add icon based on that, else add default icon
+      trackedperson.icon = gameperson.group
+        ? this.icons[gameperson.group.class]
+        : 'infantry.svg';
       trackedperson.data = [trackdata];
       trackedperson.faction = gameperson.faction;
       trackedperson.game = gameId;