anchor.diff:  
   [source,java,prettyprint]
   ----
  +import org.dozer.CustomConverter;
  +import org.dozer.MappingException;
  +
   public class TestCustomConverter implements CustomConverter {
  -  
  -  public Object convert(Object destination, Object source, 
  -      Class destClass, Class sourceClass) {
  -    if (source == null) {
  -      return null;
  -    }
  -    CustomDoubleObject dest = null;
  -    if (source instanceof Double) {
  -      // check to see if the object already exists
  -      if (destination == null) {
  -        dest = new CustomDoubleObject();
  -      } else {
  -        dest = (CustomDoubleObject) destination;
  -      }
  -      dest.setTheDouble(((Double) source).doubleValue());
  -      return dest;
  -    } else if (source instanceof CustomDoubleObject) {
  -      double sourceObj = 
  -        ((CustomDoubleObject) source).getTheDouble();
  -      return new Double(sourceObj);
  -    } else {
  -      throw new MappingException("Converter TestCustomConverter "
  -          + "used incorrectly. Arguments passed in were:"
  -          + destination + " and " + source);
  -    }
  -  }
  +
  +    @Override
  +    public Object convert(Object existingDestinationFieldValue, Object sourceFieldValue, Class<?> destinationClass, Class<?> sourceClass) {
  +        if (sourceFieldValue == null) {
  +            return null;
  +        }
  +
  +        CustomDoubleObject dest;
  +        if (source instanceof Double) {
  +            // check to see if the object already exists
  +            if (destination == null) {
  +                dest = new CustomDoubleObject();
  +            } else {
  +                dest = (CustomDoubleObject)destination;
  +            }
  +
  +            dest.setTheDouble(((Double)source).doubleValue());
  +
  +            return dest;
  +        } else if (source instanceof CustomDoubleObject) {
  +            double sourceObj = ((CustomDoubleObject)source).getTheDouble();
  +            return new Double(sourceObj);
  +        } else {
  +            throw new MappingException("Converter TestCustomConverter "
  +                                       + "used incorrectly. Arguments passed in were:"
  +                                       + destination
  +                                       + " and "
  +                                       + source);
  +        }
  +    }
  +}
   ----
   
   CustomConverters can also be injected into the `Mapper` if you
  
positive.code: 
  [source,java,prettyprint]
  ----
  public static class Converter 
      extends DozerConverter <List, Map> implements MapperAware {
  
    private Mapper mapper;
  
    public Converter() {
      super(List.class, Map.class);
    }
  
    public Map convertTo(List source, Map destination) {
      Map originalToMapped = new HashMap();
      for (Source item : source) {
        Target mappedItem = mapper.map(item, Target.class);
        originalToMapped.put(item, mappedItem);
      }
      return originalToMapped;
    }
  
  <...>
  
    public void setMapper(Mapper mapper) {
      this.mapper = mapper;
    }
  
  }
  ----
  
negative.code: 
  [source,java,prettyprint]
  ----
  import org.dozer.DozerConverter;
  
  public class NewDozerConverter extends DozerConverter<String, Boolean> {
  
      public NewDozerConverter() {
          super(String.class, Boolean.class);
      }
  
      @Override
      public Boolean convertTo(String source, Boolean destination) {
          if ("yes".equals(source)) {
              return Boolean.TRUE;
          } else if ("no".equals(source)) {
              return Boolean.FALSE;
          }
          throw new IllegalStateException("Unknown value!");
      }
  
      @Override
      public String convertFrom(Boolean source, String destination) {
          if (Boolean.TRUE.equals(source)) {
              return "yes";
          } else if (Boolean.FALSE.equals(source)) {
              return "no";
          }
          throw new IllegalStateException("Unknown value!");
      }
  }
  ----
  
  