   ([type]
    (create-board type {}))
   ([type config]
-   (Board. (atom {}) (impl/instantiate type config))))
+   (p/init! 
+     (sw/->BoardWrapper (atom {}) (impl/instantiate type config)))))
 
 ;; What follows then are a suite of simple tools for dealing with the boards.
-
-(defn get-config
-  "Get board configuration."
-  [board]
-  (p/get-config board))
-
-(defn update-config
-  "Reset board configuration."
-  [board f & args]
-  (p/update-config board (fn [current-conf] (apply f current-conf args))))
-
 
 (defmulti pin-modes
   "Returns a map of pin numbers to possible modes for the entire board, or the available modes of a specific pin.

  [board pin-n edge & [ch-or-buffer]]
  (let [current-ch (get-edge-chan board pin-n)
        ch (cond
             (chan? ch-or-buffer) ch
             ch-or-buffer         (chan ch-or-buffer)
             current-ch           current-ch
             :else                (chan))]
    (sw/set-edge-chan! board pin-n ch)
    (pcp/set-edge! board pin-n edge ch)))

(defmethod set-edge! false
  [pin edge & [ch-or-buffer]]

;; Board objects carry with them information about what pins are available, what modes are available for those
;; pins, and the current mode settings for those pins.


(declare board? board-dispatch board-apply chan?)

