public void moveHuman(final Direction dir,
      final ActionListener terrifyHumanCallback,
      final ActionListener healHumanCallback)
  {
    if (maze.hasDoorAt(dir, location))
    {
      location = new Location(location, dir);
      invader.pickupStrategy(maze.getStrategy(location));
      maze.visit(location);
      
      stopAttackingHuman();
      if (citizen != null && shouldHealGruman)
      {
        startHealingGruman();
      }
      final Gruman oldCitizen = citizen;
      citizen = maze.getGruman(location);
      if (citizen != null)
      {
        stopHealingHuman();
        startAttackingHuman(terrifyHumanCallback);
      }
      else if (oldCitizen != null && shouldHealHuman) // citizen went from
                                                        // non-null to null
      {
        startHealingHuman(healHumanCallback);
      }
    }
    updateStatus();
  }