                              (filter thread-unseen?)))]
       (reaction (count @unseen-threads)))))
 
-(reg-sub-raw
+(reg-sub
   :page
   (fn [state _]
-    (reaction (@state :page))))
+    (state :page)))
 
 (reg-sub
   :page-path

              (filter (fn [tag] (= (get-in @state [:open-group-id]) (tag :group-id)))))
            (vals (get-in @state [:tags]))))))

(reg-sub-raw
  :user-avatar-url
  (fn [state _ [user-id]]
    (reaction (get-in @state [:users user-id :avatar]))))

(reg-sub-raw
  :user-status
  (fn [state _ [user-id]]
    (reaction (get-in @state [:users user-id :status]))))

(reg-sub-raw
  :search-query
  (fn [state _]
    (reaction (get-in @state [:page :search-query]))))

(reg-sub-raw
  :tags-for-thread

    ; depend on page & group, so when the page changes this sub updates too
    (.getPath (.parse Uri js/window.location))))

(reg-sub
  :thread
  (fn [state _ [thread-id]]
    (get-in state [:threads thread-id])))

(reg-sub
  :threads
  (fn [state _]
    (state :threads)))

(reg-sub
  :page-id
  (fn [state _]
    (get-in state [:page :id])))

(reg-sub-raw
  :open-threads
