   directly, without being checked."
   ^blocks.data.Block
   [id source]
-  (let [content (bytes/to-byte-array source)]
-    (Block. id
-            (count content)
-            (PersistentBytes/wrap content)
-            nil nil nil)))
+  (let [content (collect-bytes source)]
+    (Block. id (count content) content nil nil nil)))
 
 
 (defn read-block


;; ## Utility Functions

(defn- resolve-hasher
  "Resolves an algorithm designator to a hash function. Throws an exception on
  invalid names or error."

  ^blocks.data.Block
  [algorithm source]
  (let [hash-fn (checked-hasher algorithm)
        content (collect-bytes source)]
    (Block. (hash-fn (.open content)) (count content) content nil nil nil)))


(defn merge-blocks
