diff --git a/.gitattributes b/.gitattributes
index 07f53160a70..388f2e35b5b 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -13440,8 +13440,6 @@ src/main/java/forge/Command.java svneol=native#text/plain
src/main/java/forge/CommandList.java svneol=native#text/plain
src/main/java/forge/Constant.java svneol=native#text/plain
src/main/java/forge/CounterType.java svneol=native#text/plain
-src/main/java/forge/GameAction.java svneol=native#text/plain
-src/main/java/forge/GameActionUtil.java svneol=native#text/plain
src/main/java/forge/GameEntity.java -text
src/main/java/forge/GameLog.java -text
src/main/java/forge/ImageCache.java svneol=native#text/plain
@@ -13859,6 +13857,8 @@ src/main/java/forge/error/BugzReporter.java svneol=native#text/plain
src/main/java/forge/error/ErrorViewer.java svneol=native#text/plain
src/main/java/forge/error/ExceptionHandler.java svneol=native#text/plain
src/main/java/forge/error/package-info.java svneol=native#text/plain
+src/main/java/forge/game/GameAction.java svneol=native#text/plain
+src/main/java/forge/game/GameActionUtil.java svneol=native#text/plain
src/main/java/forge/game/GameEndReason.java -text
src/main/java/forge/game/GameFormat.java -text
src/main/java/forge/game/GameLossReason.java -text
diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java
index e1b54f1ab9b..e55b90a5083 100644
--- a/src/main/java/forge/Card.java
+++ b/src/main/java/forge/Card.java
@@ -55,6 +55,7 @@ import forge.card.staticability.StaticAbility;
import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerType;
import forge.card.trigger.ZCTrigger;
+import forge.game.GameActionUtil;
import forge.game.GlobalRuleChange;
import forge.game.event.CounterAddedEvent;
import forge.game.event.CardEquippedEvent;
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactory.java b/src/main/java/forge/card/abilityfactory/AbilityFactory.java
index ebd1ce8fba3..56b0374951b 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactory.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactory.java
@@ -30,7 +30,6 @@ import forge.CardUtil;
import forge.Command;
import forge.Constant;
import forge.CounterType;
-import forge.GameActionUtil;
import forge.Singletons;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cost.Cost;
@@ -41,6 +40,7 @@ import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbilityCondition;
import forge.card.spellability.SpellAbilityRestriction;
import forge.card.spellability.Target;
+import forge.game.GameActionUtil;
import forge.game.GameState;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilCost;
diff --git a/src/main/java/forge/card/abilityfactory/effects/ManaEffect.java b/src/main/java/forge/card/abilityfactory/effects/ManaEffect.java
index ab40e63101e..e0a317c26f4 100644
--- a/src/main/java/forge/card/abilityfactory/effects/ManaEffect.java
+++ b/src/main/java/forge/card/abilityfactory/effects/ManaEffect.java
@@ -5,7 +5,6 @@ import java.util.List;
import forge.Card;
import forge.Constant;
import forge.CounterType;
-import forge.GameActionUtil;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
@@ -14,6 +13,7 @@ import forge.card.spellability.AbilityManaPart;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.control.input.InputPayManaCostUtil;
+import forge.game.GameActionUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
diff --git a/src/main/java/forge/control/input/InputMulligan.java b/src/main/java/forge/control/input/InputMulligan.java
index a6f8c07a4a0..2e089ab0181 100644
--- a/src/main/java/forge/control/input/InputMulligan.java
+++ b/src/main/java/forge/control/input/InputMulligan.java
@@ -26,10 +26,10 @@ import forge.Card;
import forge.CardLists;
import forge.CardPredicates;
-import forge.GameAction;
import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.spellability.SpellAbility;
+import forge.game.GameAction;
import forge.game.GameState;
import forge.game.GameType;
import forge.game.ai.ComputerUtil;
diff --git a/src/main/java/forge/GameAction.java b/src/main/java/forge/game/GameAction.java
similarity index 99%
rename from src/main/java/forge/GameAction.java
rename to src/main/java/forge/game/GameAction.java
index e3b63e7b515..09484efbf33 100644
--- a/src/main/java/forge/GameAction.java
+++ b/src/main/java/forge/game/GameAction.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package forge;
+package forge.game;
import java.util.ArrayList;
import java.util.Collections;
@@ -29,6 +29,15 @@ import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+import forge.Card;
+import forge.CardCharacteristicName;
+import forge.CardLists;
+import forge.CardPredicates;
+import forge.CardUtil;
+import forge.Command;
+import forge.CounterType;
+import forge.GameEntity;
+import forge.Singletons;
import forge.card.CardType;
import forge.card.SpellManaCost;
import forge.card.abilityfactory.AbilityFactory;
@@ -55,11 +64,6 @@ import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerType;
import forge.control.input.InputPayManaCost;
import forge.control.input.InputPayManaCostUtil;
-import forge.game.GameEndReason;
-import forge.game.GameLossReason;
-import forge.game.GameState;
-import forge.game.GlobalRuleChange;
-import forge.game.MatchController;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilCost;
import forge.game.event.CardDestroyedEvent;
@@ -195,7 +199,7 @@ public class GameAction {
ReplacementResult repres = game.getReplacementHandler().run(repParams);
if (repres != ReplacementResult.NotReplaced) {
if (game.getStack().isResolving(c) && !zoneTo.is(ZoneType.Graveyard) && repres == ReplacementResult.Prevented) {
- return Singletons.getModel().getGame().getAction().moveToGraveyard(c);
+ return GameAction.this.moveToGraveyard(c);
}
return c;
}
diff --git a/src/main/java/forge/GameActionUtil.java b/src/main/java/forge/game/GameActionUtil.java
similarity index 99%
rename from src/main/java/forge/GameActionUtil.java
rename to src/main/java/forge/game/GameActionUtil.java
index 1a3b592833e..96b56b8aa74 100644
--- a/src/main/java/forge/GameActionUtil.java
+++ b/src/main/java/forge/game/GameActionUtil.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package forge;
+package forge.game;
import java.util.ArrayList;
import java.util.HashMap;
@@ -25,6 +25,14 @@ import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+import forge.Card;
+import forge.CardLists;
+import forge.CardPredicates;
+import forge.CardUtil;
+import forge.Command;
+import forge.Constant;
+import forge.CounterType;
+import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.card.SpellManaCost;
import forge.card.abilityfactory.AbilityFactory;
@@ -51,7 +59,6 @@ import forge.control.input.Input;
import forge.control.input.InputPayDiscardCost;
import forge.control.input.InputPayManaCostAbility;
import forge.control.input.InputPayReturnCost;
-import forge.game.GameState;
import forge.game.ai.ComputerUtil;
import forge.game.event.CardDamagedEvent;
import forge.game.event.LifeLossEvent;
diff --git a/src/main/java/forge/game/GameNew.java b/src/main/java/forge/game/GameNew.java
index c6d470a4693..d7b0187f23a 100644
--- a/src/main/java/forge/game/GameNew.java
+++ b/src/main/java/forge/game/GameNew.java
@@ -22,7 +22,6 @@ import forge.Card;
import forge.CardLists;
import forge.CardPredicates;
import forge.CardUtil;
-import forge.GameAction;
import forge.Singletons;
import forge.card.trigger.TriggerHandler;
import forge.card.trigger.TriggerType;
diff --git a/src/main/java/forge/game/GameState.java b/src/main/java/forge/game/GameState.java
index f8ae8c2acd5..a126cabb9b0 100644
--- a/src/main/java/forge/game/GameState.java
+++ b/src/main/java/forge/game/GameState.java
@@ -29,8 +29,6 @@ import forge.Card;
import forge.CardLists;
import forge.CardPredicates.Presets;
import forge.ColorChanger;
-import forge.GameAction;
-import forge.GameActionUtil;
import forge.GameLog;
import forge.Singletons;
import forge.StaticEffects;
diff --git a/src/main/java/forge/game/ai/AiController.java b/src/main/java/forge/game/ai/AiController.java
index 92659d9bf26..2604bf401c7 100644
--- a/src/main/java/forge/game/ai/AiController.java
+++ b/src/main/java/forge/game/ai/AiController.java
@@ -31,7 +31,6 @@ import forge.CardLists;
import forge.CardPredicates;
import forge.CardPredicates.Presets;
import forge.Constant;
-import forge.GameActionUtil;
import forge.Singletons;
import forge.card.abilityfactory.ApiType;
@@ -40,6 +39,7 @@ import forge.card.cost.CostDiscard;
import forge.card.cost.CostPart;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellPermanent;
+import forge.game.GameActionUtil;
import forge.game.GameState;
import forge.game.player.AIPlayer;
import forge.game.player.Player;
diff --git a/src/main/java/forge/game/ai/ComputerUtilMana.java b/src/main/java/forge/game/ai/ComputerUtilMana.java
index cb2bd932c08..5a1124a1442 100644
--- a/src/main/java/forge/game/ai/ComputerUtilMana.java
+++ b/src/main/java/forge/game/ai/ComputerUtilMana.java
@@ -10,7 +10,6 @@ import com.google.common.base.Predicate;
import forge.Card;
import forge.CardLists;
-import forge.GameActionUtil;
import forge.Singletons;
import forge.card.SpellManaCost;
import forge.card.abilityfactory.AbilityFactory;
@@ -23,6 +22,7 @@ import forge.card.mana.ManaPool;
import forge.card.spellability.AbilityManaPart;
import forge.card.spellability.SpellAbility;
import forge.control.input.InputPayManaCostUtil;
+import forge.game.GameActionUtil;
import forge.game.GameState;
import forge.game.player.AIPlayer;
import forge.game.player.Player;
diff --git a/src/main/java/forge/game/phase/CombatUtil.java b/src/main/java/forge/game/phase/CombatUtil.java
index 9c4bb190c82..51b0525d683 100644
--- a/src/main/java/forge/game/phase/CombatUtil.java
+++ b/src/main/java/forge/game/phase/CombatUtil.java
@@ -34,7 +34,6 @@ import forge.CardLists;
import forge.CardPredicates;
import forge.Command;
import forge.Constant;
-import forge.GameActionUtil;
import forge.GameEntity;
import forge.Singletons;
import forge.card.SpellManaCost;
@@ -46,6 +45,7 @@ import forge.card.spellability.Ability;
import forge.card.spellability.AbilityStatic;
import forge.card.staticability.StaticAbility;
import forge.card.trigger.TriggerType;
+import forge.game.GameActionUtil;
import forge.game.GameState;
import forge.game.GlobalRuleChange;
import forge.game.ai.ComputerUtil;
diff --git a/src/main/java/forge/game/phase/Upkeep.java b/src/main/java/forge/game/phase/Upkeep.java
index cfee534d83f..880987e26c6 100644
--- a/src/main/java/forge/game/phase/Upkeep.java
+++ b/src/main/java/forge/game/phase/Upkeep.java
@@ -32,7 +32,6 @@ import forge.CardPredicates;
import forge.CardPredicates.Presets;
import forge.Command;
import forge.CounterType;
-import forge.GameActionUtil;
import forge.Singletons;
import forge.card.SpellManaCost;
import forge.card.cardfactory.CardFactoryUtil;
@@ -44,6 +43,7 @@ import forge.card.spellability.AbilityStatic;
import forge.card.spellability.SpellAbility;
import forge.control.input.Input;
import forge.control.input.InputSelectManyCards;
+import forge.game.GameActionUtil;
import forge.game.GameState;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilCost;
diff --git a/src/main/java/forge/game/player/Player.java b/src/main/java/forge/game/player/Player.java
index 5ef798d5de8..1a8f2b3dd46 100644
--- a/src/main/java/forge/game/player/Player.java
+++ b/src/main/java/forge/game/player/Player.java
@@ -41,7 +41,6 @@ import forge.CardPredicates.Presets;
import forge.CardUtil;
import forge.Constant.Preferences;
import forge.CounterType;
-import forge.GameActionUtil;
import forge.GameEntity;
import forge.Singletons;
import forge.card.cardfactory.CardFactoryUtil;
@@ -52,6 +51,7 @@ import forge.card.spellability.Ability;
import forge.card.spellability.SpellAbility;
import forge.card.staticability.StaticAbility;
import forge.card.trigger.TriggerType;
+import forge.game.GameActionUtil;
import forge.game.GameLossReason;
import forge.game.GameState;
import forge.game.GlobalRuleChange;
diff --git a/src/main/java/forge/game/zone/MagicStack.java b/src/main/java/forge/game/zone/MagicStack.java
index 923bbb2970e..43378200cc6 100644
--- a/src/main/java/forge/game/zone/MagicStack.java
+++ b/src/main/java/forge/game/zone/MagicStack.java
@@ -31,7 +31,6 @@ import forge.CardLists;
import forge.CardPredicates;
import forge.CardPredicates.Presets;
import forge.Command;
-import forge.GameActionUtil;
import forge.Singletons;
import forge.card.SpellManaCost;
import forge.card.abilityfactory.AbilityFactory;
@@ -51,6 +50,7 @@ import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerType;
import forge.control.input.Input;
import forge.control.input.InputPayManaCostAbility;
+import forge.game.GameActionUtil;
import forge.game.GameState;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilCost;
diff --git a/src/main/java/forge/game/zone/PlayerZoneBattlefield.java b/src/main/java/forge/game/zone/PlayerZoneBattlefield.java
index dbd000188ab..784ba6e6fed 100644
--- a/src/main/java/forge/game/zone/PlayerZoneBattlefield.java
+++ b/src/main/java/forge/game/zone/PlayerZoneBattlefield.java
@@ -30,12 +30,12 @@ import forge.CardLists;
import forge.CardPredicates;
import forge.CardPredicates.Presets;
import forge.Command;
-import forge.GameActionUtil;
import forge.Singletons;
import forge.card.SpellManaCost;
import forge.card.spellability.Ability;
import forge.card.spellability.SpellAbility;
import forge.card.staticability.StaticAbility;
+import forge.game.GameActionUtil;
import forge.game.player.Player;
/**