anchor.diff:     * and it can be a String or a DbCollection. [selector] can be a Map, a SelectorBuilder,
      * or an encodable object. The query result will be decoded to List<[type]>.
      */
  -  Future<List<T>> find<T>(dynamic collection, Type type, [dynamic selector]) async {
  +  Future<List<T>> find<T>(DbCollection dbCol, Type type, [dynamic selector]) async {
       if (type == null) {
         throw ArgumentError.notNull("type");
       }
   
  -    var dbCol = _collection(collection);
       if (selector != null && selector is! Map && selector is! SelectorBuilder) {
         selector = _serializer.toMap(selector);
       }
       var result = await dbCol.find(selector).toList();
       if (type == dynamic) {
  -      return _serializer.fromList(result, useTypeInfo: true);
  +      return new List<T>.from(_serializer.fromList(result, useTypeInfo: true));
       } else {
  -      return _serializer.fromList(result, type: type);
  +      return new List<T>.from(_serializer.fromList(result, type: type));
       }
     }
   
  
positive.code:    * and it can be a String or a DbCollection. [objs] are the objects to be inserted,
     * and can be a list of maps, or a list of encodable objects.
     */
    Future<Map<String, dynamic>> insertAll(dynamic collection, List objs, {WriteConcern writeConcern}) {
      var dbCol = _collection(collection);
      return dbCol.insertAll(objs.map((obj) => _serializer.toMap(obj)).toList(), writeConcern: writeConcern);
    }
  
  
negative.code:    * and it can be a String or a DbCollection. [selector] can be a Map, a SelectorBuilder,
     * or an encodable object. The query result will be decoded to an object of type [type]
     */
    Future<T> findOne<T>(DbCollection dbCol, Type type, [dynamic selector]) async {
      if (type == null) {
        throw ArgumentError.notNull("type");
      }
  
      if (selector != null && selector is! Map && selector is! SelectorBuilder) {
        selector = _serializer.toMap(selector);
      }
  