anchor.diff:      classMirror.variables.forEach((varKey, variable) {
         if (!variable.isPrivate && !variable.isStatic) {
           var futureField = instanceMirror.getField(varKey);
  -        
  -        var onGetFutureFieldSuccess = (instanceMirrorField) {
  -          print("Got reflecteee for $varKey: ${instanceMirrorField.reflectee}");
  -          resultMap[varKey] = instanceMirrorField.reflectee;
  +
  +        var onGetFutureFieldError = (error) => completer.completeError(error);
  +
  +        var onGetFutureFieldSuccess = (mirrors.InstanceMirror instanceMirrorField) {
  +          Object reflectee = instanceMirrorField.reflectee;
  +          _log("Got reflectee for $varKey: ${reflectee}");
  +          if (isPrimative(reflectee)){
  +            resultMap[varKey] = reflectee;
  +          } else {
  +            Future<String> recursed = objectToJson(reflectee).catchError(onGetFutureFieldError);
  +            recursed.then((json) => resultMap[varKey] = json);
  +            futuresList.add(recursed);
  +          }
           };
  -        
  -        var onGetFutureFieldError = (error) => completer.complete(error);
           
           futureField.then(onGetFutureFieldSuccess, onError:onGetFutureFieldError);
           futuresList.add(futureField);
  
positive.code:   
  }
  
  void _complete(completer, object, key) {
    if (key != null) {      
      completer.complete(new _KeyValuePair(key,object)); // complete, because we can't reflect any deeper
    }
  
negative.code: Future objectToSerializable(Object object, [key=null]) {
    var completer = new Completer();
      
    if (isPrimative(object)) {
      _serializeNative(object, completer, key);
    }
    else if (object is Map) {
  