     [this that]
     (compare [id size _attrs]
              [(:id that) (:size that)
-              (when (instance? Block that)
+              (when (identical? (class this) (class that))
                 (._attrs ^Block that))]))
 
 

(defn read-block
  "Creates a block by reading the source into memory and hashing it. This
  creates a realized block."
  ^Block
  [source algorithm]
  (let [hash-fn (checked-hash algorithm)
        content (bytes/to-byte-array source)]

            result))))

  (equiv
    [this that]
    (.equals this that))

  (containsKey
    [this k]
