class CombinedMaster implements AbstractMaster<D> {

  @Override
  public D correct(final D document) {
    final M master = getMasterByScheme(document.getUniqueId().getScheme());
    if (master != null) {
      return master.correct(document);
    }
    return (new Try<D>() {
      @Override
      public D tryMaster(final M master) {
        return master.correct(document);
      }
    }).each(document.getUniqueId().getScheme());
  }

  protected  CombinedMaster(List<M> masterList);

}