@Override
  public Visitable visitAppl(ATermAppl arg) throws VisitFailure {

    AFun fun = (AFun) arg.getAFun().accept(this);

    ATerm[] arguments = arg.getArgumentArray();

    if (fun != arg.getAFun()) {
      arg = arg.getFactory().makeAppl(fun, arguments);
    }

    for (int i = 0; i < arguments.length; i++) {
      Visitable v = arguments[i].accept(this);

      if (v != arguments[i]) {
        arg = (ATermAppl) arg.setChildAt(i, v);
      }
    }

    return arg;
  }