 
 (defn show-select
   ([state side card ability] (show-select state side card ability nil))
-  ([state side card ability priority]
+  ([state side card ability {:keys [priority] :as args}]
    (let [ability (update-in ability [:choices :max] #(if (fn? %) (% state side card nil) %))]
      (swap! state update-in [side :selected]
             #(conj (vec %) {:ability (dissoc ability :choices) :req (get-in ability [:choices :req])

                     (let [cards (choices state side card targets)]
                             (if not-distinct
                               cards (distinct-by :title cards))))]
            (prompt! state (or player side) card prompt cs (dissoc ability :choices) priority)))
        (when (and (or (not counter-cost) (<= counter-cost (or counter 0)))
                   (or (not advance-counter-cost) (<= advance-counter-cost (or advance-counter 0)))
                   (apply pay (concat [state side card] cost)))

      (if choices
        (if (map? choices)
          (if (:req choices)
            (show-select state (or player side) card ability {:priority priority})
            (let [n ((:number choices) state side card targets)]
              (prompt! state (or player side) card prompt {:number n} (dissoc ability :choices))))
          (let [cs (if-not (fn? choices)
