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

        if (!(sa instanceof Ability_Sub))
            sb.append(card).append(" - ");
        else
            sb.append(" ");

        Counters cType = Counters.valueOf(params.get("CounterType"));
        int amount = AbilityFactory.calculateAmount(af.getHostCard(), params.get("CounterNum"), sa);

        sb.append("Remove ");
        if (params.containsKey("UpTo")) sb.append("up to ");
        sb.append(amount).append(" ").append(cType.getName()).append(" counter");
        if (amount != 1) sb.append("s");
        sb.append(" from");

        ArrayList<Card> tgtCards;

        Target tgt = af.getAbTgt();
        if (tgt != null)
            tgtCards = tgt.getTargetCards();
        else {
            tgtCards = AbilityFactory.getDefinedCards(card, params.get("Defined"), sa);
        }
        for (Card c : tgtCards)
            sb.append(" ").append(c);

        sb.append(".");

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

        return sb.toString();
    }