     ;; contains IDs)
     (let [page-cache (make-page-cache state columns)]
       [:.workflow.inbox
-       (om/build-all inbox-column columns
-                     {:fn (fn [column]
-                            [state (assoc column ::page-cache page-cache)])
-                      :state {:handle-drop! (partial inbox-handle-drop! state owner page-cache)}})])))
+       (map (fn [x i]
+              (om/build (if (special-column? x)
+                          (special-column-ui x)
+                          inbox-column)
+                        (assoc x :om.fake/index i)
+                        {:fn (fn [column]
+                               [state (assoc column ::page-cache page-cache)])
+                         :state {:handle-drop! (partial inbox-handle-drop! state owner page-cache)}}))
+            columns
+            (range))])))

  ;; TODO: Handle immutable column sources
  ;; TODO: How do we handle removal of the last page for documents?
  (remove-pages! [_ state page-ids]))

(defprotocol ColumnDropTarget
  (accept-drop! [_ state pages target-idx]))

    (assert (number? document-id))
    (api/fetch-documents! [document-id])))

(declare new-document-ui)

(defrecord NewDocumentColumnSource [id]
  SpecialColumn
  (special-column-ui [_] new-document-ui)
  ColumnSource
  (column-title [_ _]
    "Create New Document")
