diff --git a/src/app.module.ts b/src/app.module.ts
index 738a6c116590f6bd236f94f89030749a1905ac12..dbb03cf7baa35d2d4deafdbff6ba67bd64381c92 100644
--- a/src/app.module.ts
+++ b/src/app.module.ts
@@ -2,7 +2,6 @@ import { Module } from '@nestjs/common';
 import { APP_FILTER, APP_INTERCEPTOR, APP_GUARD } from '@nestjs/core';
 import { TypeOrmModule } from '@nestjs/typeorm';
 import { Connection } from 'typeorm';
-
 import { AppController } from './app.controller';
 import { AppService } from './app.service';
 import { UserModule } from './user/user.module';
@@ -14,6 +13,8 @@ import { RolesGuard } from './shared/roles.guard';
 import { TaskModule } from './task/task.module';
 import { DrawModule } from './draw/draw.module';
 import { FactionModule } from './faction/faction.module';
+import { TrackingModule } from './tracking/tracking.module';
+
 
 @Module({
   imports: [
@@ -24,6 +25,7 @@ import { FactionModule } from './faction/faction.module';
     TaskModule,
     DrawModule,
     FactionModule,
+    TrackingModule,
   ],
   controllers: [AppController],
   providers: [
diff --git a/src/draw/draw.service.ts b/src/draw/draw.service.ts
index 97556e6e7282919465f76026163bf1649bf8f3d1..e3b62b5132223f466fa94661d4748b3f7cd497f5 100644
--- a/src/draw/draw.service.ts
+++ b/src/draw/draw.service.ts
@@ -18,7 +18,8 @@ export class DrawService {
 
     if (data.mapDrawingId == null || data.mapDrawingId == '') {
       // luo uuden instanssin.
-      return this.mapDrawingRepository.insert(drawing)[0];
+      const mapdrawing = await this.mapDrawingRepository.insert(drawing);
+      return mapdrawing.identifiers;
     } else {
       //päivittää mapDrawingin
       return await this.mapDrawingRepository.save(drawing);
diff --git a/src/tracking/tracking.controller.ts b/src/tracking/tracking.controller.ts
new file mode 100644
index 0000000000000000000000000000000000000000..140b51e0ce816c2ac5c8b2b11ced8eee2b7d869f
--- /dev/null
+++ b/src/tracking/tracking.controller.ts
@@ -0,0 +1,32 @@
+import {
+  Controller,
+  Get,
+  Post,
+  Param,
+  UseGuards,
+  UsePipes,
+  Body,
+} from '@nestjs/common';
+import { TrackingService } from './tracking.service';
+import { Roles } from '../shared/roles.decorator';
+import { AuthGuard } from '../shared/auth.guard';
+import { ValidationPipe } from '../shared/validation.pipe';
+import { TrackingDTO } from './tracking.dto';
+import { User } from 'src/user/user.decorator';
+
+@Controller('tracking')
+export class TrackingController {
+  constructor(private trackingservice: TrackingService) {}
+
+  @Post('location/:id')
+  @UseGuards(new AuthGuard())
+  @UsePipes(new ValidationPipe())
+  @Roles('soldier')
+  async trackLocation(
+    @User('id') userId,
+    @Param('id') id,
+    @Body() trackdata: TrackingDTO,
+  ) {
+    return this.trackingservice.trackLocation(userId, id, trackdata);
+  }
+}
diff --git a/src/tracking/tracking.dto.ts b/src/tracking/tracking.dto.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a84b324791d5e0e4f35add430d24cce2e3016278
--- /dev/null
+++ b/src/tracking/tracking.dto.ts
@@ -0,0 +1,6 @@
+import { Game_PersonEntity } from '../game/game.entity';
+
+export class TrackingDTO {
+  data: JSON;
+  gamepersonId: Game_PersonEntity;
+}
diff --git a/src/tracking/tracking.entity.ts b/src/tracking/tracking.entity.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c64f64f1bb90a8f7cbcb662956f883f895f17221
--- /dev/null
+++ b/src/tracking/tracking.entity.ts
@@ -0,0 +1,17 @@
+import {
+  Entity,
+  PrimaryGeneratedColumn,
+  Column,
+  ManyToOne,
+  OneToOne,
+  JoinColumn,
+} from 'typeorm';
+import { Game_PersonEntity, GameEntity } from '../game/game.entity';
+
+@Entity('Tracking')
+export class TrackingEntity {
+  @PrimaryGeneratedColumn('uuid') id: string;
+  @Column({ type: 'json', nullable: true }) data: JSON;
+  @ManyToOne(type => Game_PersonEntity, person => person.gamepersonId)
+  gamepersonId: Game_PersonEntity;
+}
diff --git a/src/tracking/tracking.module.ts b/src/tracking/tracking.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a6f3ff1734adba3435360213c13cf024fe3cb288
--- /dev/null
+++ b/src/tracking/tracking.module.ts
@@ -0,0 +1,13 @@
+import { Module } from '@nestjs/common';
+import { TrackingController } from './tracking.controller';
+import { TrackingService } from './tracking.service';
+import { TypeOrmModule } from '@nestjs/typeorm';
+import { Game_PersonEntity } from 'src/game/game.entity';
+import { TrackingEntity } from './tracking.entity';
+
+@Module({
+  imports: [TypeOrmModule.forFeature([TrackingEntity, Game_PersonEntity])],
+  controllers: [TrackingController],
+  providers: [TrackingService],
+})
+export class TrackingModule {}
diff --git a/src/tracking/tracking.service.ts b/src/tracking/tracking.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..06f665c4f8471c0863ab8c22da34c0fa9fb9d36b
--- /dev/null
+++ b/src/tracking/tracking.service.ts
@@ -0,0 +1,62 @@
+import { Injectable, HttpStatus, HttpException } from '@nestjs/common';
+import { Repository } from 'typeorm';
+import { Game_PersonEntity } from '../game/game.entity';
+import { InjectRepository } from '@nestjs/typeorm';
+import { TrackingEntity } from './tracking.entity';
+import { TrackingDTO } from './tracking.dto';
+
+@Injectable()
+export class TrackingService {
+  constructor(
+    @InjectRepository(TrackingEntity)
+    private trackingrepository: Repository<TrackingEntity>,
+    @InjectRepository(Game_PersonEntity)
+    private gamepersonrepository: Repository<Game_PersonEntity>,
+  ) {}
+
+  async trackLocation(personId, gameId, trackdata: TrackingDTO) {
+    // find player
+    let gameperson = await this.gamepersonrepository.findOne({
+      game: gameId,
+      person: personId,
+    });
+    if (!gameperson) {
+      throw new HttpException(
+        'You have not joined this game',
+        HttpStatus.BAD_REQUEST,
+      );
+    }
+    let trackedperson = await this.trackingrepository.findOne({
+      gamepersonId: gameperson,
+    });
+
+    // if player has pushed tracking data, update entry
+    if (trackedperson) {
+      //add coordinates
+      trackedperson.data['geometry']['coordinates'].push(
+        await this.mapFunction(trackdata.data['geometry']['coordinates']),
+      );
+      //add timestamp
+      trackedperson.data['geometry']['properties']['time'].push(
+        new Date(Date.now()),
+      );
+
+      return await this.trackingrepository.save(trackedperson);
+    } else {
+      // first entry will be empty
+      // initialize coordinates
+      trackdata.data['geometry']['coordinates'] = [];
+      // initialize timestamp
+      trackdata.data['geometry']['properties']['time'] = [];
+      trackedperson = await this.trackingrepository.create(trackdata);
+      trackedperson.gamepersonId = gameperson;
+      return await this.trackingrepository.save(trackedperson);
+    }
+  }
+
+  private async mapFunction(data): Promise<Number> {
+    return await data.map(type => {
+      return type;
+    });
+  }
+}