@Override
    public Point2D move() {
        Point2D policemanPos = getPosition();

        //this code is to prevent livelock
        //live lock is possible when one policeman goes home and another one for bad guy
        // in some conditions
        if (shouldWait()) { return policemanPos; }
        
        
        Point2D destPoint = isBadGuyCaught() || isGoingHome() ?
           new Point2D(mPoliceStation.getX(), mPoliceStation.getY()) :
           new Point2D(mBadGuy.getX(), mBadGuy.getY());
       
        Point2D nextStep = GameUtils.lookUpNextStep(policemanPos, destPoint);
        if (nextStep.equals(policemanPos)) {
            mIsGoingHome = true; //can't catch bad guy -- going home
        }
        return nextStep;
    }