              :children [(when waiting?
                           [box :align :center :child [throbber :size :small :class "rc-typeahead-throbber"]])
                         (for [[ i s ] (map vector (range) suggestions)
-                              :let [selected? (= suggestion-selected-index i)]]
+                              :let [selected? (= selected-index i)]]
+                          ^{:key i}
                           [box
-                           :child s
+                           :child (if render-suggestion
+                                    (render-suggestion s)
+                                    s)
                            :class (str "rc-typeahead-suggestions-item"
                                        (when selected? " active"))
-                           :attr {:on-mouse-over #(swap! state-atom suggestion-select-set i)
-                                  :on-mouse-down #(do (.preventDefault %) (swap! state-atom suggestion-select-choose))
-                                  }])]])]]))))
+                           :attr {:on-mouse-over #(swap! state-atom select-set i)
+                                  :on-mouse-down #(do (.preventDefault %) (swap! state-atom select-choose))}])]])]]))))

           :width          width
           :height         height
           :placeholder    placeholder
           :on-change #(do (swap! state-atom assoc :model %)
                           (put! c-input %))
           :change-on-blur? false
           :model (or model "")
           :attr {:on-key-up   #(on-key-up state-atom %)
                  :on-key-down #(on-key-down state-atom %)}]
          (if (or (not-empty suggestions) waiting?)

  (when-let [key (keys-by-code (.-which event))]
    (.preventDefault event)
    (case key
      :up    (swap! state-atom select-prev)
      :down  (swap! state-atom select-next)
      :enter (swap! state-atom select-choose)
      true)))

(defn- on-key-down
