 
    "Ichi 1.0"
    {:abilities [trash-program
-                {:label "Trace 1 - Give the Runner 1 tag and do 1 brain damage"
-                 :trace {:base 1 :msg "give the Runner 1 tag and do 1 brain damage"
-                         :effect (effect (damage :brain 1 {:card card}) (tag-runner :runner 1))}}]}
+                (trace-ability 1 {:label "Give the Runner 1 tag and do 1 brain damage"
+                                  :msg "give the Runner 1 tag and do 1 brain damage"
+                                  :effect (effect (damage :brain 1 {:card card})
+                                                  (tag-runner :runner 1))})]}
 
    "Ichi 2.0"
    {:abilities [trash-program
-                {:label "Trace 3 - Give the Runner 1 tag and do 1 brain damage"
-                 :trace {:base 3 :msg "give the Runner 1 tag and do 1 brain damage"
-                         :effect (effect (damage :brain 1 {:card card}) (tag-runner :runner 1))}}]}
+                (trace-ability 3 {:label "Give the Runner 1 tag and do 1 brain damage"
+                                  :msg "give the Runner 1 tag and do 1 brain damage"
+                                  :effect (effect (damage :brain 1 {:card card})
+                                                  (tag-runner :runner 1))})]}
 
    "IQ"
    {:effect (req (add-watch state (keyword (str "iq" (:cid card)))

                                     (update-run-ice state side))}}}]}

   "Burke Bugs"
   {:abilities [{:label "Trace 0 - Force the Runner to trash a program"
                 :trace (assoc trash-program :base 0 :not-distinct true
                                             :player :runner
                                             :msg "force the Runner to trash a program")}]}

   "Caduceus"
   {:abilities [{:label "Trace 3 - Gain 3 [Credits]"
                 :trace (assoc (gain-credits 3) :base 3)}
                {:label "Trace 2 - End the run"
                 :trace (assoc end-the-run :base 2)}]}

   "Cell Portal"
   {:abilities [{:msg "make the Runner approach the outermost ICE"

                                (handle-access state side [c])))}]}

   "Snoop"
   {:abilities [{:req (req (= current-ice card))
                 :label "Reveal all cards in the Runner's Grip"
                 :msg (msg "reveal " (join ", " (map :title (:hand runner))))}
                (trace-ability 3 {:label "Place 1 power counter on Snoop"
                                  :msg "place 1 power counter on Snoop"
                                  :effect (effect (add-prop card :counter 1))})
                {:req (req (> (:counter card 0) 0))
                 :counter-cost 1
                 :label "Hosted power counter: Reveal all cards in Grip and trash 1 card"
                 :msg (msg "look at all cards in Grip and trash " (:title target))
                 :choices (req (:hand runner))
                 :prompt "Choose a card to trash"
                 :effect (effect (trash target))}]}

   "Snowflake"
