anchor.diff:      else if (change["action"] == "change" && change["author"] != author) {
         Data record = collection.firstWhere((d) => d["_id"] == change["_id"], orElse : () => null);
         if (record != null) {
  -        modifiedFields = subscription.modifiedFieldsOfData(record);
  +        modifiedFields = subscription.modifiedDataFields(record);
           
           change["data"].forEach((String key, dynamic value) {
             if (!modifiedFields.contains(key)) {
  
positive.code:   String _author;
    IdGenerator _idGenerator;
    Map args = {};
    Map<String, Set<String>> _modifiedFields = {};
    Future get initialSync => _communicator._initialSync.future;
    bool get diffInProgress => _communicator.diffInProgress;
    List<StreamSubscription> _subscriptions = [];
  
negative.code:     collection = new DataCollection();
      _communicator = new Communicator(_connection, collectionName,
          (List<Map> data) {handleData(data, collection, _author);},
          (List<Map> diff) {handleDiff(diff, this, _author);});
      start();
    }
  
    void _initDataField(Data data, String field) {
      if (!_modifiedFields.containsKey(data["_id"])) {
        _modifiedFields[data["_id"]] = {};
      }
      
      if (!_modifiedFields[data["_id"]].containsKey(field)) {
        _modifiedFields[data["_id"]][field] = 0;
      }
    }
    
    num tokenForDataField(Data data, String field) {
      _initDataField(data, field);
      return _modifiedFields[data["_id"]][field];
    }
    
    num nextTokenForDataField(Data data, String field) {
      _initDataField(data, field);
      _modifiedFields[data["_id"]][field] += 1;
      return _modifiedFields[data["_id"]][field];
    }
    
    List<String> modifiedDataFields(Data data) {
      if (_modifiedFields.containsKey(data["_id"])) {
        return _modifiedFields[data["_id"]].keys.toList();
      }
      else {
        return [];
      }
    }
    
    void _clearTokenForDataField(Data data, String field) {
      if (_modifiedFields.containsKey(data["_id"])) {
        _modifiedFields[data["_id"]].remove(field);
        
        if (_modifiedFields[data["_id"]].isEmpty) {
          _modifiedFields.remove(data["_id"]);
        }
      }
    }
    
    void _setupListeners() {
  