anchor.diff:    }
   
     toReflection(TypeReflection targetReflection) {
  -    Converter converter = Converter.find(source, targetReflection);
  -    return converter.convert(object, targetReflection);
  +    Converter converter = Converters.find(source, targetReflection);
  +    if(converter is ConverterBase) {
  +      return converter.convertTo(object, targetReflection);
  +    }
  +    return converter.convert(object);
     }
   }
   
  -class Converter {
  +class Converters {
     static List<Converter> converters = [];
   
     static Converter register(Type source, Type target, Transformation conversion) {
  -    Converter converter = new Converter(new TypeReflection(source), new TypeReflection(target), conversion);
  +    Converter converter = new ConverterBase(new TypeReflection(source), new TypeReflection(target), conversion);
  +    converters.add(converter);
  +    return converter;
  +  }
  +
  +  static Converter add(Converter converter) {
       converters.add(converter);
       return converter;
     }
  
positive.code: }
  
  installJsonConverters() {
    Converter.converters.add(new ObjectToJson());
    Converter.converters.add(new JsonToObject());
  }
  
  class ObjectToJson extends Converter {
    ObjectToJson() : super(new TypeReflection(Object), new TypeReflection(Json));
  
    convert(object, TypeReflection targetReflection) {
      var simplified = _convert(object);
      return new Json(JSON.encode(simplified));
    }
  
negative.code:             (c) => c.source.sameOrSuper(source) && c.target.sameOrSuper(target),
          orElse: () => throw new ConverterException('No converter found from ' + source.toString() + ' to ' + target.toString() + '.'));
    }
  }
  
  class ConverterBase<S, T> extends Converter<S, T> {
    TypeReflection source;
    TypeReflection target;
    Transformation conversion;
  
    ConverterBase(this.source, this.target, [this.conversion]);
  
    T convert(S object) {
      return convertTo(object, target);
    }
  
    T convertTo(S object, TypeReflection targetReflection) {
      return conversion(object);
    }
  }
  