                                        (:hand runner)))
                  :msg (msg "host " (:title target))
                  :effect (effect (gain :memory (:memoryunits target))
-                                 (runner-install target {:host-card card}))}]
+                                 (runner-install target {:host-card card}))}
+                {:label "Host an installed virus on Progenitor" :req (req (empty? (:hosted card)))
+                 :prompt "Choose an installed virus program to host on Progenitor"
+                 :choices {:req #(and (= (:type %) "Program")
+                                      (has? % :subtype "Virus")
+                                      (:installed %))}
+                 :msg (msg "host " (:title target)) :effect (effect (host card target))}]
     :events {:purge {:effect (req (when-let [c (first (:hosted card))]
                                     (add-prop state side c :counter 1)))}}}
 

                          :bad-publicity (Integer/parseInt target)))}

   "Progenitor"
   {:abilities [{:cost [:click 1] :req (req (empty? (:hosted card)))
                 :prompt "Choose a Virus program to install on Progenitor"
                 :choices (req (filter #(and (= (:type %) "Program")
                                             (has? % :subtype "Virus")

                                       (:hand runner)))
                 :msg (msg "host " (:title target))
                 :effect (effect (gain :memory (:memoryunits target))
                                 (runner-install target {:host-card card}))}
                {:label "Host an installed program of 1[Memory Unit] or less on Omni-Drive"
                 :prompt "Choose an installed program of 1[Memory Unit] or less to host on Omni-Drive"
                 :choices {:req #(and (= (:type %) "Program") (:installed %))}
                 :msg (msg "host " (:title target)) :effect (effect (host card target))}]}

   "Oracle May"
   {:abilities [{:cost [:click 1] :once :per-turn :prompt "Choose card type"
