                 :time new-time
                 :time-step time-step
                 :player (player-step (:player state) time-step keys-pressed)
-                :asteroids (map (fn [a] (asteroid-step a time-step)) (:asteroids state))
+                :asteroids (doall (map (fn [a] (step-thing a time-step)) (:asteroids state)))
                 :bullets
-                    (map (fn [b] (bullet-step b time-step))
+                    (doall (map (fn [b] (step-thing b time-step))
                         (concat
                             (if spawn-new-bullet
                                 [(new-bullet (:player state))]
                                 [])
-                        (:bullets state)))
+                        (:bullets state))))
                 :next-fire-time
                     (if spawn-new-bullet
                         (+ new-time fire-delay)

(defn default-state [] {
    :time (now)
    :time-step 0.0
    :player { :x 100.0 :y 100.0 :xv 0.0 :yv 0.0 :a 0.0 :av 0.0 }
    :next-fire-time (now)
    :asteroids (take 10 (repeatedly generate-asteroid))
} )

(defn player-step [player time-step keys-pressed]
    (let [
        player
            (if
                (contains? keys-pressed KeyEvent/VK_UP)
                (assoc player
                    :xv (+ (:xv player) (* time-step acceleration (Math/cos (:a player))))
                    :yv (+ (:yv player) (* time-step acceleration (Math/sin (:a player)))))
                player)
        player
            (if
                (contains? keys-pressed KeyEvent/VK_LEFT)

                (assoc player
                    :av (+ (:av player) (* time-step angular-acceleration)))
                player)

        player
            (step-thing player time-step)
        ]
    player))

(defn new-bullet [player]
    (assoc player
        :eff bullet-efficiency
        :acc bullet-acceleration
))

(defn game-step [state keys-pressed]
    (let [
