                    (= :original topic) (om/transact! app :original (fn [col] (conj col msg)))
                    (= :user-join topic) (om/transact! app :users (fn [col] (conj col (:user-name msg []))))
                    (= :user-part topic) (om/transact! app :users (fn [col] (remove (fn [x] (= x (:user-name msg))) col)))
-                   (= (keyword lang) topic) (om/transact! app :translated (fn [col] (replacer col :original-sha (:original-sha msg) msg)))
+                   (= (keyword lang) topic) (om/transact! app :translated
+                                                          (fn [col] (replacer col :original-sha
+                                                                             (:original-sha msg) msg :topic topic)))
                    (= :ping topic) (when (= (:target msg) (:user-name @app)) (ping))
                    (= :error topic) (do (let [name (:user-name @app)]
                                           (put! socket-ctrl "Doh")

    om/IDidUpdate
    (did-update [_ _ _]
      (let [panel (.getElementById js/document "translated-panel")]
        (set! (.-scrollTop panel) (.-scrollHeight panel)))))
  )
(defn master-view [app owner]
  (reify
    om/IWillMount

                      :content-sha sha)))
    (clear-text owner)))

(defn replacer [col key val new-val ex-key ex-val]
  (loop [src col acc []]
    (cond (empty? src) (conj acc new-val)
          (and (= (key (first src)) val)
               (not (= (ex-key (first src)) ex-val))) (concat acc [new-val] (rest src))
          :default (recur (rest src) (conj acc (first src))))))

(defn users-view [app owner]
