public static Card attachGeneralAI(final SpellAbility sa, CardList list, boolean mandatory, Card attachSource, String logic){
		Player prefPlayer = "Pump".equals(logic) ? AllZone.getComputerPlayer() : AllZone.getHumanPlayer();
		// Some ChangeType cards are beneficial, and PrefPlayer should be changed to represent that
		CardList prefList = list.getController(prefPlayer);
		
		// If there are no preferred cards, and not mandatory bail out
		if (prefList.size() == 0)
			return chooseUnpreferred(mandatory, list);

		// Preferred list has at least one card in it to make to the actual Logic
		Card c = null;
		if ("GainControl".equals(logic))
			c = attachAIControlPreference(sa, prefList, mandatory, attachSource);
		else if ("Curse".equals(logic))
			c = attachAICursePreference(sa, prefList, mandatory, attachSource);
		else if ("Pump".equals(logic))
			c = attachAIPumpPreference(sa, prefList, mandatory, attachSource);
		else if ("ChangeType".equals(logic))	// Evil Presence, Spreading Seas
			c = attachAIChangeTypePreference(sa, prefList, mandatory, attachSource);
		// TODO: Does KeepTapped need it's own list? Probably more efficient than just Curse
		
		return c;
	}