anchor.diff:            "version" : nextVersion
           }).then((_) {
             return _collection.save(newRecord);
  +        },
  +        onError: (e) {
  +          if(e['code'] == 11000) {
  +            // duplicate key error index
  +            return change(_id, data, author);
  +          } else {
  +            throw(e);
  +          }
           });
         });
       });
     }
   
  -  Future remove(num id, String author) {
  +  Future remove(num _id, String author) {
       return _maxVersion.then((version) {
         var nextVersion = version + 1;
  -      return _collection.findOne({"_id" : id}).then((Map record) {
  +      return _collection.findOne({"_id" : _id}).then((Map record) {
           return _collectionHistory.insert({
             "before" : record,
             "after" : {},
  
positive.code:           "version" : nextVersion
          }).then((_) {
            return _collection.remove({"_id" : record["_id"]});
          });
        });
      });
  
negative.code:         "version" : nextVersion
        }).then((_) {
          return _collection.insert(data);
        },
        onError: (e) {
          if(e['code'] == 11000) {
            // duplicate key error index
            return add(_id, data, author);
          } else {
            throw(e);
          }
        });
      });
    }
  
    Future change(num _id, Map data, String author) {
      return _maxVersion.then((version) {
        var nextVersion = version + 1;
        return _collection.findOne({"_id" : _id}).then((Map record) {
          Map newRecord = new Map.from(record);
          newRecord.addAll(data);
  
  