public boolean equals(Object o) {
      if (!(o instanceof FilteredSubContext)) {
        return false;
      }

      FilteredSubContext that = (FilteredSubContext) o;

      return context.equals(that.context)
          && filter.equals(that.filter)
          && secondaryFilter.equals(that.secondaryFilter)
          && (recurse == that.recurse);
    }