anchor.diff:        {String reply,
         String forDialog,
         String forDialogTo,
  -      String forDialogFrom}) {
  +      String forDialogFrom,
  +      String forDialogNamed}) {
       var conditions = [];
   
  -    if (_notNull(reply)) conditions.add((e) => e.reply == reply);
  -    if (_notNull(forDialog)) conditions
  -        .add((e) => e.dialogEvent.dialog == forDialog);
  -    if (_notNull(forDialogFrom)) conditions
  -        .add((e) => e.dialogEvent.to == forDialogTo);
  -    if (_notNull(forDialogFrom)) conditions
  -        .add((e) => e.dialogEvent.from == forDialogFrom);
  -
  -    if (conditions.isEmpty) {
  -      throw new ArgumentError("Must pass at least one criteria for a reply.");
  +    if (_notNull(reply)) {
  +      conditions.add((e) => e.reply == reply);
  +    }
  +
  +    if (_notNull(forDialogNamed)) {
  +      conditions.add((e) => e.dialogEvent.name == forDialogNamed);
  +    } else {
  +      if (_notNull(forDialog)) {
  +        conditions.add((e) => e.dialogEvent.dialog == forDialog);
  +      }
  +
  +      if (_notNull(forDialogTo)) {
  +        conditions.add((e) => e.dialogEvent.to == forDialogTo);
  +      }
  +
  +      if (_notNull(forDialogFrom)) {
  +        conditions.add((e) => e.dialogEvent.from == forDialogFrom);
  +      }
  +
  +      if (conditions.isEmpty) {
  +        throw new ArgumentError("Must pass at least one criteria for a reply.");
  +      }
       }
   
       return replies.firstWhere((e) => conditions.every((c) => c(e)));
  
positive.code:     return _run.emit(new ClearDialogEvent());
    }
  
    Future<DialogEvent> once({String dialog, String from, String to}) {
      var conditions = [];
      if (_notNull(dialog)) conditions.add((e) => e.dialog == dialog);
      if (_notNull(from)) conditions.add((e) => e.from = from);
      if (_notNull(to)) conditions.add((e) => e.to == to);
      return this.dialog.firstWhere((e) => conditions.every((c) => c(e)));
    }
  
  
negative.code:   bool operator ==(dynamic other) => other is Replies &&
        modal == other.modal &&
        const IterableEquality().equals(available, other.available);
  
    int get hashCode => quiver.hash2(modal, available);
  }
  
  class MustReplyMode implements Mode {
    final Run _run;
    final String _dialogEventName;
    final Mode _previous;
    final Dialog _dialog;
    bool _hasReplied = false;
  
    MustReplyMode(Run run, this._dialogEventName, this._dialog)
        : _run = run,
          _previous = run.currentMode;
  
  