diff --git a/Mage.Sets/src/mage/sets/avacynrestored/BurnAtTheStake.java b/Mage.Sets/src/mage/sets/avacynrestored/BurnAtTheStake.java
index 666a042a4e..016e1a2e0b 100644
--- a/Mage.Sets/src/mage/sets/avacynrestored/BurnAtTheStake.java
+++ b/Mage.Sets/src/mage/sets/avacynrestored/BurnAtTheStake.java
@@ -158,13 +158,13 @@ class BurnAtTheStakeEffect extends OneShotEffect<BurnAtTheStakeEffect> {
     public boolean apply(Game game, Ability source) {
         int amount = (new GetXValue()).calculate(game, source) * 3;
 
-        Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+        Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
         if (permanent != null) {
             permanent.damage(amount, source.getSourceId(), game, true, false);
             return true;
         }
 
-        Player player = game.getPlayer(targetPointer.getFirst(source));
+        Player player = game.getPlayer(targetPointer.getFirst(game, source));
         if (player != null) {
             player.damage(amount, source.getSourceId(), game, false, true);
             return true;
diff --git a/Mage.Sets/src/mage/sets/avacynrestored/GallowsAtWillowHill.java b/Mage.Sets/src/mage/sets/avacynrestored/GallowsAtWillowHill.java
index a5e766e6d8..4b4fed0ac7 100644
--- a/Mage.Sets/src/mage/sets/avacynrestored/GallowsAtWillowHill.java
+++ b/Mage.Sets/src/mage/sets/avacynrestored/GallowsAtWillowHill.java
@@ -104,8 +104,8 @@ class GallowsAtWillowHillEffect extends OneShotEffect<GallowsAtWillowHillEffect>
     @Override
     public boolean apply(Game game, Ability source) {
         int affectedTargets = 0;
-        if (targetPointer.getTargets(source).size() > 0) {
-            for (UUID permanentId : targetPointer.getTargets(source)) {
+        if (targetPointer.getTargets(game, source).size() > 0) {
+            for (UUID permanentId : targetPointer.getTargets(game, source)) {
                 Permanent permanent = game.getPermanent(permanentId);
                 if (permanent != null) {
                     Player controller = game.getPlayer(permanent.getControllerId());
diff --git a/Mage.Sets/src/mage/sets/avacynrestored/GhostlyFlicker.java b/Mage.Sets/src/mage/sets/avacynrestored/GhostlyFlicker.java
index 8ef4e8e01f..500af6ecbd 100644
--- a/Mage.Sets/src/mage/sets/avacynrestored/GhostlyFlicker.java
+++ b/Mage.Sets/src/mage/sets/avacynrestored/GhostlyFlicker.java
@@ -96,7 +96,7 @@ class GhostlyFlickerEffect extends OneShotEffect<GhostlyFlickerEffect> {
     @Override
     public boolean apply(Game game, Ability source) {
         UUID exileId = source.getSourceId();
-        for (UUID permanentId : targetPointer.getTargets(source)) {
+        for (UUID permanentId : targetPointer.getTargets(game, source)) {
             Permanent target = game.getPermanent(permanentId);
             if (target != null) {
                 target.moveToExile(exileId, "Ghostly Flicker", source.getId(), game);
diff --git a/Mage.Sets/src/mage/sets/avacynrestored/JointAssault.java b/Mage.Sets/src/mage/sets/avacynrestored/JointAssault.java
index af6eb8dda5..e37bf175b1 100644
--- a/Mage.Sets/src/mage/sets/avacynrestored/JointAssault.java
+++ b/Mage.Sets/src/mage/sets/avacynrestored/JointAssault.java
@@ -92,7 +92,7 @@ class JointAssaultBoostTargetEffect extends ContinuousEffectImpl<JointAssaultBoo
     @Override
     public void init(Ability source, Game game) {
         super.init(source, game);
-        UUID permanentId = targetPointer.getFirst(source);
+        UUID permanentId = targetPointer.getFirst(game, source);
         Permanent target = game.getPermanent(permanentId);
         if (target != null) {
             if (target.getPairedCard() != null) {
@@ -104,7 +104,7 @@ class JointAssaultBoostTargetEffect extends ContinuousEffectImpl<JointAssaultBoo
     @Override
     public boolean apply(Game game, Ability source) {
         int affectedTargets = 0;
-        UUID permanentId = targetPointer.getFirst(source);
+        UUID permanentId = targetPointer.getFirst(game, source);
 
         Permanent target = game.getPermanent(permanentId);
         if (target != null) {
diff --git a/Mage.Sets/src/mage/sets/avacynrestored/StolenGoods.java b/Mage.Sets/src/mage/sets/avacynrestored/StolenGoods.java
index 747340dbb5..02dfb2010b 100644
--- a/Mage.Sets/src/mage/sets/avacynrestored/StolenGoods.java
+++ b/Mage.Sets/src/mage/sets/avacynrestored/StolenGoods.java
@@ -88,7 +88,7 @@ class StolenGoodsEffect extends OneShotEffect<StolenGoodsEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Player player = game.getPlayer(targetPointer.getFirst(source));
+        Player player = game.getPlayer(targetPointer.getFirst(game, source));
         if (player != null && player.getLibrary().size() > 0) {
             Library library = player.getLibrary();
             Card card;
diff --git a/Mage.Sets/src/mage/sets/avacynrestored/TamiyoTheMoonSage.java b/Mage.Sets/src/mage/sets/avacynrestored/TamiyoTheMoonSage.java
index 55ba2beb9c..3b6ce7cb14 100644
--- a/Mage.Sets/src/mage/sets/avacynrestored/TamiyoTheMoonSage.java
+++ b/Mage.Sets/src/mage/sets/avacynrestored/TamiyoTheMoonSage.java
@@ -199,7 +199,7 @@ class TamiyoTheMoonSageEffect extends OneShotEffect<TamiyoTheMoonSageEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Card card = game.getCard(this.targetPointer.getFirst(source));
+        Card card = game.getCard(this.targetPointer.getFirst(game, source));
         if (card != null) {
             return card.moveToZone(Zone.HAND, source.getId(), game, true);
         }
diff --git a/Mage.Sets/src/mage/sets/avacynrestored/TibaltTheFiendBlooded.java b/Mage.Sets/src/mage/sets/avacynrestored/TibaltTheFiendBlooded.java
index 74e6810918..082caa41ea 100644
--- a/Mage.Sets/src/mage/sets/avacynrestored/TibaltTheFiendBlooded.java
+++ b/Mage.Sets/src/mage/sets/avacynrestored/TibaltTheFiendBlooded.java
@@ -177,7 +177,7 @@ class TibaltTheFiendBloodedControlEffect extends ContinuousEffectImpl<TibaltTheF
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+        Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
         if (permanent != null && controllerId != null) {
             return permanent.changeControllerId(controllerId, game);
         }
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/BudokaGardener.java b/Mage.Sets/src/mage/sets/championsofkamigawa/BudokaGardener.java
index 81c893821a..3d02edc2d6 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/BudokaGardener.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/BudokaGardener.java
@@ -97,7 +97,7 @@ class BudokaGardenerEffect extends OneShotEffect<BudokaGardenerEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Card c = game.getCard(targetPointer.getFirst(source));
+        Card c = game.getCard(targetPointer.getFirst(game, source));
         if (c != null) {
             c.moveToZone(Constants.Zone.BATTLEFIELD, source.getSourceId(), game, false);
         }
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/CranialExtraction.java b/Mage.Sets/src/mage/sets/championsofkamigawa/CranialExtraction.java
index e54d3c6b4b..e579a8e8e2 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/CranialExtraction.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/CranialExtraction.java
@@ -86,7 +86,7 @@ class CranialExtractionEffect extends OneShotEffect<CranialExtractionEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Player player = game.getPlayer(targetPointer.getFirst(source));
+		Player player = game.getPlayer(targetPointer.getFirst(game, source));
 		Player controller = game.getPlayer(source.getControllerId());
 		if (player != null && controller != null) {
 			Choice cardChoice = new ChoiceImpl();
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/HeartbeatOfSpring.java b/Mage.Sets/src/mage/sets/championsofkamigawa/HeartbeatOfSpring.java
index b2f000f801..90e6a55e36 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/HeartbeatOfSpring.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/HeartbeatOfSpring.java
@@ -124,7 +124,7 @@ class HeartbeatOfSpringEffect extends ManaEffect<HeartbeatOfSpringEffect> {
     
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent land = game.getPermanent(this.targetPointer.getFirst(source));
+        Permanent land = game.getPermanent(this.targetPointer.getFirst(game, source));
         Abilities<ManaAbility> mana = land.getAbilities().getManaAbilities(Zone.BATTLEFIELD);
         Mana types = new Mana();
         for (ManaAbility ability: mana) {
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/HisokaMinamoSensei.java b/Mage.Sets/src/mage/sets/championsofkamigawa/HisokaMinamoSensei.java
index 86f96e3333..9b359a8c76 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/HisokaMinamoSensei.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/HisokaMinamoSensei.java
@@ -140,11 +140,11 @@ class HisokaMinamoSenseiCounterEffect extends OneShotEffect<HisokaMinamoSenseiCo
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Spell spell = game.getStack().getSpell(targetPointer.getFirst(source));
+        Spell spell = game.getStack().getSpell(targetPointer.getFirst(game, source));
         if (spell != null) {
             HisokaMinamoSenseiDiscardTargetCost cost = (HisokaMinamoSenseiDiscardTargetCost) source.getCosts().get(0);
             if (cost != null && cost.getConvertedCosts() == spell.getManaCost().convertedManaCost()) {
-                return game.getStack().counter(targetPointer.getFirst(source), source.getSourceId(), game);
+                return game.getStack().counter(targetPointer.getFirst(game, source), source.getSourceId(), game);
             }
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/HisokasGuard.java b/Mage.Sets/src/mage/sets/championsofkamigawa/HisokasGuard.java
index 672322927d..af6f782426 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/HisokasGuard.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/HisokasGuard.java
@@ -110,7 +110,7 @@ class HisokasGuardGainAbilityTargetEffect extends ContinuousEffectImpl<HisokasGu
     @Override
     public void init(Ability source, Game game) {
         // remember the guarded creature
-        Permanent guardedCreature = game.getPermanent(this.getTargetPointer().getFirst(source));
+        Permanent guardedCreature = game.getPermanent(this.getTargetPointer().getFirst(game, source));
         Permanent hisokasGuard = game.getPermanent(source.getSourceId());
         if (guardedCreature != null && hisokasGuard != null) {
             hisokasGuard.addConnectedCard("HisokasGuard", guardedCreature.getId());
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/KikuNightsFlower.java b/Mage.Sets/src/mage/sets/championsofkamigawa/KikuNightsFlower.java
index 8773bb717e..d05420052d 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/KikuNightsFlower.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/KikuNightsFlower.java
@@ -100,7 +100,7 @@ class KikuNightsFlowerEffect extends OneShotEffect<KikuNightsFlowerEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+		Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
 		if (permanent != null) {
 			permanent.damage(permanent.getPower().getValue(), permanent.getId(), game, true, false);
 			return true;
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/Mindblaze.java b/Mage.Sets/src/mage/sets/championsofkamigawa/Mindblaze.java
index 37e7a3282d..bacff50a96 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/Mindblaze.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/Mindblaze.java
@@ -90,7 +90,7 @@ class MindblazeEffect extends OneShotEffect<MindblazeEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Player player = game.getPlayer(targetPointer.getFirst(source));
+        Player player = game.getPlayer(targetPointer.getFirst(game, source));
         Player playerControls = game.getPlayer(source.getControllerId());
         if (player != null && playerControls != null) {
             Choice cardChoice = new ChoiceImpl();
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/NezumiGraverobber.java b/Mage.Sets/src/mage/sets/championsofkamigawa/NezumiGraverobber.java
index 602b623cbc..f2ed03e811 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/NezumiGraverobber.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/NezumiGraverobber.java
@@ -99,7 +99,7 @@ class NezumiGraverobberFlipEffect extends OneShotEffect<NezumiGraverobberFlipEff
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Card card = game.getCard(targetPointer.getFirst(source));
+        Card card = game.getCard(targetPointer.getFirst(game, source));
         if (card != null) {
             Player player = game.getPlayer(card.getOwnerId());
             if (player != null) {
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/SosukeSonOfSeshiro.java b/Mage.Sets/src/mage/sets/championsofkamigawa/SosukeSonOfSeshiro.java
index 248eef79a7..4f03e3fdf5 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/SosukeSonOfSeshiro.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/SosukeSonOfSeshiro.java
@@ -139,7 +139,7 @@ class SosukeSonOfSeshiroEffect extends OneShotEffect<SosukeSonOfSeshiroEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent targetCreature = game.getPermanent(this.getTargetPointer().getFirst(source));
+        Permanent targetCreature = game.getPermanent(this.getTargetPointer().getFirst(game, source));
         if (targetCreature != null) {
             AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect());
             delayedAbility.setSourceId(source.getSourceId());
diff --git a/Mage.Sets/src/mage/sets/conflux/DarkTemper.java b/Mage.Sets/src/mage/sets/conflux/DarkTemper.java
index 628aca46f8..44e40703c9 100644
--- a/Mage.Sets/src/mage/sets/conflux/DarkTemper.java
+++ b/Mage.Sets/src/mage/sets/conflux/DarkTemper.java
@@ -85,7 +85,7 @@ class DarkTemperEffect extends OneShotEffect<DarkTemperEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+        Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
         if (permanent == null) {
             return false;
         }
diff --git a/Mage.Sets/src/mage/sets/darkascension/AfflictedDeserter.java b/Mage.Sets/src/mage/sets/darkascension/AfflictedDeserter.java
index 64782193d2..cde072d26e 100644
--- a/Mage.Sets/src/mage/sets/darkascension/AfflictedDeserter.java
+++ b/Mage.Sets/src/mage/sets/darkascension/AfflictedDeserter.java
@@ -152,8 +152,8 @@ class WerewolfRansackerEffect extends OneShotEffect<WerewolfRansackerEffect> {
 	@Override
 	public boolean apply(Game game, Ability source) {
         int affectedTargets = 0;
-		if (targetPointer.getTargets(source).size() > 0) {
-			for (UUID permanentId : targetPointer.getTargets(source)) {
+		if (targetPointer.getTargets(game, source).size() > 0) {
+			for (UUID permanentId : targetPointer.getTargets(game, source)) {
 				Permanent permanent = game.getPermanent(permanentId);
 				if (permanent != null) {
 					if (permanent.destroy(source.getId(), game, false)) {
diff --git a/Mage.Sets/src/mage/sets/darkascension/CurseOfEchoes.java b/Mage.Sets/src/mage/sets/darkascension/CurseOfEchoes.java
index 73e1c3ebb7..c5d5831c10 100644
--- a/Mage.Sets/src/mage/sets/darkascension/CurseOfEchoes.java
+++ b/Mage.Sets/src/mage/sets/darkascension/CurseOfEchoes.java
@@ -142,7 +142,7 @@ class CurseOfEchoesEffect extends OneShotEffect<CurseOfEchoesEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Spell spell = game.getStack().getSpell(targetPointer.getFirst(source));
+		Spell spell = game.getStack().getSpell(targetPointer.getFirst(game, source));
 		if (spell != null) {
             String chooseMessage = "Copy target spell?  You may choose new targets for the copy.";
             for (UUID playerId: game.getPlayerList()) {
diff --git a/Mage.Sets/src/mage/sets/darkascension/DungeonGeists.java b/Mage.Sets/src/mage/sets/darkascension/DungeonGeists.java
index a430fef4b3..193f038b51 100644
--- a/Mage.Sets/src/mage/sets/darkascension/DungeonGeists.java
+++ b/Mage.Sets/src/mage/sets/darkascension/DungeonGeists.java
@@ -136,7 +136,7 @@ class DungeonGeistsEffect extends ReplacementEffectImpl<DungeonGeistsEffect> {
 
 
         if (game.getTurn().getStepType() == Constants.PhaseStep.UNTAP && event.getType() == GameEvent.EventType.UNTAP) {
-            if (event.getTargetId().equals(targetPointer.getFirst(source))) {
+            if (event.getTargetId().equals(targetPointer.getFirst(game, source))) {
                 return true;
             }
         }
diff --git a/Mage.Sets/src/mage/sets/darkascension/HavengulLich.java b/Mage.Sets/src/mage/sets/darkascension/HavengulLich.java
index 2c7a268da2..c37545a704 100644
--- a/Mage.Sets/src/mage/sets/darkascension/HavengulLich.java
+++ b/Mage.Sets/src/mage/sets/darkascension/HavengulLich.java
@@ -115,7 +115,7 @@ class HavengulLichPlayEffect extends AsThoughEffectImpl<HavengulLichPlayEffect>
 	public boolean applies(UUID sourceId, Ability source, Game game) {
         Card card = game.getCard(sourceId);
         if (card != null && game.getState().getZone(card.getId()) == Constants.Zone.GRAVEYARD) {
-            if (targetPointer.getFirst(source).equals(card.getId()))
+            if (targetPointer.getFirst(game, source).equals(card.getId()))
                 return true;
         }
         return false;
@@ -136,7 +136,7 @@ class HavengulLichPlayedEffect extends OneShotEffect<HavengulLichPlayedEffect> {
     
     @Override
     public boolean apply(Game game, Ability source) {
-        DelayedTriggeredAbility ability = new HavengulLichDelayedTriggeredAbility(targetPointer.getFirst(source));
+        DelayedTriggeredAbility ability = new HavengulLichDelayedTriggeredAbility(targetPointer.getFirst(game, source));
         ability.setSourceId(source.getSourceId());
         ability.setControllerId(source.getControllerId());
         game.addDelayedTriggeredAbility(ability);
diff --git a/Mage.Sets/src/mage/sets/darkascension/IncreasingSavagery.java b/Mage.Sets/src/mage/sets/darkascension/IncreasingSavagery.java
index 8ced3a12c0..c3886a10f8 100644
--- a/Mage.Sets/src/mage/sets/darkascension/IncreasingSavagery.java
+++ b/Mage.Sets/src/mage/sets/darkascension/IncreasingSavagery.java
@@ -91,7 +91,7 @@ class IncreasingSavageryEffect extends OneShotEffect<IncreasingSavageryEffect> {
             if (spell.getFromZone() == Constants.Zone.GRAVEYARD) {
                 amount = 10;
             }
-            Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+            Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
             if (permanent != null) {
                 permanent.addCounters(CounterType.P1P1.createInstance(amount), game);
             }
diff --git a/Mage.Sets/src/mage/sets/darkascension/IncreasingVengeance.java b/Mage.Sets/src/mage/sets/darkascension/IncreasingVengeance.java
index bb1ee8ebab..f0762faaaf 100644
--- a/Mage.Sets/src/mage/sets/darkascension/IncreasingVengeance.java
+++ b/Mage.Sets/src/mage/sets/darkascension/IncreasingVengeance.java
@@ -94,7 +94,7 @@ class IncreasingVengeanceEffect extends OneShotEffect<IncreasingVengeanceEffect>
 
     @Override
     public boolean apply(Game game, Ability source) {
-		Spell spell = game.getStack().getSpell(targetPointer.getFirst(source));
+		Spell spell = game.getStack().getSpell(targetPointer.getFirst(game, source));
 		if (spell != null) {
 			Spell copy = spell.copySpell();
 			copy.setControllerId(source.getControllerId());
diff --git a/Mage.Sets/src/mage/sets/darkascension/LostInTheWoods.java b/Mage.Sets/src/mage/sets/darkascension/LostInTheWoods.java
index 6e4518ed3e..86d809cdb3 100644
--- a/Mage.Sets/src/mage/sets/darkascension/LostInTheWoods.java
+++ b/Mage.Sets/src/mage/sets/darkascension/LostInTheWoods.java
@@ -97,7 +97,7 @@ class LostInTheWoodsEffect extends OneShotEffect<LostInTheWoodsEffect> {
 
             if (card != null) {
                 if (card.getSubtype().contains("Forest")) {
-                    Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+                    Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
                     if (permanent != null) {
                         permanent.removeFromCombat(game);
                     }
diff --git a/Mage.Sets/src/mage/sets/darkascension/SoulSeizer.java b/Mage.Sets/src/mage/sets/darkascension/SoulSeizer.java
index 2b8c32c639..fcdb4a7bdf 100644
--- a/Mage.Sets/src/mage/sets/darkascension/SoulSeizer.java
+++ b/Mage.Sets/src/mage/sets/darkascension/SoulSeizer.java
@@ -136,7 +136,7 @@ class SoulSeizerEffect extends OneShotEffect<SoulSeizerEffect> {
 		Permanent permanent = game.getPermanent(source.getSourceId());
 		if (permanent != null && permanent.canTransform()) {
             if (permanent.transform(game)) {
-                Permanent attachTo = game.getPermanent(targetPointer.getFirst(source));
+                Permanent attachTo = game.getPermanent(targetPointer.getFirst(game, source));
                 if (attachTo != null) {
                     return attachTo.addAttachment(source.getSourceId(), game);
                 }
diff --git a/Mage.Sets/src/mage/sets/darkascension/SpitefulShadows.java b/Mage.Sets/src/mage/sets/darkascension/SpitefulShadows.java
index 5e512a29cc..203c9f8b12 100644
--- a/Mage.Sets/src/mage/sets/darkascension/SpitefulShadows.java
+++ b/Mage.Sets/src/mage/sets/darkascension/SpitefulShadows.java
@@ -132,7 +132,7 @@ class SpitefulShadowsEffect extends OneShotEffect<SpitefulShadowsEffect> {
     @Override
     public boolean apply(Game game, Ability source) {
         Integer damageAmount = (Integer) this.getValue("damageAmount");
-        UUID targetId = this.targetPointer.getFirst(source);
+        UUID targetId = this.targetPointer.getFirst(game, source);
         if (damageAmount != null && targetId != null) {
             Permanent permanent = game.getPermanent(targetId);
             if (permanent == null) {
diff --git a/Mage.Sets/src/mage/sets/darkascension/WrackWithMadness.java b/Mage.Sets/src/mage/sets/darkascension/WrackWithMadness.java
index 4cdb68d455..a9923cb850 100644
--- a/Mage.Sets/src/mage/sets/darkascension/WrackWithMadness.java
+++ b/Mage.Sets/src/mage/sets/darkascension/WrackWithMadness.java
@@ -83,7 +83,7 @@ class WrackWithMadnessEffect extends OneShotEffect<WrackWithMadnessEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+        Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
         if (permanent != null) {
             permanent.damage(permanent.getPower().getValue(), permanent.getId(), game, true, false);
             return true;
diff --git a/Mage.Sets/src/mage/sets/darksteel/EmissaryOfHope.java b/Mage.Sets/src/mage/sets/darksteel/EmissaryOfHope.java
index 2e592d301f..298920e699 100644
--- a/Mage.Sets/src/mage/sets/darksteel/EmissaryOfHope.java
+++ b/Mage.Sets/src/mage/sets/darksteel/EmissaryOfHope.java
@@ -93,7 +93,7 @@ class EmissaryOfHopeEffect extends OneShotEffect<EmissaryOfHopeEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Player targetPlayer = game.getPlayer(targetPointer.getFirst(source));
+        Player targetPlayer = game.getPlayer(targetPointer.getFirst(game, source));
         Player sourcePlayer = game.getPlayer(source.getControllerId());
         if (targetPlayer != null && sourcePlayer != null) {
             int amount = game.getBattlefield().count(filter, targetPlayer.getId(), game);
diff --git a/Mage.Sets/src/mage/sets/eventide/DeathbringerLiege.java b/Mage.Sets/src/mage/sets/eventide/DeathbringerLiege.java
index 1a73eb354f..e210fc13c0 100644
--- a/Mage.Sets/src/mage/sets/eventide/DeathbringerLiege.java
+++ b/Mage.Sets/src/mage/sets/eventide/DeathbringerLiege.java
@@ -108,7 +108,7 @@ class DeathbringerLiegeEffect extends OneShotEffect<DeathbringerLiegeEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent p = game.getPermanent(targetPointer.getFirst(source));
+        Permanent p = game.getPermanent(targetPointer.getFirst(game, source));
         if (p != null && p.isTapped()) {
             p.destroy(source.getSourceId(), game, false);
         }
diff --git a/Mage.Sets/src/mage/sets/innistrad/BackFromTheBrink.java b/Mage.Sets/src/mage/sets/innistrad/BackFromTheBrink.java
index 5738cbd527..7dd3ccd2cc 100644
--- a/Mage.Sets/src/mage/sets/innistrad/BackFromTheBrink.java
+++ b/Mage.Sets/src/mage/sets/innistrad/BackFromTheBrink.java
@@ -87,7 +87,7 @@ class BackFromTheBrinkEffect extends OneShotEffect<BackFromTheBrinkEffect> {
     
     @Override
     public boolean apply(Game game, Ability source) {
-        Card card = game.getCard(this.targetPointer.getFirst(source));
+        Card card = game.getCard(this.targetPointer.getFirst(game, source));
         if (card != null) {
             EmptyToken token = new EmptyToken();
             CardUtil.copyTo(token).from(card);
diff --git a/Mage.Sets/src/mage/sets/innistrad/BalefireDragon.java b/Mage.Sets/src/mage/sets/innistrad/BalefireDragon.java
index 3400e96124..966e4d9aea 100644
--- a/Mage.Sets/src/mage/sets/innistrad/BalefireDragon.java
+++ b/Mage.Sets/src/mage/sets/innistrad/BalefireDragon.java
@@ -86,7 +86,7 @@ class BalefireDragonEffect extends OneShotEffect<BalefireDragonEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Player player = game.getPlayer(targetPointer.getFirst(source));
+		Player player = game.getPlayer(targetPointer.getFirst(game, source));
 		if (player != null) {
             int amount = (Integer)getValue("damage");
             if (amount > 0) {
diff --git a/Mage.Sets/src/mage/sets/innistrad/BrimstoneVolley.java b/Mage.Sets/src/mage/sets/innistrad/BrimstoneVolley.java
index 1718b82404..95e822f638 100644
--- a/Mage.Sets/src/mage/sets/innistrad/BrimstoneVolley.java
+++ b/Mage.Sets/src/mage/sets/innistrad/BrimstoneVolley.java
@@ -86,12 +86,12 @@ class BrimstoneVolleyEffect extends OneShotEffect<BrimstoneVolleyEffect> {
 		if (watcher.conditionMet()) {
 		  	damage = 5;
 		}
-		Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+		Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
 		if (permanent != null) {
 			permanent.damage(damage, source.getSourceId(), game, true, false);
 			return true;
 		}
-		Player player = game.getPlayer(targetPointer.getFirst(source));
+		Player player = game.getPlayer(targetPointer.getFirst(game, source));
 		if (player != null) {
 			player.damage(damage, source.getSourceId(), game, false, true);
 			return true;
diff --git a/Mage.Sets/src/mage/sets/innistrad/CacklingCounterpart.java b/Mage.Sets/src/mage/sets/innistrad/CacklingCounterpart.java
index 4b3943886d..391c2dd5bd 100644
--- a/Mage.Sets/src/mage/sets/innistrad/CacklingCounterpart.java
+++ b/Mage.Sets/src/mage/sets/innistrad/CacklingCounterpart.java
@@ -85,7 +85,7 @@ class CacklingCounterpartEffect extends OneShotEffect<CacklingCounterpartEffect>
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Card card = game.getCard(this.targetPointer.getFirst(source));
+        Card card = game.getCard(this.targetPointer.getFirst(game, source));
         if (card != null) {
             EmptyToken token = new EmptyToken();
             CardUtil.copyTo(token).from(card);
diff --git a/Mage.Sets/src/mage/sets/innistrad/CreepyDoll.java b/Mage.Sets/src/mage/sets/innistrad/CreepyDoll.java
index d9ede6935c..6d227fd639 100644
--- a/Mage.Sets/src/mage/sets/innistrad/CreepyDoll.java
+++ b/Mage.Sets/src/mage/sets/innistrad/CreepyDoll.java
@@ -123,7 +123,7 @@ class CreepyDollEffect extends OneShotEffect<CreepyDollEffect> {
         Player player = game.getPlayer(source.getControllerId());
         if (player != null) {
             if (player.flipCoin(game)) {
-                UUID targetId = getTargetPointer().getFirst(source);
+                UUID targetId = getTargetPointer().getFirst(game, source);
                 Permanent permanent = game.getPermanent(targetId);
                 if (permanent != null) {
                     permanent.destroy(source.getId(), game, false);
diff --git a/Mage.Sets/src/mage/sets/innistrad/ElderCathar.java b/Mage.Sets/src/mage/sets/innistrad/ElderCathar.java
index 3aa0b418da..2e4bf0687d 100644
--- a/Mage.Sets/src/mage/sets/innistrad/ElderCathar.java
+++ b/Mage.Sets/src/mage/sets/innistrad/ElderCathar.java
@@ -94,7 +94,7 @@ class ElderCatharAddCountersTargetEffect extends OneShotEffect<ElderCatharAddCou
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+        Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
         if (permanent != null) {
             if (counter != null) {
                 if (permanent.hasSubtype("Human")) {
diff --git a/Mage.Sets/src/mage/sets/innistrad/FrightfulDelusion.java b/Mage.Sets/src/mage/sets/innistrad/FrightfulDelusion.java
index b8567a19a0..b7e1d8bb1c 100644
--- a/Mage.Sets/src/mage/sets/innistrad/FrightfulDelusion.java
+++ b/Mage.Sets/src/mage/sets/innistrad/FrightfulDelusion.java
@@ -87,7 +87,7 @@ class FrightfulDelusionEffect extends OneShotEffect<FrightfulDelusionEffect> {
 	@Override
 	public boolean apply(Game game, Ability source) {
 		StackObject spell = game.getStack().getStackObject(
-				targetPointer.getFirst(source));
+				targetPointer.getFirst(game, source));
 		Cost cost = new GenericManaCost(1);
 		if (spell != null) {
 			Player player = game.getPlayer(spell.getControllerId());
diff --git a/Mage.Sets/src/mage/sets/innistrad/GarrukRelentless.java b/Mage.Sets/src/mage/sets/innistrad/GarrukRelentless.java
index d033aff22f..d6240f215f 100644
--- a/Mage.Sets/src/mage/sets/innistrad/GarrukRelentless.java
+++ b/Mage.Sets/src/mage/sets/innistrad/GarrukRelentless.java
@@ -135,7 +135,7 @@ class GarrukRelentlessDamageEffect extends OneShotEffect<GarrukRelentlessDamageE
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+        Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
         if (permanent != null) {
             int damage = permanent.getPower().getValue();
             permanent.damage(3, source.getSourceId(), game, true, false);
diff --git a/Mage.Sets/src/mage/sets/innistrad/HereticsPunishment.java b/Mage.Sets/src/mage/sets/innistrad/HereticsPunishment.java
index ec2d4c6521..12e979875d 100644
--- a/Mage.Sets/src/mage/sets/innistrad/HereticsPunishment.java
+++ b/Mage.Sets/src/mage/sets/innistrad/HereticsPunishment.java
@@ -96,12 +96,12 @@ class HereticsPunishmentEffect extends OneShotEffect<HereticsPunishmentEffect> {
                         maxCost = test;
                 }
             }
-            Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+            Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
             if (permanent != null) {
                 permanent.damage(maxCost, source.getSourceId(), game, true, false);
                 return true;
             }
-            Player targetPlayer = game.getPlayer(targetPointer.getFirst(source));
+            Player targetPlayer = game.getPlayer(targetPointer.getFirst(game, source));
             if (targetPlayer != null) {
                 targetPlayer.damage(maxCost, source.getSourceId(), game, false, true);
                 return true;
diff --git a/Mage.Sets/src/mage/sets/innistrad/SeverTheBloodline.java b/Mage.Sets/src/mage/sets/innistrad/SeverTheBloodline.java
index 4313a0dd44..b891c3f1cb 100644
--- a/Mage.Sets/src/mage/sets/innistrad/SeverTheBloodline.java
+++ b/Mage.Sets/src/mage/sets/innistrad/SeverTheBloodline.java
@@ -90,7 +90,7 @@ class SeverTheBloodlineEffect extends OneShotEffect<SeverTheBloodlineEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent targetPermanent = game.getPermanent(targetPointer.getFirst(source));
+        Permanent targetPermanent = game.getPermanent(targetPointer.getFirst(game, source));
         if (targetPermanent != null) {
             FilterCreaturePermanent filter = new FilterCreaturePermanent();
             filter.getName().add(targetPermanent.getName());
diff --git a/Mage.Sets/src/mage/sets/innistrad/SkaabRuinator.java b/Mage.Sets/src/mage/sets/innistrad/SkaabRuinator.java
index f4f1ef40ba..ca80654f4a 100644
--- a/Mage.Sets/src/mage/sets/innistrad/SkaabRuinator.java
+++ b/Mage.Sets/src/mage/sets/innistrad/SkaabRuinator.java
@@ -138,7 +138,7 @@ class SkaabRuinatorEffect extends OneShotEffect<SkaabRuinatorEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Card target = (Card) game.getObject(targetPointer.getFirst(source));
+		Card target = (Card) game.getObject(targetPointer.getFirst(game, source));
 		if (target != null) {
 			Player controller = game.getPlayer(target.getOwnerId());
 			if (controller != null) {
diff --git a/Mage.Sets/src/mage/sets/innistrad/SnapcasterMage.java b/Mage.Sets/src/mage/sets/innistrad/SnapcasterMage.java
index db8182a6ab..91df7ef935 100644
--- a/Mage.Sets/src/mage/sets/innistrad/SnapcasterMage.java
+++ b/Mage.Sets/src/mage/sets/innistrad/SnapcasterMage.java
@@ -108,7 +108,7 @@ class SnapcasterMageEffect extends ContinuousEffectImpl<SnapcasterMageEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Card card = game.getCard(targetPointer.getFirst(source));
+		Card card = game.getCard(targetPointer.getFirst(game, source));
 		if (card != null) {
             FlashbackAbility ability;
             if (card.getCardType().contains(CardType.INSTANT))
diff --git a/Mage.Sets/src/mage/sets/magic2010/ConsumeSpirit.java b/Mage.Sets/src/mage/sets/magic2010/ConsumeSpirit.java
index be55c050ee..ea81575f72 100644
--- a/Mage.Sets/src/mage/sets/magic2010/ConsumeSpirit.java
+++ b/Mage.Sets/src/mage/sets/magic2010/ConsumeSpirit.java
@@ -90,11 +90,11 @@ class ConsumeSpiritEffect extends OneShotEffect<ConsumeSpiritEffect> {
 	public boolean apply(Game game, Ability source) {
 		int damage = source.getManaCostsToPay().getX();
 		if (damage > 0) {
-			Permanent permanent = game.getPermanent(getTargetPointer().getFirst(source));
+			Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source));
 			if (permanent != null) {
 				permanent.damage(damage, source.getSourceId(), game, true, false);
 			} else {
-				Player player = game.getPlayer(getTargetPointer().getFirst(source));
+				Player player = game.getPlayer(getTargetPointer().getFirst(game, source));
 				if (player != null) {
 					player.damage(damage, source.getSourceId(), game, false, true);
 				}
diff --git a/Mage.Sets/src/mage/sets/magic2010/Fireball.java b/Mage.Sets/src/mage/sets/magic2010/Fireball.java
index 0e45428b0e..e4b75cd70f 100644
--- a/Mage.Sets/src/mage/sets/magic2010/Fireball.java
+++ b/Mage.Sets/src/mage/sets/magic2010/Fireball.java
@@ -86,12 +86,12 @@ class FireballEffect extends OneShotEffect<FireballEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		int numTargets = targetPointer.getTargets(source).size();
+		int numTargets = targetPointer.getTargets(game, source).size();
 		int damage = source.getManaCostsToPay().getX();
 		if (numTargets > 0) {
 			int damagePer = damage/numTargets;
 			if (damagePer > 0) {
-				for (UUID targetId: targetPointer.getTargets(source)) {
+				for (UUID targetId: targetPointer.getTargets(game, source)) {
 					Permanent permanent = game.getPermanent(targetId);
 					if (permanent != null) {
 						permanent.damage(damagePer, source.getSourceId(), game, true, false);
diff --git a/Mage.Sets/src/mage/sets/magic2010/HiveMind.java b/Mage.Sets/src/mage/sets/magic2010/HiveMind.java
index 1cb62089c3..d233d21723 100644
--- a/Mage.Sets/src/mage/sets/magic2010/HiveMind.java
+++ b/Mage.Sets/src/mage/sets/magic2010/HiveMind.java
@@ -121,7 +121,7 @@ class HiveMindEffect extends OneShotEffect<HiveMindEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Spell spell = game.getStack().getSpell(targetPointer.getFirst(source));
+        Spell spell = game.getStack().getSpell(targetPointer.getFirst(game, source));
         Player player = game.getPlayer(source.getControllerId());
         if (spell != null && player != null) {
             Set<UUID> players = player.getInRange();
diff --git a/Mage.Sets/src/mage/sets/magic2010/SphinxAmbassador.java b/Mage.Sets/src/mage/sets/magic2010/SphinxAmbassador.java
index ee67ed047b..66f401af17 100644
--- a/Mage.Sets/src/mage/sets/magic2010/SphinxAmbassador.java
+++ b/Mage.Sets/src/mage/sets/magic2010/SphinxAmbassador.java
@@ -96,7 +96,7 @@ class SphinxAmbassadorEffect extends OneShotEffect<SphinxAmbassadorEffect> {
     @Override
     public boolean apply(Game game, Ability source) {
         Player player = game.getPlayer(source.getControllerId());
-        Player targetPlayer = game.getPlayer(targetPointer.getFirst(source));
+        Player targetPlayer = game.getPlayer(targetPointer.getFirst(game, source));
 
         if (player != null && targetPlayer != null) {
             TargetCardInLibrary target = new TargetCardInLibrary();
diff --git a/Mage.Sets/src/mage/sets/magic2011/MerfolkSpy.java b/Mage.Sets/src/mage/sets/magic2011/MerfolkSpy.java
index 8f29a4fa9e..a0394cbdb6 100644
--- a/Mage.Sets/src/mage/sets/magic2011/MerfolkSpy.java
+++ b/Mage.Sets/src/mage/sets/magic2011/MerfolkSpy.java
@@ -87,7 +87,7 @@ class MerfolkSpyEffect extends OneShotEffect<MerfolkSpyEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Player player = game.getPlayer(targetPointer.getFirst(source));
+		Player player = game.getPlayer(targetPointer.getFirst(game, source));
 		if (player != null && player.getHand().size() > 0) {
 			Cards revealed = new CardsImpl();
 			revealed.add(player.getHand().getRandom(game));
diff --git a/Mage.Sets/src/mage/sets/magic2012/BloodlordOfVaasgoth.java b/Mage.Sets/src/mage/sets/magic2012/BloodlordOfVaasgoth.java
index e46c03f15d..9c1c0d0688 100644
--- a/Mage.Sets/src/mage/sets/magic2012/BloodlordOfVaasgoth.java
+++ b/Mage.Sets/src/mage/sets/magic2012/BloodlordOfVaasgoth.java
@@ -108,7 +108,7 @@ class BloodlordOfVaasgothEffect extends ContinuousEffectImpl {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Spell object = game.getStack().getSpell(targetPointer.getFirst(source));
+		Spell object = game.getStack().getSpell(targetPointer.getFirst(game, source));
 		if (object != null) {
 			Permanent permanent = game.getPermanent(object.getSourceId());
 			if (permanent != null) {
diff --git a/Mage.Sets/src/mage/sets/magic2012/CrownOfEmpires.java b/Mage.Sets/src/mage/sets/magic2012/CrownOfEmpires.java
index a3c43a1bd7..6ebb8f0234 100644
--- a/Mage.Sets/src/mage/sets/magic2012/CrownOfEmpires.java
+++ b/Mage.Sets/src/mage/sets/magic2012/CrownOfEmpires.java
@@ -85,7 +85,7 @@ class CrownOfEmpiresEffect extends OneShotEffect<CrownOfEmpiresEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Permanent target = game.getPermanent(targetPointer.getFirst(source));
+		Permanent target = game.getPermanent(targetPointer.getFirst(game, source));
 		boolean scepter = false;
 		boolean throne = false;
 		for (Permanent permanent : game.getBattlefield().getAllActivePermanents(source.getControllerId())) {
@@ -130,7 +130,7 @@ class CrownOfEmpiresControlEffect extends ContinuousEffectImpl<CrownOfEmpiresCon
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+		Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
 		UUID controllerId = (UUID) game.getState().getValue(source.getSourceId().toString());
 		if (permanent != null && controllerId != null) {
 			return permanent.changeControllerId(controllerId, game);
diff --git a/Mage.Sets/src/mage/sets/magic2012/GoblinBangchuckers.java b/Mage.Sets/src/mage/sets/magic2012/GoblinBangchuckers.java
index 7bf7cecd0c..fe5fbf3ee3 100644
--- a/Mage.Sets/src/mage/sets/magic2012/GoblinBangchuckers.java
+++ b/Mage.Sets/src/mage/sets/magic2012/GoblinBangchuckers.java
@@ -91,12 +91,12 @@ class GoblinBangchuckersEffect extends OneShotEffect<GoblinBangchuckersEffect> {
 		Player controller = game.getPlayer(source.getControllerId());
 		if (controller != null) {
 			if (controller.flipCoin(game)) {
-				Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+				Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
 				if (permanent != null) {
 					permanent.damage(2, source.getSourceId(), game, true, false);
 					return true;
 				}
-				Player player = game.getPlayer(targetPointer.getFirst(source));
+				Player player = game.getPlayer(targetPointer.getFirst(game, source));
 				if (player != null) {
 					player.damage(2, source.getSourceId(), game, false, true);
 					return true;
diff --git a/Mage.Sets/src/mage/sets/magic2012/JaceMemoryAdept.java b/Mage.Sets/src/mage/sets/magic2012/JaceMemoryAdept.java
index 3c40d6dda0..4e33129c4f 100644
--- a/Mage.Sets/src/mage/sets/magic2012/JaceMemoryAdept.java
+++ b/Mage.Sets/src/mage/sets/magic2012/JaceMemoryAdept.java
@@ -99,7 +99,7 @@ class JaceMemoryAdeptEffect extends DrawCardTargetEffect {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		for (UUID target : targetPointer.getTargets(source)) {
+		for (UUID target : targetPointer.getTargets(game, source)) {
 			Player player = game.getPlayer(target);
 			if (player != null) {
 				player.drawCards(amount.calculate(game, source), game);
diff --git a/Mage.Sets/src/mage/sets/magic2012/ScepterOfEmpires.java b/Mage.Sets/src/mage/sets/magic2012/ScepterOfEmpires.java
index 2fc46c18d1..e86b58e9da 100644
--- a/Mage.Sets/src/mage/sets/magic2012/ScepterOfEmpires.java
+++ b/Mage.Sets/src/mage/sets/magic2012/ScepterOfEmpires.java
@@ -95,7 +95,7 @@ class ScepterOfEmpiresEffect extends OneShotEffect<ScepterOfEmpiresEffect> {
 
 		int amount = throne && crown ? 3 : 1;
 
-		Player player = game.getPlayer(targetPointer.getFirst(source));
+		Player player = game.getPlayer(targetPointer.getFirst(game, source));
 		if (player != null) {
 			player.damage(amount, source.getSourceId(), game, false, true);
 			return true;
diff --git a/Mage.Sets/src/mage/sets/magic2012/Scrambleverse.java b/Mage.Sets/src/mage/sets/magic2012/Scrambleverse.java
index b9211970f4..613d2a2149 100644
--- a/Mage.Sets/src/mage/sets/magic2012/Scrambleverse.java
+++ b/Mage.Sets/src/mage/sets/magic2012/Scrambleverse.java
@@ -125,7 +125,7 @@ class ScrambleverseControlEffect extends ContinuousEffectImpl<ScrambleverseContr
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+		Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
 		if (permanent != null && controllerId != null) {
 			return permanent.changeControllerId(controllerId, game);
 		}
diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/Cryptoplasm.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/Cryptoplasm.java
index 6d315c7a69..1fc018b9fe 100644
--- a/Mage.Sets/src/mage/sets/mirrodinbesieged/Cryptoplasm.java
+++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/Cryptoplasm.java
@@ -91,7 +91,7 @@ class CryptoplasmTransformEffect extends ContinuousEffectImpl<CryptoplasmTransfo
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Card card = game.getCard(targetPointer.getFirst(source));
+        Card card = game.getCard(targetPointer.getFirst(game, source));
         Permanent permanent = game.getPermanent(source.getSourceId());
 
         if (card == null || permanent == null)
diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/KnowledgePool.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/KnowledgePool.java
index c2dfcfa17a..e93e19c759 100644
--- a/Mage.Sets/src/mage/sets/mirrodinbesieged/KnowledgePool.java
+++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/KnowledgePool.java
@@ -153,7 +153,7 @@ class KnowledgePoolEffect2 extends OneShotEffect<KnowledgePoolEffect2> {
     
     @Override
     public boolean apply(Game game, Ability source) {
-        Spell spell = game.getStack().getSpell(targetPointer.getFirst(source));
+        Spell spell = game.getStack().getSpell(targetPointer.getFirst(game, source));
         if (spell != null) {
             if (spell.moveToExile(source.getSourceId(), "Knowledge Pool Exile", id, game)) {
                 Player player = game.getPlayer(spell.getControllerId());
diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/Mirrorworks.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/Mirrorworks.java
index cdb1fa1456..385cc66fd8 100644
--- a/Mage.Sets/src/mage/sets/mirrodinbesieged/Mirrorworks.java
+++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/Mirrorworks.java
@@ -132,7 +132,7 @@ class MirrorworksEffect extends OneShotEffect<MirrorworksEffect> {
 			if (player.chooseUse(outcome, "Pay " + cost.getText() + " and " + staticText, game)) {
 				cost.clearPaid();
 				if (cost.pay(source, game, source.getId(), source.getControllerId(), false)) {
-					UUID targetId = targetPointer.getFirst(source);
+					UUID targetId = targetPointer.getFirst(game, source);
 					if (targetId != null) {
 						MageObject target = game.getLastKnownInformation(targetId, Constants.Zone.BATTLEFIELD);
 						if (target != null && target instanceof Permanent) {
diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/MorbidPlunder.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/MorbidPlunder.java
index 47106d14fb..9fc4523c4f 100644
--- a/Mage.Sets/src/mage/sets/mirrodinbesieged/MorbidPlunder.java
+++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/MorbidPlunder.java
@@ -85,7 +85,7 @@ class MorbidPlunderEffect extends OneShotEffect<MorbidPlunderEffect> {
     @Override
     public boolean apply(Game game, Ability source) {
         boolean result = false;
-        for (UUID target : targetPointer.getTargets(source)) {
+        for (UUID target : targetPointer.getTargets(game, source)) {
             Card card = game.getCard(target);
             if (card != null) {
                 result |= card.moveToZone(Zone.HAND, source.getId(), game, true);
diff --git a/Mage.Sets/src/mage/sets/newphyrexia/AuriokSurvivors.java b/Mage.Sets/src/mage/sets/newphyrexia/AuriokSurvivors.java
index c356d65cf7..ab8834bc00 100644
--- a/Mage.Sets/src/mage/sets/newphyrexia/AuriokSurvivors.java
+++ b/Mage.Sets/src/mage/sets/newphyrexia/AuriokSurvivors.java
@@ -96,7 +96,7 @@ class AuriokSurvivorsEffect extends OneShotEffect<AuriokSurvivorsEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent p = game.getPermanent(targetPointer.getFirst(source));
+        Permanent p = game.getPermanent(targetPointer.getFirst(game, source));
         Permanent sourcePermanent = game.getPermanent(source.getSourceId());
         Player player = game.getPlayer(source.getControllerId());
         if (p != null && player != null && sourcePermanent != null) {
diff --git a/Mage.Sets/src/mage/sets/newphyrexia/BeastWithin.java b/Mage.Sets/src/mage/sets/newphyrexia/BeastWithin.java
index 8913131ffe..fbe8b29120 100644
--- a/Mage.Sets/src/mage/sets/newphyrexia/BeastWithin.java
+++ b/Mage.Sets/src/mage/sets/newphyrexia/BeastWithin.java
@@ -87,7 +87,7 @@ class BeastWithinEffect extends OneShotEffect<BeastWithinEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent permanent = (Permanent) game.getLastKnownInformation(targetPointer.getFirst(source), Constants.Zone.BATTLEFIELD);
+        Permanent permanent = (Permanent) game.getLastKnownInformation(targetPointer.getFirst(game, source), Constants.Zone.BATTLEFIELD);
         if (permanent != null) {
             BeastToken token = new BeastToken();
             token.putOntoBattlefield(1, game, source.getId(), permanent.getControllerId());
diff --git a/Mage.Sets/src/mage/sets/newphyrexia/CorruptedResolve.java b/Mage.Sets/src/mage/sets/newphyrexia/CorruptedResolve.java
index c417250f88..d05fcf53c7 100644
--- a/Mage.Sets/src/mage/sets/newphyrexia/CorruptedResolve.java
+++ b/Mage.Sets/src/mage/sets/newphyrexia/CorruptedResolve.java
@@ -80,11 +80,11 @@ class CorruptedResolveEffect extends OneShotEffect<CorruptedResolveEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Spell spell = game.getStack().getSpell(targetPointer.getFirst(source));
+        Spell spell = game.getStack().getSpell(targetPointer.getFirst(game, source));
         if (spell != null) {
             Player player = game.getPlayer(spell.getControllerId());
             if (player != null && player.getCounters().containsKey(CounterType.POISON))
-                return game.getStack().counter(targetPointer.getFirst(source), source.getSourceId(), game);
+                return game.getStack().counter(targetPointer.getFirst(game, source), source.getSourceId(), game);
         }
         return false;
     }
diff --git a/Mage.Sets/src/mage/sets/newphyrexia/ExclusionRitual.java b/Mage.Sets/src/mage/sets/newphyrexia/ExclusionRitual.java
index 41f65e00d5..496ed4a985 100644
--- a/Mage.Sets/src/mage/sets/newphyrexia/ExclusionRitual.java
+++ b/Mage.Sets/src/mage/sets/newphyrexia/ExclusionRitual.java
@@ -92,7 +92,7 @@ class ExclusionRitualImprintEffect extends OneShotEffect<ExclusionRitualImprintE
     @Override
     public boolean apply(Game game, Ability source) {
         Permanent sourcePermanent = game.getPermanent(source.getSourceId());
-        Permanent targetPermanent = game.getPermanent(targetPointer.getFirst(source));
+        Permanent targetPermanent = game.getPermanent(targetPointer.getFirst(game, source));
         if (sourcePermanent != null && targetPermanent != null) {
             targetPermanent.moveToExile(getId(), "Exclusion Ritual (Imprint)", source.getSourceId(), game);
             sourcePermanent.imprint(targetPermanent.getId(), game);
diff --git a/Mage.Sets/src/mage/sets/newphyrexia/GitaxianProbe.java b/Mage.Sets/src/mage/sets/newphyrexia/GitaxianProbe.java
index ba24db0f80..8e7c715491 100644
--- a/Mage.Sets/src/mage/sets/newphyrexia/GitaxianProbe.java
+++ b/Mage.Sets/src/mage/sets/newphyrexia/GitaxianProbe.java
@@ -80,7 +80,7 @@ class GitaxianProbeEffect extends OneShotEffect<GitaxianProbeEffect> {
     @Override
     public boolean apply(Game game, Ability source) {
         Player controller = game.getPlayer(source.getControllerId());
-        Player player = game.getPlayer(targetPointer.getFirst(source));
+        Player player = game.getPlayer(targetPointer.getFirst(game, source));
         if (player != null && controller != null) {
             controller.lookAtCards("Gitaxian Probe", player.getHand(), game);
         }
diff --git a/Mage.Sets/src/mage/sets/newphyrexia/InvaderParasite.java b/Mage.Sets/src/mage/sets/newphyrexia/InvaderParasite.java
index 42ba4b6b90..ec1b7b3a9a 100644
--- a/Mage.Sets/src/mage/sets/newphyrexia/InvaderParasite.java
+++ b/Mage.Sets/src/mage/sets/newphyrexia/InvaderParasite.java
@@ -91,7 +91,7 @@ class InvaderParasiteImprintEffect extends OneShotEffect<InvaderParasiteImprintE
     @Override
     public boolean apply(Game game, Ability source) {
         Permanent sourcePermanent = game.getPermanent(source.getSourceId());
-        Permanent targetPermanent = game.getPermanent(targetPointer.getFirst(source));
+        Permanent targetPermanent = game.getPermanent(targetPointer.getFirst(game, source));
         if (sourcePermanent != null && targetPermanent != null) {
             targetPermanent.moveToExile(getId(), "Invader Parasite (Imprint)", source.getSourceId(), game);
             sourcePermanent.imprint(targetPermanent.getId(), game);
diff --git a/Mage.Sets/src/mage/sets/newphyrexia/IsolationCell.java b/Mage.Sets/src/mage/sets/newphyrexia/IsolationCell.java
index 23116bead0..a9cc54fa41 100644
--- a/Mage.Sets/src/mage/sets/newphyrexia/IsolationCell.java
+++ b/Mage.Sets/src/mage/sets/newphyrexia/IsolationCell.java
@@ -119,7 +119,7 @@ class IsolationCellEffect extends OneShotEffect<IsolationCellEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Player player = game.getPlayer(targetPointer.getFirst(source));
+        Player player = game.getPlayer(targetPointer.getFirst(game, source));
         if (player != null) {
             GenericManaCost cost = new GenericManaCost(2);
             if (!cost.pay(source, game, player.getId(), player.getId(), false)) {
diff --git a/Mage.Sets/src/mage/sets/newphyrexia/MortisDogs.java b/Mage.Sets/src/mage/sets/newphyrexia/MortisDogs.java
index 73c1415cff..4194e3a231 100644
--- a/Mage.Sets/src/mage/sets/newphyrexia/MortisDogs.java
+++ b/Mage.Sets/src/mage/sets/newphyrexia/MortisDogs.java
@@ -89,7 +89,7 @@ class MortisDogsEffect extends OneShotEffect<MortisDogsEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Player player = game.getPlayer(targetPointer.getFirst(source));
+        Player player = game.getPlayer(targetPointer.getFirst(game, source));
         Permanent sourcePermanent = game.getPermanent(source.getSourceId());
         if (player != null && sourcePermanent != null) {
             player.loseLife(sourcePermanent.getPower().getValue(), game);
diff --git a/Mage.Sets/src/mage/sets/newphyrexia/OmenMachine.java b/Mage.Sets/src/mage/sets/newphyrexia/OmenMachine.java
index feaf03277e..ed29d8dfd6 100644
--- a/Mage.Sets/src/mage/sets/newphyrexia/OmenMachine.java
+++ b/Mage.Sets/src/mage/sets/newphyrexia/OmenMachine.java
@@ -152,7 +152,7 @@ class OmenMachineEffect2 extends OneShotEffect<OmenMachineEffect2> {
     
     @Override
     public boolean apply(Game game, Ability source) {
-        Player player = game.getPlayer(targetPointer.getFirst(source));
+        Player player = game.getPlayer(targetPointer.getFirst(game, source));
         if (player != null) {
             Card card = player.getLibrary().removeFromTop(game);
             if (card != null) {
diff --git a/Mage.Sets/src/mage/sets/newphyrexia/VorinclexVoiceOfHunger.java b/Mage.Sets/src/mage/sets/newphyrexia/VorinclexVoiceOfHunger.java
index 65682b4829..5dc97bbbf6 100644
--- a/Mage.Sets/src/mage/sets/newphyrexia/VorinclexVoiceOfHunger.java
+++ b/Mage.Sets/src/mage/sets/newphyrexia/VorinclexVoiceOfHunger.java
@@ -136,7 +136,7 @@ class VorinclexEffect extends ManaEffect<VorinclexEffect> {
     
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent land = game.getPermanent(this.targetPointer.getFirst(source));
+        Permanent land = game.getPermanent(this.targetPointer.getFirst(game, source));
         Abilities<ManaAbility> mana = land.getAbilities().getManaAbilities(Zone.BATTLEFIELD);
         Mana types = new Mana();
         for (ManaAbility ability: mana) {
diff --git a/Mage.Sets/src/mage/sets/newphyrexia/WhisperingSpecter.java b/Mage.Sets/src/mage/sets/newphyrexia/WhisperingSpecter.java
index 8fac78c0a4..667935f4c2 100644
--- a/Mage.Sets/src/mage/sets/newphyrexia/WhisperingSpecter.java
+++ b/Mage.Sets/src/mage/sets/newphyrexia/WhisperingSpecter.java
@@ -88,7 +88,7 @@ class WhisperingSpecterEffect extends OneShotEffect<WhisperingSpecterEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Player player = game.getPlayer(targetPointer.getFirst(source));
+        Player player = game.getPlayer(targetPointer.getFirst(game, source));
         if (player != null) {
             int value = player.getCounters().getCount(CounterType.POISON);
             if (value > 0) {
diff --git a/Mage.Sets/src/mage/sets/ravnika/ClutchOfTheUndercity.java b/Mage.Sets/src/mage/sets/ravnika/ClutchOfTheUndercity.java
index ae4fac050a..2ba9661f0f 100644
--- a/Mage.Sets/src/mage/sets/ravnika/ClutchOfTheUndercity.java
+++ b/Mage.Sets/src/mage/sets/ravnika/ClutchOfTheUndercity.java
@@ -84,7 +84,7 @@ class ClutchOfTheUndercityEffect extends OneShotEffect<ClutchOfTheUndercityEffec
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent p = (Permanent) game.getLastKnownInformation(targetPointer.getFirst(source), Constants.Zone.BATTLEFIELD);
+        Permanent p = (Permanent) game.getLastKnownInformation(targetPointer.getFirst(game, source), Constants.Zone.BATTLEFIELD);
         if (p != null) {
             Player player = game.getPlayer(p.getControllerId());
             if (player != null) {
diff --git a/Mage.Sets/src/mage/sets/ravnika/LeaveNoTrace.java b/Mage.Sets/src/mage/sets/ravnika/LeaveNoTrace.java
index 34562d002a..cf805e2f86 100644
--- a/Mage.Sets/src/mage/sets/ravnika/LeaveNoTrace.java
+++ b/Mage.Sets/src/mage/sets/ravnika/LeaveNoTrace.java
@@ -93,7 +93,7 @@ class LeaveNoTraceEffect extends OneShotEffect<LeaveNoTraceEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent target = game.getPermanent(targetPointer.getFirst(source));
+        Permanent target = game.getPermanent(targetPointer.getFirst(game, source));
         if (target != null) {
             ObjectColor color = target.getColor();
             target.destroy(source.getSourceId(), game, false);
diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/GravityWell.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/GravityWell.java
index 10b5c67e78..2151511203 100644
--- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/GravityWell.java
+++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/GravityWell.java
@@ -122,7 +122,7 @@ class GravityWellEffect extends ContinuousEffectImpl<GravityWellEffect> {
 
     @Override
     public boolean apply(Constants.Layer layer, Constants.SubLayer sublayer, Ability source, Game game) {
-	Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+	Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
 	if (permanent != null) {
             switch (layer) {
                 case AbilityAddingRemovingEffects_6:
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/ArcTrail.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/ArcTrail.java
index f73208cddb..1eeb216ed5 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/ArcTrail.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/ArcTrail.java
@@ -95,7 +95,7 @@ class ArcTrailEffect extends OneShotEffect {
 		boolean twoDamageDone = false;
 		int damage = 2;
 
-		for ( UUID target : targetPointer.getTargets(source) ) {
+		for ( UUID target : targetPointer.getTargets(game, source) ) {
 			Permanent permanent = game.getPermanent(target);
 
 			if ( twoDamageDone ) {
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/EngulfingSlagwurm.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/EngulfingSlagwurm.java
index e264c2ed1a..2ecaa50324 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/EngulfingSlagwurm.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/EngulfingSlagwurm.java
@@ -87,7 +87,7 @@ class EngulfingSlagwurmEffect extends OneShotEffect<EngulfingSlagwurmEffect> {
     @Override
     public boolean apply(Game game, Ability source) {
         Player controller = game.getPlayer(source.getControllerId());
-        MageObject c = game.getLastKnownInformation(targetPointer.getFirst(source), Constants.Zone.BATTLEFIELD);
+        MageObject c = game.getLastKnownInformation(targetPointer.getFirst(game, source), Constants.Zone.BATTLEFIELD);
         if (c != null && controller != null) {
             controller.gainLife(c.getPower().getValue(), game);
         }
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/FulgentDistraction.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/FulgentDistraction.java
index d686dfe87c..838d912870 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/FulgentDistraction.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/FulgentDistraction.java
@@ -83,7 +83,7 @@ class FulgentDistractionEffect extends OneShotEffect<FulgentDistractionEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		for ( UUID target : targetPointer.getTargets(source) ) {
+		for ( UUID target : targetPointer.getTargets(game, source) ) {
 			Permanent creature = game.getPermanent(target);
 
 			List<UUID> copiedAttachments = new ArrayList<UUID>(creature.getAttachments());
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/GolemArtisan.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/GolemArtisan.java
index 5896c15277..6d226f0ec8 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/GolemArtisan.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/GolemArtisan.java
@@ -113,7 +113,7 @@ class GolemArtisanEffect extends OneShotEffect<GolemArtisanEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+		Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
 		Player playerControls = game.getPlayer(source.getControllerId());
 		if (permanent != null && playerControls != null) {
 			Choice abilityChoice = new ChoiceImpl();
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/LiegeOfTheTangle.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/LiegeOfTheTangle.java
index 26c17ac924..ab1f00fcbe 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/LiegeOfTheTangle.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/LiegeOfTheTangle.java
@@ -174,7 +174,7 @@ class LiegeOfTheTangleEffect extends ContinuousEffectImpl<LiegeOfTheTangleEffect
 	public void init(Ability source, Game game) {
 		super.init(source, game);
 		if (this.affectedObjectsSet) {
-			for (UUID permId: targetPointer.getTargets(source)) {
+			for (UUID permId: targetPointer.getTargets(game, source)) {
 				objects.add(permId);
 			}
 		}
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/Memoricide.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/Memoricide.java
index b37849c2cd..5b444c07d4 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/Memoricide.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/Memoricide.java
@@ -85,7 +85,7 @@ class MemoricideEffect extends OneShotEffect<MemoricideEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Player player = game.getPlayer(targetPointer.getFirst(source));
+		Player player = game.getPlayer(targetPointer.getFirst(game, source));
 		Player controller = game.getPlayer(source.getControllerId());
 		if (player != null && controller != null) {
 			Choice cardChoice = new ChoiceImpl();
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/MimicVat.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/MimicVat.java
index 1268364864..cd76757e7a 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/MimicVat.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/MimicVat.java
@@ -155,7 +155,7 @@ class MimicVatEffect extends OneShotEffect<MimicVatEffect> {
 		permanent.clearImprinted(game);
 
 		// Imprint a new one
-		UUID target = targetPointer.getFirst(source);
+		UUID target = targetPointer.getFirst(game, source);
 		if (target != null) {
 			Card card = game.getCard(target);
 			card.moveToExile(getId(), "Mimic Vat (Imprint)", source.getSourceId(), game);
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/NimDeathmantle.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/NimDeathmantle.java
index 50e759cd81..ee5524fd53 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/NimDeathmantle.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/NimDeathmantle.java
@@ -160,7 +160,7 @@ class NimDeathmantleEffect extends OneShotEffect<NimDeathmantleEffect> {
 			if (player.chooseUse(Constants.Outcome.Benefit, equipment.getName() + " - Pay " + cost.getText() + "?", game)) {
 				cost.clearPaid();
 				if (cost.pay(source, game, source.getId(), source.getControllerId(), false)) {
-					UUID target = targetPointer.getFirst(source);
+					UUID target = targetPointer.getFirst(game, source);
 					if (target != null && equipment != null) {
 						Card card = game.getCard(target);
 						// check if it's still in graveyard
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/PainfulQuandary.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/PainfulQuandary.java
index b1d25720dc..1f753a44d6 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/PainfulQuandary.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/PainfulQuandary.java
@@ -117,7 +117,7 @@ class PainfulQuandryEffect extends OneShotEffect<PainfulQuandryEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Player player = game.getPlayer(targetPointer.getFirst(source));
+		Player player = game.getPlayer(targetPointer.getFirst(game, source));
 		if (player != null) {
 			Cost cost = new DiscardTargetCost(new TargetCardInHand());
             if (cost.canPay(player.getId(), player.getId(), game)) {
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/PrecursorGolem.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/PrecursorGolem.java
index 1eb3f740e1..469762b834 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/PrecursorGolem.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/PrecursorGolem.java
@@ -121,7 +121,7 @@ class PrecursorGolemCopyTriggeredAbility extends TriggeredAbilityImpl<PrecursorG
 			UUID targetGolem = null;
 			SpellAbility sa = spell.getSpellAbility();
 			for (Effect effect : sa.getEffects()) {
-            	for (UUID target : effect.getTargetPointer().getTargets(sa)) {
+            	for (UUID target : effect.getTargetPointer().getTargets(game, sa)) {
 					Permanent permanent = game.getPermanent(target);
 					if (permanent != null) {
 						if (!permanent.hasSubtype("Golem")) {
@@ -170,7 +170,7 @@ class PrecursorGolemCopySpellEffect extends OneShotEffect<PrecursorGolemCopySpel
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Spell spell = game.getStack().getSpell(targetPointer.getFirst(source));
+		Spell spell = game.getStack().getSpell(targetPointer.getFirst(game, source));
 		if (spell != null) {
 			SpellAbility sa = spell.getSpellAbility();
 			UUID targetedGolem = (UUID) getValue("targetedGolem");
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/PsychicMiasma.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/PsychicMiasma.java
index 64d3a5926c..d4bd01d6e1 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/PsychicMiasma.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/PsychicMiasma.java
@@ -82,7 +82,7 @@ class PsychicMiasmaEffect1 extends OneShotEffect<PsychicMiasmaEffect1> {
 	
 	@Override
 	public boolean apply(Game game, Ability source) {
-        Player player = game.getPlayer(targetPointer.getFirst(source));
+        Player player = game.getPlayer(targetPointer.getFirst(game, source));
         if (player != null) {
 			TargetDiscard target = new TargetDiscard(player.getId());
 			player.choose(Outcome.Discard, target, source.getSourceId(), game);
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/RustTick.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/RustTick.java
index 9671f20710..bd8f8a8bf1 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/RustTick.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/RustTick.java
@@ -97,7 +97,7 @@ class RustTickTapTargetEffect extends TapTargetEffect {
 	public boolean apply(Game game, Ability source) {
 		Permanent rustTick = game.getPermanent(source.getSourceId());
 		if (rustTick != null) rustTick.clearConnectedCards("HisokasGuard");
-		for (UUID target : targetPointer.getTargets(source)) {
+		for (UUID target : targetPointer.getTargets(game, source)) {
 			Permanent permanent = game.getPermanent(target);
 			if (permanent != null) {
 				rustTick.addConnectedCard("HisokasGuard", permanent.getId());
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/ShapeAnew.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/ShapeAnew.java
index cf349c923a..be7912aa95 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/ShapeAnew.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/ShapeAnew.java
@@ -89,7 +89,7 @@ public class ShapeAnew extends CardImpl<ShapeAnew> {
 
 		@Override
 		public boolean apply(Game game, Ability source) {
-            Permanent sourcePermanent = (Permanent) game.getLastKnownInformation(targetPointer.getFirst(source), Constants.Zone.BATTLEFIELD);
+            Permanent sourcePermanent = (Permanent) game.getLastKnownInformation(targetPointer.getFirst(game, source), Constants.Zone.BATTLEFIELD);
             if (sourcePermanent == null) {
                 return false;
             }
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/VenserTheSojourner.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/VenserTheSojourner.java
index 8b24844a1c..36360f6e16 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/VenserTheSojourner.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/VenserTheSojourner.java
@@ -110,8 +110,8 @@ class VenserTheSojournerEffect extends OneShotEffect<VenserTheSojournerEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		if (getTargetPointer().getFirst(source) != null) {
-			Permanent permanent = game.getPermanent(getTargetPointer().getFirst(source));
+		if (getTargetPointer().getFirst(game, source) != null) {
+			Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source));
 			if (permanent != null) {
 				if (permanent.moveToExile(source.getSourceId(), "Venser, the Sojourner", source.getSourceId(), game)) {
 					//create delayed triggered ability
diff --git a/Mage.Sets/src/mage/sets/shardsofalara/CradleOfVitality.java b/Mage.Sets/src/mage/sets/shardsofalara/CradleOfVitality.java
index 9113dd1cea..4b02222741 100644
--- a/Mage.Sets/src/mage/sets/shardsofalara/CradleOfVitality.java
+++ b/Mage.Sets/src/mage/sets/shardsofalara/CradleOfVitality.java
@@ -124,7 +124,7 @@ class CradleOfVitalityEffect extends OneShotEffect<CradleOfVitalityEffect> {
     public boolean apply(Game game, Ability source) {
     	int affectedTargets = 0;
     	Integer amount = (Integer) getValue("amount");
-		for (UUID uuid : targetPointer.getTargets(source)) {
+		for (UUID uuid : targetPointer.getTargets(game, source)) {
 			Permanent permanent = game.getPermanent(uuid);
 			permanent.addCounters(CounterType.P1P1.createInstance(amount), game);
 			affectedTargets ++;
diff --git a/Mage.Sets/src/mage/sets/tenth/Peek.java b/Mage.Sets/src/mage/sets/tenth/Peek.java
index 62fce094a1..d9462de28e 100644
--- a/Mage.Sets/src/mage/sets/tenth/Peek.java
+++ b/Mage.Sets/src/mage/sets/tenth/Peek.java
@@ -81,7 +81,7 @@ class PeekEffect extends OneShotEffect<PeekEffect> {
     @Override
     public boolean apply(Game game, Ability source) {
         Player controller = game.getPlayer(source.getControllerId());
-        Player player = game.getPlayer(targetPointer.getFirst(source));
+        Player player = game.getPlayer(targetPointer.getFirst(game, source));
         if (player != null && controller != null) {
             controller.lookAtCards("Peek", player.getHand(), game);
         }
diff --git a/Mage.Sets/src/mage/sets/worldwake/ArchonOfRedemption.java b/Mage.Sets/src/mage/sets/worldwake/ArchonOfRedemption.java
index 93ed10c876..59c6de2c1b 100644
--- a/Mage.Sets/src/mage/sets/worldwake/ArchonOfRedemption.java
+++ b/Mage.Sets/src/mage/sets/worldwake/ArchonOfRedemption.java
@@ -126,10 +126,10 @@ class ArchonOfRedemptionEffect extends OneShotEffect<ArchonOfRedemptionEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent p = game.getPermanent(targetPointer.getFirst(source));
+        Permanent p = game.getPermanent(targetPointer.getFirst(game, source));
         Player player = game.getPlayer(source.getControllerId());
         if (p == null) {
-            p = (Permanent) game.getLastKnownInformation(targetPointer.getFirst(source), Constants.Zone.BATTLEFIELD);
+            p = (Permanent) game.getLastKnownInformation(targetPointer.getFirst(game, source), Constants.Zone.BATTLEFIELD);
         }
         if (p != null && player != null) {
             player.gainLife(p.getPower().getValue(), game);
diff --git a/Mage.Sets/src/mage/sets/worldwake/NaturesClaim.java b/Mage.Sets/src/mage/sets/worldwake/NaturesClaim.java
index 40b64160dc..ba0f00faf6 100644
--- a/Mage.Sets/src/mage/sets/worldwake/NaturesClaim.java
+++ b/Mage.Sets/src/mage/sets/worldwake/NaturesClaim.java
@@ -87,7 +87,7 @@ class NaturesClaimEffect extends OneShotEffect<NaturesClaimEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent target = (Permanent) game.getLastKnownInformation(targetPointer.getFirst(source), Constants.Zone.BATTLEFIELD);
+        Permanent target = (Permanent) game.getLastKnownInformation(targetPointer.getFirst(game, source), Constants.Zone.BATTLEFIELD);
         if (target != null) {
             Player player = game.getPlayer(target.getControllerId());
             if (player != null) {
diff --git a/Mage.Sets/src/mage/sets/worldwake/StrengthOfTheTajuru.java b/Mage.Sets/src/mage/sets/worldwake/StrengthOfTheTajuru.java
index bc5f023420..cf8369b0d5 100644
--- a/Mage.Sets/src/mage/sets/worldwake/StrengthOfTheTajuru.java
+++ b/Mage.Sets/src/mage/sets/worldwake/StrengthOfTheTajuru.java
@@ -100,7 +100,7 @@ class StrengthOfTheTajuruAddCountersTargetEffect extends OneShotEffect<StrengthO
         int affectedTargets = 0;
         int amount = source.getManaCostsToPay().getX() + 1;
         Counter counter = CounterType.P1P1.createInstance(amount);
-        for (UUID uuid : targetPointer.getTargets(source)) {
+        for (UUID uuid : targetPointer.getTargets(game, source)) {
             Permanent permanent = game.getPermanent(uuid);
             if (permanent != null) {
                 permanent.addCounters(counter.copy(), game);
diff --git a/Mage.Sets/src/mage/sets/worldwake/WalkingAtlas.java b/Mage.Sets/src/mage/sets/worldwake/WalkingAtlas.java
index 3c3600290c..2549c08008 100644
--- a/Mage.Sets/src/mage/sets/worldwake/WalkingAtlas.java
+++ b/Mage.Sets/src/mage/sets/worldwake/WalkingAtlas.java
@@ -84,7 +84,7 @@ class WalkingAtlasEffect extends OneShotEffect<WalkingAtlasEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Card c = game.getCard(targetPointer.getFirst(source));
+        Card c = game.getCard(targetPointer.getFirst(game, source));
         if (c != null) {
             c.moveToZone(Constants.Zone.BATTLEFIELD, source.getSourceId(), game, false);
             return true;
diff --git a/Mage.Sets/src/mage/sets/zendikar/BlazingTorch.java b/Mage.Sets/src/mage/sets/zendikar/BlazingTorch.java
index 00ac49c931..ac42f2aff3 100644
--- a/Mage.Sets/src/mage/sets/zendikar/BlazingTorch.java
+++ b/Mage.Sets/src/mage/sets/zendikar/BlazingTorch.java
@@ -182,12 +182,12 @@ class BlazingTorchDamageEffect extends OneShotEffect<BlazingTorchDamageEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+        Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
         if (permanent != null && sourceId != null) {
             permanent.damage(2, sourceId, game, true, false);
             return true;
         }
-        Player player = game.getPlayer(targetPointer.getFirst(source));
+        Player player = game.getPlayer(targetPointer.getFirst(game, source));
         if (player != null && sourceId != null) {
             player.damage(2, sourceId, game, false, true);
             return true;
diff --git a/Mage.Sets/src/mage/sets/zendikar/ChandraAblaze.java b/Mage.Sets/src/mage/sets/zendikar/ChandraAblaze.java
index 0a7cd493ed..9d102e4a5a 100644
--- a/Mage.Sets/src/mage/sets/zendikar/ChandraAblaze.java
+++ b/Mage.Sets/src/mage/sets/zendikar/ChandraAblaze.java
@@ -142,13 +142,13 @@ class ChandraAblazeEffect2 extends OneShotEffect<ChandraAblazeEffect2> {
     public boolean apply(Game game, Ability source) {
         Card card = (Card) this.getValue("discardedCard");
         if (card != null && card.getColor().isRed()) {
-            Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+            Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
             if (permanent != null) {
                 permanent.damage(4, source.getSourceId(), game, true, false);
                 return true;
             }
 
-            Player player = game.getPlayer(targetPointer.getFirst(source));
+            Player player = game.getPlayer(targetPointer.getFirst(game, source));
             if (player != null) {
                 player.damage(4, source.getSourceId(), game, false, true);
                 return true;
diff --git a/Mage.Sets/src/mage/sets/zendikar/KhalniGem.java b/Mage.Sets/src/mage/sets/zendikar/KhalniGem.java
index 4feacf5156..b6419b7252 100644
--- a/Mage.Sets/src/mage/sets/zendikar/KhalniGem.java
+++ b/Mage.Sets/src/mage/sets/zendikar/KhalniGem.java
@@ -101,7 +101,7 @@ class KhalniGemReturnToHandTargetEffect extends OneShotEffect<KhalniGemReturnToH
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		for ( UUID target : targetPointer.getTargets(source) ) {
+		for ( UUID target : targetPointer.getTargets(game, source) ) {
 			Permanent permanent = game.getPermanent(target);
 			if ( permanent != null ) {
 				permanent.moveToZone(Zone.HAND, source.getId(), game, true);
diff --git a/Mage.Sets/src/mage/sets/zendikar/MindbreakTrap.java b/Mage.Sets/src/mage/sets/zendikar/MindbreakTrap.java
index eea5cf6bb7..e3fc0ed647 100644
--- a/Mage.Sets/src/mage/sets/zendikar/MindbreakTrap.java
+++ b/Mage.Sets/src/mage/sets/zendikar/MindbreakTrap.java
@@ -172,8 +172,8 @@ class MindbreakEffect extends OneShotEffect<MindbreakEffect>{
     @Override
     public boolean apply(Game game, Ability source) {
         int affectedTargets = 0;
-		if (targetPointer.getTargets(source).size() > 0) {
-			for (UUID spellId : targetPointer.getTargets(source)) {
+		if (targetPointer.getTargets(game, source).size() > 0) {
+			for (UUID spellId : targetPointer.getTargets(game, source)) {
 				Spell spell = game.getStack().getSpell(spellId);
 				if (spell != null) {
 					spell.moveToExile(null, null, source.getId(), game);
diff --git a/Mage.Sets/src/mage/sets/zendikar/SorinMarkov.java b/Mage.Sets/src/mage/sets/zendikar/SorinMarkov.java
index e512453a3d..5e1392e12d 100644
--- a/Mage.Sets/src/mage/sets/zendikar/SorinMarkov.java
+++ b/Mage.Sets/src/mage/sets/zendikar/SorinMarkov.java
@@ -103,7 +103,7 @@ class SorinMarkovEffect extends OneShotEffect<SorinMarkovEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Player player = game.getPlayer(targetPointer.getFirst(source));
+		Player player = game.getPlayer(targetPointer.getFirst(game, source));
 		if (player != null) {
 			player.setLife(10, game);
 			return true;
diff --git a/Mage/src/mage/abilities/common/EntersBattlefieldAbility.java b/Mage/src/mage/abilities/common/EntersBattlefieldAbility.java
index ea1becb40d..7e998c72c8 100644
--- a/Mage/src/mage/abilities/common/EntersBattlefieldAbility.java
+++ b/Mage/src/mage/abilities/common/EntersBattlefieldAbility.java
@@ -40,7 +40,7 @@ import mage.abilities.effects.EntersBattlefieldEffect;
 public class EntersBattlefieldAbility extends StaticAbility<EntersBattlefieldAbility> {
 
 	public EntersBattlefieldAbility(Effect effect) {
-		super(Zone.BATTLEFIELD, new EntersBattlefieldEffect(effect, ""));
+		super(Zone.BATTLEFIELD, new EntersBattlefieldEffect(effect, null));
 	}
 
 	public EntersBattlefieldAbility(Effect effect, String rule) {
diff --git a/Mage/src/mage/abilities/effects/AuraReplacementEffect.java b/Mage/src/mage/abilities/effects/AuraReplacementEffect.java
index e138d7c199..8853345d7d 100644
--- a/Mage/src/mage/abilities/effects/AuraReplacementEffect.java
+++ b/Mage/src/mage/abilities/effects/AuraReplacementEffect.java
@@ -87,7 +87,7 @@ public class AuraReplacementEffect extends ReplacementEffectImpl<AuraReplacement
         if (sourceObject instanceof StackAbility) {
             StackAbility stackAbility = (StackAbility) sourceObject;
             if (!stackAbility.getEffects().isEmpty()) {
-                targetId = stackAbility.getEffects().get(0).getTargetPointer().getFirst(stackAbility);
+                targetId = stackAbility.getEffects().get(0).getTargetPointer().getFirst(game, stackAbility);
             }
         }
         if (targetId == null) {
diff --git a/Mage/src/mage/abilities/effects/EntersBattlefieldEffect.java b/Mage/src/mage/abilities/effects/EntersBattlefieldEffect.java
index 4e5d07daa2..1bd70399a9 100644
--- a/Mage/src/mage/abilities/effects/EntersBattlefieldEffect.java
+++ b/Mage/src/mage/abilities/effects/EntersBattlefieldEffect.java
@@ -107,7 +107,7 @@ public class EntersBattlefieldEffect extends ReplacementEffectImpl<EntersBattlef
 
 	@Override
 	public String getText(Mode mode) {
-		if (text.length() == 0)
+		if (text == null || text.length() == 0)
 			return "{this} enters the battlefield " + baseEffects.getText(mode);
 		else
 			return "{this} enters the battlefield " + text;
diff --git a/Mage/src/mage/abilities/effects/common/CopyTargetSpellEffect.java b/Mage/src/mage/abilities/effects/common/CopyTargetSpellEffect.java
index d8e0876bbd..531a1f6f62 100644
--- a/Mage/src/mage/abilities/effects/common/CopyTargetSpellEffect.java
+++ b/Mage/src/mage/abilities/effects/common/CopyTargetSpellEffect.java
@@ -52,7 +52,7 @@ public class CopyTargetSpellEffect extends OneShotEffect<CopyTargetSpellEffect>
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Spell spell = game.getStack().getSpell(targetPointer.getFirst(source));
+		Spell spell = game.getStack().getSpell(targetPointer.getFirst(game, source));
 		if (spell != null) {
 			Spell copy = spell.copySpell();
 			copy.setControllerId(source.getControllerId());
diff --git a/Mage/src/mage/abilities/effects/common/CounterUnlessPaysEffect.java b/Mage/src/mage/abilities/effects/common/CounterUnlessPaysEffect.java
index c2e6423790..1de6858b0f 100644
--- a/Mage/src/mage/abilities/effects/common/CounterUnlessPaysEffect.java
+++ b/Mage/src/mage/abilities/effects/common/CounterUnlessPaysEffect.java
@@ -62,7 +62,7 @@ public class CounterUnlessPaysEffect extends OneShotEffect<CounterUnlessPaysEffe
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		StackObject spell = game.getStack().getStackObject(targetPointer.getFirst(source));
+		StackObject spell = game.getStack().getStackObject(targetPointer.getFirst(game, source));
 		if (spell != null) {
 			Player player = game.getPlayer(spell.getControllerId());
 			if (player != null) {
diff --git a/Mage/src/mage/abilities/effects/common/CreateTokenTargetEffect.java b/Mage/src/mage/abilities/effects/common/CreateTokenTargetEffect.java
index 555de8a884..eee0d7fed7 100644
--- a/Mage/src/mage/abilities/effects/common/CreateTokenTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/CreateTokenTargetEffect.java
@@ -44,7 +44,7 @@ public class CreateTokenTargetEffect extends OneShotEffect<CreateTokenTargetEffe
 	@Override
 	public boolean apply(Game game, Ability source) {
         int value = amount.calculate(game, source);
-		token.putOntoBattlefield(value, game, source.getSourceId(), targetPointer.getFirst(source));
+		token.putOntoBattlefield(value, game, source.getSourceId(), targetPointer.getFirst(game, source));
 		return true;
 	}
 
diff --git a/Mage/src/mage/abilities/effects/common/DamageTargetEffect.java b/Mage/src/mage/abilities/effects/common/DamageTargetEffect.java
index 57fef8e679..fa268a700f 100644
--- a/Mage/src/mage/abilities/effects/common/DamageTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/DamageTargetEffect.java
@@ -102,12 +102,12 @@ public class DamageTargetEffect extends OneShotEffect<DamageTargetEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+		Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
 		if (permanent != null) {
 			permanent.damage(amount.calculate(game, source), source.getSourceId(), game, preventable, false);
 			return true;
 		}
-		Player player = game.getPlayer(targetPointer.getFirst(source));
+		Player player = game.getPlayer(targetPointer.getFirst(game, source));
 		if (player != null) {
 			player.damage(amount.calculate(game, source), source.getSourceId(), game, false, preventable);
 			return true;
diff --git a/Mage/src/mage/abilities/effects/common/DestroyTargetEffect.java b/Mage/src/mage/abilities/effects/common/DestroyTargetEffect.java
index 63d69154a1..98ca28b0c2 100644
--- a/Mage/src/mage/abilities/effects/common/DestroyTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/DestroyTargetEffect.java
@@ -84,8 +84,8 @@ public class DestroyTargetEffect extends OneShotEffect<DestroyTargetEffect> {
                 }
             }
         }
-        else if (targetPointer.getTargets(source).size() > 0) {
-			for (UUID permanentId : targetPointer.getTargets(source)) {
+        else if (targetPointer.getTargets(game, source).size() > 0) {
+			for (UUID permanentId : targetPointer.getTargets(game, source)) {
 				Permanent permanent = game.getPermanent(permanentId);
 				if (permanent != null) {
 					permanent.destroy(source.getId(), game, noRegen);
diff --git a/Mage/src/mage/abilities/effects/common/DiscardTargetEffect.java b/Mage/src/mage/abilities/effects/common/DiscardTargetEffect.java
index 73c11c16bc..0449445fbd 100644
--- a/Mage/src/mage/abilities/effects/common/DiscardTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/DiscardTargetEffect.java
@@ -77,7 +77,7 @@ public class DiscardTargetEffect extends OneShotEffect<DiscardTargetEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Player player = game.getPlayer(targetPointer.getFirst(source));
+        Player player = game.getPlayer(targetPointer.getFirst(game, source));
         if (player != null) {
 			if (randomDiscard) {
 				int maxAmount = Math.min(amount.calculate(game, source), player.getHand().size());
diff --git a/Mage/src/mage/abilities/effects/common/DrawCardTargetEffect.java b/Mage/src/mage/abilities/effects/common/DrawCardTargetEffect.java
index e6bf33b282..f43de6d379 100644
--- a/Mage/src/mage/abilities/effects/common/DrawCardTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/DrawCardTargetEffect.java
@@ -66,7 +66,7 @@ public class DrawCardTargetEffect extends OneShotEffect<DrawCardTargetEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Player player = game.getPlayer(targetPointer.getFirst(source));
+		Player player = game.getPlayer(targetPointer.getFirst(game, source));
 		if (player != null) {
 			player.drawCards(amount.calculate(game, source), game);
 			return true;
diff --git a/Mage/src/mage/abilities/effects/common/ExileFromZoneTargetEffect.java b/Mage/src/mage/abilities/effects/common/ExileFromZoneTargetEffect.java
index 60282a0d72..6eba2499a4 100644
--- a/Mage/src/mage/abilities/effects/common/ExileFromZoneTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/ExileFromZoneTargetEffect.java
@@ -77,7 +77,7 @@ public class ExileFromZoneTargetEffect extends OneShotEffect<ExileFromZoneTarget
     
 	@Override
 	public boolean apply(Game game, Ability source) {
-        Player player = game.getPlayer(targetPointer.getFirst(source));
+        Player player = game.getPlayer(targetPointer.getFirst(game, source));
         if (player != null) {
             Target target = null;
             switch (zone) {
diff --git a/Mage/src/mage/abilities/effects/common/ExileTargetEffect.java b/Mage/src/mage/abilities/effects/common/ExileTargetEffect.java
index b827b5c9b4..719ce0ff14 100644
--- a/Mage/src/mage/abilities/effects/common/ExileTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/ExileTargetEffect.java
@@ -75,7 +75,7 @@ public class ExileTargetEffect extends OneShotEffect<ExileTargetEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+		Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
 
         if (exileId == null) {
             exileId = getId();
@@ -84,7 +84,7 @@ public class ExileTargetEffect extends OneShotEffect<ExileTargetEffect> {
 		if (permanent != null) {
         	return permanent.moveToExile(exileId, exileZone, source.getSourceId(), game);
 		} else {
-            Card card = game.getCard(targetPointer.getFirst(source));
+            Card card = game.getCard(targetPointer.getFirst(game, source));
             if (card != null) {
                 return card.moveToExile(exileId, exileZone, source.getSourceId(), game);
             }
diff --git a/Mage/src/mage/abilities/effects/common/ExileTargetForSourceEffect.java b/Mage/src/mage/abilities/effects/common/ExileTargetForSourceEffect.java
index d352a7c45d..5ebdb8ec61 100644
--- a/Mage/src/mage/abilities/effects/common/ExileTargetForSourceEffect.java
+++ b/Mage/src/mage/abilities/effects/common/ExileTargetForSourceEffect.java
@@ -66,12 +66,12 @@ public class ExileTargetForSourceEffect extends OneShotEffect<ExileTargetForSour
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+		Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
 		UUID exileId = source.getSourceId();
 		if (permanent != null) {
 			return permanent.moveToExile(exileId, exileZone, source.getId(), game);
 		} else {
-            Card card = game.getCard(targetPointer.getFirst(source));
+            Card card = game.getCard(targetPointer.getFirst(game, source));
             if (card != null) {
                 return card.moveToExile(exileId, exileZone, source.getId(), game);
             }
diff --git a/Mage/src/mage/abilities/effects/common/GainLifeTargetEffect.java b/Mage/src/mage/abilities/effects/common/GainLifeTargetEffect.java
index 9fd754b13a..ff5e29c6b8 100644
--- a/Mage/src/mage/abilities/effects/common/GainLifeTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/GainLifeTargetEffect.java
@@ -61,7 +61,7 @@ public class GainLifeTargetEffect extends OneShotEffect<GainLifeTargetEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		for (UUID playerId: targetPointer.getTargets(source)) {
+		for (UUID playerId: targetPointer.getTargets(game, source)) {
 			Player player = game.getPlayer(playerId);
 			if (player != null) {
 				player.gainLife(life, game);
diff --git a/Mage/src/mage/abilities/effects/common/ImprintTargetEffect.java b/Mage/src/mage/abilities/effects/common/ImprintTargetEffect.java
index 7dad292f47..1b63b3c892 100644
--- a/Mage/src/mage/abilities/effects/common/ImprintTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/ImprintTargetEffect.java
@@ -59,11 +59,11 @@ public class ImprintTargetEffect extends OneShotEffect<ImprintTargetEffect> {
 	public boolean apply(Game game, Ability source) {
         Permanent sourcePermanent = game.getPermanent(source.getSourceId());
         if (sourcePermanent != null) {
-            Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+            Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
             if (permanent != null) {
                 sourcePermanent.imprint(permanent.getId(), game);
             } else {
-                Card card = game.getCard(targetPointer.getFirst(source));
+                Card card = game.getCard(targetPointer.getFirst(game, source));
                 if (card != null) {
                     sourcePermanent.imprint(card.getId(), game);
                 }
diff --git a/Mage/src/mage/abilities/effects/common/LoseLifeControllerEffect.java b/Mage/src/mage/abilities/effects/common/LoseLifeControllerEffect.java
index 40319f1511..fc1b9d69ca 100644
--- a/Mage/src/mage/abilities/effects/common/LoseLifeControllerEffect.java
+++ b/Mage/src/mage/abilities/effects/common/LoseLifeControllerEffect.java
@@ -64,10 +64,10 @@ public class LoseLifeControllerEffect extends OneShotEffect<LoseLifeControllerEf
 
     @Override
     public boolean apply(Game game, Ability source) {
-        MageObject targetCard = game.getLastKnownInformation(targetPointer.getFirst(source), Zone.BATTLEFIELD);
+        MageObject targetCard = game.getLastKnownInformation(targetPointer.getFirst(game, source), Zone.BATTLEFIELD);
 		
 		if ( targetCard == null ) {
-			MageObject obj = game.getObject(targetPointer.getFirst(source));
+			MageObject obj = game.getObject(targetPointer.getFirst(game, source));
 			if ( obj instanceof Card ) {
 				targetCard = (Card)obj;
 			}
diff --git a/Mage/src/mage/abilities/effects/common/LoseLifeTargetEffect.java b/Mage/src/mage/abilities/effects/common/LoseLifeTargetEffect.java
index 835c140d5a..fcf2bb0827 100644
--- a/Mage/src/mage/abilities/effects/common/LoseLifeTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/LoseLifeTargetEffect.java
@@ -66,7 +66,7 @@ public class LoseLifeTargetEffect extends OneShotEffect<LoseLifeTargetEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Player player = game.getPlayer(targetPointer.getFirst(source));
+		Player player = game.getPlayer(targetPointer.getFirst(game, source));
 		if (player != null) {
 			player.loseLife(amount.calculate(game, source), game);
 			return true;
diff --git a/Mage/src/mage/abilities/effects/common/MayTapOrUntapTargetEffect.java b/Mage/src/mage/abilities/effects/common/MayTapOrUntapTargetEffect.java
index 3305ee9d28..99a6c777ba 100644
--- a/Mage/src/mage/abilities/effects/common/MayTapOrUntapTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/MayTapOrUntapTargetEffect.java
@@ -22,7 +22,7 @@ public class MayTapOrUntapTargetEffect extends OneShotEffect<MayTapOrUntapTarget
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent target = game.getPermanent(targetPointer.getFirst(source));
+        Permanent target = game.getPermanent(targetPointer.getFirst(game, source));
         Player player = game.getPlayer(source.getControllerId());
         if (target != null && player != null) {
             if (target.isTapped()) {
diff --git a/Mage/src/mage/abilities/effects/common/PutLibraryIntoGraveTargetEffect.java b/Mage/src/mage/abilities/effects/common/PutLibraryIntoGraveTargetEffect.java
index 2688d52133..8194317290 100644
--- a/Mage/src/mage/abilities/effects/common/PutLibraryIntoGraveTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/PutLibraryIntoGraveTargetEffect.java
@@ -72,7 +72,7 @@ public class PutLibraryIntoGraveTargetEffect extends OneShotEffect<PutLibraryInt
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Player player = game.getPlayer(targetPointer.getFirst(source));
+		Player player = game.getPlayer(targetPointer.getFirst(game, source));
 		if (player != null) {
 			// putting cards to grave shouldn't end the game, so getting minimun available
 			int cardsCount = Math.min(amount.calculate(game, source), player.getLibrary().size());
diff --git a/Mage/src/mage/abilities/effects/common/PutOnLibraryTargetEffect.java b/Mage/src/mage/abilities/effects/common/PutOnLibraryTargetEffect.java
index 5f74a3235b..461aa7507c 100644
--- a/Mage/src/mage/abilities/effects/common/PutOnLibraryTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/PutOnLibraryTargetEffect.java
@@ -65,7 +65,7 @@ public class PutOnLibraryTargetEffect extends OneShotEffect<PutOnLibraryTargetEf
     @Override
     public boolean apply(Game game, Ability source) {
         boolean result = false;
-        for (UUID targetId : targetPointer.getTargets(source)) {
+        for (UUID targetId : targetPointer.getTargets(game, source)) {
             switch (game.getState().getZone(targetId)) {
                 case BATTLEFIELD:
                     Permanent permanent = game.getPermanent(targetId);
diff --git a/Mage/src/mage/abilities/effects/common/PutOntoBattlefieldTargetEffect.java b/Mage/src/mage/abilities/effects/common/PutOntoBattlefieldTargetEffect.java
index b2752ebe96..1118adb5c2 100644
--- a/Mage/src/mage/abilities/effects/common/PutOntoBattlefieldTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/PutOntoBattlefieldTargetEffect.java
@@ -64,7 +64,7 @@ public class PutOntoBattlefieldTargetEffect extends OneShotEffect<PutOntoBattlef
     @Override
     public boolean apply(Game game, Ability source) {
         boolean result = false;
-        for (UUID targetId : targetPointer.getTargets(source)) {
+        for (UUID targetId : targetPointer.getTargets(game, source)) {
             Card card = game.getCard(targetId);
             if (card != null) {
 
diff --git a/Mage/src/mage/abilities/effects/common/RegenerateTargetEffect.java b/Mage/src/mage/abilities/effects/common/RegenerateTargetEffect.java
index 9aed990df5..1d344fddfb 100644
--- a/Mage/src/mage/abilities/effects/common/RegenerateTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/RegenerateTargetEffect.java
@@ -55,7 +55,7 @@ public class RegenerateTargetEffect  extends ReplacementEffectImpl<RegenerateTar
 	@Override
 	public boolean apply(Game game, Ability source) {
 		//20110204 - 701.11
-		Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+		Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
 		if (permanent != null && permanent.regenerate(this.getId(), game)) {
 			this.used = true;
 			return true;
@@ -76,7 +76,7 @@ public class RegenerateTargetEffect  extends ReplacementEffectImpl<RegenerateTar
 	@Override
 	public boolean applies(GameEvent event, Ability source, Game game) {
 		//20110204 - 701.11c - event.getAmount() is used to signal if regeneration is allowed
-		if (event.getType() == EventType.DESTROY_PERMANENT && event.getAmount() == 0 && event.getTargetId().equals(targetPointer.getFirst(source)) && !this.used) {
+		if (event.getType() == EventType.DESTROY_PERMANENT && event.getAmount() == 0 && event.getTargetId().equals(targetPointer.getFirst(game, source)) && !this.used) {
 			return true;
 		}
 		return false;
diff --git a/Mage/src/mage/abilities/effects/common/RemoveFromCombatTargetEffect.java b/Mage/src/mage/abilities/effects/common/RemoveFromCombatTargetEffect.java
index a916732f75..edb067ea31 100644
--- a/Mage/src/mage/abilities/effects/common/RemoveFromCombatTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/RemoveFromCombatTargetEffect.java
@@ -51,7 +51,7 @@ public class RemoveFromCombatTargetEffect extends OneShotEffect<RemoveFromCombat
     
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent permanent = game.getPermanent(targetPointer.getFirst(source));
+        Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
         if (permanent != null) {
             permanent.removeFromCombat(game);
         }
diff --git a/Mage/src/mage/abilities/effects/common/ReturnToBattlefieldUnderYourControlTargetEffect.java b/Mage/src/mage/abilities/effects/common/ReturnToBattlefieldUnderYourControlTargetEffect.java
index be9a21677e..4ed6a5c836 100644
--- a/Mage/src/mage/abilities/effects/common/ReturnToBattlefieldUnderYourControlTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/ReturnToBattlefieldUnderYourControlTargetEffect.java
@@ -57,7 +57,7 @@ public class ReturnToBattlefieldUnderYourControlTargetEffect extends OneShotEffe
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-        Card card = game.getCard(targetPointer.getFirst(source));
+        Card card = game.getCard(targetPointer.getFirst(game, source));
         if (card != null) {
             Zone currentZone = game.getState().getZone(card.getId());
             if (card.putOntoBattlefield(game, currentZone, source.getId(), source.getControllerId())) {
diff --git a/Mage/src/mage/abilities/effects/common/ReturnToHandTargetEffect.java b/Mage/src/mage/abilities/effects/common/ReturnToHandTargetEffect.java
index b30a1c17af..8d65e503f6 100644
--- a/Mage/src/mage/abilities/effects/common/ReturnToHandTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/ReturnToHandTargetEffect.java
@@ -60,7 +60,7 @@ public class ReturnToHandTargetEffect extends OneShotEffect<ReturnToHandTargetEf
     @Override
     public boolean apply(Game game, Ability source) {
         boolean result = false;
-        for (UUID id : targetPointer.getTargets(source)) {
+        for (UUID id : targetPointer.getTargets(game, source)) {
             switch (game.getState().getZone(id)) {
                 case BATTLEFIELD:
                     Permanent permanent = game.getPermanent(id);
diff --git a/Mage/src/mage/abilities/effects/common/SacrificeEffect.java b/Mage/src/mage/abilities/effects/common/SacrificeEffect.java
index 8bd7ac85e2..4294638925 100644
--- a/Mage/src/mage/abilities/effects/common/SacrificeEffect.java
+++ b/Mage/src/mage/abilities/effects/common/SacrificeEffect.java
@@ -73,7 +73,7 @@ public class SacrificeEffect extends OneShotEffect<SacrificeEffect>{
 	
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Player player = game.getPlayer(targetPointer.getFirst(source));
+		Player player = game.getPlayer(targetPointer.getFirst(game, source));
 
         if (player == null) {
             return false;
diff --git a/Mage/src/mage/abilities/effects/common/SacrificeEquippedEffect.java b/Mage/src/mage/abilities/effects/common/SacrificeEquippedEffect.java
index aecd867fa4..fe2c8f951a 100644
--- a/Mage/src/mage/abilities/effects/common/SacrificeEquippedEffect.java
+++ b/Mage/src/mage/abilities/effects/common/SacrificeEquippedEffect.java
@@ -60,7 +60,7 @@ public class SacrificeEquippedEffect extends OneShotEffect<SacrificeEquippedEffe
 	public boolean apply(Game game, Ability source) {
 		Permanent equipment = game.getPermanent(source.getSourceId());
 		if (equipment != null && equipment.getAttachedTo() != null) {
-			UUID uuid = getTargetPointer().getFirst(source);
+			UUID uuid = getTargetPointer().getFirst(game, source);
 			Permanent permanent = game.getPermanent(uuid);
 			if (permanent == null) {
 				permanent = game.getPermanent(equipment.getAttachedTo());
diff --git a/Mage/src/mage/abilities/effects/common/SacrificeTargetEffect.java b/Mage/src/mage/abilities/effects/common/SacrificeTargetEffect.java
index c1e2e2b96f..6be944db91 100644
--- a/Mage/src/mage/abilities/effects/common/SacrificeTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/SacrificeTargetEffect.java
@@ -63,7 +63,7 @@ public class SacrificeTargetEffect extends OneShotEffect<SacrificeTargetEffect>
 	@Override
 	public boolean apply(Game game, Ability source) {
 		int affectedTargets = 0;
-		for (UUID permanentId : targetPointer.getTargets(source)) {
+		for (UUID permanentId : targetPointer.getTargets(game, source)) {
 			Permanent permanent = game.getPermanent(permanentId);
 			if (permanent != null) {
 				permanent.sacrifice(source.getSourceId(), game);
diff --git a/Mage/src/mage/abilities/effects/common/SkipNextPlayerUntapStepEffect.java b/Mage/src/mage/abilities/effects/common/SkipNextPlayerUntapStepEffect.java
index 619c4a0131..a50c952021 100644
--- a/Mage/src/mage/abilities/effects/common/SkipNextPlayerUntapStepEffect.java
+++ b/Mage/src/mage/abilities/effects/common/SkipNextPlayerUntapStepEffect.java
@@ -60,7 +60,7 @@ public class SkipNextPlayerUntapStepEffect extends OneShotEffect<SkipNextPlayerU
 	@Override
 	public boolean apply(Game game, Ability source) {
                 if (targetPointer != null) {
-                        Player player = game.getPlayer(targetPointer.getFirst(source));
+                        Player player = game.getPlayer(targetPointer.getFirst(game, source));
                         if (player != null) {
                                 game.getState().getTurnMods().add(new TurnMod(player.getId(), PhaseStep.UNTAP));
                                 return true;
diff --git a/Mage/src/mage/abilities/effects/common/SkipNextUntapTargetEffect.java b/Mage/src/mage/abilities/effects/common/SkipNextUntapTargetEffect.java
index 0484c5d9ec..6535ab6a14 100644
--- a/Mage/src/mage/abilities/effects/common/SkipNextUntapTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/SkipNextUntapTargetEffect.java
@@ -79,7 +79,7 @@ public class SkipNextUntapTargetEffect extends ReplacementEffectImpl<SkipNextUnt
 
 	@Override
 	public boolean replaceEvent(GameEvent event, Ability source, Game game) {
-		if (targetPointer.getTargets(source).size() < 2) {
+		if (targetPointer.getTargets(game, source).size() < 2) {
 			used = true;
 		} else {
 			count++;
@@ -87,7 +87,7 @@ public class SkipNextUntapTargetEffect extends ReplacementEffectImpl<SkipNextUnt
 		// not clear how to turn off the effect for more than one target
 		// especially as some targets may leave the battlefield since the effect creation
 		// so handling this in applies method is the only option for now for such cases
-		if (count == targetPointer.getTargets(source).size()) {
+		if (count == targetPointer.getTargets(game, source).size()) {
 			// this won't work for targets disappeared before applies() return true
 			used = true;
 		}
@@ -97,7 +97,7 @@ public class SkipNextUntapTargetEffect extends ReplacementEffectImpl<SkipNextUnt
 	@Override
 	public boolean applies(GameEvent event, Ability source, Game game) {
 		if (game.getTurn().getStepType() == PhaseStep.UNTAP && event.getType() == EventType.UNTAP) {
-            for (UUID target : targetPointer.getTargets(source)) {
+            for (UUID target : targetPointer.getTargets(game, source)) {
                 if (event.getTargetId().equals(target)) {
                     if (!usedFor.contains(target)) {
                         usedFor.add(target);
diff --git a/Mage/src/mage/abilities/effects/common/TapTargetEffect.java b/Mage/src/mage/abilities/effects/common/TapTargetEffect.java
index 094ac46332..6bb32ca8c4 100644
--- a/Mage/src/mage/abilities/effects/common/TapTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/TapTargetEffect.java
@@ -63,7 +63,7 @@ public class TapTargetEffect extends OneShotEffect<TapTargetEffect> {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        for (UUID target : targetPointer.getTargets(source)) {
+        for (UUID target : targetPointer.getTargets(game, source)) {
             Permanent permanent = game.getPermanent(target);
             if (permanent != null) {
                 permanent.tap(game);
diff --git a/Mage/src/mage/abilities/effects/common/UntapTargetEffect.java b/Mage/src/mage/abilities/effects/common/UntapTargetEffect.java
index 9261b6f4c2..2073c9351d 100644
--- a/Mage/src/mage/abilities/effects/common/UntapTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/UntapTargetEffect.java
@@ -58,7 +58,7 @@ public class UntapTargetEffect extends OneShotEffect<UntapTargetEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		for (UUID target: targetPointer.getTargets(source)) {
+		for (UUID target: targetPointer.getTargets(game, source)) {
 			Permanent permanent = game.getPermanent(target);
 			if (permanent != null) {
 				permanent.untap(game);
diff --git a/Mage/src/mage/abilities/effects/common/continious/AddCardSubTypeTargetEffect.java b/Mage/src/mage/abilities/effects/common/continious/AddCardSubTypeTargetEffect.java
index 1b1b42e457..dc1df2dbda 100644
--- a/Mage/src/mage/abilities/effects/common/continious/AddCardSubTypeTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/continious/AddCardSubTypeTargetEffect.java
@@ -53,7 +53,7 @@ public class AddCardSubTypeTargetEffect extends ContinuousEffectImpl<AddCardSubT
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent target = game.getPermanent(targetPointer.getFirst(source));
+        Permanent target = game.getPermanent(targetPointer.getFirst(game, source));
         if (target != null) {
             if (!target.hasSubtype(addedSubType)) {
                 target.getSubtype().add(addedSubType);
diff --git a/Mage/src/mage/abilities/effects/common/continious/AddCardTypeTargetEffect.java b/Mage/src/mage/abilities/effects/common/continious/AddCardTypeTargetEffect.java
index eae140076c..2f5d11d10e 100644
--- a/Mage/src/mage/abilities/effects/common/continious/AddCardTypeTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/continious/AddCardTypeTargetEffect.java
@@ -53,7 +53,7 @@ public class AddCardTypeTargetEffect extends ContinuousEffectImpl<AddCardTypeTar
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Permanent target = game.getPermanent(targetPointer.getFirst(source));
+        Permanent target = game.getPermanent(targetPointer.getFirst(game, source));
         if (target != null) {
             if (!target.getCardType().contains(addedCardType))
                 target.getCardType().add(addedCardType);
diff --git a/Mage/src/mage/abilities/effects/common/continious/BecomesCreatureTargetEffect.java b/Mage/src/mage/abilities/effects/common/continious/BecomesCreatureTargetEffect.java
index 7766a8e955..d8e567c9bd 100644
--- a/Mage/src/mage/abilities/effects/common/continious/BecomesCreatureTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/continious/BecomesCreatureTargetEffect.java
@@ -68,7 +68,7 @@ public class BecomesCreatureTargetEffect extends ContinuousEffectImpl<BecomesCre
     @Override
     public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) {
         boolean result = false;
-        for (UUID permanentId : targetPointer.getTargets(source)) {
+        for (UUID permanentId : targetPointer.getTargets(game, source)) {
             Permanent permanent = game.getPermanent(permanentId);
             if (permanent != null) {
                 switch (layer) {
diff --git a/Mage/src/mage/abilities/effects/common/continious/BoostTargetEffect.java b/Mage/src/mage/abilities/effects/common/continious/BoostTargetEffect.java
index 340da3b6a2..82f587a7a4 100644
--- a/Mage/src/mage/abilities/effects/common/continious/BoostTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/continious/BoostTargetEffect.java
@@ -27,7 +27,6 @@
  */
 package mage.abilities.effects.common.continious;
 
-import java.util.UUID;
 import mage.Constants.Duration;
 import mage.Constants.Layer;
 import mage.Constants.Outcome;
@@ -41,6 +40,8 @@ import mage.game.Game;
 import mage.game.permanent.Permanent;
 import mage.target.Target;
 
+import java.util.UUID;
+
 /**
  *
  * @author BetaSteward_at_googlemail.com
@@ -88,12 +89,13 @@ public class BoostTargetEffect extends ContinuousEffectImpl<BoostTargetEffect> {
             power = new StaticValue(power.calculate(game, source));
             toughness = new StaticValue(toughness.calculate(game, source));
         }
+        targetPointer.init(game, source);
     }
     
     @Override
     public boolean apply(Game game, Ability source) {
         int affectedTargets = 0;
-        for (UUID permanentId : targetPointer.getTargets(source)) {
+        for (UUID permanentId : targetPointer.getTargets(game, source)) {
             Permanent target = (Permanent) game.getPermanent(permanentId);
             if (target != null) {
                 target.addPower(power.calculate(game, source));
diff --git a/Mage/src/mage/abilities/effects/common/continious/GainAbilityTargetEffect.java b/Mage/src/mage/abilities/effects/common/continious/GainAbilityTargetEffect.java
index 22401b0fab..9f9713e6b7 100644
--- a/Mage/src/mage/abilities/effects/common/continious/GainAbilityTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/continious/GainAbilityTargetEffect.java
@@ -33,13 +33,13 @@ import mage.Constants.Layer;
 import mage.Constants.Outcome;
 import mage.Constants.SubLayer;
 import mage.abilities.Ability;
+import mage.abilities.Mode;
 import mage.abilities.effects.ContinuousEffectImpl;
 import mage.game.Game;
 import mage.game.permanent.Permanent;
+import mage.target.Target;
 
 import java.util.UUID;
-import mage.abilities.Mode;
-import mage.target.Target;
 
 /**
  *
@@ -65,10 +65,16 @@ public class GainAbilityTargetEffect extends ContinuousEffectImpl<GainAbilityTar
 		return new GainAbilityTargetEffect(this);
 	}
 
+    @Override
+    public void init(Ability source, Game game) {
+        super.init(source, game);
+        targetPointer.init(game, source);
+    }
+
 	@Override
 	public boolean apply(Game game, Ability source) {
 		int affectedTargets = 0;
-		for (UUID permanentId : targetPointer.getTargets(source)) {
+		for (UUID permanentId : targetPointer.getTargets(game, source)) {
 			Permanent permanent = game.getPermanent(permanentId);
 			if (permanent != null) {
 				permanent.addAbility(ability, game);
diff --git a/Mage/src/mage/abilities/effects/common/continious/LoseAllAbilitiesTargetEffect.java b/Mage/src/mage/abilities/effects/common/continious/LoseAllAbilitiesTargetEffect.java
index e496e5fdcb..32b02a35a7 100644
--- a/Mage/src/mage/abilities/effects/common/continious/LoseAllAbilitiesTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/continious/LoseAllAbilitiesTargetEffect.java
@@ -62,7 +62,7 @@ public class LoseAllAbilitiesTargetEffect extends ContinuousEffectImpl {
 	@Override
 	public boolean apply(Game game, Ability source) {
 		int affectedTargets = 0;
-		for (UUID permanentId : targetPointer.getTargets(source)) {
+		for (UUID permanentId : targetPointer.getTargets(game, source)) {
 			Permanent permanent = game.getPermanent(permanentId);
 			if (permanent != null) {
 				permanent.getAbilities().clear();
diff --git a/Mage/src/mage/abilities/effects/common/counter/AddCountersTargetEffect.java b/Mage/src/mage/abilities/effects/common/counter/AddCountersTargetEffect.java
index 1a8d31e928..92ec607c90 100644
--- a/Mage/src/mage/abilities/effects/common/counter/AddCountersTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/counter/AddCountersTargetEffect.java
@@ -64,7 +64,7 @@ public class AddCountersTargetEffect extends OneShotEffect<AddCountersTargetEffe
 	@Override
 	public boolean apply(Game game, Ability source) {
 		int affectedTargets = 0;
-		for (UUID uuid : targetPointer.getTargets(source)) {
+		for (UUID uuid : targetPointer.getTargets(game, source)) {
 			Permanent permanent = game.getPermanent(uuid);
 			if (permanent != null) {
 				if (counter != null) {
diff --git a/Mage/src/mage/abilities/effects/common/counter/AddPoisonCounterTargetEffect.java b/Mage/src/mage/abilities/effects/common/counter/AddPoisonCounterTargetEffect.java
index e8a7a4e6dd..6c9828bd6c 100644
--- a/Mage/src/mage/abilities/effects/common/counter/AddPoisonCounterTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/counter/AddPoisonCounterTargetEffect.java
@@ -64,7 +64,7 @@ public class AddPoisonCounterTargetEffect extends OneShotEffect<AddPoisonCounter
 
     @Override
     public boolean apply(Game game, Ability source) {
-        Player player = game.getPlayer(targetPointer.getFirst(source));
+        Player player = game.getPlayer(targetPointer.getFirst(game, source));
         if (player != null) {
             player.addCounters(CounterType.POISON.createInstance(amount), game);
             return true;
diff --git a/Mage/src/mage/target/targetpointer/FirstTargetPointer.java b/Mage/src/mage/target/targetpointer/FirstTargetPointer.java
index cfdd902088..04d2d24e00 100644
--- a/Mage/src/mage/target/targetpointer/FirstTargetPointer.java
+++ b/Mage/src/mage/target/targetpointer/FirstTargetPointer.java
@@ -1,33 +1,72 @@
 package mage.target.targetpointer;
 
 import mage.abilities.Ability;
+import mage.cards.Card;
+import mage.game.Game;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
 
 public class FirstTargetPointer implements TargetPointer {
-    private static FirstTargetPointer instance = new FirstTargetPointer();
+
+    private Map<UUID, Integer> zoneChangeCounter = new HashMap<UUID, Integer>();
 
     public static FirstTargetPointer getInstance() {
-        return instance;
+        return new FirstTargetPointer();
+    }
+
+    public FirstTargetPointer() {
+    }
+
+    public FirstTargetPointer(FirstTargetPointer firstTargetPointer) {
+        this.zoneChangeCounter = new HashMap<UUID, Integer>();
+        for (Map.Entry<UUID, Integer> entry : firstTargetPointer.zoneChangeCounter.entrySet()) {
+            this.zoneChangeCounter.put(entry.getKey(), entry.getValue());
+        }
     }
 
     @Override
-    public List<UUID> getTargets(Ability source) {
+    public void init(Game game, Ability source) {
+        if (source.getTargets().size() > 0) {
+            for (UUID target : source.getTargets().get(0).getTargets()) {
+                Card card = game.getCard(target);
+                if (card != null) {
+                    this.zoneChangeCounter.put(target, card.getZoneChangeCounter());
+                }    
+            }
+        }
+    }
+
+    @Override
+    public List<UUID> getTargets(Game game, Ability source) {
         ArrayList<UUID> target = new ArrayList<UUID>();
-        if (source.getTargets().size() > 0)
-            target.addAll(source.getTargets().get(0).getTargets());
+        if (source.getTargets().size() > 0) {
+            for (UUID targetId : source.getTargets().get(0).getTargets()) {
+                Card card = game.getCard(targetId);
+                if (card != null && zoneChangeCounter.containsKey(targetId)
+                        && card.getZoneChangeCounter() != zoneChangeCounter.get(targetId)) {
+                    continue;
+                }
+                target.add(targetId);
+            }
+        }
         return target;
     }
 
     @Override
-    public UUID getFirst(Ability source) {
-        return source.getFirstTarget();
+    public UUID getFirst(Game game, Ability source) {
+        UUID targetId = source.getFirstTarget();
+        if (zoneChangeCounter.containsKey(targetId)) {
+            Card card = game.getCard(targetId);
+            if (card != null && zoneChangeCounter.containsKey(targetId)
+                        && card.getZoneChangeCounter() != zoneChangeCounter.get(targetId)) {
+                return null;
+            }
+        }
+        return targetId;
     }
 
     @Override
     public TargetPointer copy() {
-        return instance;
+        return new FirstTargetPointer(this);
     }
 }
diff --git a/Mage/src/mage/target/targetpointer/FixedTarget.java b/Mage/src/mage/target/targetpointer/FixedTarget.java
index 1f3c8266b1..d23972e75e 100644
--- a/Mage/src/mage/target/targetpointer/FixedTarget.java
+++ b/Mage/src/mage/target/targetpointer/FixedTarget.java
@@ -1,6 +1,8 @@
 package mage.target.targetpointer;
 
 import mage.abilities.Ability;
+import mage.cards.Card;
+import mage.game.Game;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -8,6 +10,7 @@ import java.util.UUID;
 
 public class FixedTarget implements TargetPointer {
     private UUID target;
+    private int zoneChangeCounter;
 
     public FixedTarget(UUID target) {
         this.target = target;
@@ -15,17 +18,42 @@ public class FixedTarget implements TargetPointer {
 
     public FixedTarget(final FixedTarget fixedTarget) {
         this.target = fixedTarget.target;
+        this.zoneChangeCounter = fixedTarget.zoneChangeCounter;
     }
 
     @Override
-    public List<UUID> getTargets(Ability source) {
+    public void init(Game game, Ability source) {
+        Card card = game.getCard(target);
+        if (card != null) {
+            this.zoneChangeCounter = card.getZoneChangeCounter();
+        }
+    }
+
+    @Override
+    public List<UUID> getTargets(Game game, Ability source) {
+        // check target not changed zone
+        if (this.zoneChangeCounter > 0) { // will be zero if not defined in init
+            Card card = game.getCard(target);
+            if (card != null && card.getZoneChangeCounter() != this.zoneChangeCounter) {
+                return new ArrayList<UUID>(); // return empty
+            }
+        }
+
         ArrayList<UUID> list = new ArrayList<UUID>(1);
         list.add(target);
         return list;
     }
 
     @Override
-    public UUID getFirst(Ability source) {
+    public UUID getFirst(Game game, Ability source) {
+        // check target not changed zone
+        if (this.zoneChangeCounter > 0) { // will be zero if not defined in init
+            Card card = game.getCard(target);
+            if (card != null && card.getZoneChangeCounter() != this.zoneChangeCounter) {
+                return null;
+            }
+        }
+
         return target;
     }
 
diff --git a/Mage/src/mage/target/targetpointer/TargetPointer.java b/Mage/src/mage/target/targetpointer/TargetPointer.java
index caf9ce7b9f..545b018924 100644
--- a/Mage/src/mage/target/targetpointer/TargetPointer.java
+++ b/Mage/src/mage/target/targetpointer/TargetPointer.java
@@ -1,13 +1,15 @@
 package mage.target.targetpointer;
 
-import java.io.Serializable;
 import mage.abilities.Ability;
+import mage.game.Game;
 
+import java.io.Serializable;
 import java.util.List;
 import java.util.UUID;
 
 public interface TargetPointer extends Serializable {
-    List<UUID> getTargets(Ability source);
-    UUID getFirst(Ability source);
+    void init(Game game, Ability source);
+    List<UUID> getTargets(Game game, Ability source);
+    UUID getFirst(Game game, Ability source);
     TargetPointer copy();
 }