@Override
  public Action generateDefensiveAction(String focus) {
    myToken.setStrategyType(AgentToken.STRATEGY_UNKNOWN);
    if (focus == "defensiveRepair") {
      LinkedList<Vertex> repairerPosition = new LinkedList<Vertex>();
      for (AgentToken t : graph.getTokens()) {

        if (t.getRole() != null && t.getTeam().equals(myTeam) && t.getRole().equals("Repairer")) {
          if (t.getNextPosition() == null) return new Action("recharge");
          if (t.getNextPosition().equals(myPosition)) return new Action("recharge");
          repairerPosition.add(t.getPosition());
        }
      }
      return ag.moveTowardsNearest(repairerPosition);
    }

    if (focus == "defensiveParry") {
      return new Action("parry");
    }
    // standard action & focus runaway
    Zone zone = getZoneManager().getBiggestZone();
    if (zone != null) return ag.moveTowardsNearest(zone.getCriticalFrontier());
    return new Action("recharge");
  }