                 [:li {:on-click (fn [e] (put! channels/player-ctrl :next))}
                  [:i.fa.fa-step-forward]]
                 [:li [:i.fa.fa-repeat]]
-                [:li [:i.fa.fa-random]]]])))))
+                [:li {:on-click (fn [e] (om/transact!
+                                         (state/ref-player)
+                                         (fn [p]
+                                           (assoc p :current-playlist (shuffle (:current-playlist p))))))}
+                 [:i.fa.fa-random]]]])))))
 
 (defn view-now-playing [data owner]
   (reify

                  current-offset (or (om/get-state owner :current-offset) 0)
                  previous-offset (dec current-offset)
                  next-offset (inc current-offset)
                  track-src (om/get-state owner :current-src)
                  next-track (last (take (inc next-offset) track-src))
                  previous-track (last (take (inc previous-offset) track-src))
                  current-track (last (take (inc current-offset) track-src))]

  (reify
    om/IInitState
    (init-state [this]
      {:current-offset 0
       :current-track nil
       :ctrl :stop
       :current-position 0
