 
 (defprotocol IOperation
   (affects-key [op] "Which key this affects--currently must be a single key")
-  (apply-op [op tree] "Applies the operation to the tree"))
+  (apply-op-to-vector [op v] "Applies the operation to the vector")
+  (apply-op-to-tree [op tree] "Applies the operation to the tree"))
 
 (defrecord InsertOp [key]
   IOperation
   (affects-key [_] key)
-  (apply-op [_ tree] (core/insert tree key)))
+  (apply-op-to-vector [_ v] (core/-insertion-into-sorted-vector v key))
+  (apply-op-to-tree [_ tree] (core/insert tree key)))
 
 (defrecord DeleteOp [key]
   IOperation
   (affects-key [_] key)
-  (apply-op [_ tree] (core/delete tree key)))
+  (apply-op-to-vector [_ v] (core/-deletion-from-sorted-vector v key))
+  (apply-op-to-tree [_ tree] (core/delete tree key)))
 
 (defn enqueue
   "When enqueing "

;; scan for all "interesting" operations
;; apply those operations

(defn lookup
  [tree key]
  )


   (let [deferred-ops (atom [])
         msg-buffers-propagated (enqueue tree msgs deferred-ops)]
     (reduce (fn [tree op]
               (apply-op-to-tree op tree))
             msg-buffers-propagated
             @deferred-ops)))
  ([tree msgs deferred-ops]
