private static String regenerateStackDescription(AbilityFactory af, SpellAbility sa) {
        final HashMap<String, String> params = af.getMapParams();
        StringBuilder sb = new StringBuilder();
        Card host = af.getHostCard();

        ArrayList<Card> tgtCards;
        Target tgt = af.getAbTgt();
        if (tgt != null)
            tgtCards = tgt.getTargetCards();
        else
            tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);

        if (tgtCards.size() > 0) {
            if (sa instanceof Ability_Sub)
                sb.append(" ");
            else
                sb.append(host).append(" - ");

            sb.append("Regenerate ");
            Iterator<Card> it = tgtCards.iterator();
            while (it.hasNext()) {
                Card tgtC = it.next();
                if (tgtC.isFaceDown()) sb.append("Morph");
                else sb.append(tgtC);

                if (it.hasNext()) sb.append(", ");
            }
        }
        sb.append(".");

        Ability_Sub abSub = sa.getSubAbility();
        if (abSub != null) {
            sb.append(abSub.getStackDescription());
        }

        return sb.toString();
    }