diff --git a/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java b/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java
index 03311a0a068e71fc1f483ccdf51b83d7de946e8d..aa5d20238d42deaaa0183ee590cdfe4d0a957111 100644
--- a/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java
+++ b/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java
@@ -3,11 +3,14 @@ package cz.nic.tablexia.game.games.pursuit;
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.audio.Music;
 import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.math.CatmullRomSpline;
+import com.badlogic.gdx.math.Vector2;
 import com.badlogic.gdx.scenes.scene2d.Action;
 import com.badlogic.gdx.scenes.scene2d.Actor;
 import com.badlogic.gdx.scenes.scene2d.Group;
 import com.badlogic.gdx.scenes.scene2d.InputEvent;
 import com.badlogic.gdx.scenes.scene2d.actions.Actions;
+import com.badlogic.gdx.scenes.scene2d.actions.RunnableAction;
 import com.badlogic.gdx.scenes.scene2d.ui.Image;
 import com.badlogic.gdx.utils.Align;
 import com.badlogic.gdx.utils.Array;
@@ -28,11 +31,11 @@ import cz.nic.tablexia.game.GameDefinition;
 import cz.nic.tablexia.game.difficulty.GameDifficulty;
 import cz.nic.tablexia.game.games.pursuit.action.RotateAndMovePieceInPosition;
 import cz.nic.tablexia.game.games.pursuit.action.RotatePieceToClosestAngle;
+import cz.nic.tablexia.game.games.pursuit.action.VehicleMoveAction;
 import cz.nic.tablexia.game.games.pursuit.assets.PursuitAssets;
 import cz.nic.tablexia.game.games.pursuit.helper.ArithmeticsHelper;
 import cz.nic.tablexia.game.games.pursuit.helper.GameRulesHelper;
 import cz.nic.tablexia.game.games.pursuit.helper.TextureHelper;
-import cz.nic.tablexia.game.games.pursuit.listener.VehicleDragListener;
 import cz.nic.tablexia.game.games.pursuit.model.Grid;
 import cz.nic.tablexia.game.games.pursuit.model.Maps;
 import cz.nic.tablexia.game.games.pursuit.model.PuzzlePiece;
@@ -119,6 +122,9 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> {
 	private static final String SCORE_KEY_LAST_MAP   = "last_map_index";
 
 	private static final float OVERLAP_PIECE_SCALE	=	1.2f;
+    
+	private static final float ANIMATION_MOVING_DURATION =	5f;
+	private static final float ANIMATION_DELAY_DURATION  =	1.5f;
 
     private static final int MAPS_COUNT = Maps.values().length;
 
@@ -149,7 +155,6 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> {
     private String clickMapTextureName;
     private String mapTextureName;
 
-
     @Override
     protected Viewport createViewport() {
         return new ExtendViewport(0, TablexiaSettings.getMinWorldHeight());
@@ -354,7 +359,6 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> {
 	private void checkEndGameCondition() {
 		if (grid.allPiecesInCorrectPositions() && !gameFinished.get()) {
 			backgroundImage.removeListener(dragAndRotateActorListener);
-			endGame();
 			showCheckpoints();
             gameFinished.set(true);
 		}
@@ -399,26 +403,12 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> {
 
     private void prepareVehicle() {
         VehicleType vehicleType = TextureHelper.getVehicleTextureName(getRandom(), mapNumber);
-        Point vehiclePosition = new Point(0, 0);
+        final Point vehiclePosition = new Point(0, 0);
         Point vehicleSize = new Point(vehicleType.getVehicleSize().x, vehicleType.getVehicleSize().y);
-
-		Music[] vehicleSounds = getVehicleSounds(vehicleType);
-
         vehicle = new Vehicle(getScreenTextureRegion(vehicleType.getTextureName()), vehiclePosition, vehicleSize);
-        vehicle.addListener(new VehicleDragListener(vehicle, vehicleSounds, getData(), new Point(roadMap.getWidth(), roadMap.getHeight()), finishFlag, new VehicleDragListener.OnVehicleDragCompleteListener() {
-            @Override
-            public void onVehicleDragComplete() {
-                showGameResultDialog();
-				//remove all actor listeners
-                vehicle.clear();
-				vehicle.remove();
-                finishFlag.clear();
-                finishFlag.remove();
-            }
-        }));
         vehicle.setDebug(TablexiaSettings.getInstance().isShowBoundingBoxes());
-		grid.addActor(vehicle);
         vehicle.setVisible(false);
+        grid.addActor(vehicle);
 	}
 
 	private void prepareFinishFlag() {
@@ -426,8 +416,8 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> {
 		finishFlag.setSize(TextureHelper.FINISH_FLAG_SIZE.x, TextureHelper.FINISH_FLAG_SIZE.y);
         finishFlag.setOrigin(finishFlag.getWidth() / 2, finishFlag.getHeight() / 2);
         finishFlag.setDebug(TablexiaSettings.getInstance().isShowBoundingBoxes());
-        grid.addActor(finishFlag);
         finishFlag.setVisible(false);
+        grid.addActor(finishFlag);
 
     }
 
@@ -470,6 +460,7 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> {
 	//sets the position according to completed map rotation
     private void showCheckpoints() {
         Point gridRotationCenter = new Point(grid.getWidth() / 2, grid.getHeight() / 2);
+        Log.debug(getClass(),"grid rotation: " + grid.getRotation());
         //flag
         Point flagPosition = TextureHelper.getFinishFlagPosition(grid.getWidth(), mapNumber);
         Point flagPositonConsideringMapRotation = ArithmeticsHelper.translatePositionAccordingToRotation(flagPosition, grid.getRotation(), gridRotationCenter);
@@ -484,8 +475,26 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> {
         vehicle.setPosition(vehiclePositionConsideringRotation.x - vehicle.getWidth() / 2, vehiclePositionConsideringRotation.y - vehicle.getHeight() / 2);
         vehicle.setRotation(grid.getRotation());
 
-        vehicle.setVisible(true);
         finishFlag.setVisible(true);
+
+        final Music[] vehicleSounds = getVehicleSounds( TextureHelper.getVehicleTextureName(getRandom(), mapNumber));
+        final CatmullRomSpline<Vector2> path = new CatmullRomSpline<Vector2>(Maps.values()[mapNumber].getPursuitPositionDefinition().getPointsWithRotation(grid.getRotation(), vehiclePosition.x,vehiclePosition.y),false);
+        VehicleMoveAction vehicleMoveAlongAction = new VehicleMoveAction(path, ANIMATION_MOVING_DURATION, grid.getWidth(), vehicleSounds);
+        vehicle.addAction(Actions.sequence(Actions.show(),Actions.delay(ANIMATION_DELAY_DURATION),vehicleMoveAlongAction,new RunnableAction() {
+            @Override
+            public void run() {
+                for(Music snd : vehicleSounds) {
+                    snd.stop();
+                    snd.dispose();
+                }
+                endGame();
+                showGameResultDialog();
+                vehicle.clear();
+                vehicle.remove();
+                finishFlag.clear();
+                finishFlag.remove();
+            }
+        }));
     }
 
     @Override
diff --git a/core/src/cz/nic/tablexia/game/games/pursuit/action/VehicleMoveAction.java b/core/src/cz/nic/tablexia/game/games/pursuit/action/VehicleMoveAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..0ca1e5c6d6cc328797273572cf67b92032d3625a
--- /dev/null
+++ b/core/src/cz/nic/tablexia/game/games/pursuit/action/VehicleMoveAction.java
@@ -0,0 +1,57 @@
+package cz.nic.tablexia.game.games.pursuit.action;
+
+import com.badlogic.gdx.audio.Music;
+import com.badlogic.gdx.math.MathUtils;
+import com.badlogic.gdx.math.Path;
+import com.badlogic.gdx.math.Vector2;
+
+import cz.nic.tablexia.util.actions.MoveAlongAction;
+
+/**
+ * Created by Vitaliy Vashchenko on 24.6.16.
+ */
+public class VehicleMoveAction extends MoveAlongAction {
+
+    private float parentSize;
+    private Path<Vector2> path;
+    private float duration;
+    private Music[] vehicleMusic;
+    private int soundIndex;
+    public VehicleMoveAction(Path<Vector2> path, float duration, float parentSize, Music[] vehicleMusic) {
+        super(path, duration);
+        setRotate(true);
+        this.path = path;
+        this.duration = duration;
+        this.parentSize = parentSize;
+        this.vehicleMusic = vehicleMusic;
+        soundIndex = MathUtils.random(0,vehicleMusic.length-1);
+    }
+
+
+    @Override
+    protected void update(float percent) {
+        Vector2 value = new Vector2();
+
+        path.valueAt(value, percent);
+
+        actor.setPosition(parentSize*value.x-actor.getWidth()/2,parentSize*value.y - actor.getHeight()/2);
+        actor.setRotation(path.derivativeAt(value, percent).angle() - 90);
+        
+    }
+
+
+    @Override
+    protected void begin() {
+        vehicleMusic[soundIndex].setVolume(1);
+        vehicleMusic[soundIndex].setLooping(true);
+        vehicleMusic[soundIndex].play();
+        super.begin();
+    }
+
+    @Override
+    protected void end() {
+        vehicleMusic[soundIndex].stop();
+        super.end();
+    }
+
+}
diff --git a/core/src/cz/nic/tablexia/game/games/pursuit/helper/PositionHelper.java b/core/src/cz/nic/tablexia/game/games/pursuit/helper/PositionHelper.java
new file mode 100644
index 0000000000000000000000000000000000000000..08b028e3e51380d27cc4a952947cc15227d465ec
--- /dev/null
+++ b/core/src/cz/nic/tablexia/game/games/pursuit/helper/PositionHelper.java
@@ -0,0 +1,93 @@
+package cz.nic.tablexia.game.games.pursuit.helper;
+
+import com.badlogic.gdx.math.Vector2;
+
+import cz.nic.tablexia.util.Point;
+
+/**
+ * Created by Vitaliy Vashchenko on 20.6.16.
+ */
+public class PositionHelper {
+
+    enum RotationDefinition {
+
+        ZERO(0f),
+        LEFT(90f),
+        UP(270f),
+        REVERSE(180f);
+
+        float rotation;
+
+        RotationDefinition(float rotation) {
+            this.rotation = rotation;
+        }
+
+        public static RotationDefinition getRotationDefinition(float rotation) {
+            for (RotationDefinition rotationDefinition : RotationDefinition.values()) {
+                if (rotationDefinition.getRotation() == rotation) return rotationDefinition;
+            }
+            return null;
+        }
+
+        public float getRotation() {
+            return rotation;
+        }
+    }
+
+    public enum PursuitPositionDefinition {
+
+        // TODO: 21.6.16 correct some positions 
+        MAP_1(new Point(0.866f, 0.1f),new Point(0.866f, 0.1f), new Point(0.859f, 0.211f), new Point(0.824f, 0.276f), new Point(0.792f, 0.312f), new Point(0.719f, 0.268f), new Point(0.666f, 0.241f), new Point(0.608f, 0.221f), new Point(0.534f, 0.203f), new Point(0.448f, 0.194f), new Point(0.374f, 0.224f), new Point(0.328f, 0.286f), new Point(0.293f, 0.37f), new Point(0.265f, 0.469f), new Point(0.237f, 0.575f), new Point(0.215f, 0.671f), new Point(0.228f, 0.772f), new Point(0.258f, 0.846f), new Point(0.26f, 0.85f)),
+        MAP_2(new Point(0.64f, 0.11f),new Point(0.64f, 0.11f), new Point(0.68f, 0.214f), new Point(0.738f, 0.308f), new Point(0.777f, 0.395f), new Point(0.683f, 0.449f), new Point(0.613f, 0.509f), new Point(0.54f, 0.573f), new Point(0.473f, 0.658f), new Point(0.4f, 0.728f), new Point(0.322f, 0.711f), new Point(0.26f, 0.666f), new Point(0.208f, 0.757f), new Point(0.22f, 0.75f)),
+        MAP_3(new Point(0.08f, 0.41f),new Point(0.08f, 0.41f), new Point(0.182f, 0.461f), new Point(0.271f, 0.466f), new Point(0.368f, 0.475f), new Point(0.376f, 0.599f), new Point(0.387f, 0.698f), new Point(0.398f, 0.755f), new Point(0.361f, 0.824f), new Point(0.394f, 0.868f), new Point(0.461f, 0.877f), new Point(0.531f, 0.85f), new Point(0.627f, 0.897f), new Point(0.691f, 0.899f), new Point(0.77f, 0.903f), new Point(0.776f, 0.855f), new Point(0.758f, 0.811f), new Point(0.776f, 0.754f), new Point(0.79f, 0.71f)),
+        MAP_4(new Point(0.95f, 0.33f),new Point(0.95f, 0.33f), new Point(0.866f, 0.307f), new Point(0.766f, 0.342f), new Point(0.709f, 0.391f), new Point(0.588f, 0.452f), new Point(0.512f, 0.497f), new Point(0.425f, 0.588f), new Point(0.355f, 0.667f), new Point(0.278f, 0.595f), new Point(0.19f, 0.574f), new Point(0.18f, 0.57f)),
+        MAP_5(new Point(0.94f, 0.12f),new Point(0.94f, 0.12f), new Point(0.928f, 0.333f), new Point(0.784f, 0.373f), new Point(0.678f, 0.412f), new Point(0.645f, 0.525f), new Point(0.578f, 0.582f), new Point(0.549f, 0.649f), new Point(0.597f, 0.733f), new Point(0.68f, 0.77f), new Point(0.784f, 0.793f), new Point(0.863f, 0.843f), new Point(0.86f, 0.82f)),
+        MAP_6(new Point(0.95f, 0.17f),new Point(0.95f, 0.17f), new Point(0.85f, 0.18f), new Point(0.763f, 0.171f), new Point(0.68f, 0.136f), new Point(0.602f, 0.092f), new Point(0.538f, 0.036f), new Point(0.509f, 0.081f), new Point(0.438f, 0.077f), new Point(0.392f, 0.142f), new Point(0.369f, 0.199f), new Point(0.377f, 0.251f), new Point(0.436f, 0.306f), new Point(0.45f, 0.32f)),
+        MAP_7(new Point(0.56f, 0.07f),new Point(0.56f, 0.07f), new Point(0.43f, 0.16f), new Point(0.347f, 0.246f), new Point(0.373f, 0.36f), new Point(0.443f, 0.465f), new Point(0.499f, 0.58f), new Point(0.431f, 0.657f), new Point(0.379f, 0.738f), new Point(0.356f, 0.825f), new Point(0.36f, 0.83f)),
+        MAP_8(new Point(0.16f, 0.19f),new Point(0.16f, 0.19f), new Point(0.237f, 0.255f), new Point(0.287f, 0.316f), new Point(0.351f, 0.354f), new Point(0.285f, 0.44f), new Point(0.212f, 0.521f), new Point(0.134f, 0.597f), new Point(0.071f, 0.679f), new Point(0.118f, 0.718f), new Point(0.204f, 0.754f), new Point(0.272f, 0.733f), new Point(0.343f, 0.798f), new Point(0.425f, 0.856f), new Point(0.496f, 0.919f), new Point(0.596f, 0.853f), new Point(0.672f, 0.823f), new Point(0.759f, 0.82f), new Point(0.818f, 0.828f), new Point(0.825f, 0.801f), new Point(0.83f, 0.79f)),
+        MAP_9(new Point(0.15f, 0.11f),new Point(0.15f, 0.11f), new Point(0.193f, 0.179f), new Point(0.255f, 0.19f), new Point(0.164f, 0.426f), new Point(0.234f, 0.494f), new Point(0.307f, 0.661f), new Point(0.356f, 0.723f), new Point(0.435f, 0.776f), new Point(0.509f, 0.805f), new Point(0.622f, 0.831f), new Point(0.719f, 0.837f), new Point(0.808f, 0.834f), new Point(0.81f, 0.83f)),
+        MAP_10(new Point(0.22f, 0.07f),new Point(0.22f, 0.07f), new Point(0.214f, 0.293f), new Point(0.204f, 0.421f), new Point(0.449f, 0.422f), new Point(0.574f, 0.561f), new Point(0.678f, 0.49f), new Point(0.806f, 0.75f), new Point(0.761f, 0.838f), new Point(0.76f, 0.84f)),
+        MAP_11(new Point(0.61f, 0.11f),new Point(0.61f, 0.11f), new Point(0.582f, 0.258f), new Point(0.571f, 0.364f), new Point(0.599f, 0.442f), new Point(0.641f, 0.499f), new Point(0.646f, 0.584f), new Point(0.702f, 0.626f), new Point(0.81f, 0.644f), new Point(0.801f, 0.693f), new Point(0.678f, 0.683f), new Point(0.553f, 0.688f), new Point(0.366f, 0.697f), new Point(0.302f, 0.688f), new Point(0.214f, 0.697f), new Point(0.21f, 0.69f)),
+        MAP_12(new Point(0.89f, 0.17f),new Point(0.89f, 0.17f), new Point(0.806f, 0.118f), new Point(0.565f, 0.111f), new Point(0.43f, 0.102f), new Point(0.385f, 0.164f), new Point(0.436f, 0.294f), new Point(0.473f, 0.442f), new Point(0.492f, 0.562f), new Point(0.444f, 0.676f), new Point(0.385f, 0.792f), new Point(0.278f, 0.803f), new Point(0.223f, 0.843f), new Point(0.208f, 0.868f), new Point(0.2f, 0.85f)),
+        MAP_13(new Point(0.08f, 0.06f),new Point(0.08f, 0.06f), new Point(0.189f, 0.227f), new Point(0.414f, 0.316f), new Point(0.665f, 0.51f), new Point(0.797f, 0.632f), new Point(0.88f, 0.735f), new Point(0.88f, 0.73f)),
+        MAP_14(new Point(0.18f, 0.08f),new Point(0.18f, 0.08f), new Point(0.212f, 0.239f), new Point(0.29f, 0.321f), new Point(0.399f, 0.382f), new Point(0.342f, 0.503f), new Point(0.311f, 0.659f), new Point(0.308f, 0.773f), new Point(0.324f, 0.843f), new Point(0.32f, 0.84f));
+
+        private Point[] points;
+
+        PursuitPositionDefinition(Point... points) {
+            this.points = points;
+        }
+
+        public Point[] getPoints() {
+            return points;
+        }
+
+        public Vector2[] getPointsWithRotation(float rotation, float x, float y) {
+            RotationDefinition rotationDefinition = RotationDefinition.getRotationDefinition(rotation);
+            Vector2[] rotatedPositions = new Vector2[points.length];
+            
+            for (int i = 0; i < getPoints().length; i++) {
+                rotatedPositions[i] = getRotatedPosition(rotationDefinition, getPoints()[i]);
+            }
+            
+            return rotatedPositions;
+        }
+
+        private Vector2 getRotatedPosition(RotationDefinition rotationDefinition, Point position) {
+            switch (rotationDefinition) {
+                case UP:
+                    //x = y, y = 1-x
+                    return new Vector2(position.y, 1 - position.x);
+                case LEFT:
+                    //x=1-y, y=x
+                    return new Vector2(1 - position.y, position.x);
+                case REVERSE:
+                    //x = 1-x,y=1-y
+                    return new Vector2(1 - position.x, 1 - position.y);
+                default:
+                    return new Vector2(position.x, position.y);
+            }
+        }
+    }
+
+}
diff --git a/core/src/cz/nic/tablexia/game/games/pursuit/listener/VehicleDragListener.java b/core/src/cz/nic/tablexia/game/games/pursuit/listener/VehicleDragListener.java
deleted file mode 100644
index 6ad2c04988d17f77cdb3ffcc2c3b9537c248ee96..0000000000000000000000000000000000000000
--- a/core/src/cz/nic/tablexia/game/games/pursuit/listener/VehicleDragListener.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package cz.nic.tablexia.game.games.pursuit.listener;
-
-import com.badlogic.gdx.audio.Music;
-import com.badlogic.gdx.graphics.Color;
-import com.badlogic.gdx.math.Vector2;
-import com.badlogic.gdx.scenes.scene2d.Actor;
-import com.badlogic.gdx.scenes.scene2d.InputEvent;
-
-import cz.nic.tablexia.game.games.pursuit.helper.ArithmeticsHelper;
-import cz.nic.tablexia.util.MusicUtil;
-import cz.nic.tablexia.util.Point;
-import cz.nic.tablexia.game.games.pursuit.model.Vehicle;
-import cz.nic.tablexia.util.listener.DragActorListener;
-
-/**
- * Created by Václav Tarantík on 10.8.15.
- */
-public class VehicleDragListener extends DragActorListener implements Music.OnCompletionListener{
-    private static final int POINTS_CACHE_SIZE = 5;
-    private Point[] touchedPointsCache;
-    private int currentTouchPointCacheElementPointer;
-    private int[][] roadColorData;
-    private Point roadMapSize;
-    private Actor goalActor;
-    private OnVehicleDragCompleteListener onVehicleDragCompleteListener;
-	private final float moveTolerance;
-
-	private Music[] sounds;
-
-	private boolean playingSounds = false;
-	private int currentSoundIndex = 0;
-
-    //goalActor is the actor that marks the finish of the vehicle path, here finish flag
-    public VehicleDragListener(Actor actor, Music[] sounds, int[][] roadColorData, Point roadMapSize, Actor goalActor, OnVehicleDragCompleteListener onVehicleDragCompleteListener) {
-        super(actor);
-		this.sounds = sounds;
-        this.roadColorData = roadColorData;
-        this.roadMapSize = roadMapSize;
-        this.goalActor = goalActor;
-        this.onVehicleDragCompleteListener = onVehicleDragCompleteListener;
-        touchedPointsCache = new Point[POINTS_CACHE_SIZE];
-		// vehicle move tolerance is two times size of bigger side of vehicle (width / height of actor)
-		moveTolerance = 2 * Math.max(actor.getWidth(), actor.getHeight());
-    }
-
-    @Override
-    public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
-        touchedPointsCache[currentTouchPointCacheElementPointer] = new Point(x, y);
-		playingSounds = true;
-
-		sounds[currentSoundIndex].setVolume(1);
-		sounds[currentSoundIndex].play();
-		sounds[currentSoundIndex].setOnCompletionListener(this);
-        return super.touchDown(event, x, y, pointer, button);
-    }
-
-    @Override
-    public void touchDragged(InputEvent event, float x, float y, int pointer) {
-        Vector2 recalculatedCoords = new Vector2(x, y);
-        actor.localToParentCoordinates(recalculatedCoords);
-        Point touchPoint = new Point(recalculatedCoords.x, recalculatedCoords.y);
-        if (isPointOnMap(touchPoint)) {
-            Color touchedColor = getTouchedColor(recalculatedCoords.x, recalculatedCoords.y);
-            if (touchedColor.r == 1 && touchedColor.a == 1) {
-                currentTouchPointCacheElementPointer = (currentTouchPointCacheElementPointer + 1) % touchedPointsCache.length;
-                touchedPointsCache[currentTouchPointCacheElementPointer] = new Point(recalculatedCoords.x, recalculatedCoords.y);
-                if (currentTouchPointCacheElementPointer == POINTS_CACHE_SIZE - 1) {
-                    actor.setRotation((float) ArithmeticsHelper.getAngleBetweenTwoPoints(touchedPointsCache[0], touchedPointsCache[touchedPointsCache.length - 1]));
-                }
-
-				double distance = Math.hypot(touchPoint.x - actor.getX(), touchPoint.y - actor.getY());
-
-				// finger or cursor is too far from vehicle to move it
-				if (distance > moveTolerance) {
-					return;
-				}
-
-                super.touchDragged(event, x, y, pointer);
-                if (((Vehicle) actor).intersectsWith(goalActor)) {
-                    onVehicleDragCompleteListener.onVehicleDragComplete();
-
-					for(Music snd : sounds) {
-						snd.stop();
-						snd.dispose();
-					}
-				}
-			}
-		}
-    }
-
-	@Override
-	public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
-		playingSounds = false;
-
-		if(sounds[currentSoundIndex].isPlaying()) {
-			MusicUtil.fadeOut(sounds[currentSoundIndex], 0.5f, false);
-		}
-
-		super.touchUp(event, x, y, pointer, button);
-	}
-
-
-	@Override
-	public void onCompletion(Music music) {
-		if(!playingSounds)
-			return;
-
-		currentSoundIndex++;
-
-		if(currentSoundIndex >= sounds.length)
-			currentSoundIndex = 0;
-
-		sounds[currentSoundIndex].setVolume(1);
-		sounds[currentSoundIndex].play();
-		sounds[currentSoundIndex].setOnCompletionListener(this);
-	}
-
-	private Color getTouchedColor(float x, float y) {
-        Point mapRotationCenter = new Point(actor.getParent().getWidth() / 2, actor.getParent().getHeight() / 2);
-        Point pointOnRotatedMap = ArithmeticsHelper.translatePositionAccordingToRotation(new Point(x, y), 360 - actor.getParent().getRotation(), mapRotationCenter);
-        float clickX = (pointOnRotatedMap.x / actor.getParent().getWidth() * roadMapSize.x);
-        float clickY = roadMapSize.y - (pointOnRotatedMap.y / actor.getParent().getHeight() * roadMapSize.y);
-        Point clickedPoint = new Point(clickX, clickY);
-
-        return new Color(roadColorData[(int) clickedPoint.x][(int) (clickedPoint.y)]);
-    }
-
-    private boolean isPointOnMap(Point p) {
-        return ((p.x >= 0) && (p.x <= actor.getParent().getWidth()) && (p.y >= 0) && (p.y <= actor.getParent().getHeight()));
-    }
-
-	public interface OnVehicleDragCompleteListener {
-        void onVehicleDragComplete();
-    }
-}
diff --git a/core/src/cz/nic/tablexia/game/games/pursuit/model/Maps.java b/core/src/cz/nic/tablexia/game/games/pursuit/model/Maps.java
index fb9f77cc82c7f427120052ad52f0778c02cb0ed2..6407a0a507ae5d10e7e84be6224b7c905744bfac 100644
--- a/core/src/cz/nic/tablexia/game/games/pursuit/model/Maps.java
+++ b/core/src/cz/nic/tablexia/game/games/pursuit/model/Maps.java
@@ -1,36 +1,40 @@
 package cz.nic.tablexia.game.games.pursuit.model;
 
+import cz.nic.tablexia.game.games.pursuit.helper.PositionHelper;
 import cz.nic.tablexia.util.Point;
 
 /**
  * Created by Václav Tarantík on 10.8.15.
  */
 public enum Maps {
-
-    MAP1("map1", new Point(0.866f, 0.1f), new Point(0.26f, 0.85f)),
-    MAP2("map2", new Point(0.64f, 0.11f), new Point(0.22f, 0.75f)),
-    MAP3("map3", new Point(0.08f, 0.41f), new Point(0.79f, 0.71f)),// TODO add car initial rotation
-    MAP4("map4", new Point(0.95f, 0.33f), new Point(0.18f, 0.57f)),
-    MAP5("map5", new Point(0.94f, 0.12f), new Point(0.86f, 0.82f)),
-    MAP6("map6", new Point(0.95f, 0.17f), new Point(0.45f, 0.32f)),
-    MAP7("map7", new Point(0.56f, 0.07f), new Point(0.36f, 0.83f)),
-    MAP8("map8", new Point(0.16f, 0.19f), new Point(0.83f, 0.79f)),
-    MAP9("map9", new Point(0.15f, 0.11f), new Point(0.81f, 0.83f)),
-    MAP10("map10", new Point(0.22f, 0.07f), new Point(0.76f, 0.84f)),
-    MAP11("map11", new Point(0.61f, 0.11f), new Point(0.21f, 0.69f)),
-    MAP12("map12", new Point(0.89f, 0.17f), new Point(0.2f, 0.85f)),
-    MAP13("map13", new Point(0.08f, 0.06f), new Point(0.88f, 0.73f)),
-    MAP14("map14", new Point(0.18f, 0.08f), new Point(0.32f, 0.84f));
+    // TODO add car initial rotation
+    MAP1("map1", new Point(0.866f, 0.1f), new Point(0.26f, 0.85f), PositionHelper.PursuitPositionDefinition.MAP_1),
+    MAP2("map2", new Point(0.64f, 0.11f), new Point(0.22f, 0.75f), PositionHelper.PursuitPositionDefinition.MAP_2),
+    MAP3("map3", new Point(0.08f, 0.41f), new Point(0.79f, 0.71f), PositionHelper.PursuitPositionDefinition.MAP_3),
+    MAP4("map4", new Point(0.95f, 0.33f), new Point(0.18f, 0.57f), PositionHelper.PursuitPositionDefinition.MAP_4),
+    MAP5("map5", new Point(0.94f, 0.12f), new Point(0.86f, 0.82f), PositionHelper.PursuitPositionDefinition.MAP_5),
+    MAP6("map6", new Point(0.95f, 0.17f), new Point(0.45f, 0.32f), PositionHelper.PursuitPositionDefinition.MAP_6),
+    MAP7("map7", new Point(0.56f, 0.07f), new Point(0.36f, 0.83f), PositionHelper.PursuitPositionDefinition.MAP_7),
+    MAP8("map8", new Point(0.16f, 0.19f), new Point(0.83f, 0.79f), PositionHelper.PursuitPositionDefinition.MAP_8),
+    MAP9("map9", new Point(0.15f, 0.11f), new Point(0.81f, 0.83f), PositionHelper.PursuitPositionDefinition.MAP_9),
+    MAP10("map10", new Point(0.22f, 0.07f), new Point(0.76f, 0.84f),PositionHelper.PursuitPositionDefinition.MAP_10),
+    MAP11("map11", new Point(0.61f, 0.11f), new Point(0.21f, 0.69f),PositionHelper.PursuitPositionDefinition.MAP_11),
+    MAP12("map12", new Point(0.89f, 0.17f), new Point(0.2f, 0.85f),PositionHelper.PursuitPositionDefinition.MAP_12),
+    MAP13("map13", new Point(0.08f, 0.06f), new Point(0.88f, 0.73f),PositionHelper.PursuitPositionDefinition.MAP_13),
+    MAP14("map14", new Point(0.18f, 0.08f), new Point(0.32f, 0.84f),PositionHelper.PursuitPositionDefinition.MAP_14);
 
     private String textureRegionName;
     //relatives position of checkpoints on map
     private Point startPointCoords;
     private Point endPointCoords;
+    
+    private PositionHelper.PursuitPositionDefinition pursuitPositionDefinition;
 
-    Maps(String textureRegionName, Point startPointCoords, Point endPointCoords){
+    Maps(String textureRegionName, Point startPointCoords, Point endPointCoords, PositionHelper.PursuitPositionDefinition positionDefinition){
         this.textureRegionName = textureRegionName;
         this.startPointCoords = startPointCoords;
         this.endPointCoords = endPointCoords;
+        this.pursuitPositionDefinition = positionDefinition;
     }
 
     public String getTextureRegionName(){
@@ -44,4 +48,8 @@ public enum Maps {
     public cz.nic.tablexia.util.Point getEndPointCoords(){
         return endPointCoords;
     }
+
+    public PositionHelper.PursuitPositionDefinition getPursuitPositionDefinition() {
+        return pursuitPositionDefinition;
+    }
 }