anchor.diff:    }
     
     static _createAndPopulate(ClassMirror classMirror, String id, Map data) {
  -    var instance = classMirror.newInstance(const Symbol(''), []);
  -    Persistable object = instance.reflectee;
  -    object.id = id;
  -    var instanceMirror = reflect(object);
  +    InstanceMirror instanceMirror = classMirror.newInstance(const Symbol(''), []);
  +    Persistable object = instanceMirror.reflectee;
  +    object.id = id.toString();
       data.forEach((k, v) {
  -      log.fine('$k has $v which is a ${v.runtimeType}');
  -      if (classMirror.variables.containsKey(new Symbol(k))) {
  -        instanceMirror.setField(new Symbol(k), v);
  +      Symbol fieldName = new Symbol(k);
  +      if (classMirror.declarations.containsKey(fieldName) &&
  +          classMirror.declarations[fieldName] is VariableMirror) {
  +        VariableMirror field = classMirror.declarations[fieldName];
  +        if (isFieldSerialized(field)) {
  +          v = _serialization.read(JSON.decode(v));
  +        }
  +        instanceMirror.setField(fieldName, v);
         }
       });
       return object;
     }
     
  -  String _nextId() => _idOffset + '-' + (_counter++).toString();
  +  static bool isFieldSerialized(VariableMirror field) {
  +    return field.metadata.any((InstanceMirror im) => im.reflectee == serialized);
  +  }
   
   }
positive.code: 
  int _counter = 0;
  final String _idOffset = new DateTime.now().millisecondsSinceEpoch.toString();
  
  
  /**
   * XXX We don't use this when we compile to dart2js because
  
negative.code:     if (id == null) {
        id = _nextId();
      }
      return _store.save(JSON.encode(_serialization.write(this)), id);
    }
    
    Future delete() {
  