private void nextStep() {

    boolean stop = false;

    ArrayList<Action> actions = getActions();

    while (ip < actions.size() && !stop) {
      Action a = actions.get(ip);

      if (EngineLogger.debugMode())
        EngineLogger.debug(
            "RunVerbAction: " + verb + "(" + ip + ") " + a.getClass().getSimpleName());

      try {
        if (a.run(this)) stop = true;
        else ip++;
      } catch (Exception e) {
        EngineLogger.error("EXCEPTION EXECUTING ACTION: " + a.getClass().getSimpleName(), e);
      }
    }

    if (getWait() && !stop) {
      super.resume();
    }
  }
  public void nextStep() {

    boolean stop = false;

    while (!isFinished() && !stop) {
      Action a = actions.get(ip);

      if (EngineLogger.debugMode()) EngineLogger.debug(ip + ". " + a.getClass().getSimpleName());

      try {
        if (a.run(this)) stop = true;
        else ip++;
      } catch (Exception e) {
        EngineLogger.error("EXCEPTION EXECUTING ACTION: " + a.getClass().getSimpleName(), e);
        ip++;
      }
    }

    if (EngineLogger.debugMode() && isFinished()) EngineLogger.debug(">>> Verb FINISHED: " + id);
  }
  public void run() {
    if (EngineLogger.debugMode()) EngineLogger.debug(">>> Running verb: " + id);

    ip = 0;
    nextStep();
  }