   (keyword (str (name k1) "-" (name k2))))
 
 (defn select-component-states
-  [hm state entity-id select-component-ids]
+  [hm state entity-id select-components cached-get-component-state]
   ;; If the component is a vector then the first is the component-id
   ;; and the second is the entity-id. They will appear in the context
   ;; under :<component-id>-<entity-id>

                  (if (vector? component)
                    (let [[component-id entity-id] component]
                      [(concat-keywords component-id entity-id)
                       (get-component-state state
                                            component-id
                                            entity-id)])
                    [component
                     (get-component-state state
                                          component
                                          entity-id)])))
        select-component-ids))

(defn get-component-context
  "Returns a hashmap of context for use with a component fn."
  [state entity-id component]
  (let [{:keys [subscriptions select-components]} component]
    (cond-> {}
      subscriptions (assoc :inbox

               (let [component-state (get component-states entity-id)
                     context (get-component-context state
                                                    entity-id
                                                    component
                                                    cached-get-component-state)
                     next-comp-state (component-fn entity-id
                                                   component-state
                                                   context)]
