anchor.diff:  
           | _ -> failwithf "Cannot create BsonValue from %A" value
   
  -    /// Creates a BsonValue and wraps it in a bson top
  +    /// Creates a BsonValue wrapped in a BsonTop
       static member CreateValue value =
           let bson = BsonRuntime.ToBsonValue value
           BsonTop.Create(bson, "")
   
  -    /// Creates a BsonDocument and wraps it in a bson top
  +    /// Creates a BsonDocument wrapped in a BsonTop
       static member CreateDocument properties =
  -        let inline bDoc (x:seq<BsonElement>) = BsonDocument(x)
  -        let bson =
  +        let value =
               properties
               |> Array.map (fun (k, v) -> BsonElement(k, BsonRuntime.ToBsonValue v))
  -            |> bDoc
  -
  -        BsonTop.Create(bson, "")
  -
  -    /// Creates a BsonArray and wraps it in a bson top
  +            |> Array.toSeq
  +        BsonTop.Create(BsonDocument value, "")
  +
  +    /// Creates a BsonArray wrapped in a BsonTop
       static member CreateArray elements =
  -        let inline bArray (x:BsonValue[]) = BsonArray(x)
  -        let bson =
  +        let value =
               elements
               |> Array.collect (BsonRuntime.ToBsonValue >> (fun value ->
                   match value.BsonType with
                   | BsonType.Array -> Array.ofSeq value.AsBsonArray.Values
                   | BsonType.Null -> [| |]
                   | _ -> [| value |]))
  -            |> bArray
  -
  -        BsonTop.Create(bson, "")
  +        BsonTop.Create(BsonArray value, "")
  
positive.code:     /// Returns a single or no value by tag type
      static member TryGetValueByTypeTag<'T>(doc:IBsonTop, tagCode, mapping:Func<IBsonTop,'T>) =
          if BsonRuntime.Matches (InferedTypeTag.ParseCode tagCode) doc.BsonValue
          then Some (mapping.Invoke doc)
          else None
  
      static member private ToBsonValue (value:obj) =
          let inline optionToBson f = function
              | None -> BsonNull.Value :> BsonValue
  
negative.code:         | BsonType.Null -> [| |]
          | _ -> failwithf "Expecting a list at '%s', got %A" (top.Path()) top
  
      /// Optionally get property of BsonDocument
      static member TryGetPropertyUnpacked(top:IBsonTop, name) =
          match top.BsonValue.BsonType with
          | BsonType.Document ->
  