diff --git a/CheckersClient/core/src/com/mygdx/game/model/GameMode.kt b/CheckersClient/core/src/com/mygdx/game/model/GameMode.kt
index 113b5a8583387d0f3718eadb02d229336ab0e3ca..8269e292554b21a45c6fdd1e8601e330a69bb018 100644
--- a/CheckersClient/core/src/com/mygdx/game/model/GameMode.kt
+++ b/CheckersClient/core/src/com/mygdx/game/model/GameMode.kt
@@ -1,6 +1,9 @@
 package com.mygdx.game.model
 
 import com.badlogic.gdx.math.Vector3
+import com.sun.org.apache.xpath.internal.operations.Bool
+import java.lang.Exception
+import java.lang.NullPointerException
 
 //Holds a ruleset and a board
 
@@ -30,18 +33,42 @@ class GameMode(rules:AbstractRules? = null, board:AbstractBoard? = null) {
         return this.rules
     }
 
-    fun possibleMoves(position: Vector3): ArrayList<Vector3> {
+    fun getPossibleMoves(position: Vector3): ArrayList<Vector3> {
 
-        var frontier: ArrayList<Vector3> = arrayListOf()
+        fun isInBoard(pos: Vector3): Boolean {
+            var inBoard: Boolean
+            try {
+                inBoard = this.board!!.fieldExists(pos)
+            } catch (e: NullPointerException) {
+                inBoard = false
+            }
+            return inBoard
+        }
+
+        fun hasPiece(pos: Vector3): Boolean {
+            return (this.board?.fields?.get(pos)?.hasPiece()) ?: false
+        }
 
-        if (this.board?.fields?.get(position)?.hasPiece() == true) {
+        fun algorithm(pos: Vector3, frontier: ArrayList<Vector3>, iterationNumber: Int = 0) {
 
-            // algoritme
+            val iterationCount: Int = 1
 
-            return frontier
+            for (dir:Vector3 in directionalUnitVectors) {
+
+                var newPos:Vector3 = pos.add(dir)
+
+                if (isInBoard(newPos) && hasPiece(newPos) && iterationNumber < iterationCount) {
+                    algorithm(newPos,frontier, iterationNumber+1)
+                } else if (isInBoard(newPos) && !hasPiece(newPos)) {
+                    frontier.add(newPos)
+                }
+            }
         }
 
-        return frontier
+        var possibleMoves: ArrayList<Vector3> = arrayListOf()
+        algorithm(position, possibleMoves)
+        return possibleMoves
+
     }
 }