public List<Character> startBFS() {
        int schleifenZaehler = 0;

        Node startNode = new Node(_startPosX, _startPosY, START_CHAR);

        _bfsQueue.add(startNode);
        _frontier.add(new Path(startNode));

        while (!_frontier.isEmpty()) {
            Node currentNode = (Node) _bfsQueue.poll();
            Path currentPath = null;
            // Choosing the path that ends with the first element on the queue
            for (Path path : _frontier) {
                if (currentNode.equals(path.getLastNode())) {
                    currentPath = path;
                    break;
                }
            }

            if (isGoalNode(currentNode)) {
                System.out.println(schleifenZaehler);
                reset();
                return currentPath.getCharPath();
            }

            _frontier.remove(currentPath);
            moveTo(currentNode);

            // Check wether currentNode has any neighbours
            // If a neighbour is found a new Path is added to frontier
            if (topIsClearOrGoal()) {
                move(UP);
                _environment[_currentPosY][_currentPosX] = UP;

                Node neighbour = new Node(_currentPosX, _currentPosY, UP);
                bfsAddNewPathToFrontier(currentPath, neighbour);

                move(oppositeDirection(UP));
            }
            if (rightIsClearOrGoal()) {
                move(RIGHT);
                _environment[_currentPosY][_currentPosX] = RIGHT;

                Node neighbour = new Node(_currentPosX, _currentPosY, RIGHT);
                bfsAddNewPathToFrontier(currentPath, neighbour);

                move(oppositeDirection(RIGHT));
            }
            if (bottomIsClearOrGoal()) {
                move(DOWN);
                _environment[_currentPosY][_currentPosX] = DOWN;

                Node neighbour = new Node(_currentPosX, _currentPosY, DOWN);
                bfsAddNewPathToFrontier(currentPath, neighbour);

                move(oppositeDirection(DOWN));
            }
            if (leftIsClearOrGoal()) {
                move(LEFT);
                _environment[_currentPosY][_currentPosX] = LEFT;

                Node neighbour = new Node(_currentPosX, _currentPosY, LEFT);
                bfsAddNewPathToFrontier(currentPath, neighbour);

                move(oppositeDirection(LEFT));
            }

            // Output to the console
            printEnvironment();
            ++schleifenZaehler;

        }
        System.out.println(schleifenZaehler);
        reset();

        return new ArrayList<Character>();
    }