       (session/update-in! [:movement-session :parts position-in-parts :movements]
                           conj (first (shuffle @movements))))))
 
+(defn refresh-movement [m part-title]
+  (go
+    (let [movements (atom [])
+          parts (session/get-in [:movement-session :parts])
+          position-in-parts (first (positions #{part-title} (map :title parts)))
+
+          movement-list (vec (session/get-in [:movement-session :parts position-in-parts :movements]))
+
+          ;todo: get categories from the movement, not the part.
+          categories (:categories (first (filter #(= part-title (:title %)) parts)))
+          categories-prepped (mapv #(str/replace % " " "-") categories)]
+
+      (doseq [c categories-prepped]
+        (swap! movements conj (first (read-string (<! (GET (str "singlemovement/" c)))))))
+
+      (let [position-in-movement-list (first (positions #{m} movement-list))
+            movement-list (assoc movement-list position-in-movement-list (first (shuffle @movements)))]
+
+        (session/assoc-in! [:movement-session :parts position-in-parts :movements]
+                            movement-list)))))
+
 (defn remove-movement [m part-title]
   (go
     (let [parts (session/get-in [:movement-session :parts])

    (fn [{:keys [title categories movements]}]
      [:div
       [:h2 title]
       [:div.pure-g
        (for [m movements]
          ^{:key (str m (rand-int 10000))} [movement-component m title])]
       [:button {:type     "submit"
                 :on-click #(get-new-movement title)} "+"]])))


(defn session-component []

        [:div.pure-u.movement

         [:div.pure-g
          [:div.pure-u-1-2.refresh {:on-click #(refresh-movement m part-title)}]
          [:div.pure-u-1-2.destroy {:on-click #(remove-movement m part-title)}]]

         [:div.pure-g.title
