                      (into [] (comp cat (take max-count)))))]
       (core/map pad msg-lists))))
 
-(defn transpose
+(defn- transpose
   [msg-lists]
   (apply core/map vector msg-lists))
 
-(defn wrap-msg-fn
+(defn- wrap-msg-fn
   [msg-fn]
   (let [msg-fn (comp ensure-sequential msg-fn)]
     (fn [prev msg-payloads]


(defn- ensure-sequential
  [x-or-xs]
  (if (sequential? x-or-xs) x-or-xs [x-or-xs]))

(defn pad
  [msg-lists]
  (if (>= 1 (core/count msg-lists))
    msg-lists

  (map->Signal {:init (:init (first sigs))
                :message-emitter {:sources sigs
                                  :msg-fn (fn [prev messages]
                                            (first (filter fresh? messages)))}}))

(defn merge
  [& sigs]
