         (do
           (when (and (or (= Atom (type initial-state)) (seq initial-state)) (implements? InitialAppState root-component))
             (log/warn "You supplied an initial state AND a root component with a constructor. Using InitialAppState!"))
-          (app/initialize this state root-component dom-id-or-node reconciler-options)))))
+          (let [app (app/initialize this state root-component dom-id-or-node reconciler-options)]
+            (merge-alternate-union-elements! app root-component)
+            app)))))
 
   (reset-state! [this new-state] (reset! (om/app-state reconciler) new-state))
 

   If the target is a vector element then that element must already exist in the vector.
  "
  [state ident & named-parameters]
  (js/console.log "integrating" named-parameters)
  (let [already-has-ident-at-path? (fn [data-path] (boolean (seq (filter #(= % ident) (get-in @state data-path)))))
        actions (partition 2 named-parameters)]
    (doseq [[command data-path] actions]
      (js/console.log :cmd command :dp data-path)
      (case command
        :prepend (when-not (already-has-ident-at-path? data-path)
                   (assert (vector? (get-in @state data-path)) (str "Path " data-path " for prepend must target an app-state vector."))

    [untangled.dom :as udom]
    [om.next.protocols :as omp]
    [untangled.client.impl.util :as util]
    [untangled.client.impl.om-plumbing :as plumbing]
    [clojure.set :as set])
  (:import goog.Uri))

(declare map->Application merge-alternate-union-elements!)

(defn new-untangled-client
  "Entrypoint for creating a new untangled client. Instantiates an Application with default values, unless
