diff --git a/Mage.Sets/src/mage/sets/alarareborn/FieldmistBorderpost.java b/Mage.Sets/src/mage/sets/alarareborn/FieldmistBorderpost.java
index 9ecfaf466a..fd91cace66 100644
--- a/Mage.Sets/src/mage/sets/alarareborn/FieldmistBorderpost.java
+++ b/Mage.Sets/src/mage/sets/alarareborn/FieldmistBorderpost.java
@@ -34,7 +34,7 @@ import mage.constants.CardType;
 import mage.constants.Rarity;
 import mage.abilities.common.EntersBattlefieldTappedAbility;
 import mage.abilities.costs.AlternativeCostSourceAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.mana.BlueManaAbility;
 import mage.abilities.mana.WhiteManaAbility;
@@ -64,7 +64,7 @@ public class FieldmistBorderpost extends CardImpl {
 
         // You may pay {1} and return a basic land you control to its owner's hand rather than pay Fieldmist Borderpost's mana cost.
         Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1));
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
         this.addAbility(ability);
 
         // Fieldmist Borderpost enters the battlefield tapped.
diff --git a/Mage.Sets/src/mage/sets/alarareborn/FirewildBorderpost.java b/Mage.Sets/src/mage/sets/alarareborn/FirewildBorderpost.java
index 267c0a914e..586307655c 100644
--- a/Mage.Sets/src/mage/sets/alarareborn/FirewildBorderpost.java
+++ b/Mage.Sets/src/mage/sets/alarareborn/FirewildBorderpost.java
@@ -32,7 +32,7 @@ import java.util.UUID;
 import mage.abilities.Ability;
 import mage.abilities.common.EntersBattlefieldTappedAbility;
 import mage.abilities.costs.AlternativeCostSourceAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.mana.GreenManaAbility;
 import mage.abilities.mana.RedManaAbility;
@@ -64,7 +64,7 @@ public class FirewildBorderpost extends CardImpl {
 
         // You may pay {1} and return a basic land you control to its owner's hand rather than pay Firewild Borderpost's mana cost.
         Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1));
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
         this.addAbility(ability);
 
         // Veinfire Firewild enters the battlefield tapped.
diff --git a/Mage.Sets/src/mage/sets/alarareborn/MistveinBorderpost.java b/Mage.Sets/src/mage/sets/alarareborn/MistveinBorderpost.java
index 58e6aa5707..dc01e983b5 100644
--- a/Mage.Sets/src/mage/sets/alarareborn/MistveinBorderpost.java
+++ b/Mage.Sets/src/mage/sets/alarareborn/MistveinBorderpost.java
@@ -34,7 +34,7 @@ import mage.constants.CardType;
 import mage.constants.Rarity;
 import mage.abilities.common.EntersBattlefieldTappedAbility;
 import mage.abilities.costs.AlternativeCostSourceAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.mana.BlackManaAbility;
 import mage.abilities.mana.BlueManaAbility;
@@ -64,7 +64,7 @@ public class MistveinBorderpost extends CardImpl {
 
         // You may pay {1} and return a basic land you control to its owner's hand rather than pay Mistvein Borderpost's mana cost.
         Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1));
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
         this.addAbility(ability);
 
          // Mistvein Borderpost enters the battlefield tapped.
diff --git a/Mage.Sets/src/mage/sets/alarareborn/VeinfireBorderpost.java b/Mage.Sets/src/mage/sets/alarareborn/VeinfireBorderpost.java
index a7abd65d07..29ca354d0c 100644
--- a/Mage.Sets/src/mage/sets/alarareborn/VeinfireBorderpost.java
+++ b/Mage.Sets/src/mage/sets/alarareborn/VeinfireBorderpost.java
@@ -34,7 +34,7 @@ import mage.constants.CardType;
 import mage.constants.Rarity;
 import mage.abilities.common.EntersBattlefieldTappedAbility;
 import mage.abilities.costs.AlternativeCostSourceAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.mana.BlackManaAbility;
 import mage.abilities.mana.RedManaAbility;
@@ -64,7 +64,7 @@ public class VeinfireBorderpost extends CardImpl {
 
         // You may pay {1} and return a basic land you control to its owner's hand rather than pay Veinfire Borderpost's mana cost.
         Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1));
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
         this.addAbility(ability);
 
         // Veinfire Borderpost enters the battlefield tapped.
diff --git a/Mage.Sets/src/mage/sets/alarareborn/WildfieldBorderpost.java b/Mage.Sets/src/mage/sets/alarareborn/WildfieldBorderpost.java
index 8d04da457d..2015f45f10 100644
--- a/Mage.Sets/src/mage/sets/alarareborn/WildfieldBorderpost.java
+++ b/Mage.Sets/src/mage/sets/alarareborn/WildfieldBorderpost.java
@@ -34,7 +34,7 @@ import mage.constants.CardType;
 import mage.constants.Rarity;
 import mage.abilities.common.EntersBattlefieldTappedAbility;
 import mage.abilities.costs.AlternativeCostSourceAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.mana.GreenManaAbility;
 import mage.abilities.mana.WhiteManaAbility;
@@ -64,7 +64,7 @@ public class WildfieldBorderpost extends CardImpl {
 
         // You may pay {1} and return a basic land you control to its owner's hand rather than pay Wildfield Borderpost's mana cost.
         Ability ability = new AlternativeCostSourceAbility(new GenericManaCost(1));
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
         this.addAbility(ability);
 
         // Wildfield Borderpost enters the battlefield tapped.
diff --git a/Mage.Sets/src/mage/sets/apocalypse/UnnaturalSelection.java b/Mage.Sets/src/mage/sets/apocalypse/UnnaturalSelection.java
new file mode 100644
index 0000000000..c439ca1d41
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/apocalypse/UnnaturalSelection.java
@@ -0,0 +1,129 @@
+/*
+ *  Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without modification, are
+ *  permitted provided that the following conditions are met:
+ *
+ *     1. Redistributions of source code must retain the above copyright notice, this list of
+ *        conditions and the following disclaimer.
+ *
+ *     2. Redistributions in binary form must reproduce the above copyright notice, this list
+ *        of conditions and the following disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ *  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ *  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ *  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ *  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *  The views and conclusions contained in the software and documentation are those of the
+ *  authors and should not be interpreted as representing official policies, either expressed
+ *  or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.sets.apocalypse;
+
+import java.util.Set;
+import java.util.UUID;
+
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.mana.GenericManaCost;
+import mage.abilities.effects.ContinuousEffect;
+import mage.abilities.effects.Effect;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.continuous.BecomesSubtypeTargetEffect;
+import mage.cards.CardImpl;
+import mage.cards.repository.CardRepository;
+import mage.choices.Choice;
+import mage.choices.ChoiceImpl;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Outcome;
+import mage.constants.Rarity;
+import mage.constants.Zone;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+import mage.players.Player;
+import mage.target.common.TargetCreaturePermanent;
+import mage.target.targetpointer.FixedTarget;
+
+/**
+ *
+ * @author EvilGeek
+ */
+public class UnnaturalSelection extends CardImpl {
+
+    public UnnaturalSelection(UUID ownerId) {
+        super(ownerId, 32, "Unnatural Selection", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}");
+        this.expansionSetCode = "APC";
+
+        // {1}: Choose a creature type other than Wall. Target creature becomes that type until end of turn.
+        Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UnnaturalSelectionEffect(), new GenericManaCost(1));
+        ability.addTarget(new TargetCreaturePermanent());
+        this.addAbility(ability);
+    }
+
+    public UnnaturalSelection(final UnnaturalSelection card) {
+        super(card);
+    }
+
+    @Override
+    public UnnaturalSelection copy() {
+        return new UnnaturalSelection(this);
+    }
+}
+
+class UnnaturalSelectionEffect extends OneShotEffect {
+
+	public UnnaturalSelectionEffect() {
+		super(Outcome.BoostCreature);
+		staticText = "choose a creature type other than wall, target creature's type becomes that type until end of turn";
+	}
+	
+	public UnnaturalSelectionEffect(final UnnaturalSelectionEffect effect) {
+        super(effect);
+    }
+
+	@Override
+	public boolean apply(Game game, Ability source) {
+		Player player = game.getPlayer(source.getControllerId());
+        Permanent permanent = game.getPermanent(source.getSourceId());
+        String chosenType = "";
+        if (player != null && permanent != null) {
+            Choice typeChoice = new ChoiceImpl(true);
+            typeChoice.setMessage("Choose creature type other than Wall");
+            Set<String> types = CardRepository.instance.getCreatureTypes();
+            types.remove("Wall");
+            typeChoice.setChoices(types);
+            while (!player.choose(Outcome.BoostCreature, typeChoice, game)) {
+                if (!player.isInGame()) {
+                    return false;
+                }
+            }
+            game.informPlayers(permanent.getName() + ": " + player.getLogName() + " has chosen " + typeChoice.getChoice());
+            chosenType = typeChoice.getChoice();
+            if (chosenType != null && !chosenType.isEmpty()) {
+                // ADD TYPE TO TARGET
+                ContinuousEffect effect = new BecomesSubtypeTargetEffect(Duration.EndOfTurn, chosenType);
+                effect.setTargetPointer(new FixedTarget(getTargetPointer().getFirst(game, source)));
+                game.addEffect(effect, source);
+                return true;
+            }
+            
+        }
+        return false;
+	}
+
+	@Override
+	public Effect copy() {
+		return new UnnaturalSelectionEffect(this);
+	}
+
+	
+	
+}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/Floodbringer.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/Floodbringer.java
index 99e07d6724..fa8a52c123 100644
--- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/Floodbringer.java
+++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/Floodbringer.java
@@ -31,7 +31,7 @@ import java.util.UUID;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.effects.common.TapTargetEffect;
 import mage.abilities.keyword.FlyingAbility;
@@ -64,7 +64,7 @@ public class Floodbringer extends CardImpl {
 
         // {2}, Return a land you control to its owner's hand: Tap target land.
         Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new GenericManaCost(2));
-        ReturnToHandTargetCost cost = new ReturnToHandTargetCost(new TargetControlledPermanent(filter));
+        ReturnToHandTargetPermanentCost cost = new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter));
         cost.setText("Return a land you control to its owner's hand");
         ability.addCost(cost);
         ability.addTarget(new TargetLandPermanent());
diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/SoratamiMindsweeper.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/SoratamiMindsweeper.java
index cd61b92334..141dfacf5e 100644
--- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/SoratamiMindsweeper.java
+++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/SoratamiMindsweeper.java
@@ -31,7 +31,7 @@ import java.util.UUID;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.ManaCostsImpl;
 import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect;
 import mage.abilities.keyword.FlyingAbility;
@@ -66,7 +66,7 @@ public class SoratamiMindsweeper extends CardImpl {
         // {2}, Return a land you control to its owner's hand: Target player puts the top two cards of his or her library into his or her graveyard.
         Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,new PutLibraryIntoGraveTargetEffect(2), new ManaCostsImpl("{2}"));
         ability.addTarget(new TargetPlayer());
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
         this.addAbility(ability);
     }
 
diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/VeilOfSecrecy.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/VeilOfSecrecy.java
index a7b0c1e329..c0184c3793 100644
--- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/VeilOfSecrecy.java
+++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/VeilOfSecrecy.java
@@ -29,7 +29,7 @@ package mage.sets.betrayersofkamigawa;
 
 import java.util.UUID;
 import mage.ObjectColor;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.Effect;
 import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
 import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
@@ -71,7 +71,7 @@ public class VeilOfSecrecy extends CardImpl {
         this.getSpellAbility().addEffect(effect);
         
         // Splice onto Arcane-Return a blue creature you control to its owner's hand.
-        this.addAbility(new SpliceOntoArcaneAbility(new ReturnToHandTargetCost(new TargetControlledCreaturePermanent(filter))));
+        this.addAbility(new SpliceOntoArcaneAbility(new ReturnToHandTargetPermanentCost(new TargetControlledCreaturePermanent(filter))));
     }
 
     public VeilOfSecrecy(final VeilOfSecrecy card) {
diff --git a/Mage.Sets/src/mage/sets/bornofthegods/FloodtideSerpent.java b/Mage.Sets/src/mage/sets/bornofthegods/FloodtideSerpent.java
index efcdd29219..1b0262eedf 100644
--- a/Mage.Sets/src/mage/sets/bornofthegods/FloodtideSerpent.java
+++ b/Mage.Sets/src/mage/sets/bornofthegods/FloodtideSerpent.java
@@ -31,7 +31,7 @@ import java.util.UUID;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.ReplacementEffectImpl;
 import mage.cards.CardImpl;
 import mage.constants.CardType;
@@ -98,7 +98,7 @@ class FloodtideSerpentReplacementEffect extends ReplacementEffectImpl {
     public boolean replaceEvent(GameEvent event, Ability source, Game game) {
         Player player = game.getPlayer(event.getPlayerId());
         if ( player != null ) {
-            ReturnToHandTargetCost attackCost = new ReturnToHandTargetCost(new TargetControlledPermanent(filter));
+            ReturnToHandTargetPermanentCost attackCost = new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter));
             if ( attackCost.canPay(source, source.getSourceId(), event.getPlayerId(), game) &&
                  player.chooseUse(Outcome.Neutral, "Return an enchantment you control to hand to attack?", game) )
             {
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/MelokuTheCloudedMirror.java b/Mage.Sets/src/mage/sets/championsofkamigawa/MelokuTheCloudedMirror.java
index 3faf6dc014..d4e8b1e569 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/MelokuTheCloudedMirror.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/MelokuTheCloudedMirror.java
@@ -35,7 +35,7 @@ import mage.constants.Zone;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.effects.common.CreateTokenEffect;
 import mage.abilities.keyword.FlyingAbility;
@@ -66,7 +66,7 @@ public class MelokuTheCloudedMirror extends CardImpl {
         
         // {1}, Return a land you control to its owner's hand: Put a 1/1 blue Illusion creature token with flying onto the battlefield.
         Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new MelokuTheCloudedMirrorToken(), 1), new GenericManaCost(1));
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
         this.addAbility(ability);
     }
 
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiCloudskater.java b/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiCloudskater.java
index d05d161317..bbcd6a5665 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiCloudskater.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiCloudskater.java
@@ -35,7 +35,7 @@ import mage.constants.Zone;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.effects.common.DrawDiscardControllerEffect;
 import mage.abilities.keyword.FlyingAbility;
@@ -65,7 +65,7 @@ public class SoratamiCloudskater extends CardImpl {
 
         // {2}, Return a land you control to its owner's hand: Draw a card, then discard a card.
         Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawDiscardControllerEffect(), new GenericManaCost(2));
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
         this.addAbility(ability);
     }
 
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiMirrorGuard.java b/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiMirrorGuard.java
index 0013d4d466..c429582b1d 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiMirrorGuard.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiMirrorGuard.java
@@ -35,7 +35,7 @@ import mage.constants.Zone;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect;
 import mage.abilities.keyword.FlyingAbility;
@@ -74,7 +74,7 @@ public class SoratamiMirrorGuard extends CardImpl {
         
         // {2}, Return a land you control to its owner's hand: Target creature with power 2 or less can't be blocked this turn.
         Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedTargetEffect(), new GenericManaCost(2));
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
         ability.addTarget(new TargetCreaturePermanent(filterCreature));
         this.addAbility(ability);
     }
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiMirrorMage.java b/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiMirrorMage.java
index 6afc5fbe5c..458fdc8a00 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiMirrorMage.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiMirrorMage.java
@@ -35,7 +35,7 @@ import mage.constants.Zone;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.effects.common.ReturnToHandTargetEffect;
 import mage.abilities.keyword.FlyingAbility;
@@ -66,7 +66,7 @@ public class SoratamiMirrorMage extends CardImpl {
 
         // {3}, Return three lands you control to their owner's hand: Return target creature to its owner's hand.
         Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new GenericManaCost(3));
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(3, 3, filter, false)));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(3, 3, filter, false)));
         ability.addTarget(new TargetCreaturePermanent());
         this.addAbility(ability);
     }
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiRainshaper.java b/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiRainshaper.java
index 4dc868df4e..7f32cbe86d 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiRainshaper.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiRainshaper.java
@@ -35,7 +35,7 @@ import mage.constants.Rarity;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
 import mage.abilities.keyword.FlyingAbility;
@@ -69,7 +69,7 @@ public class SoratamiRainshaper extends CardImpl {
 
         // {3}, Return a land you control to its owner's hand: Target creature you control gains shroud until end of turn. (It can't be the target of spells or abilities.)
         Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilityTargetEffect(ShroudAbility.getInstance(), Duration.EndOfTurn), new GenericManaCost(3));
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
         ability.addTarget(new TargetControlledCreaturePermanent());
         this.addAbility(ability);
     }
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiSavant.java b/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiSavant.java
index ecb4bb7eb8..1060fdd8b3 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiSavant.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiSavant.java
@@ -35,7 +35,7 @@ import mage.constants.Rarity;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.effects.common.CounterUnlessPaysEffect;
 import mage.abilities.keyword.FlyingAbility;
@@ -67,7 +67,7 @@ public class SoratamiSavant extends CardImpl {
 
         // {3}, Return a land you control to its owner's hand: Counter target spell unless its controller pays {3}.
         Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CounterUnlessPaysEffect(new GenericManaCost(3)), new GenericManaCost(3));
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
         ability.addTarget(new TargetSpell());
         this.addAbility(ability);
     }
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiSeer.java b/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiSeer.java
index 6667c9d647..344923e03d 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiSeer.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/SoratamiSeer.java
@@ -36,7 +36,7 @@ import mage.constants.Zone;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.effects.OneShotEffect;
 import mage.abilities.keyword.FlyingAbility;
@@ -70,7 +70,7 @@ public class SoratamiSeer extends CardImpl {
 
         // {4}, Return two lands you control to their owner's hand: Discard all the cards in your hand, then draw that many cards.
         Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SoratamiSeerEffect(), new GenericManaCost(4));
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(2, 2, filter, false)));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(2, 2, filter, false)));
         this.addAbility(ability);
     }
 
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/UyoSilentProphet.java b/Mage.Sets/src/mage/sets/championsofkamigawa/UyoSilentProphet.java
index 0610678e95..9b0b414d4a 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/UyoSilentProphet.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/UyoSilentProphet.java
@@ -34,7 +34,7 @@ import mage.constants.Rarity;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.effects.common.CopyTargetSpellEffect;
 import mage.abilities.keyword.FlyingAbility;
@@ -75,7 +75,7 @@ public class UyoSilentProphet extends CardImpl {
         this.addAbility(FlyingAbility.getInstance());
         // {2}, Return two lands you control to their owner's hand: Copy target instant or sorcery spell. You may choose new targets for the copy.
         Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CopyTargetSpellEffect(), new GenericManaCost(2));
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(2, 2, new FilterControlledLandPermanent("lands"), false)));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(2, 2, new FilterControlledLandPermanent("lands"), false)));
         ability.addTarget(new TargetSpell(filter));
         this.addAbility(ability);
     }
diff --git a/Mage.Sets/src/mage/sets/commander2014/CoralAtoll.java b/Mage.Sets/src/mage/sets/commander2014/CoralAtoll.java
index 7b0da529f0..d2a186eb83 100644
--- a/Mage.Sets/src/mage/sets/commander2014/CoralAtoll.java
+++ b/Mage.Sets/src/mage/sets/commander2014/CoralAtoll.java
@@ -31,7 +31,7 @@ import java.util.UUID;
 import mage.Mana;
 import mage.abilities.common.EntersBattlefieldTappedAbility;
 import mage.abilities.common.EntersBattlefieldTriggeredAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.common.TapSourceCost;
 import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect;
 import mage.abilities.mana.SimpleManaAbility;
@@ -66,7 +66,7 @@ public class CoralAtoll extends CardImpl {
         // Coral Atoll enters the battlefield tapped.
         this.addAbility(new EntersBattlefieldTappedAbility());
         // When Coral Atoll enters the battlefield, sacrifice it unless you return an untapped Island you control to its owner's hand.
-        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)))));
+        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)))));
         // {tap}: Add {1}{U} to your mana pool.
         this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(0, 0, 1, 0, 0, 1,0 ), new TapSourceCost()));
 
diff --git a/Mage.Sets/src/mage/sets/commander2014/DormantVolcano.java b/Mage.Sets/src/mage/sets/commander2014/DormantVolcano.java
index 36101d74a8..800f515fca 100644
--- a/Mage.Sets/src/mage/sets/commander2014/DormantVolcano.java
+++ b/Mage.Sets/src/mage/sets/commander2014/DormantVolcano.java
@@ -31,7 +31,7 @@ import java.util.UUID;
 import mage.Mana;
 import mage.abilities.common.EntersBattlefieldTappedAbility;
 import mage.abilities.common.EntersBattlefieldTriggeredAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.common.TapSourceCost;
 import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect;
 import mage.abilities.mana.SimpleManaAbility;
@@ -66,7 +66,7 @@ public class DormantVolcano extends CardImpl {
         this.addAbility(new EntersBattlefieldTappedAbility());
 
         // When Dormant Volcano enters the battlefield, sacrifice it unless you return an untapped Mountain you control to its owner's hand.
-        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)))));
+        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)))));
 
         // {tap}: Add {1}{R} to your mana pool.
         this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(1, 0, 0, 0, 0, 1,0 ), new TapSourceCost()));
diff --git a/Mage.Sets/src/mage/sets/commander2014/Everglades.java b/Mage.Sets/src/mage/sets/commander2014/Everglades.java
index f3a60f6e92..7cf1f87413 100644
--- a/Mage.Sets/src/mage/sets/commander2014/Everglades.java
+++ b/Mage.Sets/src/mage/sets/commander2014/Everglades.java
@@ -31,7 +31,7 @@ import java.util.UUID;
 import mage.Mana;
 import mage.abilities.common.EntersBattlefieldTappedAbility;
 import mage.abilities.common.EntersBattlefieldTriggeredAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.common.TapSourceCost;
 import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect;
 import mage.abilities.mana.SimpleManaAbility;
@@ -66,7 +66,7 @@ public class Everglades extends CardImpl {
         this.addAbility(new EntersBattlefieldTappedAbility());
 
         // When Everglades enters the battlefield, sacrifice it unless you return an untapped Swamp you control to its owner's hand.
-        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)))));
+        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)))));
 
         // {tap}: Add {1}{B} to your mana pool.
         this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(0, 0, 0, 0, 1, 1,0 ), new TapSourceCost()));
diff --git a/Mage.Sets/src/mage/sets/commander2014/JungleBasin.java b/Mage.Sets/src/mage/sets/commander2014/JungleBasin.java
index e349560616..c90e7f0e10 100644
--- a/Mage.Sets/src/mage/sets/commander2014/JungleBasin.java
+++ b/Mage.Sets/src/mage/sets/commander2014/JungleBasin.java
@@ -31,7 +31,7 @@ import java.util.UUID;
 import mage.Mana;
 import mage.abilities.common.EntersBattlefieldTappedAbility;
 import mage.abilities.common.EntersBattlefieldTriggeredAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.common.TapSourceCost;
 import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect;
 import mage.abilities.mana.SimpleManaAbility;
@@ -66,7 +66,7 @@ public class JungleBasin extends CardImpl {
         this.addAbility(new EntersBattlefieldTappedAbility());
 
         // When Jungle Basin enters the battlefield, sacrifice it unless you return an untapped Forest you control to its owner's hand.
-        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)))));
+        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)))));
 
         // {tap}: Add {1}{G} to your mana pool.
         this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(0, 1, 0, 0, 0, 1,0 ), new TapSourceCost()));
diff --git a/Mage.Sets/src/mage/sets/commander2014/Karoo.java b/Mage.Sets/src/mage/sets/commander2014/Karoo.java
index 4a2a3321b3..eed52e1bc3 100644
--- a/Mage.Sets/src/mage/sets/commander2014/Karoo.java
+++ b/Mage.Sets/src/mage/sets/commander2014/Karoo.java
@@ -31,7 +31,7 @@ import java.util.UUID;
 import mage.Mana;
 import mage.abilities.common.EntersBattlefieldTappedAbility;
 import mage.abilities.common.EntersBattlefieldTriggeredAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.common.TapSourceCost;
 import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect;
 import mage.abilities.mana.SimpleManaAbility;
@@ -66,7 +66,7 @@ public class Karoo extends CardImpl {
         this.addAbility(new EntersBattlefieldTappedAbility());
 
         // When Karoo enters the battlefield, sacrifice it unless you return an untapped Plains you control to its owner's hand.
-        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)))));
+        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)))));
 
         // {tap}: Add {1}{W} to your mana pool.
         this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, new Mana(0, 0, 0, 1, 0, 1,0 ), new TapSourceCost()));
diff --git a/Mage.Sets/src/mage/sets/conflux/MasterTransmuter.java b/Mage.Sets/src/mage/sets/conflux/MasterTransmuter.java
index e565ff1eff..5c150f9121 100644
--- a/Mage.Sets/src/mage/sets/conflux/MasterTransmuter.java
+++ b/Mage.Sets/src/mage/sets/conflux/MasterTransmuter.java
@@ -35,7 +35,7 @@ import mage.constants.Zone;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.common.TapSourceCost;
 import mage.abilities.costs.mana.ManaCostsImpl;
 import mage.abilities.effects.OneShotEffect;
@@ -67,7 +67,7 @@ public class MasterTransmuter extends CardImpl {
         // {U}, {tap}, Return an artifact you control to its owner's hand: You may put an artifact card from your hand onto the battlefield.
         Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MasterTransmuterEffect(), new ManaCostsImpl("{U}"));
         ability.addCost(new TapSourceCost());
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(new FilterControlledArtifactPermanent("an artifact"))));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(new FilterControlledArtifactPermanent("an artifact"))));
         this.addAbility(ability);
 
     }
diff --git a/Mage.Sets/src/mage/sets/divinevsdemonic/FaithsFetters.java b/Mage.Sets/src/mage/sets/divinevsdemonic/FaithsFetters.java
index 56e3cfd338..e586bbed0c 100644
--- a/Mage.Sets/src/mage/sets/divinevsdemonic/FaithsFetters.java
+++ b/Mage.Sets/src/mage/sets/divinevsdemonic/FaithsFetters.java
@@ -61,15 +61,16 @@ public class FaithsFetters extends CardImpl {
         this.expansionSetCode = "DDC";
         this.subtype.add("Aura");
 
-
         // Enchant permanent
         TargetPermanent auraTarget = new TargetPermanent();
         this.getSpellAbility().addTarget(auraTarget);
-        this.getSpellAbility().addEffect(new AttachEffect(Outcome.GainControl));
+        this.getSpellAbility().addEffect(new AttachEffect(Outcome.LoseAbility));
         Ability ability = new EnchantAbility(auraTarget.getTargetName());
         this.addAbility(ability);
+
         // When Faith's Fetters enters the battlefield, you gain 4 life.
         this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(4)));
+
         // Enchanted permanent can't attack or block, and its activated abilities can't be activated unless they're mana abilities.
         Effect effect = new CantAttackBlockAttachedEffect(AttachmentType.AURA);
         effect.setText("Enchanted permanent can't attack or block,");
@@ -108,12 +109,12 @@ class FaithsFettersEffect extends ContinuousRuleModifyingEffectImpl {
     public boolean apply(Game game, Ability source) {
         return true;
     }
-    
+
     @Override
     public boolean checksEventType(GameEvent event, Game game) {
         return event.getType() == GameEvent.EventType.ACTIVATE_ABILITY;
     }
-    
+
     @Override
     public boolean applies(GameEvent event, Ability source, Game game) {
         Permanent enchantment = game.getPermanent(source.getSourceId());
@@ -127,4 +128,4 @@ class FaithsFettersEffect extends ContinuousRuleModifyingEffectImpl {
         }
         return false;
     }
-}
\ No newline at end of file
+}
diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/NotionThief.java b/Mage.Sets/src/mage/sets/dragonsmaze/NotionThief.java
index b5f2bcc03c..b7491e9e01 100644
--- a/Mage.Sets/src/mage/sets/dragonsmaze/NotionThief.java
+++ b/Mage.Sets/src/mage/sets/dragonsmaze/NotionThief.java
@@ -37,6 +37,7 @@ import mage.cards.CardImpl;
 import mage.constants.CardType;
 import mage.constants.Duration;
 import mage.constants.Outcome;
+import mage.constants.PhaseStep;
 import mage.constants.Rarity;
 import mage.constants.Zone;
 import mage.game.Game;
@@ -76,7 +77,6 @@ public class NotionThief extends CardImpl {
     }
 }
 
-
 class NotionThiefReplacementEffect extends ReplacementEffectImpl {
 
     public NotionThiefReplacementEffect() {
@@ -106,21 +106,22 @@ class NotionThiefReplacementEffect extends ReplacementEffectImpl {
         }
         return true;
     }
-    
+
     @Override
     public boolean checksEventType(GameEvent event, Game game) {
         return event.getType() == GameEvent.EventType.DRAW_CARD;
-    } 
-    
+    }
+
     @Override
     public boolean applies(GameEvent event, Ability source, Game game) {
         if (game.getOpponents(source.getControllerId()).contains(event.getPlayerId())) {
-            if (game.getActivePlayerId().equals(event.getPlayerId())) {
+            if (game.getActivePlayerId().equals(event.getPlayerId()) && game.getStep().getType().equals(PhaseStep.DRAW)) {
                 CardsDrawnDuringDrawStepWatcher watcher = (CardsDrawnDuringDrawStepWatcher) game.getState().getWatchers().get("CardsDrawnDuringDrawStep");
                 if (watcher != null && watcher.getAmountCardsDrawn(event.getPlayerId()) > 0) {
                     return true;
                 }
             } else {
+                // not an opponents players draw step, always replace draw
                 return true;
             }
         }
diff --git a/Mage.Sets/src/mage/sets/exodus/ExaltedDragon.java b/Mage.Sets/src/mage/sets/exodus/ExaltedDragon.java
index a68578c0a6..12b39be1e8 100644
--- a/Mage.Sets/src/mage/sets/exodus/ExaltedDragon.java
+++ b/Mage.Sets/src/mage/sets/exodus/ExaltedDragon.java
@@ -31,7 +31,7 @@ import java.util.UUID;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.common.SacrificeTargetCost;
 import mage.abilities.effects.ReplacementEffectImpl;
 import mage.abilities.keyword.FlyingAbility;
diff --git a/Mage.Sets/src/mage/sets/gatecrash/ObzedatGhostCouncil.java b/Mage.Sets/src/mage/sets/gatecrash/ObzedatGhostCouncil.java
index 8de83fd6c9..4435598c20 100644
--- a/Mage.Sets/src/mage/sets/gatecrash/ObzedatGhostCouncil.java
+++ b/Mage.Sets/src/mage/sets/gatecrash/ObzedatGhostCouncil.java
@@ -1,5 +1,5 @@
 /*
-/*
+ /*
  *  Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
  *
  *  Redistribution and use in source and binary forms, with or without modification, are
@@ -70,7 +70,6 @@ public class ObzedatGhostCouncil extends CardImpl {
         this.subtype.add("Advisor");
         this.supertype.add("Legendary");
 
-        
         this.power = new MageInt(5);
         this.toughness = new MageInt(5);
 
@@ -95,7 +94,6 @@ public class ObzedatGhostCouncil extends CardImpl {
     }
 }
 
-
 class ObzedatGhostCouncilExileSourceEffect extends OneShotEffect {
 
     public ObzedatGhostCouncilExileSourceEffect() {
@@ -116,7 +114,7 @@ class ObzedatGhostCouncilExileSourceEffect extends OneShotEffect {
     public boolean apply(Game game, Ability source) {
         Permanent permanent = game.getPermanent(source.getSourceId());
         if (permanent != null) {
-            return permanent.moveToExile(source.getSourceId(),permanent.getName(), source.getSourceId(), game);
+            return permanent.moveToExile(source.getSourceId(), permanent.getName(), source.getSourceId(), game);
         }
         return false;
     }
@@ -180,7 +178,7 @@ class ObzedatGhostCouncilReturnEffect extends OneShotEffect {
         if (card != null) {
             ExileZone currentZone = game.getState().getExile().getExileZone(source.getSourceId());
             // return it only from the own exile zone
-            if (currentZone.size() > 0) {
+            if (currentZone != null && currentZone.size() > 0) {
                 Player owner = game.getPlayer(card.getOwnerId());
                 if (owner != null && owner.putOntoBattlefieldWithInfo(card, game, Zone.EXILED, source.getSourceId())) {
                     return true;
diff --git a/Mage.Sets/src/mage/sets/jacevschandra/FathomSeer.java b/Mage.Sets/src/mage/sets/jacevschandra/FathomSeer.java
index 2e09bf1685..b3b9fa1177 100644
--- a/Mage.Sets/src/mage/sets/jacevschandra/FathomSeer.java
+++ b/Mage.Sets/src/mage/sets/jacevschandra/FathomSeer.java
@@ -30,7 +30,7 @@ package mage.sets.jacevschandra;
 import java.util.UUID;
 import mage.MageInt;
 import mage.abilities.common.TurnedFaceUpSourceTriggeredAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.common.DrawCardSourceControllerEffect;
 import mage.abilities.keyword.MorphAbility;
 import mage.cards.CardImpl;
@@ -60,7 +60,7 @@ public class FathomSeer extends CardImpl {
         this.toughness = new MageInt(3);
 
         // Morph-Return two Islands you control to their owner's hand.
-        this.addAbility(new MorphAbility(this, new ReturnToHandTargetCost(new TargetControlledPermanent(2,2, filter, true))));
+        this.addAbility(new MorphAbility(this, new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(2,2, filter, true))));
         // When Fathom Seer is turned face up, draw two cards.
         this.addAbility(new TurnedFaceUpSourceTriggeredAbility(new DrawCardSourceControllerEffect(2)));
     }
diff --git a/Mage.Sets/src/mage/sets/jacevschandra/Gush.java b/Mage.Sets/src/mage/sets/jacevschandra/Gush.java
index 70e1f87bb2..eabcd98d8c 100644
--- a/Mage.Sets/src/mage/sets/jacevschandra/Gush.java
+++ b/Mage.Sets/src/mage/sets/jacevschandra/Gush.java
@@ -29,7 +29,7 @@ package mage.sets.jacevschandra;
 
 import java.util.UUID;
 import mage.abilities.costs.AlternativeCostSourceAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.common.DrawCardSourceControllerEffect;
 import mage.cards.CardImpl;
 import mage.constants.CardType;
@@ -55,7 +55,7 @@ public class Gush extends CardImpl {
 
         // You may return two Islands you control to their owner's hand rather than pay Gush's mana cost.
         AlternativeCostSourceAbility ability;   
-        ability = new AlternativeCostSourceAbility(new ReturnToHandTargetCost(new TargetControlledPermanent(2, 2, filter, true)));
+        ability = new AlternativeCostSourceAbility(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(2, 2, filter, true)));
         this.addAbility(ability);
         // Draw two cards.
         this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2));
diff --git a/Mage.Sets/src/mage/sets/jacevschandra/WaterspoutDjinn.java b/Mage.Sets/src/mage/sets/jacevschandra/WaterspoutDjinn.java
index e77605b572..ecf4bef993 100644
--- a/Mage.Sets/src/mage/sets/jacevschandra/WaterspoutDjinn.java
+++ b/Mage.Sets/src/mage/sets/jacevschandra/WaterspoutDjinn.java
@@ -30,7 +30,7 @@ package mage.sets.jacevschandra;
 import java.util.UUID;
 import mage.MageInt;
 import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect;
 import mage.abilities.keyword.FlyingAbility;
 import mage.cards.CardImpl;
@@ -67,7 +67,7 @@ public class WaterspoutDjinn extends CardImpl {
         this.addAbility(FlyingAbility.getInstance());
         // At the beginning of your upkeep, sacrifice Waterspout Djinn unless you return an untapped Island you control to its owner's hand.
         this.addAbility(new BeginningOfUpkeepTriggeredAbility(
-                new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetCost(new TargetControlledPermanent(filter))),
+                new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter))),
                 TargetController.YOU, false));
     }
 
diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/PearlLakeAncient.java b/Mage.Sets/src/mage/sets/khansoftarkir/PearlLakeAncient.java
index 7da08b80ef..a2b8784709 100644
--- a/Mage.Sets/src/mage/sets/khansoftarkir/PearlLakeAncient.java
+++ b/Mage.Sets/src/mage/sets/khansoftarkir/PearlLakeAncient.java
@@ -31,7 +31,7 @@ import java.util.UUID;
 import mage.MageInt;
 import mage.abilities.common.CantBeCounteredAbility;
 import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.common.ReturnToHandSourceEffect;
 import mage.abilities.keyword.FlashAbility;
 import mage.abilities.keyword.ProwessAbility;
@@ -67,7 +67,7 @@ public class PearlLakeAncient extends CardImpl {
         
         // Return three lands you control to their owner's hand: Return Pearl Lake Ancient to its owner's hand.
         this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandSourceEffect(true), 
-                new ReturnToHandTargetCost(new TargetControlledPermanent(3, 3, new FilterControlledLandPermanent("lands"), true))));
+                new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(3, 3, new FilterControlledLandPermanent("lands"), true))));
     }
 
     public PearlLakeAncient(final PearlLakeAncient card) {
diff --git a/Mage.Sets/src/mage/sets/lorwyn/FamiliarsRuse.java b/Mage.Sets/src/mage/sets/lorwyn/FamiliarsRuse.java
index 2ad2679182..ba12a2e361 100644
--- a/Mage.Sets/src/mage/sets/lorwyn/FamiliarsRuse.java
+++ b/Mage.Sets/src/mage/sets/lorwyn/FamiliarsRuse.java
@@ -29,7 +29,7 @@ package mage.sets.lorwyn;
 
 import mage.constants.CardType;
 import mage.constants.Rarity;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.common.CounterTargetEffect;
 import mage.cards.CardImpl;
 import mage.target.TargetSpell;
@@ -48,7 +48,7 @@ public class FamiliarsRuse extends CardImpl {
         super(ownerId, 64, "Familiar's Ruse", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{U}{U}");
         this.expansionSetCode = "LRW";
 
-        this.getSpellAbility().addCost(new ReturnToHandTargetCost(new TargetControlledCreaturePermanent(1,1, new FilterControlledCreaturePermanent("creature"),false)));
+        this.getSpellAbility().addCost(new ReturnToHandTargetPermanentCost(new TargetControlledCreaturePermanent(1,1, new FilterControlledCreaturePermanent("creature"),false)));
         this.getSpellAbility().addEffect(new CounterTargetEffect());
         this.getSpellAbility().addTarget(new TargetSpell());
     }
diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/PhyrexianRebirth.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/PhyrexianRebirth.java
index 2ff546ea82..ddb6fcbc9c 100644
--- a/Mage.Sets/src/mage/sets/mirrodinbesieged/PhyrexianRebirth.java
+++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/PhyrexianRebirth.java
@@ -25,18 +25,16 @@
  *  authors and should not be interpreted as representing official policies, either expressed
  *  or implied, of BetaSteward_at_googlemail.com.
  */
-
 package mage.sets.mirrodinbesieged;
 
 import java.util.UUID;
-
-import mage.constants.CardType;
-import mage.constants.Rarity;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.effects.OneShotEffect;
 import mage.cards.CardImpl;
+import mage.constants.CardType;
 import mage.constants.Outcome;
+import mage.constants.Rarity;
 import mage.filter.common.FilterCreaturePermanent;
 import mage.game.Game;
 import mage.game.permanent.Permanent;
@@ -48,14 +46,15 @@ import mage.game.permanent.token.Token;
  */
 public class PhyrexianRebirth extends CardImpl {
 
-    public PhyrexianRebirth (UUID ownerId) {
+    public PhyrexianRebirth(UUID ownerId) {
         super(ownerId, 15, "Phyrexian Rebirth", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{4}{W}{W}");
         this.expansionSetCode = "MBS";
 
+        // Destroy all creatures, then put an X/X colorless Horror artifact creature token onto the battlefield, where X is the number of creatures destroyed this way.
         this.getSpellAbility().addEffect(new PhyrexianRebirthEffect());
     }
 
-    public PhyrexianRebirth (final PhyrexianRebirth card) {
+    public PhyrexianRebirth(final PhyrexianRebirth card) {
         super(card);
     }
 
@@ -78,7 +77,7 @@ public class PhyrexianRebirth extends CardImpl {
         @Override
         public boolean apply(Game game, Ability source) {
             int count = 0;
-            for (Permanent permanent: game.getBattlefield().getActivePermanents(new FilterCreaturePermanent(), source.getControllerId(), game)) {
+            for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterCreaturePermanent(), source.getControllerId(), game)) {
                 count += permanent.destroy(source.getSourceId(), game, false) ? 1 : 0;
             }
             HorrorToken horrorToken = new HorrorToken();
@@ -95,14 +94,15 @@ public class PhyrexianRebirth extends CardImpl {
 
     }
 
-class HorrorToken extends Token {
-    public HorrorToken() {
-        super("Horror", "X/X colorless Horror artifact creature token");
-        cardType.add(CardType.ARTIFACT);
-        cardType.add(CardType.CREATURE);
-        subtype.add("Horror");
-        power = new MageInt(0);
-        toughness = new MageInt(0);
+    class HorrorToken extends Token {
+
+        public HorrorToken() {
+            super("Horror", "X/X colorless Horror artifact creature token");
+            cardType.add(CardType.ARTIFACT);
+            cardType.add(CardType.CREATURE);
+            subtype.add("Horror");
+            power = new MageInt(0);
+            toughness = new MageInt(0);
+        }
     }
 }
-}
diff --git a/Mage.Sets/src/mage/sets/nemesis/Daze.java b/Mage.Sets/src/mage/sets/nemesis/Daze.java
index 97c36c4585..5cdf8ec4c8 100644
--- a/Mage.Sets/src/mage/sets/nemesis/Daze.java
+++ b/Mage.Sets/src/mage/sets/nemesis/Daze.java
@@ -29,7 +29,7 @@ package mage.sets.nemesis;
 
 import java.util.UUID;
 import mage.abilities.costs.AlternativeCostSourceAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.effects.common.CounterUnlessPaysEffect;
 import mage.cards.CardImpl;
@@ -60,7 +60,7 @@ public class Daze extends CardImpl {
 
 
         // You may return an Island you control to its owner's hand rather than pay Daze's mana cost.
-        this.addAbility(new AlternativeCostSourceAbility(new ReturnToHandTargetCost(new TargetControlledPermanent(filter))));
+        this.addAbility(new AlternativeCostSourceAbility(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter))));
 
         // Counter target spell unless its controller pays {1}.
         this.getSpellAbility().addTarget(new TargetSpell());
diff --git a/Mage.Sets/src/mage/sets/newphyrexia/NornsAnnex.java b/Mage.Sets/src/mage/sets/newphyrexia/NornsAnnex.java
index 095aa694b5..fef771c08d 100644
--- a/Mage.Sets/src/mage/sets/newphyrexia/NornsAnnex.java
+++ b/Mage.Sets/src/mage/sets/newphyrexia/NornsAnnex.java
@@ -25,7 +25,6 @@
  *  authors and should not be interpreted as representing official policies, either expressed
  *  or implied, of BetaSteward_at_googlemail.com.
  */
-
 package mage.sets.newphyrexia;
 
 import java.util.UUID;
@@ -52,7 +51,7 @@ public class NornsAnnex extends CardImpl {
     public NornsAnnex(UUID ownerId) {
         super(ownerId, 17, "Norn's Annex", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{3}{WP}{WP}");
         this.expansionSetCode = "NPH";
-        
+
         // {WP} ({WP} can be paid with either or 2 life.)
         // Creatures can't attack you or a planeswalker you control unless their controller pays for each of those creatures.
         this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new NornsAnnexReplacementEffect()));
@@ -81,15 +80,15 @@ class NornsAnnexReplacementEffect extends ReplacementEffectImpl {
     NornsAnnexReplacementEffect(NornsAnnexReplacementEffect effect) {
         super(effect);
     }
-    
+
     @Override
     public boolean checksEventType(GameEvent event, Game game) {
         return event.getType() == GameEvent.EventType.DECLARE_ATTACKER;
     }
-    
+
     @Override
     public boolean applies(GameEvent event, Ability source, Game game) {
-        if (event.getTargetId().equals(source.getControllerId()) ) {
+        if (event.getTargetId().equals(source.getControllerId())) {
             return true;
         }
         // planeswalker
@@ -98,14 +97,13 @@ class NornsAnnexReplacementEffect extends ReplacementEffectImpl {
                 && permanent.getCardType().contains(CardType.PLANESWALKER);
     }
 
-
     @Override
     public boolean replaceEvent(GameEvent event, Ability source, Game game) {
         Player player = game.getPlayer(event.getPlayerId());
         if (player != null) {
             ManaCostsImpl propagandaTax = new ManaCostsImpl("{WP}");
-            if (propagandaTax.canPay(source, source.getSourceId(), event.getPlayerId(), game) &&
-                    player.chooseUse(Outcome.Benefit, "Pay {WP} to declare attacker?", game)) {
+            if (propagandaTax.canPay(source, source.getSourceId(), event.getPlayerId(), game)
+                    && player.chooseUse(Outcome.Benefit, "Pay to declare attacker?", game)) {
                 if (propagandaTax.payOrRollback(source, game, source.getSourceId(), event.getPlayerId())) {
                     return false;
                 }
@@ -115,7 +113,6 @@ class NornsAnnexReplacementEffect extends ReplacementEffectImpl {
         return false;
     }
 
-
     @Override
     public NornsAnnexReplacementEffect copy() {
         return new NornsAnnexReplacementEffect(this);
diff --git a/Mage.Sets/src/mage/sets/planeshift/ArcticMerfolk.java b/Mage.Sets/src/mage/sets/planeshift/ArcticMerfolk.java
index b3fe6e4f49..e7993aa168 100644
--- a/Mage.Sets/src/mage/sets/planeshift/ArcticMerfolk.java
+++ b/Mage.Sets/src/mage/sets/planeshift/ArcticMerfolk.java
@@ -33,7 +33,7 @@ import mage.constants.Rarity;
 import mage.MageInt;
 import mage.abilities.common.EntersBattlefieldAbility;
 import mage.abilities.condition.common.KickedCondition;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.common.counter.AddCountersSourceEffect;
 import mage.abilities.keyword.KickerAbility;
 import mage.cards.CardImpl;
@@ -56,7 +56,7 @@ public class ArcticMerfolk extends CardImpl {
         this.toughness = new MageInt(1);
 
         // Kicker—Return a creature you control to its owner's hand. (You may return a creature you control to its owner's hand in addition to any other costs as you cast this spell.)
-        this.addAbility(new KickerAbility(new ReturnToHandTargetCost(new TargetControlledCreaturePermanent(1,1,new FilterControlledCreaturePermanent("a creature"),true))));
+        this.addAbility(new KickerAbility(new ReturnToHandTargetPermanentCost(new TargetControlledCreaturePermanent(1,1,new FilterControlledCreaturePermanent("a creature"),true))));
 
         // If Arctic Merfolk was kicked, it enters the battlefield with a +1/+1 counter on it.
         this.addAbility(new EntersBattlefieldAbility(
diff --git a/Mage.Sets/src/mage/sets/planeshift/CrosissCatacombs.java b/Mage.Sets/src/mage/sets/planeshift/CrosissCatacombs.java
index c7e04b767c..40cafe5531 100644
--- a/Mage.Sets/src/mage/sets/planeshift/CrosissCatacombs.java
+++ b/Mage.Sets/src/mage/sets/planeshift/CrosissCatacombs.java
@@ -29,7 +29,7 @@ package mage.sets.planeshift;
 
 import java.util.UUID;
 import mage.abilities.common.EntersBattlefieldTriggeredAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect;
 import mage.abilities.mana.BlackManaAbility;
 import mage.abilities.mana.BlueManaAbility;
@@ -59,7 +59,7 @@ public class CrosissCatacombs extends CardImpl {
         this.subtype.add("Lair");
 
         // When Crosis's Catacombs enters the battlefield, sacrifice it unless you return a non-Lair land you control to its owner's hand.
-        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)))));
+        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)))));
         // {tap}: Add {U}, {B}, or {R} to your mana pool.
         this.addAbility(new BlueManaAbility());
         this.addAbility(new BlackManaAbility());
diff --git a/Mage.Sets/src/mage/sets/planeshift/DarigaazsCaldera.java b/Mage.Sets/src/mage/sets/planeshift/DarigaazsCaldera.java
index bc6958b090..cf9b3567fd 100644
--- a/Mage.Sets/src/mage/sets/planeshift/DarigaazsCaldera.java
+++ b/Mage.Sets/src/mage/sets/planeshift/DarigaazsCaldera.java
@@ -29,7 +29,7 @@ package mage.sets.planeshift;
 
 import java.util.UUID;
 import mage.abilities.common.EntersBattlefieldTriggeredAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect;
 import mage.abilities.mana.BlackManaAbility;
 import mage.abilities.mana.GreenManaAbility;
@@ -59,7 +59,7 @@ public class DarigaazsCaldera extends CardImpl {
         this.subtype.add("Lair");
 
         // When Darigaaz's Caldera enters the battlefield, sacrifice it unless you return a non-Lair land you control to its owner's hand.
-        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)))));
+        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)))));
         // {tap}: Add {B}, {R}, or {G} to your mana pool.
         this.addAbility(new BlackManaAbility());
         this.addAbility(new RedManaAbility());
diff --git a/Mage.Sets/src/mage/sets/planeshift/DromarsCavern.java b/Mage.Sets/src/mage/sets/planeshift/DromarsCavern.java
index 1baad3e775..0527355c9b 100644
--- a/Mage.Sets/src/mage/sets/planeshift/DromarsCavern.java
+++ b/Mage.Sets/src/mage/sets/planeshift/DromarsCavern.java
@@ -29,7 +29,7 @@ package mage.sets.planeshift;
 
 import java.util.UUID;
 import mage.abilities.common.EntersBattlefieldTriggeredAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect;
 import mage.abilities.mana.BlackManaAbility;
 import mage.abilities.mana.BlueManaAbility;
@@ -58,7 +58,7 @@ public class DromarsCavern extends CardImpl {
         this.subtype.add("Lair");
 
         // When Dromar's Cavern enters the battlefield, sacrifice it unless you return a non-Lair land you control to its owner's hand.
-        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)))));
+        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)))));
         // {tap}: Add {W}, {U}, or {B} to your mana pool.
         this.addAbility(new WhiteManaAbility()); 
         this.addAbility(new BlueManaAbility());
diff --git a/Mage.Sets/src/mage/sets/planeshift/RithsGrove.java b/Mage.Sets/src/mage/sets/planeshift/RithsGrove.java
index 186209ef3b..d0fe9fde6f 100644
--- a/Mage.Sets/src/mage/sets/planeshift/RithsGrove.java
+++ b/Mage.Sets/src/mage/sets/planeshift/RithsGrove.java
@@ -29,7 +29,7 @@ package mage.sets.planeshift;
 
 import java.util.UUID;
 import mage.abilities.common.EntersBattlefieldTriggeredAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect;
 import mage.abilities.mana.GreenManaAbility;
 import mage.abilities.mana.RedManaAbility;
@@ -59,7 +59,7 @@ public class RithsGrove extends CardImpl {
         this.subtype.add("Lair");
 
         // When Rith's Grove enters the battlefield, sacrifice it unless you return a non-Lair land you control to its owner's hand.
-        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)))));
+        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)))));
         // {tap}: Add {R}, {G}, or {W} to your mana pool.
         this.addAbility(new RedManaAbility());
         this.addAbility(new GreenManaAbility());
diff --git a/Mage.Sets/src/mage/sets/planeshift/TrevasRuins.java b/Mage.Sets/src/mage/sets/planeshift/TrevasRuins.java
index e65884280d..64b9eec6c9 100644
--- a/Mage.Sets/src/mage/sets/planeshift/TrevasRuins.java
+++ b/Mage.Sets/src/mage/sets/planeshift/TrevasRuins.java
@@ -29,7 +29,7 @@ package mage.sets.planeshift;
 
 import java.util.UUID;
 import mage.abilities.common.EntersBattlefieldTriggeredAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect;
 import mage.abilities.mana.BlueManaAbility;
 import mage.abilities.mana.GreenManaAbility;
@@ -59,7 +59,7 @@ public class TrevasRuins extends CardImpl {
         this.subtype.add("Lair");
 
         // When Treva's Ruins enters the battlefield, sacrifice it unless you return a non-Lair land you control to its owner's hand.
-        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)))));
+        this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)))));
         // {tap}: Add {G}, {W}, or {U} to your mana pool.
         this.addAbility(new GreenManaAbility());
         this.addAbility(new WhiteManaAbility());
diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/Deprive.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/Deprive.java
index c54b6b577b..afa39d5afc 100644
--- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/Deprive.java
+++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/Deprive.java
@@ -31,7 +31,7 @@ package mage.sets.riseoftheeldrazi;
 import java.util.UUID;
 import mage.constants.CardType;
 import mage.constants.Rarity;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.common.CounterTargetEffect;
 import mage.cards.CardImpl;
 import mage.filter.common.FilterControlledLandPermanent;
@@ -52,7 +52,7 @@ public class Deprive extends CardImpl {
         this.expansionSetCode = "ROE";
 
         // As an additional cost to cast Deprive, return a land you control to its owner's hand.
-        this.getSpellAbility().addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)));
+        this.getSpellAbility().addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
 
         // Counter target spell.
         this.getSpellAbility().addTarget(new TargetSpell());
diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/MoonbowIllusionist.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/MoonbowIllusionist.java
index 509d353e22..ef11017024 100644
--- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/MoonbowIllusionist.java
+++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/MoonbowIllusionist.java
@@ -31,7 +31,7 @@ import java.util.UUID;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.effects.common.continuous.BecomesBasicLandTargetEffect;
 import mage.abilities.keyword.FlyingAbility;
@@ -63,7 +63,7 @@ public class MoonbowIllusionist extends CardImpl {
         this.addAbility(FlyingAbility.getInstance());
         // {2}, Return a land you control to its owner's hand: Target land becomes the basic land type of your choice until end of turn.
         Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesBasicLandTargetEffect(Duration.EndOfTurn), new GenericManaCost(2));
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(new FilterControlledLandPermanent("land"))));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(new FilterControlledLandPermanent("land"))));
         ability.addTarget(new TargetLandPermanent());
         this.addAbility(ability);
 
diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/OboroBreezecaller.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/OboroBreezecaller.java
index 4ce0b84509..c3f406d50f 100644
--- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/OboroBreezecaller.java
+++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/OboroBreezecaller.java
@@ -34,7 +34,7 @@ import mage.constants.Zone;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.effects.common.UntapTargetEffect;
 import mage.abilities.keyword.FlyingAbility;
@@ -66,7 +66,7 @@ public class OboroBreezecaller extends CardImpl {
 
         // {2}, Return a land you control to its owner's hand: Untap target land.
         Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UntapTargetEffect(), new GenericManaCost(2));
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(filter)));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
         ability.addTarget(new TargetLandPermanent());
         this.addAbility(ability);
     }
diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/OboroEnvoy.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/OboroEnvoy.java
index ed0c04e4d0..4ed03c26ba 100644
--- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/OboroEnvoy.java
+++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/OboroEnvoy.java
@@ -31,7 +31,7 @@ import java.util.UUID;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.dynamicvalue.common.CardsInControllerHandCount;
 import mage.abilities.dynamicvalue.common.SignInversionDynamicValue;
@@ -68,7 +68,7 @@ public class OboroEnvoy extends CardImpl {
         Effect effect = new BoostTargetEffect(new SignInversionDynamicValue(new CardsInControllerHandCount()), new StaticValue(-0), Duration.EndOfTurn);
         effect.setText("Target creature gets -X/-0 until end of turn, where X is the number of cards in your hand");
         Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new GenericManaCost(2));
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(new FilterControlledLandPermanent("a land"))));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(new FilterControlledLandPermanent("a land"))));
         ability.addTarget(new TargetCreaturePermanent());
         this.addAbility(ability);
     }
diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/SoramaroFirstToDream.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/SoramaroFirstToDream.java
index 8a61646311..a4134bda06 100644
--- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/SoramaroFirstToDream.java
+++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/SoramaroFirstToDream.java
@@ -32,7 +32,7 @@ import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleActivatedAbility;
 import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.costs.mana.GenericManaCost;
 import mage.abilities.dynamicvalue.DynamicValue;
 import mage.abilities.dynamicvalue.common.CardsInControllerHandCount;
@@ -70,7 +70,7 @@ public class SoramaroFirstToDream extends CardImpl {
         // {4}, Return a land you control to its owner's hand: Draw a card.
         Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
                 new DrawCardSourceControllerEffect(1), new GenericManaCost(4));
-        ability.addCost(new ReturnToHandTargetCost(new TargetControlledPermanent(new FilterControlledLandPermanent("a land"))));
+        ability.addCost(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(new FilterControlledLandPermanent("a land"))));
         this.addAbility(ability);
 
     }
diff --git a/Mage.Sets/src/mage/sets/scourge/WirewoodSymbiote.java b/Mage.Sets/src/mage/sets/scourge/WirewoodSymbiote.java
index 90ef6961d6..8bc500b1c3 100644
--- a/Mage.Sets/src/mage/sets/scourge/WirewoodSymbiote.java
+++ b/Mage.Sets/src/mage/sets/scourge/WirewoodSymbiote.java
@@ -34,7 +34,7 @@ import mage.constants.Zone;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.common.UntapTargetEffect;
 import mage.cards.CardImpl;
 import mage.filter.common.FilterControlledCreaturePermanent;
@@ -63,7 +63,7 @@ public class WirewoodSymbiote extends CardImpl {
         this.toughness = new MageInt(1);
 
         // Return an Elf you control to its owner's hand: Untap target creature. Activate this ability only once each turn.
-        Ability ability = new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new UntapTargetEffect(), new ReturnToHandTargetCost(new TargetControlledPermanent(filter)));
+        Ability ability = new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new UntapTargetEffect(), new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
         ability.addTarget(new TargetCreaturePermanent());
         this.addAbility(ability);
     }
diff --git a/Mage.Sets/src/mage/sets/timespiral/ScrybRanger.java b/Mage.Sets/src/mage/sets/timespiral/ScrybRanger.java
index 87abb1d8e2..f4218fe4bd 100644
--- a/Mage.Sets/src/mage/sets/timespiral/ScrybRanger.java
+++ b/Mage.Sets/src/mage/sets/timespiral/ScrybRanger.java
@@ -32,7 +32,7 @@ import mage.MageInt;
 import mage.ObjectColor;
 import mage.abilities.Ability;
 import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.common.UntapTargetEffect;
 import mage.abilities.keyword.FlashAbility;
 import mage.abilities.keyword.FlyingAbility;
@@ -76,7 +76,7 @@ public class ScrybRanger extends CardImpl {
         // protection from blue
         this.addAbility(new ProtectionAbility(filter));
         // Return a Forest you control to its owner's hand: Untap target creature. Activate this ability only once each turn.
-        Ability ability = new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new UntapTargetEffect(), new ReturnToHandTargetCost(new TargetControlledPermanent(filterForest)));
+        Ability ability = new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new UntapTargetEffect(), new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filterForest)));
         ability.addTarget(new TargetCreaturePermanent(1));
         this.addAbility(ability);
     }
diff --git a/Mage.Sets/src/mage/sets/visions/QuirionRanger.java b/Mage.Sets/src/mage/sets/visions/QuirionRanger.java
index 9bf3f07184..bfba3fdce8 100644
--- a/Mage.Sets/src/mage/sets/visions/QuirionRanger.java
+++ b/Mage.Sets/src/mage/sets/visions/QuirionRanger.java
@@ -34,7 +34,7 @@ import mage.constants.Zone;
 import mage.MageInt;
 import mage.abilities.Ability;
 import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.common.UntapTargetEffect;
 import mage.cards.CardImpl;
 import mage.filter.common.FilterControlledPermanent;
@@ -63,7 +63,7 @@ public class QuirionRanger extends CardImpl {
         this.toughness = new MageInt(1);
 
         // Return a Forest you control to its owner's hand: Untap target creature. Activate this ability only once each turn.
-        Ability ability = new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new UntapTargetEffect(), new ReturnToHandTargetCost(new TargetControlledPermanent(filter)));
+        Ability ability = new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new UntapTargetEffect(), new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(filter)));
         ability.addTarget(new TargetCreaturePermanent());
         this.addAbility(ability);
     }
diff --git a/Mage.Sets/src/mage/sets/zendikar/LivingTsunami.java b/Mage.Sets/src/mage/sets/zendikar/LivingTsunami.java
index 2333e64b7c..8c761ff0bf 100644
--- a/Mage.Sets/src/mage/sets/zendikar/LivingTsunami.java
+++ b/Mage.Sets/src/mage/sets/zendikar/LivingTsunami.java
@@ -34,7 +34,7 @@ import mage.constants.Rarity;
 import mage.constants.TargetController;
 import mage.MageInt;
 import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
-import mage.abilities.costs.common.ReturnToHandTargetCost;
+import mage.abilities.costs.common.ReturnToHandTargetPermanentCost;
 import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect;
 import mage.abilities.keyword.FlyingAbility;
 import mage.cards.CardImpl;
@@ -67,7 +67,7 @@ public class LivingTsunami extends CardImpl {
         this.addAbility(FlyingAbility.getInstance());
         
         // At the beginning of your upkeep, sacrifice Living Tsunami unless you return a land you control to its owner's hand.
-        this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetCost(new TargetControlledPermanent(1, 1, filter, true))), TargetController.YOU, false));
+        this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new SacrificeSourceUnlessPaysEffect(new ReturnToHandTargetPermanentCost(new TargetControlledPermanent(1, 1, filter, true))), TargetController.YOU, false));
     }
 
     public LivingTsunami(final LivingTsunami card) {
diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/copy/FelhideSpiritbinderTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/copy/FelhideSpiritbinderTest.java
new file mode 100644
index 0000000000..341d497d74
--- /dev/null
+++ b/Mage.Tests/src/test/java/org/mage/test/cards/copy/FelhideSpiritbinderTest.java
@@ -0,0 +1,97 @@
+/*
+ *  Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without modification, are
+ *  permitted provided that the following conditions are met:
+ *
+ *     1. Redistributions of source code must retain the above copyright notice, this list of
+ *        conditions and the following disclaimer.
+ *
+ *     2. Redistributions in binary form must reproduce the above copyright notice, this list
+ *        of conditions and the following disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ *  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ *  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ *  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ *  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *  The views and conclusions contained in the software and documentation are those of the
+ *  authors and should not be interpreted as representing official policies, either expressed
+ *  or implied, of BetaSteward_at_googlemail.com.
+ */
+package org.mage.test.cards.copy;
+
+import mage.abilities.keyword.HasteAbility;
+import mage.constants.CardType;
+import mage.constants.PhaseStep;
+import mage.constants.Zone;
+import mage.game.permanent.Permanent;
+import org.junit.Assert;
+import org.junit.Test;
+import org.mage.test.serverside.base.CardTestPlayerBase;
+
+/**
+ *
+ * @author LevelX2
+ */
+public class FelhideSpiritbinderTest extends CardTestPlayerBase {
+
+    /**
+     * http://www.slightlymagic.net/forum/viewtopic.php?f=70&t=17295&p=181417#p181440
+     * Felhide Spiritbinder does not seem to be giving haste or the enchantment
+     * subtype to tokens it creates..
+     *
+     */
+    @Test
+    public void testTokenCopy() {
+        // Inspired - Whenever Felhide Spiritbinder becomes untapped, you may pay {1}{R}.
+        // If you do, put a token onto the battlefield that's a copy of another target creature
+        // except it's an enchantment in addition to its other types. It gains haste. Exile it at the beginning of the next end step.
+        addCard(Zone.BATTLEFIELD, playerB, "Felhide Spiritbinder", 1);
+        addCard(Zone.BATTLEFIELD, playerB, "Mountain", 2);
+
+        addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1);
+
+        attack(2, playerB, "Felhide Spiritbinder");
+
+        setStopAt(4, PhaseStep.PRECOMBAT_MAIN);
+        execute();
+
+        assertPermanentCount(playerB, "Silvercoat Lion", 1);
+        Permanent lion = getPermanent("Silvercoat Lion", playerB);
+        assertAbility(playerB, "Silvercoat Lion", HasteAbility.getInstance(), true);
+        Assert.assertEquals("token has to have card type enchantment", true, lion.getCardType().contains(CardType.ENCHANTMENT));
+
+        assertLife(playerA, 17);
+        assertLife(playerB, 20);
+
+    }
+
+    @Test
+    public void testTokenCopyExiled() {
+        // Inspired - Whenever Felhide Spiritbinder becomes untapped, you may pay {1}{R}.
+        // If you do, put a token onto the battlefield that's a copy of another target creature
+        // except it's an enchantment in addition to its other types. It gains haste. Exile it at the beginning of the next end step.
+        addCard(Zone.BATTLEFIELD, playerB, "Felhide Spiritbinder", 1);
+        addCard(Zone.BATTLEFIELD, playerB, "Mountain", 2);
+
+        addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1);
+
+        attack(2, playerB, "Felhide Spiritbinder");
+
+        setStopAt(5, PhaseStep.UPKEEP);
+        execute();
+
+        assertPermanentCount(playerB, "Silvercoat Lion", 0);
+
+        assertLife(playerA, 17);
+        assertLife(playerB, 20);
+
+    }
+}
diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/DrawEffectsTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/DrawEffectsTest.java
index 106ef6fe6f..e5141680ac 100644
--- a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/DrawEffectsTest.java
+++ b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/DrawEffectsTest.java
@@ -37,23 +37,49 @@ import org.mage.test.serverside.base.CardTestPlayerBase;
  *
  * @author LevelX2
  */
-
 public class DrawEffectsTest extends CardTestPlayerBase {
 
     /**
-     * The effects of multiple Thought Reflections are cumulative. For example, if you have
-     * three Thought Reflections on the battlefield, you'll draw eight times the original number of cards.
+     * The effects of multiple Thought Reflections are cumulative. For example,
+     * if you have three Thought Reflections on the battlefield, you'll draw
+     * eight times the original number of cards.
      */
     @Test
     public void testCard() {
-        // If you would draw a card, draw two cards instead. 
+        // If you would draw a card, draw two cards instead.
         addCard(Zone.BATTLEFIELD, playerB, "Thought Reflection", 3);
 
         setStopAt(2, PhaseStep.PRECOMBAT_MAIN);
         execute();
 
-        Assert.assertEquals("Player B has to have 4 cards in hand", 8 , playerB.getHand().size());
+        Assert.assertEquals("Player B has to have 4 cards in hand", 8, playerB.getHand().size());
 
     }
 
-}
\ No newline at end of file
+    /**
+     * http://www.slightlymagic.net/forum/viewtopic.php?f=70&t=17295&start=75#p181427
+     * If I have a Notion Thief on the battlefield and cast Opportunity,
+     * targeting my opponent, during my opponent's upkeep, the opponent
+     * incorrectly draws the cards.
+     */
+    @Test
+    public void testNotionThief() {
+        addCard(Zone.BATTLEFIELD, playerA, "Island", 6);
+        // Flash
+        // If an opponent would draw a card except the first one he or she draws in each of his or her draw steps, instead that player skips that draw and you draw a card.
+        addCard(Zone.BATTLEFIELD, playerA, "Notion Thief", 1);
+
+        // Target player draws four cards.
+        addCard(Zone.HAND, playerA, "Opportunity", 1);
+
+        castSpell(2, PhaseStep.UPKEEP, playerA, "Opportunity", playerB);
+
+        setStopAt(2, PhaseStep.PRECOMBAT_MAIN);
+        execute();
+
+        assertGraveyardCount(playerA, "Opportunity", 1);
+        assertHandCount(playerA, 4);
+        assertHandCount(playerB, 1);
+    }
+
+}
diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/restriction/CantAttackTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/restriction/CantAttackTest.java
index a2d26ce8ee..6eee906395 100644
--- a/Mage.Tests/src/test/java/org/mage/test/cards/restriction/CantAttackTest.java
+++ b/Mage.Tests/src/test/java/org/mage/test/cards/restriction/CantAttackTest.java
@@ -29,6 +29,7 @@ package org.mage.test.cards.restriction;
 
 import mage.constants.PhaseStep;
 import mage.constants.Zone;
+import mage.counters.CounterType;
 import org.junit.Test;
 import org.mage.test.serverside.base.CardTestPlayerBase;
 
@@ -36,18 +37,18 @@ import org.mage.test.serverside.base.CardTestPlayerBase;
  *
  * @author LevelX2
  */
-
 public class CantAttackTest extends CardTestPlayerBase {
 
     /**
-     * Tests "If all other elves get the Forestwalk ability and can't be blockt from creatures whose controler has a forest in game"
+     * Tests "If all other elves get the Forestwalk ability and can't be blockt
+     * from creatures whose controler has a forest in game"
      */
-
     @Test
     public void testAttack() {
         addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); // 2/2
         addCard(Zone.BATTLEFIELD, playerA, "Myr Enforcer"); // 4/4
 
+        // Except for creatures named Akron Legionnaire and artifact creatures, creatures you control can't attack.
         addCard(Zone.BATTLEFIELD, playerB, "Akron Legionnaire"); // 8/4
         addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); // 2/2
         addCard(Zone.BATTLEFIELD, playerB, "Myr Enforcer"); // 4/4
@@ -64,20 +65,21 @@ public class CantAttackTest extends CardTestPlayerBase {
 
         assertLife(playerA, 8); // 8 + 4
         assertLife(playerB, 14); // 4 + 2
-
     }
-    
-   @Test
+
+    @Test
     public void testAttackHarborSerpent() {
-        addCard(Zone.BATTLEFIELD, playerA, "Island", 2); 
+        addCard(Zone.BATTLEFIELD, playerA, "Island", 2);
         addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); // 2/2
+        // Islandwalk (This creature is unblockable as long as defending player controls an Island.)
+        // Harbor Serpent can't attack unless there are five or more Islands on the battlefield.
         addCard(Zone.BATTLEFIELD, playerA, "Harbor Serpent"); // 5/5
         addCard(Zone.HAND, playerA, "Island");
-        
-        addCard(Zone.BATTLEFIELD, playerB, "Island", 2); 
+
+        addCard(Zone.BATTLEFIELD, playerB, "Island", 2);
         addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); // 2/2
         addCard(Zone.BATTLEFIELD, playerB, "Harbor Serpent"); // 5/5
-        
+
         attack(2, playerB, "Harbor Serpent");
         attack(2, playerB, "Silvercoat Lion");
 
@@ -88,9 +90,32 @@ public class CantAttackTest extends CardTestPlayerBase {
         setStopAt(3, PhaseStep.POSTCOMBAT_MAIN);
         execute();
 
-        assertLife(playerB, 13); 
-        assertLife(playerA, 18); 
+        assertLife(playerB, 13);
+        assertLife(playerA, 18);
     }
-    
-}
 
+    @Test
+    public void testBlazingArchon() {
+        // Flying
+        // Creatures can't attack you.
+        addCard(Zone.BATTLEFIELD, playerA, "Blazing Archon");
+
+        addCard(Zone.BATTLEFIELD, playerA, "Ajani Goldmane"); // Planeswalker 4 loyality counter
+
+        addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); // 2/2
+        addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox"); // 2/4
+
+        attack(2, playerB, "Pillarfield Ox", "Ajani Goldmane");
+        attack(2, playerB, "Silvercoat Lion", playerA);
+
+        setStopAt(2, PhaseStep.POSTCOMBAT_MAIN);
+        execute();
+
+        assertLife(playerA, 20);
+
+        assertTapped("Silvercoat Lion", false);
+        assertTapped("Pillarfield Ox", true);
+        assertCounterCount("Ajani Goldmane", CounterType.LOYALTY, 2);
+    }
+
+}
diff --git a/Mage.Tests/src/test/java/org/mage/test/commander/duel/CommanderReplaceEffectTest.java b/Mage.Tests/src/test/java/org/mage/test/commander/duel/CommanderReplaceEffectTest.java
new file mode 100644
index 0000000000..e20431c07e
--- /dev/null
+++ b/Mage.Tests/src/test/java/org/mage/test/commander/duel/CommanderReplaceEffectTest.java
@@ -0,0 +1,77 @@
+/*
+ *  Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without modification, are
+ *  permitted provided that the following conditions are met:
+ *
+ *     1. Redistributions of source code must retain the above copyright notice, this list of
+ *        conditions and the following disclaimer.
+ *
+ *     2. Redistributions in binary form must reproduce the above copyright notice, this list
+ *        of conditions and the following disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ *  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ *  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ *  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ *  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *  The views and conclusions contained in the software and documentation are those of the
+ *  authors and should not be interpreted as representing official policies, either expressed
+ *  or implied, of BetaSteward_at_googlemail.com.
+ */
+package org.mage.test.commander.duel;
+
+import java.io.FileNotFoundException;
+import mage.constants.PhaseStep;
+import mage.constants.Zone;
+import mage.game.Game;
+import mage.game.GameException;
+import org.junit.Test;
+import org.mage.test.serverside.base.CardTestCommanderDuelBase;
+
+/**
+ * This tests checks for problems that could arise from the possible commander
+ * returns to the command zone option.
+ *
+ * @author LevelX2
+ */
+public class CommanderReplaceEffectTest extends CardTestCommanderDuelBase {
+
+    @Override
+    protected Game createNewGameAndPlayers() throws GameException, FileNotFoundException {
+        setDecknamePlayerA("CommanderDuel_UW.dck"); // Commander = Daxos of Meletis
+        setDecknamePlayerB("CommanderDuel_UW.dck"); // Commander = Daxos of Meletis
+        return super.createNewGameAndPlayers();
+    }
+
+    @Test
+    public void castCommanderWithFlash() {
+        addCard(Zone.BATTLEFIELD, playerA, "Plains", 2);
+        addCard(Zone.BATTLEFIELD, playerA, "Island", 1);
+
+        addCard(Zone.BATTLEFIELD, playerB, "Plains", 6);
+        addCard(Zone.HAND, playerB, "Phyrexian Rebirth", 1);
+
+        // Daxos of Meletis can't be blocked by creatures with power 3 or greater.
+        // Whenever Daxos of Meletis deals combat damage to a player, exile the top card of that player's library. You gain life equal to that card's converted mana cost. Until end of turn, you may cast that card and you may spend mana as though it were mana of any color to cast it.
+        castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Daxos of Meletis");
+
+        // Destroy all creatures, then put an X/X colorless Horror artifact creature token onto the battlefield, where X is the number of creatures destroyed this way.
+        castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Phyrexian Rebirth");
+
+        setStopAt(2, PhaseStep.BEGIN_COMBAT);
+        execute();
+
+        assertPermanentCount(playerA, "Daxos of Meletis", 0);
+        assertGraveyardCount(playerA, "Daxos of Meletis", 0);
+
+        assertPermanentCount(playerB, "Horror", 1);
+        assertPowerToughness(playerB, "Horror", 1, 1);
+    }
+}
diff --git a/Mage/src/mage/abilities/costs/common/ReturnToHandTargetCost.java b/Mage/src/mage/abilities/costs/common/ReturnToHandTargetPermanentCost.java
similarity index 91%
rename from Mage/src/mage/abilities/costs/common/ReturnToHandTargetCost.java
rename to Mage/src/mage/abilities/costs/common/ReturnToHandTargetPermanentCost.java
index 12411c2cf8..dc8c231e4b 100644
--- a/Mage/src/mage/abilities/costs/common/ReturnToHandTargetCost.java
+++ b/Mage/src/mage/abilities/costs/common/ReturnToHandTargetPermanentCost.java
@@ -42,9 +42,9 @@ import mage.target.common.TargetControlledPermanent;
  *
  * @author BetaSteward_at_googlemail.com
  */
-public class ReturnToHandTargetCost extends CostImpl {
+public class ReturnToHandTargetPermanentCost extends CostImpl {
 
-    public ReturnToHandTargetCost(TargetControlledPermanent target) {
+    public ReturnToHandTargetPermanentCost(TargetControlledPermanent target) {
         this.addTarget(target);
         if (target.getMaxNumberOfTargets() > 1 && target.getMaxNumberOfTargets() == target.getNumberOfTargets()) {
             this.text = new StringBuilder("return ").append(target.getMaxNumberOfTargets()).append(" ").append(target.getTargetName()).append(" you control to it's owner's hand").toString();
@@ -53,7 +53,7 @@ public class ReturnToHandTargetCost extends CostImpl {
         }
     }
 
-    public ReturnToHandTargetCost(ReturnToHandTargetCost cost) {
+    public ReturnToHandTargetPermanentCost(ReturnToHandTargetPermanentCost cost) {
         super(cost);
     }
 
@@ -80,8 +80,8 @@ public class ReturnToHandTargetCost extends CostImpl {
     }
 
     @Override
-    public ReturnToHandTargetCost copy() {
-        return new ReturnToHandTargetCost(this);
+    public ReturnToHandTargetPermanentCost copy() {
+        return new ReturnToHandTargetPermanentCost(this);
     }
 
 
diff --git a/Mage/src/mage/abilities/dynamicvalue/common/SourcePermanentPowerCount.java b/Mage/src/mage/abilities/dynamicvalue/common/SourcePermanentPowerCount.java
index b0e65392d0..040973ca7d 100644
--- a/Mage/src/mage/abilities/dynamicvalue/common/SourcePermanentPowerCount.java
+++ b/Mage/src/mage/abilities/dynamicvalue/common/SourcePermanentPowerCount.java
@@ -3,7 +3,6 @@ package mage.abilities.dynamicvalue.common;
 import mage.abilities.Ability;
 import mage.abilities.dynamicvalue.DynamicValue;
 import mage.abilities.effects.Effect;
-import mage.constants.Zone;
 import mage.game.Game;
 import mage.game.permanent.Permanent;
 
@@ -11,12 +10,10 @@ import mage.game.permanent.Permanent;
  * @author Loki
  */
 public class SourcePermanentPowerCount implements DynamicValue {
+
     @Override
     public int calculate(Game game, Ability sourceAbility, Effect effect) {
-        Permanent sourcePermanent = game.getPermanent(sourceAbility.getSourceId());
-        if (sourcePermanent == null) {
-            sourcePermanent = (Permanent) game.getLastKnownInformation(sourceAbility.getSourceId(), Zone.BATTLEFIELD);
-        }
+        Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(sourceAbility.getSourceId());
         if (sourcePermanent != null) {
             return sourcePermanent.getPower().getValue();
         }
diff --git a/Mage/src/mage/abilities/effects/common/PutTokenOntoBattlefieldCopyTargetEffect.java b/Mage/src/mage/abilities/effects/common/PutTokenOntoBattlefieldCopyTargetEffect.java
index 7ad7b28d65..43fd5f7120 100644
--- a/Mage/src/mage/abilities/effects/common/PutTokenOntoBattlefieldCopyTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/PutTokenOntoBattlefieldCopyTargetEffect.java
@@ -31,14 +31,19 @@ import java.util.UUID;
 import mage.MageObject;
 import mage.abilities.Ability;
 import mage.abilities.Mode;
+import mage.abilities.effects.ContinuousEffect;
 import mage.abilities.effects.Effect;
 import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.continuous.AddCardTypeTargetEffect;
+import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
 import mage.abilities.keyword.HasteAbility;
 import mage.constants.CardType;
+import mage.constants.Duration;
 import mage.constants.Outcome;
 import mage.game.Game;
 import mage.game.permanent.Permanent;
 import mage.game.permanent.token.EmptyToken;
+import mage.target.targetpointer.FixedTarget;
 import mage.util.CardUtil;
 import mage.util.functions.ApplyToPermanent;
 import mage.util.functions.EmptyApplyToPermanent;
@@ -47,25 +52,24 @@ import mage.util.functions.EmptyApplyToPermanent;
  *
  * @author LevelX2
  */
-
 public class PutTokenOntoBattlefieldCopyTargetEffect extends OneShotEffect {
 
     private final UUID playerId;
     private final CardType additionalCardType;
     private boolean gainsHaste;
     private Permanent addedTokenPermanent;
-    
+
     public PutTokenOntoBattlefieldCopyTargetEffect() {
         super(Outcome.PutCreatureInPlay);
         this.playerId = null;
         this.additionalCardType = null;
         this.addedTokenPermanent = null;
     }
-    
+
     public PutTokenOntoBattlefieldCopyTargetEffect(UUID playerId) {
         this(playerId, null, false);
     }
-    
+
     public PutTokenOntoBattlefieldCopyTargetEffect(UUID playerId, CardType additionalCardType, boolean gainsHaste) {
         super(Outcome.PutCreatureInPlay);
         this.playerId = playerId;
@@ -95,16 +99,16 @@ public class PutTokenOntoBattlefieldCopyTargetEffect extends OneShotEffect {
                     // there is another copy effect that our targetPermanent copies stats from
                     if (copyEffect.getSourceId().equals(permanent.getId())) {
                         MageObject object = ((CopyEffect) effect).getTarget();
-                        if (object instanceof Permanent) {                            
-                            copyFromPermanent = (Permanent)object;
+                        if (object instanceof Permanent) {
+                            copyFromPermanent = (Permanent) object;
                             if (copyEffect.getApplier() != null) {
                                 applier = copyEffect.getApplier();
-                            }                            
+                            }
                         }
                     }
                 }
             }
-            
+
             EmptyToken token = new EmptyToken();
             CardUtil.copyTo(token).from(copyFromPermanent); // needed so that entersBattlefied triggered abilities see the attributes (e.g. Master Biomancer)
             if (additionalCardType != null && !token.getCardType().contains(additionalCardType)) {
@@ -113,10 +117,20 @@ public class PutTokenOntoBattlefieldCopyTargetEffect extends OneShotEffect {
             if (gainsHaste) {
                 token.addAbility(HasteAbility.getInstance());
             }
-            token.putOntoBattlefield(1, game, source.getSourceId(), playerId == null ? source.getControllerId(): playerId);
+            token.putOntoBattlefield(1, game, source.getSourceId(), playerId == null ? source.getControllerId() : playerId);
             addedTokenPermanent = game.getPermanent(token.getLastAddedToken());
             if (addedTokenPermanent != null) {
                 game.copyPermanent(copyFromPermanent, addedTokenPermanent, source, applier);
+                if (additionalCardType != null) {
+                    ContinuousEffect effect = new AddCardTypeTargetEffect(additionalCardType, Duration.Custom);
+                    effect.setTargetPointer(new FixedTarget(addedTokenPermanent.getId()));
+                    game.addEffect(effect, source);
+                }
+                if (gainsHaste) {
+                    ContinuousEffect effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.Custom);
+                    effect.setTargetPointer(new FixedTarget(addedTokenPermanent.getId()));
+                    game.addEffect(effect, source);
+                }
                 return true;
             }
         }
@@ -127,7 +141,7 @@ public class PutTokenOntoBattlefieldCopyTargetEffect extends OneShotEffect {
     public PutTokenOntoBattlefieldCopyTargetEffect copy() {
         return new PutTokenOntoBattlefieldCopyTargetEffect(this);
     }
-    
+
     @Override
     public String getText(Mode mode) {
         StringBuilder sb = new StringBuilder();
@@ -137,11 +151,9 @@ public class PutTokenOntoBattlefieldCopyTargetEffect extends OneShotEffect {
         }
         return sb.toString();
 
-    }    
-    
+    }
+
     public Permanent getAddedPermanent() {
         return addedTokenPermanent;
     }
 }
-
-
diff --git a/Mage/src/mage/game/permanent/PermanentImpl.java b/Mage/src/mage/game/permanent/PermanentImpl.java
index 60df01dae3..51eea8e9cc 100644
--- a/Mage/src/mage/game/permanent/PermanentImpl.java
+++ b/Mage/src/mage/game/permanent/PermanentImpl.java
@@ -1,31 +1,30 @@
 /*
-* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without modification, are
-* permitted provided that the following conditions are met:
-*
-*    1. Redistributions of source code must retain the above copyright notice, this list of
-*       conditions and the following disclaimer.
-*
-*    2. Redistributions in binary form must reproduce the above copyright notice, this list
-*       of conditions and the following disclaimer in the documentation and/or other materials
-*       provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
-* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
-* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-* The views and conclusions contained in the software and documentation are those of the
-* authors and should not be interpreted as representing official policies, either expressed
-* or implied, of BetaSteward_at_googlemail.com.
-*/
-
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ *    1. Redistributions of source code must retain the above copyright notice, this list of
+ *       conditions and the following disclaimer.
+ *
+ *    2. Redistributions in binary form must reproduce the above copyright notice, this list
+ *       of conditions and the following disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
 package mage.game.permanent;
 
 import java.util.ArrayList;
@@ -122,14 +121,14 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
     protected int timesLoyaltyUsed = 0;
     protected Map<String, String> info;
     protected int createOrder;
-    
+
     private static final List<UUID> emptyList = Collections.unmodifiableList(new ArrayList<UUID>());
 
     public PermanentImpl(UUID ownerId, UUID controllerId, String name) {
         super(ownerId, name);
         this.originalControllerId = controllerId;
         this.controllerId = controllerId;
-        this.counters = new Counters();        
+        this.counters = new Counters();
     }
 
     public PermanentImpl(UUID id, UUID ownerId, UUID controllerId, String name) {
@@ -155,7 +154,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
         this.maxBlocks = permanent.maxBlocks;
         this.deathtouched = permanent.deathtouched;
         this.attachments.addAll(permanent.attachments);
-        for (Map.Entry<String, List<UUID>> entry: permanent.connectedCards.entrySet()) {
+        for (Map.Entry<String, List<UUID>> entry : permanent.connectedCards.entrySet()) {
             this.connectedCards.put(entry.getKey(), entry.getValue());
         }
         if (permanent.dealtDamageByThisTurn != null) {
@@ -202,7 +201,8 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
     }
 
     /**
-     * Called before each applyEffects or if after a permanent was copied for the copied object
+     * Called before each applyEffects or if after a permanent was copied for
+     * the copied object
      *
      * @param game
      */
@@ -214,7 +214,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
         this.maxBlockedBy = 0;
         this.copy = false;
     }
-    
+
     @Override
     public String getValue() {
         StringBuilder sb = threadLocalBuilder.get();
@@ -263,7 +263,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
     public Abilities<Ability> getAbilities(Game game) {
         return abilities;
     }
-    
+
     @Override
     @Deprecated
     public void addAbility(Ability ability) {
@@ -285,6 +285,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
             abilities.add(copyAbility);
         }
     }
+
     @Override
     public void addAbility(Ability ability, UUID sourceId, Game game) {
         addAbility(ability, sourceId, game, true);
@@ -418,7 +419,6 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
         return false;
     }
 
-
     @Override
     public boolean isTapped() {
         return tapped;
@@ -536,8 +536,9 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
         if (phasedIn) {
             if (!replaceEvent(EventType.PHASE_OUT, game)) {
                 this.phasedIn = false;
-                if (!game.isSimulation())
+                if (!game.isSimulation()) {
                     game.informPlayers(getLogName() + " phased out");
+                }
                 fireEvent(EventType.PHASED_OUT, game);
                 return true;
             }
@@ -579,7 +580,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
         return minBlockedBy;
     }
 
-   @Override
+    @Override
     public int getMaxBlockedBy() {
         return maxBlockedBy;
     }
@@ -698,7 +699,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
 
     @Override
     public void attachTo(UUID permanentId, Game game) {
-        if (this.attachedTo != null && this.attachedTo!= permanentId) {
+        if (this.attachedTo != null && this.attachedTo != permanentId) {
             Permanent attachment = game.getPermanent(this.attachedTo);
             if (attachment != null) {
                 attachment.removeAttachment(this.objectId, game);
@@ -710,7 +711,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
                 ContinuousEffect effect = (ContinuousEffect) ite.next();
                 game.getContinuousEffects().setOrder(effect);
                 // It's important is to update timestamp of the copied effect in ContinuousEffects because it does the action
-                for (ContinuousEffect conEffect: game.getContinuousEffects().getLayeredEffects(game)) {
+                for (ContinuousEffect conEffect : game.getContinuousEffects().getLayeredEffects(game)) {
                     if (conEffect.getId().equals(effect.getId())) {
                         game.getContinuousEffects().setOrder(conEffect);
                     }
@@ -738,13 +739,15 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
     public int damage(int damage, UUID sourceId, Game game, boolean combat, boolean preventable, ArrayList<UUID> appliedEffects) {
         return damage(damage, sourceId, game, preventable, combat, false, appliedEffects);
     }
+
     /**
      * @param damageAmount
      * @param sourceId
      * @param game
      * @param preventable
      * @param combat
-     * @param markDamage   If true, damage will be dealt later in applyDamage method
+     * @param markDamage If true, damage will be dealt later in applyDamage
+     * method
      * @return
      */
     private int damage(int damageAmount, UUID sourceId, Game game, boolean preventable, boolean combat, boolean markDamage, ArrayList<UUID> appliedEffects) {
@@ -771,8 +774,8 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
                         sourceControllerId = ((Spell) source).getControllerId();
                     } else if (source instanceof Card) {
                         sourceAbilities = ((Card) source).getAbilities(game);
-                        sourceControllerId = ((Card) source).getOwnerId();                        
-                    } else if (source instanceof CommandObject){
+                        sourceControllerId = ((Card) source).getOwnerId();
+                    } else if (source instanceof CommandObject) {
                         sourceControllerId = ((CommandObject) source).getControllerId();
                         sourceAbilities = ((CommandObject) source).getAbilities();
                     } else {
@@ -782,7 +785,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
                     sourceAbilities = ((Permanent) source).getAbilities(game);
                     sourceControllerId = ((Permanent) source).getControllerId();
                 }
-                if (source != null && sourceAbilities!= null) {
+                if (source != null && sourceAbilities != null) {
                     if (sourceAbilities.containsKey(LifelinkAbility.getInstance().getId())) {
                         Player player = game.getPlayer(sourceControllerId);
                         player.gainLife(damageAmount, game);
@@ -817,7 +820,6 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
         return 0;
     }
 
-
     @Override
     public void removeAllDamage(Game game) {
         damage = 0;
@@ -890,7 +892,6 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
         markedDamage.add(counter);
     }
 
-
     @Override
     public void entersBattlefield(UUID sourceId, Game game, Zone fromZone, boolean fireEvent) {
         controlledFromStartOfControllerTurn = false;
@@ -917,8 +918,8 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
                 return false;
             }
             if (abilities.containsKey(HexproofAbility.getInstance().getId())) {
-                if (game.getPlayer(this.getControllerId()).hasOpponent(sourceControllerId, game) &&
-                        !game.getContinuousEffects().asThough(this.getId(), AsThoughEffectType.HEXPROOF, sourceControllerId, game)) {
+                if (game.getPlayer(this.getControllerId()).hasOpponent(sourceControllerId, game)
+                        && !game.getContinuousEffects().asThough(this.getId(), AsThoughEffectType.HEXPROOF, sourceControllerId, game)) {
                     return false;
                 }
             }
@@ -965,11 +966,13 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
     @Override
     public boolean destroy(UUID sourceId, Game game, boolean noRegen) {
         //20091005 - 701.6
-        if(abilities.containsKey(IndestructibleAbility.getInstance().getId())) {
+        if (abilities.containsKey(IndestructibleAbility.getInstance().getId())) {
             return false;
         }
 
         if (!game.replaceEvent(GameEvent.getEvent(EventType.DESTROY_PERMANENT, objectId, sourceId, controllerId, noRegen ? 1 : 0))) {
+            // this means destroy was successfull, if object movement to graveyard will be replaced (e.g. commander to command zone) does not count for
+            // successfull destroying.
             if (moveToZone(Zone.GRAVEYARD, sourceId, game, false)) {
                 if (!game.isSimulation()) {
                     String logName;
@@ -980,14 +983,14 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
                         logName = this.getLogName();
                     }
                     if (this.getCardType().contains(CardType.CREATURE)) {
-                        game.informPlayers(logName +" died");
+                        game.informPlayers(logName + " died");
                     } else {
                         game.informPlayers(logName + " was destroyed");
                     }
                 }
                 game.fireEvent(GameEvent.getEvent(EventType.DESTROYED_PERMANENT, objectId, sourceId, controllerId));
-                return true;
             }
+            return true; //
         }
         return false;
     }
@@ -1040,8 +1043,6 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
         return game.replaceEvent(GameEvent.getEvent(eventType, this.objectId, ownerId));// controllerId seems to me more logical (LevelX2)
     }
 
-
-
     @Override
     public boolean canAttack(Game game) {
         return canAttack(null, game);
@@ -1058,7 +1059,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
         //20101001 - 508.1c
         if (defenderId == null) {
             boolean oneCanBeAttacked = false;
-            for (UUID defenderToCheckId: game.getCombat().getDefenders()) {
+            for (UUID defenderToCheckId : game.getCombat().getDefenders()) {
                 if (canAttackCheckRestrictionEffects(defenderToCheckId, game)) {
                     oneCanBeAttacked = true;
                     break;
@@ -1077,14 +1078,13 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
                 || game.getContinuousEffects().asThough(this.objectId, AsThoughEffectType.ATTACK, this.getControllerId(), game);
     }
 
-
     private boolean canAttackCheckRestrictionEffects(UUID defenderId, Game game) {
         //20101001 - 508.1c
-        for (Map.Entry<RestrictionEffect, HashSet<Ability>> effectEntry: game.getContinuousEffects().getApplicableRestrictionEffects(this, game).entrySet()) {
+        for (Map.Entry<RestrictionEffect, HashSet<Ability>> effectEntry : game.getContinuousEffects().getApplicableRestrictionEffects(this, game).entrySet()) {
             if (!effectEntry.getKey().canAttack(game)) {
                 return false;
             }
-            for (Ability ability :effectEntry.getValue()) {
+            for (Ability ability : effectEntry.getValue()) {
                 if (!effectEntry.getKey().canAttack(defenderId, ability, game)) {
                     return false;
                 }
@@ -1108,7 +1108,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
         }
         //20101001 - 509.1b
         // check blocker restrictions
-        for (Map.Entry<RestrictionEffect, HashSet<Ability>> entry: game.getContinuousEffects().getApplicableRestrictionEffects(this, game).entrySet()) {
+        for (Map.Entry<RestrictionEffect, HashSet<Ability>> entry : game.getContinuousEffects().getApplicableRestrictionEffects(this, game).entrySet()) {
             for (Ability ability : entry.getValue()) {
                 if (!entry.getKey().canBlock(attacker, this, ability, game)) {
                     return false;
@@ -1116,7 +1116,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
             }
         }
         // check also attacker's restriction effects
-        for (Map.Entry<RestrictionEffect, HashSet<Ability>> restrictionEntry: game.getContinuousEffects().getApplicableRestrictionEffects(attacker, game).entrySet()) {
+        for (Map.Entry<RestrictionEffect, HashSet<Ability>> restrictionEntry : game.getContinuousEffects().getApplicableRestrictionEffects(attacker, game).entrySet()) {
             for (Ability ability : restrictionEntry.getValue()) {
                 if (!restrictionEntry.getKey().canBeBlocked(attacker, this, ability, game)) {
                     return false;
@@ -1133,8 +1133,8 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
         }
 
         //20101001 - 509.1b
-        for (Map.Entry entry: game.getContinuousEffects().getApplicableRestrictionEffects(this, game).entrySet()) {
-            RestrictionEffect effect = (RestrictionEffect)entry.getKey();
+        for (Map.Entry entry : game.getContinuousEffects().getApplicableRestrictionEffects(this, game).entrySet()) {
+            RestrictionEffect effect = (RestrictionEffect) entry.getKey();
             for (Ability ability : (HashSet<Ability>) entry.getValue()) {
                 if (!effect.canBlock(null, this, ability, game)) {
                     return false;
@@ -1146,15 +1146,16 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
     }
 
     /**
-     * Checks by restriction effects if the permanent can use activated abilities
+     * Checks by restriction effects if the permanent can use activated
+     * abilities
      *
      * @param game
      * @return true - permanent can use activated abilities
      */
     @Override
     public boolean canUseActivatedAbilities(Game game) {
-        for (Map.Entry entry: game.getContinuousEffects().getApplicableRestrictionEffects(this, game).entrySet()) {
-            RestrictionEffect effect = (RestrictionEffect)entry.getKey();
+        for (Map.Entry entry : game.getContinuousEffects().getApplicableRestrictionEffects(this, game).entrySet()) {
+            RestrictionEffect effect = (RestrictionEffect) entry.getKey();
             for (Ability ability : (HashSet<Ability>) entry.getValue()) {
                 if (!effect.canUseActivatedAbilities(this, ability, game)) {
                     return false;
@@ -1185,7 +1186,6 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
         this.minBlockedBy = minBlockedBy;
     }
 
-
     @Override
     public void setMaxBlockedBy(int maxBlockedBy) {
         this.maxBlockedBy = maxBlockedBy;
@@ -1366,7 +1366,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
     public int getCreateOrder() {
         return createOrder;
     }
-    
+
     @Override
     public void setCreateOrder(int createOrder) {
         this.createOrder = createOrder;
@@ -1376,6 +1376,5 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
     public ObjectColor getColor(Game game) {
         return color;
     }
-     
-    
+
 }