diff --git a/Mage.Sets/src/mage/cards/s/SongOfTheDryads.java b/Mage.Sets/src/mage/cards/s/SongOfTheDryads.java
index ce6b7187a3..14e5f342f8 100644
--- a/Mage.Sets/src/mage/cards/s/SongOfTheDryads.java
+++ b/Mage.Sets/src/mage/cards/s/SongOfTheDryads.java
@@ -1,4 +1,3 @@
-
 package mage.cards.s;
 
 import java.util.UUID;
@@ -11,11 +10,12 @@ import mage.abilities.mana.GreenManaAbility;
 import mage.cards.CardImpl;
 import mage.cards.CardSetInfo;
 import mage.constants.CardType;
-import mage.constants.SubType;
+import mage.constants.DependencyType;
 import mage.constants.Duration;
 import mage.constants.Layer;
 import mage.constants.Outcome;
 import mage.constants.SubLayer;
+import mage.constants.SubType;
 import mage.constants.Zone;
 import mage.game.Game;
 import mage.game.permanent.Permanent;
@@ -28,7 +28,7 @@ import mage.target.TargetPermanent;
 public final class SongOfTheDryads extends CardImpl {
 
     public SongOfTheDryads(UUID ownerId, CardSetInfo setInfo) {
-        super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{G}");
+        super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}");
         this.subtype.add(SubType.AURA);
 
         // Enchant permanent
@@ -58,6 +58,7 @@ class BecomesColorlessForestLandEffect extends ContinuousEffectImpl {
     public BecomesColorlessForestLandEffect() {
         super(Duration.WhileOnBattlefield, Outcome.Detriment);
         this.staticText = "Enchanted permanent is a colorless Forest land";
+        dependencyTypes.add(DependencyType.BecomeForest);
     }
 
     public BecomesColorlessForestLandEffect(final BecomesColorlessForestLandEffect effect) {
@@ -89,10 +90,10 @@ class BecomesColorlessForestLandEffect extends ContinuousEffectImpl {
                         permanent.getColor(game).setRed(false);
                         break;
                     case AbilityAddingRemovingEffects_6:
-                        permanent.removeAllAbilities(source.getSourceId(), game);
                         permanent.addAbility(new GreenManaAbility(), source.getSourceId(), game);
                         break;
                     case TypeChangingEffects_4:
+                        permanent.removeAllAbilities(source.getSourceId(), game);
                         permanent.getCardType().clear();
                         permanent.addCardType(CardType.LAND);
                         permanent.getSubtype(game).clear();
diff --git a/Mage.Sets/src/mage/cards/s/StarfieldOfNyx.java b/Mage.Sets/src/mage/cards/s/StarfieldOfNyx.java
index 81a49dc528..9e0df8ed14 100644
--- a/Mage.Sets/src/mage/cards/s/StarfieldOfNyx.java
+++ b/Mage.Sets/src/mage/cards/s/StarfieldOfNyx.java
@@ -12,7 +12,7 @@ import mage.cards.CardImpl;
 import mage.cards.CardSetInfo;
 import mage.constants.*;
 import mage.filter.FilterCard;
-import mage.filter.FilterPermanent;
+import mage.filter.common.FilterControlledPermanent;
 import mage.filter.common.FilterEnchantmentPermanent;
 import mage.filter.predicate.Predicates;
 import mage.filter.predicate.permanent.AnotherPredicate;
@@ -47,15 +47,15 @@ public final class StarfieldOfNyx extends CardImpl {
     public StarfieldOfNyx(UUID ownerId, CardSetInfo setInfo) {
         super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}{W}");
 
-        // At the beginning of your upkeep, you may return target enchantment card 
+        // At the beginning of your upkeep, you may return target enchantment card
         // from your graveyard to the battlefield.
         Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD,
                 new ReturnFromGraveyardToBattlefieldTargetEffect(), TargetController.YOU, true);
         ability.addTarget(new TargetCardInGraveyard(filterGraveyardEnchantment));
         this.addAbility(ability);
 
-        // As long as you control five or more enchantments, each other non-Aura enchantment 
-        // you control is a creature in addition to its other types and has base power and 
+        // As long as you control five or more enchantments, each other non-Aura enchantment
+        // you control is a creature in addition to its other types and has base power and
         // base toughness each equal to its converted mana cost.
         ConditionalContinuousEffect effect = new ConditionalContinuousEffect(
                 new StarfieldOfNyxEffect(), new PermanentsOnTheBattlefieldCondition(
@@ -74,13 +74,13 @@ public final class StarfieldOfNyx extends CardImpl {
 
     static class StarfieldOfNyxEffect extends ContinuousEffectImpl {
 
-        private static final FilterPermanent filter
-                = new FilterPermanent("Each other non-Aura enchantment you control");
-        private static final FilterEnchantmentPermanent filter2
-                = new FilterEnchantmentPermanent();
+        private static final FilterControlledPermanent filter
+                = new FilterControlledPermanent("Each other non-Aura enchantment you control");
 
         static {
-            filter2.add(TargetController.YOU.getControllerPredicate());
+            filter.add(CardType.ENCHANTMENT.getPredicate());
+            filter.add(Predicates.not(SubType.AURA.getPredicate()));
+            filter.add(AnotherPredicate.instance);
         }
 
         public StarfieldOfNyxEffect() {
@@ -91,8 +91,14 @@ public final class StarfieldOfNyx extends CardImpl {
 
             this.dependendToTypes.add(DependencyType.EnchantmentAddingRemoving); // Enchanted Evening
             this.dependendToTypes.add(DependencyType.AuraAddingRemoving); // Cloudform
+            this.dependendToTypes.add(DependencyType.BecomeForest); // Song of the Dryads
+            this.dependendToTypes.add(DependencyType.BecomeMountain);
+            this.dependendToTypes.add(DependencyType.BecomePlains);
+            this.dependendToTypes.add(DependencyType.BecomeSwamp);
+            this.dependendToTypes.add(DependencyType.BecomeIsland);
 
             this.dependencyTypes.add(DependencyType.BecomeCreature);  // Conspiracy
+
         }
 
         public StarfieldOfNyxEffect(final StarfieldOfNyxEffect effect) {
@@ -106,9 +112,6 @@ public final class StarfieldOfNyx extends CardImpl {
 
         @Override
         public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) {
-            filter.add(CardType.ENCHANTMENT.getPredicate());
-            filter.add(Predicates.not(SubType.AURA.getPredicate()));
-            filter.add(AnotherPredicate.instance);
             for (Permanent permanent : game.getBattlefield().getActivePermanents(filter,
                     source.getControllerId(), source.getSourceId(), game)) {
                 switch (layer) {
diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/enchantments/StarfieldOfNyxTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/enchantments/StarfieldOfNyxTest.java
index 157692786a..ad524a51a4 100644
--- a/Mage.Tests/src/test/java/org/mage/test/cards/enchantments/StarfieldOfNyxTest.java
+++ b/Mage.Tests/src/test/java/org/mage/test/cards/enchantments/StarfieldOfNyxTest.java
@@ -1,13 +1,14 @@
 package org.mage.test.cards.enchantments;
 
 import mage.abilities.keyword.FlyingAbility;
+import mage.constants.CardType;
 import mage.constants.EmptyNames;
 import mage.constants.PhaseStep;
+import mage.constants.SubType;
 import mage.constants.Zone;
 import mage.filter.Filter;
 import mage.game.permanent.Permanent;
 import org.junit.Assert;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.mage.test.serverside.base.CardTestPlayerBase;
 
@@ -25,7 +26,7 @@ public class StarfieldOfNyxTest extends CardTestPlayerBase {
      */
     @Test
     public void testCloudform() {
-        // At the beginning of your upkeep, if you control an artifact, put a 1/1 
+        // At the beginning of your upkeep, if you control an artifact, put a 1/1
         // colorless Thopter artifact creature token with flying onto the battlefield.
         // Whenever one or more artifact creatures you control deal combat damage to a player, draw a card.
         addCard(Zone.BATTLEFIELD, playerA, "Thopter Spy Network", 2); // {2}{U}{U}  - added to come to 5 enchantments on the battlefield
@@ -35,7 +36,7 @@ public class StarfieldOfNyxTest extends CardTestPlayerBase {
         // As long as you control five or more enchantments, each other non-Aura enchantment you control is a creature in
         // addition to its other types and has base power and base toughness each equal to its converted mana cost.
         addCard(Zone.HAND, playerA, "Starfield of Nyx"); // "{4}{W}"
-        // When Cloudform enters the battlefield, it becomes an Aura with enchant creature. 
+        // When Cloudform enters the battlefield, it becomes an Aura with enchant creature.
         // Manifest the top card of your library and attach Cloudform to it.
         // Enchanted creature has flying and hexproof.
         addCard(Zone.HAND, playerA, "Cloudform"); // {1}{U}{U}
@@ -51,7 +52,7 @@ public class StarfieldOfNyxTest extends CardTestPlayerBase {
         assertAllCommandsUsed();
 
         assertGraveyardCount(playerA, "Thopter Spy Network", 0);
-        assertPowerToughness(playerA, EmptyNames.FACE_DOWN_CREATURE.toString(), 
+        assertPowerToughness(playerA, EmptyNames.FACE_DOWN_CREATURE.toString(),
                 2, 2, Filter.ComparisonScope.All); // the manifested cards
         assertPermanentCount(playerA, "Starfield of Nyx", 1);
         assertPowerToughness(playerA, "Thopter Spy Network", 4, 4, Filter.ComparisonScope.All);
@@ -66,7 +67,7 @@ public class StarfieldOfNyxTest extends CardTestPlayerBase {
      */
     @Test
     public void testHexproof() {
-        // At the beginning of your upkeep, if you control an artifact, put a 1/1 colorless 
+        // At the beginning of your upkeep, if you control an artifact, put a 1/1 colorless
         // Thopter artifact creature token with flying onto the battlefield.
         // Whenever one or more artifact creatures you control deal combat damage to a player, draw a card.
         addCard(Zone.BATTLEFIELD, playerA, "Plains", 5);
@@ -114,7 +115,7 @@ public class StarfieldOfNyxTest extends CardTestPlayerBase {
         setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
         execute();
         assertAllCommandsUsed();
-        
+
         assertPowerToughness(playerA, "Master of the Feast", 3, 3, Filter.ComparisonScope.All);
         assertPowerToughness(playerA, "Humility", 4, 4, Filter.ComparisonScope.All);
         // Humility loses its ability in layer 6.  Layer 7 never gets Humility's effect
@@ -139,10 +140,9 @@ public class StarfieldOfNyxTest extends CardTestPlayerBase {
      * there.
      */
     @Test
-    @Ignore
     public void testStarfieldOfNyxAndSongOfTheDryads() {
         // Nontoken creatures you control get +1/+1 and have vigilance.
-        addCard(Zone.BATTLEFIELD, playerA, "Always Watching", 5);
+        addCard(Zone.BATTLEFIELD, playerA, "Always Watching", 5); // Enchantment {1}{W}{W}
         addCard(Zone.BATTLEFIELD, playerA, "Plains", 5);
         // At the beginning of your upkeep, you may return target enchantment card from your graveyard to the battlefield.
         // As long as you control five or more enchantments, each other non-Aura enchantment you control is a creature in
@@ -157,15 +157,19 @@ public class StarfieldOfNyxTest extends CardTestPlayerBase {
         castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Song of the Dryads", "Starfield of Nyx");
 
         setStopAt(2, PhaseStep.BEGIN_COMBAT);
+
+        setStrictChooseMode(true);
         execute();
+        assertAllCommandsUsed();
 
         assertPermanentCount(playerA, "Always Watching", 5);
         assertPermanentCount(playerB, "Song of the Dryads", 1);
 
+        assertType("Always Watching", CardType.ENCHANTMENT, true);
+        assertType("Always Watching", CardType.CREATURE, false);
         assertPowerToughness(playerA, "Always Watching", 0, 0, Filter.ComparisonScope.All);
 
-        assertPermanentCount(playerA, "Forest", 1);
-
+        assertType("Starfield of Nyx", CardType.LAND, SubType.FOREST);
     }
 
 }
diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java
index 5cc971d404..3d3e4e8eda 100644
--- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java
+++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java
@@ -1,5 +1,13 @@
 package org.mage.test.serverside.base.impl;
 
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.UUID;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 import mage.MageObject;
 import mage.Mana;
 import mage.ObjectColor;
@@ -35,15 +43,6 @@ import org.mage.test.player.TestPlayer;
 import org.mage.test.serverside.base.CardTestAPI;
 import org.mage.test.serverside.base.MageTestPlayerBase;
 
-import java.io.FileNotFoundException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.UUID;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
 /**
  * API for test initialization and asserting the test results.
  *
@@ -274,10 +273,9 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
             }
         }
         Assert.assertFalse("Wrong stop command on " + this.stopOnTurn + " / " + this.stopAtStep + " (" + this.stopAtStep.getIndex() + ")"
-                        + " (found actions after stop on " + maxTurn + " / " + maxPhase + ")",
+                + " (found actions after stop on " + maxTurn + " / " + maxPhase + ")",
                 (maxTurn > this.stopOnTurn) || (maxTurn == this.stopOnTurn && maxPhase > this.stopAtStep.getIndex()));
 
-
         for (Player player : currentGame.getPlayers().values()) {
             TestPlayer testPlayer = (TestPlayer) player;
             currentGame.cheat(player.getId(), getCommands(testPlayer));
@@ -326,7 +324,6 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
     }
 
     // check commands
-
     private void check(String checkName, int turnNum, PhaseStep step, TestPlayer player, String command, String... params) {
         String res = CHECK_PREFIX + command;
         for (String param : params) {
@@ -428,7 +425,6 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
     }
 
     // show commands
-
     private void show(String showName, int turnNum, PhaseStep step, TestPlayer player, String command, String... params) {
         String res = "show:" + command;
         for (String param : params) {
@@ -496,8 +492,9 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
     }
 
     /**
-     * Disable auto-payment from mana pool, you must manually fill pool by activateManaAbility and unlock color by setChoice
-     * Use it for pay color order testing (e.g. simulate user clicks on mana pool to pay)
+     * Disable auto-payment from mana pool, you must manually fill pool by
+     * activateManaAbility and unlock color by setChoice Use it for pay color
+     * order testing (e.g. simulate user clicks on mana pool to pay)
      *
      * @param player
      */
@@ -509,8 +506,8 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Add a card to specified zone of specified player.
      *
      * @param gameZone {@link mage.constants.Zone} to add cards to.
-     * @param player   {@link Player} to add cards for. Use either playerA or
-     *                 playerB.
+     * @param player {@link Player} to add cards for. Use either playerA or
+     * playerB.
      * @param cardName Card name in string format.
      */
     @Override
@@ -522,10 +519,10 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Add any amount of cards to specified zone of specified player.
      *
      * @param gameZone {@link mage.constants.Zone} to add cards to.
-     * @param player   {@link Player} to add cards for. Use either playerA or
-     *                 playerB.
+     * @param player {@link Player} to add cards for. Use either playerA or
+     * playerB.
      * @param cardName Card name in string format.
-     * @param count    Amount of cards to be added.
+     * @param count Amount of cards to be added.
      */
     @Override
     public void addCard(Zone gameZone, TestPlayer player, String cardName, int count) {
@@ -536,13 +533,13 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Add any amount of cards to specified zone of specified player.
      *
      * @param gameZone {@link mage.constants.Zone} to add cards to.
-     * @param player   {@link Player} to add cards for. Use either playerA or
-     *                 playerB.
+     * @param player {@link Player} to add cards for. Use either playerA or
+     * playerB.
      * @param cardName Card name in string format.
-     * @param count    Amount of cards to be added.
-     * @param tapped   In case gameZone is Battlefield, determines whether
-     *                 permanent should be tapped. In case gameZone is other than Battlefield,
-     *                 {@link IllegalArgumentException} is thrown
+     * @param count Amount of cards to be added.
+     * @param tapped In case gameZone is Battlefield, determines whether
+     * permanent should be tapped. In case gameZone is other than Battlefield,
+     * {@link IllegalArgumentException} is thrown
      */
     @Override
     public void addCard(Zone gameZone, TestPlayer player, String cardName, int count, boolean tapped) {
@@ -623,7 +620,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Set player's initial life count.
      *
      * @param player {@link Player} to set life count for.
-     * @param life   Life count to set.
+     * @param life Life count to set.
      */
     @Override
     public void setLife(TestPlayer player, int life) {
@@ -700,7 +697,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Assert player's life count after test execution.
      *
      * @param player {@link Player} to get life for comparison.
-     * @param life   Expected player's life to compare with.
+     * @param life Expected player's life to compare with.
      */
     @Override
     public void assertLife(Player player, int life) throws AssertionError {
@@ -717,14 +714,14 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * params 3b. all: there is at least one creature with the cardName with the
      * different p\t params
      *
-     * @param player    {@link Player} to get creatures for comparison.
-     * @param cardName  Card name to compare with.
-     * @param power     Expected power to compare with.
+     * @param player {@link Player} to get creatures for comparison.
+     * @param cardName Card name to compare with.
+     * @param power Expected power to compare with.
      * @param toughness Expected toughness to compare with.
-     * @param scope     {@link mage.filter.Filter.ComparisonScope} Use ANY, if you
-     *                  want "at least one creature with given name should have specified p\t"
-     *                  Use ALL, if you want "all creature with gived name should have specified
-     *                  p\t"
+     * @param scope {@link mage.filter.Filter.ComparisonScope} Use ANY, if you
+     * want "at least one creature with given name should have specified p\t"
+     * Use ALL, if you want "all creature with gived name should have specified
+     * p\t"
      */
     @Override
     public void assertPowerToughness(Player player, String cardName, int power, int toughness, Filter.ComparisonScope scope)
@@ -813,9 +810,9 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * @param player
      * @param cardName
      * @param ability
-     * @param mustHave true if creature should contain ability, false if it should
-     *                 NOT contain it instead
-     * @param count    number of permanents with that ability
+     * @param mustHave true if creature should contain ability, false if it
+     * should NOT contain it instead
+     * @param count number of permanents with that ability
      * @throws AssertionError
      */
     public void assertAbility(Player player, String cardName, Ability ability, boolean mustHave, int count) throws AssertionError {
@@ -848,7 +845,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Assert permanent count under player's control.
      *
      * @param player {@link Player} which permanents should be counted.
-     * @param count  Expected count.
+     * @param count Expected count.
      */
     @Override
     public void assertPermanentCount(Player player, int count) throws AssertionError {
@@ -864,9 +861,9 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
     /**
      * Assert permanent count under player's control.
      *
-     * @param player   {@link Player} which permanents should be counted.
+     * @param player {@link Player} which permanents should be counted.
      * @param cardName Name of the cards that should be counted.
-     * @param count    Expected count.
+     * @param count Expected count.
      */
     @Override
     public void assertPermanentCount(Player player, String cardName, int count) throws AssertionError {
@@ -916,8 +913,8 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Assert counter count on a permanent
      *
      * @param cardName Name of the cards that should be counted.
-     * @param type     Type of the counter that should be counted.
-     * @param count    Expected count.
+     * @param type Type of the counter that should be counted.
+     * @param count Expected count.
      */
     public void assertCounterCount(String cardName, CounterType type, int count) throws AssertionError {
         this.assertCounterCount(null, cardName, type, count);
@@ -940,8 +937,8 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Assert counter count on a card in exile
      *
      * @param cardName Name of the cards that should be counted.
-     * @param type     Type of the counter that should be counted.
-     * @param count    Expected count.
+     * @param type Type of the counter that should be counted.
+     * @param count Expected count.
      */
     public void assertCounterOnExiledCardCount(String cardName, CounterType type, int count) throws AssertionError {
         //Assert.assertNotEquals("", cardName);
@@ -964,8 +961,8 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Assert counter count on a player
      *
      * @param player The player whos counters should be counted.
-     * @param type   Type of the counter that should be counted.
-     * @param count  Expected count.
+     * @param type Type of the counter that should be counted.
+     * @param count Expected count.
      */
     public void assertCounterCount(Player player, CounterType type, int count) throws AssertionError {
         Assert.assertEquals("(Battlefield) Counter counts are not equal (" + player.getName() + ':' + type + ')', count, player.getCounters().getCount(type));
@@ -975,7 +972,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Assert whether a permanent is a specified type or not
      *
      * @param cardName Name of the permanent that should be checked.
-     * @param type     A type to test for
+     * @param type A type to test for
      * @param mustHave true if creature should have type, false if it should not
      */
     public void assertType(String cardName, CardType type, boolean mustHave) throws AssertionError {
@@ -991,7 +988,8 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
 
         Assert.assertNotNull("There is no such permanent on the battlefield, cardName=" + cardName, found);
 
-        Assert.assertTrue("(Battlefield) card type not found (" + cardName + ':' + type + ')', (found.getCardType().contains(type) == mustHave));
+        Assert.assertTrue("(Battlefield) card type " + (mustHave ? "not " : "")
+                + "found (" + cardName + ':' + type + ')', (found.getCardType().contains(type) == mustHave));
 
     }
 
@@ -999,8 +997,8 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Assert whether a permanent is a specified type
      *
      * @param cardName Name of the permanent that should be checked.
-     * @param type     A type to test for
-     * @param subType  a subtype to test for
+     * @param type A type to test for
+     * @param subType a subtype to test for
      */
     public void assertType(String cardName, CardType type, SubType subType) throws AssertionError {
         //Assert.assertNotEquals("", cardName);
@@ -1015,7 +1013,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Assert whether a permanent is not a specified type
      *
      * @param cardName Name of the permanent that should be checked.
-     * @param type     A type to test for
+     * @param type A type to test for
      */
     public void assertNotType(String cardName, CardType type) throws AssertionError {
         //Assert.assertNotEquals("", cardName);
@@ -1027,7 +1025,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Assert whether a permanent is not a specified subtype
      *
      * @param cardName Name of the permanent that should be checked.
-     * @param subType  a subtype to test for
+     * @param subType a subtype to test for
      */
     public void assertNotSubtype(String cardName, SubType subType) throws AssertionError {
         //Assert.assertNotEquals("", cardName);
@@ -1040,10 +1038,10 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
     /**
      * Assert permanent color
      *
-     * @param player       player to check
-     * @param cardName     card name on battlefield from player
+     * @param player player to check
+     * @param cardName card name on battlefield from player
      * @param searchColors colors list with searchable values
-     * @param mustHave     must or not must have that colors
+     * @param mustHave must or not must have that colors
      */
     public void assertColor(Player player, String cardName, ObjectColor searchColors, boolean mustHave) {
         //Assert.assertNotEquals("", cardName);
@@ -1078,7 +1076,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Assert whether a permanent is tapped or not
      *
      * @param cardName Name of the permanent that should be checked.
-     * @param tapped   Whether the permanent is tapped or not
+     * @param tapped Whether the permanent is tapped or not
      */
     public void assertTapped(String cardName, boolean tapped) throws AssertionError {
         //Assert.assertNotEquals("", cardName);
@@ -1105,8 +1103,8 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Assert whether X permanents of the same name are tapped or not.
      *
      * @param cardName Name of the permanent that should be checked.
-     * @param tapped   Whether the permanent is tapped or not
-     * @param count    The amount of this permanents that should be tapped
+     * @param tapped Whether the permanent is tapped or not
+     * @param count The amount of this permanents that should be tapped
      */
     public void assertTappedCount(String cardName, boolean tapped, int count) throws AssertionError {
         //Assert.assertNotEquals("", cardName);
@@ -1128,7 +1126,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
     /**
      * Assert whether a permanent is attacking or not
      *
-     * @param cardName  Name of the permanent that should be checked.
+     * @param cardName Name of the permanent that should be checked.
      * @param attacking Whether the permanent is attacking or not
      */
     public void assertAttacking(String cardName, boolean attacking) throws AssertionError {
@@ -1150,7 +1148,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Assert card count in player's hand.
      *
      * @param player {@link Player} who's hand should be counted.
-     * @param count  Expected count.
+     * @param count Expected count.
      */
     public void assertHandCount(Player player, int count) throws AssertionError {
         int actual = currentGame.getPlayer(player.getId()).getHand().size();
@@ -1160,9 +1158,9 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
     /**
      * Assert card count in player's hand.
      *
-     * @param player   {@link Player} who's hand should be counted.
+     * @param player {@link Player} who's hand should be counted.
      * @param cardName Name of the cards that should be counted.
-     * @param count    Expected count.
+     * @param count Expected count.
      */
     public void assertHandCount(Player player, String cardName, int count) throws AssertionError {
         //Assert.assertNotEquals("", cardName);
@@ -1182,7 +1180,6 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
         Assert.assertEquals("(Hand) Card counts for card " + cardName + " for " + player.getName() + " are not equal ", count, actual);
     }
 
-
     public void assertManaPool(Player player, ManaType color, int amount) {
         ManaPool manaPool = currentGame.getPlayer(player.getId()).getManaPool();
         switch (color) {
@@ -1211,7 +1208,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Assert card count in player's graveyard.
      *
      * @param player {@link Player} who's graveyard should be counted.
-     * @param count  Expected count.
+     * @param count Expected count.
      */
     public void assertGraveyardCount(Player player, int count) throws AssertionError {
         int actual = currentGame.getPlayer(player.getId()).getGraveyard().size();
@@ -1222,7 +1219,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Assert card count in exile.
      *
      * @param cardName Name of the cards that should be counted.
-     * @param count    Expected count.
+     * @param count Expected count.
      */
     public void assertExileCount(String cardName, int count) throws AssertionError {
         //Assert.assertNotEquals("", cardName);
@@ -1260,9 +1257,9 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
     /**
      * Assert card count in player's exile.
      *
-     * @param owner    {@link Player} who's exile should be counted.
+     * @param owner {@link Player} who's exile should be counted.
      * @param cardName Name of the cards that should be counted.
-     * @param count    Expected count.
+     * @param count Expected count.
      */
     public void assertExileCount(Player owner, String cardName, int count) throws AssertionError {
         //Assert.assertNotEquals("", cardName);
@@ -1281,9 +1278,9 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
     /**
      * Assert card count in player's graveyard.
      *
-     * @param player   {@link Player} who's graveyard should be counted.
+     * @param player {@link Player} who's graveyard should be counted.
      * @param cardName Name of the cards that should be counted.
-     * @param count    Expected count.
+     * @param count Expected count.
      */
     public void assertGraveyardCount(Player player, String cardName, int count) throws AssertionError {
         assertAliaseSupportInActivateCommand(cardName, true);
@@ -1302,7 +1299,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * Assert library card count.
      *
      * @param player {@link Player} who's library should be counted.
-     * @param count  Expected count.
+     * @param count Expected count.
      */
     public void assertLibraryCount(Player player, int count) throws AssertionError {
         List<Card> libraryList = player.getLibrary().getCards(currentGame);
@@ -1313,9 +1310,9 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
     /**
      * Assert specific card count in player's library.
      *
-     * @param player   {@link Player} who's library should be counted.
+     * @param player {@link Player} who's library should be counted.
      * @param cardName Name of the cards that should be counted.
-     * @param count    Expected count.
+     * @param count Expected count.
      */
     public void assertLibraryCount(Player player, String cardName, int count) throws AssertionError {
         //Assert.assertNotEquals("", cardName);
@@ -1426,8 +1423,9 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
     }
 
     /**
-     * AI play one PRIORITY with multi game simulations (calcs and play ONE best action, can be called with stack)
-     * All choices must be made by AI (e.g. strict mode possible)
+     * AI play one PRIORITY with multi game simulations (calcs and play ONE best
+     * action, can be called with stack) All choices must be made by AI (e.g.
+     * strict mode possible)
      */
     public void aiPlayPriority(int turnNum, PhaseStep step, TestPlayer player) {
         assertAiPlayAndGameCompatible(player);
@@ -1435,8 +1433,9 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
     }
 
     /**
-     * AI play STEP to the end with multi game simulations (calcs and play best actions until step ends, can be called in the middle of the step)
-     * All choices must be made by AI (e.g. strict mode possible)
+     * AI play STEP to the end with multi game simulations (calcs and play best
+     * actions until step ends, can be called in the middle of the step) All
+     * choices must be made by AI (e.g. strict mode possible)
      */
     public void aiPlayStep(int turnNum, PhaseStep step, TestPlayer player) {
         assertAiPlayAndGameCompatible(player);
@@ -1494,7 +1493,8 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * @param player
      * @param cardName
      * @param targetName for modes you can add "mode=3" before target name,
-     *                   multiple targets can be seperated by ^, not target marks as TestPlayer.NO_TARGET
+     * multiple targets can be seperated by ^, not target marks as
+     * TestPlayer.NO_TARGET
      */
     public void castSpell(int turnNum, PhaseStep step, TestPlayer player, String cardName, String targetName) {
         //Assert.assertNotEquals("", cardName);
@@ -1517,8 +1517,8 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * @param step
      * @param player
      * @param cardName
-     * @param targetName   for modal spells add the mode to the name e.g.
-     *                     "mode=2SilvercoatLion^mode3=PillarfieldOx"
+     * @param targetName for modal spells add the mode to the name e.g.
+     * "mode=2SilvercoatLion^mode3=PillarfieldOx"
      * @param spellOnStack
      */
     public void castSpell(int turnNum, PhaseStep step, TestPlayer player, String cardName, String targetName, String spellOnStack) {
@@ -1605,7 +1605,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * @param step
      * @param player
      * @param ability
-     * @param targetName   use NO_TARGET if there is no target to set
+     * @param targetName use NO_TARGET if there is no target to set
      * @param spellOnStack
      */
     public void activateAbility(int turnNum, PhaseStep step, TestPlayer player, String ability, String targetName, String spellOnStack) {
@@ -1618,8 +1618,8 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      * @param step
      * @param player
      * @param ability
-     * @param targetName   if not target has to be defined use the constant
-     *                     NO_TARGET
+     * @param targetName if not target has to be defined use the constant
+     * NO_TARGET
      * @param spellOnStack
      * @param clause
      */
@@ -1705,10 +1705,10 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      *
      * @param player
      * @param choice starting with "1" for mode 1, "2" for mode 2 and so on (to
-     *               set multiple modes call the command multiple times). If a spell mode can
-     *               be used only once like Demonic Pact, the value has to be set to the
-     *               number of the remaining modes (e.g. if only 2 are left the number need to
-     *               be 1 or 2).
+     * set multiple modes call the command multiple times). If a spell mode can
+     * be used only once like Demonic Pact, the value has to be set to the
+     * number of the remaining modes (e.g. if only 2 are left the number need to
+     * be 1 or 2).
      */
     public void setModeChoice(TestPlayer player, String choice) {
         player.addModeChoice(choice);
@@ -1719,12 +1719,12 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
      *
      * @param player
      * @param target you can add multiple targets by separating them by the "^"
-     *               character e.g. "creatureName1^creatureName2" you can qualify the target
-     *               additional by setcode e.g. "creatureName-M15" you can add [no copy] to
-     *               the end of the target name to prohibit targets that are copied you can
-     *               add [only copy] to the end of the target name to allow only targets that
-     *               are copies. For modal spells use a prefix with the mode number:
-     *               mode=1Lightning Bolt^mode=2Silvercoat Lion
+     * character e.g. "creatureName1^creatureName2" you can qualify the target
+     * additional by setcode e.g. "creatureName-M15" you can add [no copy] to
+     * the end of the target name to prohibit targets that are copied you can
+     * add [only copy] to the end of the target name to allow only targets that
+     * are copies. For modal spells use a prefix with the mode number:
+     * mode=1Lightning Bolt^mode=2Silvercoat Lion
      */
     // TODO: mode options doesn't work here (see BrutalExpulsionTest)
     public void addTarget(TestPlayer player, String target) {
@@ -1743,7 +1743,8 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
 
     /**
      * @param player
-     * @param target use TestPlayer.TARGET_SKIP to 0 targets selects or to stop "up two xxx" selection
+     * @param target use TestPlayer.TARGET_SKIP to 0 targets selects or to stop
+     * "up two xxx" selection
      * @param amount
      */
     public void addTargetAmount(TestPlayer player, String target, int amount) {
@@ -1758,7 +1759,6 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
         addTargetAmount(player, "targetPlayer=" + targetPlayer.getName(), amount);
     }
 
-
     public void addTargetAmount(TestPlayer player, String target) {
         Assert.assertTrue("Only skip command allows here", target.equals(TestPlayer.TARGET_SKIP));
         addTargetAmount(player, target, 0);
@@ -1793,10 +1793,18 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
     }
 
     public void waitStackResolved(int turnNum, PhaseStep step) {
-        if (playerA != null) waitStackResolved(turnNum, step, playerA);
-        if (playerB != null) waitStackResolved(turnNum, step, playerB);
-        if (playerC != null) waitStackResolved(turnNum, step, playerC);
-        if (playerD != null) waitStackResolved(turnNum, step, playerD);
+        if (playerA != null) {
+            waitStackResolved(turnNum, step, playerA);
+        }
+        if (playerB != null) {
+            waitStackResolved(turnNum, step, playerB);
+        }
+        if (playerC != null) {
+            waitStackResolved(turnNum, step, playerC);
+        }
+        if (playerD != null) {
+            waitStackResolved(turnNum, step, playerD);
+        }
     }
 
     private void assertAliaseSupportInActivateCommand(String targetName, boolean methodSupportAliases) {