     (swap! state update-in [:runner :register :made-run] #(conj % server)))
   (system-msg state :runner (str "makes a run on " server)))
 
+(defn handle-access [state side cards]
+  (doseq [c cards]
+    (when (= (:type c) "Agenda")
+      (steal state side c))))
+
 (defmulti access (fn [state side server] (first server)))
 
 (defmethod access :hq [state side server n]
-  (let [hq (get-in @state [:corp :hand])]
-    (take n (shuffle hq))))
+  (take n (shuffle (get-in @state [:corp :hand]))))
 
 (defmethod access :rd [state side server n]
   (take n (get-in @state [:corp :deck])))

      (swap! state assoc-in [side (first r)] 0)
      (swap! state update-in [side (first r)] #(max (- % (last r)) 0)))))

(defn run [state side {:keys [server] :as args}]
  (pay state :runner :click 1)
  (let [s (case server

    (flatline state))
  (trigger-event state side :turn-ends nil)
  (swap! state assoc :end-turn true))

(defn purge [state side]
  (doseq [card (get-in @state [:runner :rig :program])]
