From 3833d7bab37cc4f3cf024e8e9fe35503b13c3da7 Mon Sep 17 00:00:00 2001
From: Evan Kranzler <theelk801@gmail.com>
Date: Sun, 6 Mar 2022 18:31:07 -0500
Subject: [PATCH] updated implementation of Domain value

---
 .../src/mage/cards/a/AlliedStrategies.java    |  2 +-
 .../src/mage/cards/a/AvenTrailblazer.java     |  5 +-
 .../src/mage/cards/c/CollapsingBorders.java   |  8 +--
 .../src/mage/cards/c/CollectiveRestraint.java |  2 +-
 Mage.Sets/src/mage/cards/d/Draco.java         |  4 +-
 Mage.Sets/src/mage/cards/d/DragDown.java      |  6 +-
 Mage.Sets/src/mage/cards/e/EvasiveAction.java |  2 +-
 Mage.Sets/src/mage/cards/e/ExoticCurse.java   |  2 +-
 Mage.Sets/src/mage/cards/e/ExoticDisease.java | 21 +++---
 .../src/mage/cards/e/ExplodingBorders.java    |  2 +-
 Mage.Sets/src/mage/cards/g/GaeasMight.java    |  2 +-
 .../src/mage/cards/h/HiveheartShaman.java     |  5 +-
 Mage.Sets/src/mage/cards/k/KavuScout.java     |  2 +-
 Mage.Sets/src/mage/cards/m/ManaforceMace.java |  2 +-
 .../src/mage/cards/m/MaskOfIntolerance.java   | 21 +++---
 Mage.Sets/src/mage/cards/m/MatcaRioters.java  |  2 +-
 Mage.Sets/src/mage/cards/m/MightOfAlara.java  |  2 +-
 .../src/mage/cards/o/OrderedMigration.java    |  2 +-
 .../src/mage/cards/p/PathToTheFestival.java   |  5 +-
 Mage.Sets/src/mage/cards/p/PlanarDespair.java |  2 +-
 Mage.Sets/src/mage/cards/p/PowerArmor.java    |  2 +-
 .../src/mage/cards/p/PrismaticGeoscope.java   |  2 +-
 Mage.Sets/src/mage/cards/s/SamitePilgrim.java |  2 +-
 Mage.Sets/src/mage/cards/s/ScionOfDraco.java  |  5 +-
 Mage.Sets/src/mage/cards/s/SporeBurst.java    |  2 +-
 Mage.Sets/src/mage/cards/s/Stratadon.java     |  2 +-
 .../src/mage/cards/s/StrengthOfUnity.java     | 15 ++---
 .../src/mage/cards/t/TerritorialKavu.java     |  5 +-
 Mage.Sets/src/mage/cards/t/TribalFlames.java  |  2 +-
 .../src/mage/cards/t/TrompTheDomains.java     | 24 ++++---
 .../src/mage/cards/v/VoicesFromTheVoid.java   |  5 +-
 .../src/mage/cards/w/WanderingGoblins.java    |  5 +-
 .../src/mage/cards/w/WanderingStream.java     |  2 +-
 .../src/mage/cards/w/WayfaringGiant.java      | 21 +++---
 .../src/mage/cards/w/WorldlyCounsel.java      |  2 +-
 .../dynamicvalue/common/DomainValue.java      | 65 ++++++-------------
 36 files changed, 103 insertions(+), 157 deletions(-)

diff --git a/Mage.Sets/src/mage/cards/a/AlliedStrategies.java b/Mage.Sets/src/mage/cards/a/AlliedStrategies.java
index c91c6d71cf..b7aa8b37b5 100644
--- a/Mage.Sets/src/mage/cards/a/AlliedStrategies.java
+++ b/Mage.Sets/src/mage/cards/a/AlliedStrategies.java
@@ -21,7 +21,7 @@ public final class AlliedStrategies extends CardImpl {
         super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{U}");
 
         // Domain - Target player draws a card for each basic land type among lands they control.
-        this.getSpellAbility().addEffect(new DrawCardTargetEffect(new DomainValue(true)));
+        this.getSpellAbility().addEffect(new DrawCardTargetEffect(DomainValue.TARGET));
         this.getSpellAbility().addTarget(new TargetPlayer());
         this.getSpellAbility().setAbilityWord(AbilityWord.DOMAIN);
         this.getSpellAbility().addHint(DomainHint.instance);
diff --git a/Mage.Sets/src/mage/cards/a/AvenTrailblazer.java b/Mage.Sets/src/mage/cards/a/AvenTrailblazer.java
index ee22dd2457..9954e2607b 100644
--- a/Mage.Sets/src/mage/cards/a/AvenTrailblazer.java
+++ b/Mage.Sets/src/mage/cards/a/AvenTrailblazer.java
@@ -2,7 +2,6 @@ package mage.cards.a;
 
 import mage.MageInt;
 import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.dynamicvalue.DynamicValue;
 import mage.abilities.dynamicvalue.common.DomainValue;
 import mage.abilities.effects.common.continuous.SetToughnessSourceEffect;
 import mage.abilities.hint.common.DomainHint;
@@ -18,8 +17,6 @@ import java.util.UUID;
  */
 public final class AvenTrailblazer extends CardImpl {
 
-    private static final DynamicValue xValue = new DomainValue();
-
     public AvenTrailblazer(UUID ownerId, CardSetInfo setInfo) {
         super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
         this.subtype.add(SubType.BIRD);
@@ -33,7 +30,7 @@ public final class AvenTrailblazer extends CardImpl {
 
         // Domain - Aven Trailblazer's toughness is equal to the number of basic land types among lands you control.
         this.addAbility(new SimpleStaticAbility(
-                Zone.ALL, new SetToughnessSourceEffect(xValue, Duration.EndOfGame)
+                Zone.ALL, new SetToughnessSourceEffect(DomainValue.REGULAR, Duration.EndOfGame)
                 .setText("{this}'s toughness is equal to the number of basic land types among lands you control")
         ).addHint(DomainHint.instance).setAbilityWord(AbilityWord.DOMAIN));
     }
diff --git a/Mage.Sets/src/mage/cards/c/CollapsingBorders.java b/Mage.Sets/src/mage/cards/c/CollapsingBorders.java
index 9a066fe61a..934e031adc 100644
--- a/Mage.Sets/src/mage/cards/c/CollapsingBorders.java
+++ b/Mage.Sets/src/mage/cards/c/CollapsingBorders.java
@@ -1,7 +1,5 @@
-
 package mage.cards.c;
 
-import java.util.UUID;
 import mage.abilities.Ability;
 import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
 import mage.abilities.dynamicvalue.common.DomainValue;
@@ -15,10 +13,10 @@ import mage.constants.AbilityWord;
 import mage.constants.CardType;
 import mage.constants.TargetController;
 
+import java.util.UUID;
+
 /**
- *
  * @author LoneFox
- *
  */
 public final class CollapsingBorders extends CardImpl {
 
@@ -26,7 +24,7 @@ public final class CollapsingBorders extends CardImpl {
         super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}");
 
         // Domain - At the beginning of each player's upkeep, that player gains 1 life for each basic land type among lands they control. Then Collapsing Borders deals 3 damage to that player.
-        Effect effect = new GainLifeTargetEffect(new DomainValue(true));
+        Effect effect = new GainLifeTargetEffect(DomainValue.TARGET);
         effect.setText("that player gains 1 life for each basic land type among lands they control");
         Ability ability = new BeginningOfUpkeepTriggeredAbility(effect, TargetController.ANY, false);
         effect = new DamageTargetEffect(3);
diff --git a/Mage.Sets/src/mage/cards/c/CollectiveRestraint.java b/Mage.Sets/src/mage/cards/c/CollectiveRestraint.java
index fc36ceb624..df7d2435c8 100644
--- a/Mage.Sets/src/mage/cards/c/CollectiveRestraint.java
+++ b/Mage.Sets/src/mage/cards/c/CollectiveRestraint.java
@@ -56,7 +56,7 @@ class CollectiveRestraintPayManaToAttackAllEffect extends CantAttackYouUnlessPay
 
     @Override
     public ManaCosts getManaCostToPay(GameEvent event, Ability source, Game game) {
-        int domainValue = new DomainValue().calculate(game, source, this);
+        int domainValue = DomainValue.REGULAR.calculate(game, source, this);
         if (domainValue > 0) {
             return new ManaCostsImpl<>("{" + domainValue + '}');
         }
diff --git a/Mage.Sets/src/mage/cards/d/Draco.java b/Mage.Sets/src/mage/cards/d/Draco.java
index ee19347500..8c91d4e1c9 100644
--- a/Mage.Sets/src/mage/cards/d/Draco.java
+++ b/Mage.Sets/src/mage/cards/d/Draco.java
@@ -65,7 +65,7 @@ class DracoCostReductionEffect extends CostModificationEffectImpl {
 
     @Override
     public boolean apply(Game game, Ability source, Ability abilityToModify) {
-        CardUtil.reduceCost(abilityToModify, new DomainValue(2).calculate(game, source, this));
+        CardUtil.reduceCost(abilityToModify, 2 * DomainValue.REGULAR.calculate(game, source, this));
         return true;
     }
 
@@ -98,7 +98,7 @@ class DracoSacrificeUnlessPaysEffect extends OneShotEffect {
         Permanent permanent = game.getPermanent(source.getSourceId());
         if (player != null && permanent != null) {
             // The cost is reduced by {2} for each basic land type.
-            int domainValueReduction = new DomainValue(2).calculate(game, source, this);
+            int domainValueReduction = 2 * DomainValue.REGULAR.calculate(game, source, this);
             int count = Math.max(0, MAX_DOMAIN_VALUE - domainValueReduction);
             if (player.chooseUse(Outcome.Benefit, "Pay {" + count + "}? Or " + permanent.getName() + " will be sacrificed.", source, game)) {
                 Cost cost = ManaUtil.createManaCost(count, false);
diff --git a/Mage.Sets/src/mage/cards/d/DragDown.java b/Mage.Sets/src/mage/cards/d/DragDown.java
index 620508fe8f..2a17a475ae 100644
--- a/Mage.Sets/src/mage/cards/d/DragDown.java
+++ b/Mage.Sets/src/mage/cards/d/DragDown.java
@@ -1,6 +1,7 @@
 package mage.cards.d;
 
 import mage.abilities.dynamicvalue.DynamicValue;
+import mage.abilities.dynamicvalue.MultipliedValue;
 import mage.abilities.dynamicvalue.common.DomainValue;
 import mage.abilities.effects.common.continuous.BoostTargetEffect;
 import mage.abilities.hint.common.DomainHint;
@@ -18,13 +19,14 @@ import java.util.UUID;
  */
 public final class DragDown extends CardImpl {
 
-    private static final DynamicValue xValue = new DomainValue(-1);
+    private static final DynamicValue xValue = new MultipliedValue(DomainValue.REGULAR, -1);
 
     public DragDown(UUID ownerId, CardSetInfo setInfo) {
         super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{B}");
 
         // Domain - Target creature gets -1/-1 until end of turn for each basic land type among lands you control.
-        this.getSpellAbility().addEffect(new BoostTargetEffect(xValue, xValue, Duration.EndOfTurn, true));
+        this.getSpellAbility().addEffect(new BoostTargetEffect(xValue, xValue, Duration.EndOfTurn, true)
+                .setText("target creature gets -1/-1 until end of turn for each basic land type among lands you control"));
         this.getSpellAbility().addTarget(new TargetCreaturePermanent());
         this.getSpellAbility().addHint(DomainHint.instance);
         this.getSpellAbility().setAbilityWord(AbilityWord.DOMAIN);
diff --git a/Mage.Sets/src/mage/cards/e/EvasiveAction.java b/Mage.Sets/src/mage/cards/e/EvasiveAction.java
index b3b81d4e1a..6831eac3e5 100644
--- a/Mage.Sets/src/mage/cards/e/EvasiveAction.java
+++ b/Mage.Sets/src/mage/cards/e/EvasiveAction.java
@@ -21,7 +21,7 @@ public final class EvasiveAction extends CardImpl {
         super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}");
 
         // Domain - Counter target spell unless its controller pays {1} for each basic land type among lands you control.
-        this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(new DomainValue()));
+        this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(DomainValue.REGULAR));
         this.getSpellAbility().addTarget(new TargetSpell());
         this.getSpellAbility().setAbilityWord(AbilityWord.DOMAIN);
         this.getSpellAbility().addHint(DomainHint.instance);
diff --git a/Mage.Sets/src/mage/cards/e/ExoticCurse.java b/Mage.Sets/src/mage/cards/e/ExoticCurse.java
index dbd5f7c720..b3c478e06b 100644
--- a/Mage.Sets/src/mage/cards/e/ExoticCurse.java
+++ b/Mage.Sets/src/mage/cards/e/ExoticCurse.java
@@ -33,7 +33,7 @@ public final class ExoticCurse extends CardImpl {
         this.addAbility(new EnchantAbility(auraTarget.getTargetName()));
 
         // Domain - Enchanted creature gets -1/-1 for each basic land type among lands you control.
-        DynamicValue unboost = new SignInversionDynamicValue(new DomainValue());
+        DynamicValue unboost = new SignInversionDynamicValue(DomainValue.REGULAR);
         Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(unboost, unboost, Duration.WhileOnBattlefield));
         ability.setAbilityWord(AbilityWord.DOMAIN);
         this.addAbility(ability.addHint(DomainHint.instance));
diff --git a/Mage.Sets/src/mage/cards/e/ExoticDisease.java b/Mage.Sets/src/mage/cards/e/ExoticDisease.java
index 15b82d9d6b..34a5523c7d 100644
--- a/Mage.Sets/src/mage/cards/e/ExoticDisease.java
+++ b/Mage.Sets/src/mage/cards/e/ExoticDisease.java
@@ -1,36 +1,33 @@
-
 package mage.cards.e;
 
-import java.util.UUID;
 import mage.abilities.dynamicvalue.common.DomainValue;
-import mage.abilities.effects.Effect;
 import mage.abilities.effects.common.GainLifeEffect;
 import mage.abilities.effects.common.LoseLifeTargetEffect;
 import mage.abilities.hint.common.DomainHint;
 import mage.cards.CardImpl;
 import mage.cards.CardSetInfo;
+import mage.constants.AbilityWord;
 import mage.constants.CardType;
 import mage.target.TargetPlayer;
 
+import java.util.UUID;
+
 /**
- *
  * @author LoneFox
  */
 public final class ExoticDisease extends CardImpl {
 
     public ExoticDisease(UUID ownerId, CardSetInfo setInfo) {
-        super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{B}");
+        super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{B}");
 
         // Domain - Target player loses X life and you gain X life, where X is the number of basic land types among lands you control.
-        DomainValue dv = new DomainValue();
-        Effect effect = new LoseLifeTargetEffect(dv);
-        effect.setText("<i>Domain</i> &mdash; Target player loses X life");
-        this.getSpellAbility().addEffect(effect);
-        effect = new GainLifeEffect(dv);
-        effect.setText("and you gain X life, where X is the number of basic land types among lands you control");
-        this.getSpellAbility().addEffect(effect);
+        this.getSpellAbility().addEffect(new LoseLifeTargetEffect(DomainValue.REGULAR)
+                .setText("target player loses X life"));
+        this.getSpellAbility().addEffect(new GainLifeEffect(DomainValue.REGULAR)
+                .setText("and you gain X life, where X is the number of basic land types among lands you control"));
         this.getSpellAbility().addTarget(new TargetPlayer());
         this.getSpellAbility().addHint(DomainHint.instance);
+        this.getSpellAbility().setAbilityWord(AbilityWord.DOMAIN);
     }
 
     private ExoticDisease(final ExoticDisease card) {
diff --git a/Mage.Sets/src/mage/cards/e/ExplodingBorders.java b/Mage.Sets/src/mage/cards/e/ExplodingBorders.java
index 5de4c7f674..b7a82e6825 100644
--- a/Mage.Sets/src/mage/cards/e/ExplodingBorders.java
+++ b/Mage.Sets/src/mage/cards/e/ExplodingBorders.java
@@ -24,7 +24,7 @@ public final class ExplodingBorders extends CardImpl {
 
         // Domain - Search your library for a basic land card, put that card onto the battlefield tapped, then shuffle your library. Exploding Borders deals X damage to target player, where X is the number of basic land types among lands you control.
         this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true));
-        this.getSpellAbility().addEffect(new DamageTargetEffect(new DomainValue()));
+        this.getSpellAbility().addEffect(new DamageTargetEffect(DomainValue.REGULAR));
         this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
         this.getSpellAbility().addHint(DomainHint.instance);
         this.getSpellAbility().setAbilityWord(AbilityWord.DOMAIN);
diff --git a/Mage.Sets/src/mage/cards/g/GaeasMight.java b/Mage.Sets/src/mage/cards/g/GaeasMight.java
index 43338fa1f8..1f89d9ea4d 100644
--- a/Mage.Sets/src/mage/cards/g/GaeasMight.java
+++ b/Mage.Sets/src/mage/cards/g/GaeasMight.java
@@ -22,7 +22,7 @@ public final class GaeasMight extends CardImpl {
         super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{G}");
 
         // Domain - Target creature gets +1/+1 until end of turn for each basic land type among lands you control.
-        this.getSpellAbility().addEffect(new BoostTargetEffect(new DomainValue(), new DomainValue(), Duration.EndOfTurn));
+        this.getSpellAbility().addEffect(new BoostTargetEffect(DomainValue.REGULAR, DomainValue.REGULAR, Duration.EndOfTurn));
         this.getSpellAbility().addTarget(new TargetCreaturePermanent());
         this.getSpellAbility().setAbilityWord(AbilityWord.DOMAIN);
         this.getSpellAbility().addHint(DomainHint.instance);
diff --git a/Mage.Sets/src/mage/cards/h/HiveheartShaman.java b/Mage.Sets/src/mage/cards/h/HiveheartShaman.java
index 35f5f608a7..a6e5ecb11b 100644
--- a/Mage.Sets/src/mage/cards/h/HiveheartShaman.java
+++ b/Mage.Sets/src/mage/cards/h/HiveheartShaman.java
@@ -5,7 +5,6 @@ import mage.abilities.Ability;
 import mage.abilities.common.ActivateAsSorceryActivatedAbility;
 import mage.abilities.common.AttacksTriggeredAbility;
 import mage.abilities.costs.mana.ManaCostsImpl;
-import mage.abilities.dynamicvalue.DynamicValue;
 import mage.abilities.dynamicvalue.common.DomainValue;
 import mage.abilities.effects.OneShotEffect;
 import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
@@ -95,8 +94,6 @@ enum HiveheartShamanPredicate implements ObjectSourcePlayerPredicate<Card> {
 
 class HiveheartShamanEffect extends OneShotEffect {
 
-    private static final DynamicValue xValue = new DomainValue();
-
     HiveheartShamanEffect() {
         super(Outcome.Benefit);
         staticText = "create a 1/1 green Insect creature token. Put X +1/+1 counters on it, " +
@@ -116,7 +113,7 @@ class HiveheartShamanEffect extends OneShotEffect {
     public boolean apply(Game game, Ability source) {
         Token token = new InsectToken();
         token.putOntoBattlefield(1, game, source);
-        int domainCount = xValue.calculate(game, source, this);
+        int domainCount = DomainValue.REGULAR.calculate(game, source, this);
         if (domainCount < 1) {
             return true;
         }
diff --git a/Mage.Sets/src/mage/cards/k/KavuScout.java b/Mage.Sets/src/mage/cards/k/KavuScout.java
index 49f0682e84..81778331d5 100644
--- a/Mage.Sets/src/mage/cards/k/KavuScout.java
+++ b/Mage.Sets/src/mage/cards/k/KavuScout.java
@@ -32,7 +32,7 @@ public final class KavuScout extends CardImpl {
         this.toughness = new MageInt(2);
 
         // Domain - Kavu Scout gets +1/+0 for each basic land type among lands you control.
-        Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(new DomainValue(), StaticValue.get(0), Duration.WhileOnBattlefield));
+        Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(DomainValue.REGULAR, StaticValue.get(0), Duration.WhileOnBattlefield));
         ability.setAbilityWord(AbilityWord.DOMAIN);
         this.addAbility(ability.addHint(DomainHint.instance));
     }
diff --git a/Mage.Sets/src/mage/cards/m/ManaforceMace.java b/Mage.Sets/src/mage/cards/m/ManaforceMace.java
index 8085d00a95..ce167fac3d 100644
--- a/Mage.Sets/src/mage/cards/m/ManaforceMace.java
+++ b/Mage.Sets/src/mage/cards/m/ManaforceMace.java
@@ -26,7 +26,7 @@ public final class ManaforceMace extends CardImpl {
 
         // Domain - Equipped creature gets +1/+1 for each basic land type among lands you control.
         this.addAbility(new SimpleStaticAbility(
-                new BoostEquippedEffect(new DomainValue(), new DomainValue())
+                new BoostEquippedEffect(DomainValue.REGULAR, DomainValue.REGULAR)
         ).addHint(DomainHint.instance).setAbilityWord(AbilityWord.DOMAIN));
 
         // Equip {3}
diff --git a/Mage.Sets/src/mage/cards/m/MaskOfIntolerance.java b/Mage.Sets/src/mage/cards/m/MaskOfIntolerance.java
index d685e2e230..d8ad1f425e 100644
--- a/Mage.Sets/src/mage/cards/m/MaskOfIntolerance.java
+++ b/Mage.Sets/src/mage/cards/m/MaskOfIntolerance.java
@@ -1,10 +1,8 @@
-
 package mage.cards.m;
 
-import java.util.UUID;
 import mage.abilities.Ability;
-import mage.abilities.TriggeredAbility;
 import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
+import mage.abilities.condition.Condition;
 import mage.abilities.condition.IntCompareCondition;
 import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
 import mage.abilities.dynamicvalue.common.DomainValue;
@@ -15,22 +13,25 @@ import mage.cards.CardSetInfo;
 import mage.constants.CardType;
 import mage.constants.ComparisonType;
 import mage.constants.TargetController;
-import mage.constants.Zone;
 import mage.game.Game;
 
+import java.util.UUID;
+
 /**
- *
  * @author LoneFox
  */
 public final class MaskOfIntolerance extends CardImpl {
 
+    private static final Condition condition = new MaskOfIntoleranceCondition();
+
     public MaskOfIntolerance(UUID ownerId, CardSetInfo setInfo) {
-        super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}");
+        super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
 
         // At the beginning of each player's upkeep, if there are four or more basic land types among lands that player controls, Mask of Intolerance deals 3 damage to that player.
-        TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new DamageTargetEffect(3), TargetController.ANY, false);
-        this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new MaskOfIntoleranceCondition(),
-            "At the beginning of each player's upkeep, if there are four or more basic land types among lands that player controls, {this} deals 3 damage to that player.").addHint(DomainHint.instance));
+        this.addAbility(new ConditionalInterveningIfTriggeredAbility(new BeginningOfUpkeepTriggeredAbility(
+                new DamageTargetEffect(3), TargetController.ANY, false
+        ), condition, "At the beginning of each player's upkeep, if there are four or more basic land types " +
+                "among lands that player controls, {this} deals 3 damage to that player.").addHint(DomainHint.instance));
     }
 
     private MaskOfIntolerance(final MaskOfIntolerance card) {
@@ -51,6 +52,6 @@ class MaskOfIntoleranceCondition extends IntCompareCondition {
 
     @Override
     protected int getInputValue(Game game, Ability source) {
-        return new DomainValue(1, game.getActivePlayerId()).calculate(game, source, null);
+        return DomainValue.ACTIVE.calculate(game, source, null);
     }
 }
diff --git a/Mage.Sets/src/mage/cards/m/MatcaRioters.java b/Mage.Sets/src/mage/cards/m/MatcaRioters.java
index ded107e59e..7476b3398d 100644
--- a/Mage.Sets/src/mage/cards/m/MatcaRioters.java
+++ b/Mage.Sets/src/mage/cards/m/MatcaRioters.java
@@ -30,7 +30,7 @@ public final class MatcaRioters extends CardImpl {
         this.toughness = new MageInt(0);
 
         // Domain - Matca Rioters's power and toughness are each equal to the number of basic land types among lands you control.
-        Effect effect = new SetPowerToughnessSourceEffect(new DomainValue(), Duration.EndOfGame);
+        Effect effect = new SetPowerToughnessSourceEffect(DomainValue.REGULAR, Duration.EndOfGame);
         effect.setText("<i>Domain</i> &mdash; {this}'s power and toughness are each equal to the number of basic land types among lands you control.");
         this.addAbility(new SimpleStaticAbility(Zone.ALL, effect).addHint(DomainHint.instance));
     }
diff --git a/Mage.Sets/src/mage/cards/m/MightOfAlara.java b/Mage.Sets/src/mage/cards/m/MightOfAlara.java
index a7f2cb2598..09337caf36 100644
--- a/Mage.Sets/src/mage/cards/m/MightOfAlara.java
+++ b/Mage.Sets/src/mage/cards/m/MightOfAlara.java
@@ -23,7 +23,7 @@ public final class MightOfAlara extends CardImpl {
 
         // Domain - Target creature gets +1/+1 until end of turn for each basic land type among lands you control.
         this.getSpellAbility().addEffect(new BoostTargetEffect(
-                new DomainValue(), new DomainValue(), Duration.EndOfTurn, true
+                DomainValue.REGULAR, DomainValue.REGULAR, Duration.EndOfTurn, true
         ));
         this.getSpellAbility().addTarget(new TargetCreaturePermanent());
         this.getSpellAbility().addHint(DomainHint.instance);
diff --git a/Mage.Sets/src/mage/cards/o/OrderedMigration.java b/Mage.Sets/src/mage/cards/o/OrderedMigration.java
index 9076afaa5c..a5b93e7143 100644
--- a/Mage.Sets/src/mage/cards/o/OrderedMigration.java
+++ b/Mage.Sets/src/mage/cards/o/OrderedMigration.java
@@ -22,7 +22,7 @@ public final class OrderedMigration extends CardImpl {
         super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{W}{U}");
 
         // Domain - Create a 1/1 blue Bird creature token with flying for each basic land type among lands you control.
-        this.getSpellAbility().addEffect(new CreateTokenEffect(new OrderedMigrationBirdToken(), new DomainValue()));
+        this.getSpellAbility().addEffect(new CreateTokenEffect(new OrderedMigrationBirdToken(), DomainValue.REGULAR));
         this.getSpellAbility().setAbilityWord(AbilityWord.DOMAIN);
         this.getSpellAbility().addHint(DomainHint.instance);
     }
diff --git a/Mage.Sets/src/mage/cards/p/PathToTheFestival.java b/Mage.Sets/src/mage/cards/p/PathToTheFestival.java
index 58cd3c1bab..aff8d2a011 100644
--- a/Mage.Sets/src/mage/cards/p/PathToTheFestival.java
+++ b/Mage.Sets/src/mage/cards/p/PathToTheFestival.java
@@ -4,7 +4,6 @@ import mage.abilities.Ability;
 import mage.abilities.condition.Condition;
 import mage.abilities.costs.mana.ManaCostsImpl;
 import mage.abilities.decorator.ConditionalOneShotEffect;
-import mage.abilities.dynamicvalue.DynamicValue;
 import mage.abilities.dynamicvalue.common.DomainValue;
 import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
 import mage.abilities.effects.keyword.ScryEffect;
@@ -13,7 +12,6 @@ import mage.abilities.keyword.FlashbackAbility;
 import mage.cards.CardImpl;
 import mage.cards.CardSetInfo;
 import mage.constants.CardType;
-import mage.constants.TimingRule;
 import mage.filter.StaticFilters;
 import mage.game.Game;
 import mage.target.common.TargetCardInLibrary;
@@ -56,10 +54,9 @@ public final class PathToTheFestival extends CardImpl {
 
 enum PathToTheFestivalCondition implements Condition {
     instance;
-    private static final DynamicValue xValue = new DomainValue();
 
     @Override
     public boolean apply(Game game, Ability source) {
-        return xValue.calculate(game, source, null) >= 3;
+        return DomainValue.REGULAR.calculate(game, source, null) >= 3;
     }
 }
diff --git a/Mage.Sets/src/mage/cards/p/PlanarDespair.java b/Mage.Sets/src/mage/cards/p/PlanarDespair.java
index 65bdb3dcf5..f43d82d733 100644
--- a/Mage.Sets/src/mage/cards/p/PlanarDespair.java
+++ b/Mage.Sets/src/mage/cards/p/PlanarDespair.java
@@ -24,7 +24,7 @@ public final class PlanarDespair extends CardImpl {
         super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{B}{B}");
 
         // Domain - All creatures get -1/-1 until end of turn for each basic land type among lands you control.
-        DynamicValue dv = new SignInversionDynamicValue(new DomainValue());
+        DynamicValue dv = new SignInversionDynamicValue(DomainValue.REGULAR);
         Effect effect = new BoostAllEffect(dv, dv, Duration.EndOfTurn);
         effect.setText("<i>Domain</i> &mdash; All creatures get -1/-1 until end of turn for each basic land type among lands you control.");
         this.getSpellAbility().addEffect(effect);
diff --git a/Mage.Sets/src/mage/cards/p/PowerArmor.java b/Mage.Sets/src/mage/cards/p/PowerArmor.java
index 691283bce2..7c236b76b4 100644
--- a/Mage.Sets/src/mage/cards/p/PowerArmor.java
+++ b/Mage.Sets/src/mage/cards/p/PowerArmor.java
@@ -28,7 +28,7 @@ public final class PowerArmor extends CardImpl {
 
         // Domain - {3}, {tap}: Target creature gets +1/+1 until end of turn for each basic land type among lands you control.
         Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(
-                new DomainValue(), new DomainValue(), Duration.EndOfTurn), new TapSourceCost());
+                DomainValue.REGULAR, DomainValue.REGULAR, Duration.EndOfTurn), new TapSourceCost());
         ability.addCost(new ManaCostsImpl("{3}"));
         ability.addTarget(new TargetCreaturePermanent());
         ability.setAbilityWord(AbilityWord.DOMAIN);
diff --git a/Mage.Sets/src/mage/cards/p/PrismaticGeoscope.java b/Mage.Sets/src/mage/cards/p/PrismaticGeoscope.java
index 9ac57bc9f9..eebdde8a12 100644
--- a/Mage.Sets/src/mage/cards/p/PrismaticGeoscope.java
+++ b/Mage.Sets/src/mage/cards/p/PrismaticGeoscope.java
@@ -28,7 +28,7 @@ public final class PrismaticGeoscope extends CardImpl {
 
         // <i>Domain</i> &mdash; {T}: Add X mana in any combination of colors, where X is the number of basic land types among lands you control.
         Ability ability = new DynamicManaAbility(
-                new Mana(0, 0, 0, 0, 0, 0, 1, 0), new DomainValue(), new TapSourceCost(),
+                new Mana(0, 0, 0, 0, 0, 0, 1, 0), DomainValue.REGULAR, new TapSourceCost(),
                 "Add X mana in any combination of colors,"
                 + " where X is the number of basic land types among lands you control."
         );
diff --git a/Mage.Sets/src/mage/cards/s/SamitePilgrim.java b/Mage.Sets/src/mage/cards/s/SamitePilgrim.java
index 7dc7467ba7..d5c30cbce2 100644
--- a/Mage.Sets/src/mage/cards/s/SamitePilgrim.java
+++ b/Mage.Sets/src/mage/cards/s/SamitePilgrim.java
@@ -65,7 +65,7 @@ class SamitePilgrimPreventDamageToTargetEffect extends PreventionEffectImpl {
     @Override
     public void init(Ability source, Game game) {
         super.init(source, game);
-        amountToPrevent = new DomainValue().calculate(game, source, this);
+        amountToPrevent = DomainValue.REGULAR.calculate(game, source, this);
     }
 
     @Override
diff --git a/Mage.Sets/src/mage/cards/s/ScionOfDraco.java b/Mage.Sets/src/mage/cards/s/ScionOfDraco.java
index 4e22d667d2..e33c1a013c 100644
--- a/Mage.Sets/src/mage/cards/s/ScionOfDraco.java
+++ b/Mage.Sets/src/mage/cards/s/ScionOfDraco.java
@@ -4,7 +4,6 @@ import mage.MageInt;
 import mage.ObjectColor;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.dynamicvalue.DynamicValue;
 import mage.abilities.dynamicvalue.common.DomainValue;
 import mage.abilities.effects.ContinuousEffectImpl;
 import mage.abilities.effects.common.cost.SpellCostReductionForEachSourceEffect;
@@ -24,8 +23,6 @@ import java.util.UUID;
  */
 public final class ScionOfDraco extends CardImpl {
 
-    private static final DynamicValue xValue = new DomainValue();
-
     public ScionOfDraco(UUID ownerId, CardSetInfo setInfo) {
         super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{12}");
 
@@ -35,7 +32,7 @@ public final class ScionOfDraco extends CardImpl {
 
         // Domain — This spell costs {2} less to cast for each basic land type among lands you control.
         this.addAbility(new SimpleStaticAbility(Zone.ALL,
-                new SpellCostReductionForEachSourceEffect(2, xValue)
+                new SpellCostReductionForEachSourceEffect(2, DomainValue.REGULAR)
                         .setText("this spell costs {2} less to cast for each basic land type among lands you control")
         ).addHint(DomainHint.instance).setAbilityWord(AbilityWord.DOMAIN));
 
diff --git a/Mage.Sets/src/mage/cards/s/SporeBurst.java b/Mage.Sets/src/mage/cards/s/SporeBurst.java
index c4becc06c7..1765f54726 100644
--- a/Mage.Sets/src/mage/cards/s/SporeBurst.java
+++ b/Mage.Sets/src/mage/cards/s/SporeBurst.java
@@ -22,7 +22,7 @@ public final class SporeBurst extends CardImpl {
 
 
         // Domain - Create a 1/1 green Saproling creature token for each basic land type among lands you control.
-        this.getSpellAbility().addEffect(new CreateTokenEffect(new SaprolingToken(), new DomainValue()));
+        this.getSpellAbility().addEffect(new CreateTokenEffect(new SaprolingToken(), DomainValue.REGULAR));
         this.getSpellAbility().addHint(DomainHint.instance);
         this.getSpellAbility().setAbilityWord(AbilityWord.DOMAIN);
     }
diff --git a/Mage.Sets/src/mage/cards/s/Stratadon.java b/Mage.Sets/src/mage/cards/s/Stratadon.java
index c786703af2..8a49cb4b56 100644
--- a/Mage.Sets/src/mage/cards/s/Stratadon.java
+++ b/Mage.Sets/src/mage/cards/s/Stratadon.java
@@ -61,7 +61,7 @@ class StratadonCostReductionEffect extends CostModificationEffectImpl {
 
     @Override
     public boolean apply(Game game, Ability source, Ability abilityToModify) {
-        CardUtil.reduceCost(abilityToModify, new DomainValue().calculate(game, source, this));
+        CardUtil.reduceCost(abilityToModify, DomainValue.REGULAR.calculate(game, source, this));
         return true;
     }
 
diff --git a/Mage.Sets/src/mage/cards/s/StrengthOfUnity.java b/Mage.Sets/src/mage/cards/s/StrengthOfUnity.java
index 324c9db937..fbd5f118e8 100644
--- a/Mage.Sets/src/mage/cards/s/StrengthOfUnity.java
+++ b/Mage.Sets/src/mage/cards/s/StrengthOfUnity.java
@@ -1,7 +1,5 @@
-
 package mage.cards.s;
 
-import java.util.UUID;
 import mage.abilities.Ability;
 import mage.abilities.common.SimpleStaticAbility;
 import mage.abilities.dynamicvalue.common.DomainValue;
@@ -13,21 +11,21 @@ import mage.abilities.keyword.EnchantAbility;
 import mage.cards.CardImpl;
 import mage.cards.CardSetInfo;
 import mage.constants.CardType;
-import mage.constants.SubType;
 import mage.constants.Outcome;
+import mage.constants.SubType;
 import mage.constants.Zone;
 import mage.target.TargetPermanent;
 import mage.target.common.TargetCreaturePermanent;
 
-/**
- *
- * @author LoneFox
+import java.util.UUID;
 
+/**
+ * @author LoneFox
  */
 public final class StrengthOfUnity extends CardImpl {
 
     public StrengthOfUnity(UUID ownerId, CardSetInfo setInfo) {
-        super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{W}");
+        super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}");
         this.subtype.add(SubType.AURA);
 
         // Enchant creature
@@ -37,8 +35,7 @@ public final class StrengthOfUnity extends CardImpl {
         Ability ability = new EnchantAbility(auraTarget.getTargetName());
         this.addAbility(ability);
         // Domain - Enchanted creature gets +1/+1 for each basic land type among lands you control.
-        DomainValue dv = new DomainValue();
-        Effect effect = new BoostEnchantedEffect(dv, dv);
+        Effect effect = new BoostEnchantedEffect(DomainValue.REGULAR, DomainValue.REGULAR);
         effect.setText("<i>Domain</i> &mdash; Enchanted creature gets +1/+1 for each basic land type among lands you control.");
         this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(DomainHint.instance));
     }
diff --git a/Mage.Sets/src/mage/cards/t/TerritorialKavu.java b/Mage.Sets/src/mage/cards/t/TerritorialKavu.java
index 4b5ef1fee7..d8972a7d88 100644
--- a/Mage.Sets/src/mage/cards/t/TerritorialKavu.java
+++ b/Mage.Sets/src/mage/cards/t/TerritorialKavu.java
@@ -6,7 +6,6 @@ import mage.abilities.Mode;
 import mage.abilities.common.AttacksTriggeredAbility;
 import mage.abilities.common.SimpleStaticAbility;
 import mage.abilities.costs.common.DiscardCardCost;
-import mage.abilities.dynamicvalue.DynamicValue;
 import mage.abilities.dynamicvalue.common.DomainValue;
 import mage.abilities.effects.common.DoIfCostPaid;
 import mage.abilities.effects.common.DrawCardSourceControllerEffect;
@@ -25,8 +24,6 @@ import java.util.UUID;
  */
 public final class TerritorialKavu extends CardImpl {
 
-    private static final DynamicValue xValue = new DomainValue();
-
     public TerritorialKavu(UUID ownerId, CardSetInfo setInfo) {
         super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{G}");
 
@@ -36,7 +33,7 @@ public final class TerritorialKavu extends CardImpl {
 
         // Domain — Territorial Kavu's power and toughness are each equal to the number of basic land types among lands you control.
         this.addAbility(new SimpleStaticAbility(
-                Zone.ALL, new SetPowerToughnessSourceEffect(xValue, Duration.EndOfGame)
+                Zone.ALL, new SetPowerToughnessSourceEffect(DomainValue.REGULAR, Duration.EndOfGame)
         ).addHint(DomainHint.instance).setAbilityWord(AbilityWord.DOMAIN));
 
         // Whenever Territorial Kavu attacks, choose one —
diff --git a/Mage.Sets/src/mage/cards/t/TribalFlames.java b/Mage.Sets/src/mage/cards/t/TribalFlames.java
index dd8cebe2a1..252a4727c4 100644
--- a/Mage.Sets/src/mage/cards/t/TribalFlames.java
+++ b/Mage.Sets/src/mage/cards/t/TribalFlames.java
@@ -22,7 +22,7 @@ public final class TribalFlames extends CardImpl {
 
 
         // Domain - Tribal Flames deals X damage to any target, where X is the number of basic land types among lands you control.
-        this.getSpellAbility().addEffect(new DamageTargetEffect(new DomainValue()));
+        this.getSpellAbility().addEffect(new DamageTargetEffect(DomainValue.REGULAR));
         this.getSpellAbility().addTarget(new TargetAnyTarget());
         this.getSpellAbility().addHint(DomainHint.instance);
         this.getSpellAbility().setAbilityWord(AbilityWord.DOMAIN);
diff --git a/Mage.Sets/src/mage/cards/t/TrompTheDomains.java b/Mage.Sets/src/mage/cards/t/TrompTheDomains.java
index bea637c779..805ca2b6f6 100644
--- a/Mage.Sets/src/mage/cards/t/TrompTheDomains.java
+++ b/Mage.Sets/src/mage/cards/t/TrompTheDomains.java
@@ -1,22 +1,20 @@
-
 package mage.cards.t;
 
-import java.util.UUID;
-import mage.abilities.dynamicvalue.DynamicValue;
 import mage.abilities.dynamicvalue.common.DomainValue;
-import mage.abilities.effects.Effect;
 import mage.abilities.effects.common.continuous.BoostControlledEffect;
 import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
 import mage.abilities.hint.common.DomainHint;
 import mage.abilities.keyword.TrampleAbility;
 import mage.cards.CardImpl;
 import mage.cards.CardSetInfo;
+import mage.constants.AbilityWord;
 import mage.constants.CardType;
 import mage.constants.Duration;
 import mage.filter.StaticFilters;
 
+import java.util.UUID;
+
 /**
- *
  * @author LevelX2
  */
 public final class TrompTheDomains extends CardImpl {
@@ -25,15 +23,15 @@ public final class TrompTheDomains extends CardImpl {
         super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{5}{G}");
 
         // Domain - Until end of turn, creatures you control gain trample and get +1/+1 for each basic land type among lands you control.
-        Effect effect = new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn);
-        effect.setText("<i>Domain</i> &mdash; Until end of turn, creatures you control gain trample");
-        this.getSpellAbility().addEffect(effect);
-        DynamicValue domain = new DomainValue();
-        effect = new BoostControlledEffect(domain, domain, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false);
-        effect.setText("and get +1/+1 for each basic land type among lands you control");
-        this.getSpellAbility().addEffect(effect);
+        this.getSpellAbility().addEffect(new GainAbilityControlledEffect(
+                TrampleAbility.getInstance(), Duration.EndOfTurn
+        ).setText("until end of turn, creatures you control gain trample"));
+        this.getSpellAbility().addEffect(new BoostControlledEffect(
+                DomainValue.REGULAR, DomainValue.REGULAR, Duration.EndOfTurn,
+                StaticFilters.FILTER_PERMANENT_CREATURE, false
+        ).setText("and get +1/+1 for each basic land type among lands you control"));
         this.getSpellAbility().addHint(DomainHint.instance);
-
+        this.getSpellAbility().setAbilityWord(AbilityWord.DOMAIN);
     }
 
     private TrompTheDomains(final TrompTheDomains card) {
diff --git a/Mage.Sets/src/mage/cards/v/VoicesFromTheVoid.java b/Mage.Sets/src/mage/cards/v/VoicesFromTheVoid.java
index 8641a1a59c..497b1bae3b 100644
--- a/Mage.Sets/src/mage/cards/v/VoicesFromTheVoid.java
+++ b/Mage.Sets/src/mage/cards/v/VoicesFromTheVoid.java
@@ -1,6 +1,5 @@
 package mage.cards.v;
 
-import mage.abilities.dynamicvalue.DynamicValue;
 import mage.abilities.dynamicvalue.common.DomainValue;
 import mage.abilities.effects.common.discard.DiscardTargetEffect;
 import mage.abilities.hint.common.DomainHint;
@@ -17,13 +16,11 @@ import java.util.UUID;
  */
 public final class VoicesFromTheVoid extends CardImpl {
 
-    private static final DynamicValue xValue = new DomainValue();
-
     public VoicesFromTheVoid(UUID ownerId, CardSetInfo setInfo) {
         super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{4}{B}");
 
         // Domain - Target player discards a card for each basic land type among lands you control.
-        this.getSpellAbility().addEffect(new DiscardTargetEffect(xValue));
+        this.getSpellAbility().addEffect(new DiscardTargetEffect(DomainValue.REGULAR));
         this.getSpellAbility().addTarget(new TargetPlayer());
         this.getSpellAbility().addHint(DomainHint.instance);
         this.getSpellAbility().setAbilityWord(AbilityWord.DOMAIN);
diff --git a/Mage.Sets/src/mage/cards/w/WanderingGoblins.java b/Mage.Sets/src/mage/cards/w/WanderingGoblins.java
index fce3b923c0..a14d6b8a04 100644
--- a/Mage.Sets/src/mage/cards/w/WanderingGoblins.java
+++ b/Mage.Sets/src/mage/cards/w/WanderingGoblins.java
@@ -3,7 +3,6 @@ package mage.cards.w;
 import mage.MageInt;
 import mage.abilities.common.SimpleActivatedAbility;
 import mage.abilities.costs.mana.GenericManaCost;
-import mage.abilities.dynamicvalue.DynamicValue;
 import mage.abilities.dynamicvalue.common.DomainValue;
 import mage.abilities.dynamicvalue.common.StaticValue;
 import mage.abilities.effects.common.continuous.BoostSourceEffect;
@@ -22,8 +21,6 @@ import java.util.UUID;
  */
 public final class WanderingGoblins extends CardImpl {
 
-    private static final DynamicValue xValue = new DomainValue();
-
     public WanderingGoblins(UUID ownerId, CardSetInfo setInfo) {
         super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
         this.subtype.add(SubType.GOBLIN);
@@ -34,7 +31,7 @@ public final class WanderingGoblins extends CardImpl {
 
         // Domain - {3}: Wandering Goblins gets +1/+0 until end of turn for each basic land type among lands you control.
         this.addAbility(new SimpleActivatedAbility(new BoostSourceEffect(
-                xValue, StaticValue.get(0), Duration.EndOfTurn, true
+                DomainValue.REGULAR, StaticValue.get(0), Duration.EndOfTurn, true
         ), new GenericManaCost(3)).addHint(DomainHint.instance).setAbilityWord(AbilityWord.DOMAIN));
     }
 
diff --git a/Mage.Sets/src/mage/cards/w/WanderingStream.java b/Mage.Sets/src/mage/cards/w/WanderingStream.java
index c876fde215..92f797f0c9 100644
--- a/Mage.Sets/src/mage/cards/w/WanderingStream.java
+++ b/Mage.Sets/src/mage/cards/w/WanderingStream.java
@@ -21,7 +21,7 @@ public final class WanderingStream extends CardImpl {
         super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{G}");
 
         // Domain - You gain 2 life for each basic land type among lands you control.
-        Effect effect = new GainLifeEffect(new MultipliedValue(new DomainValue(), 2));
+        Effect effect = new GainLifeEffect(new MultipliedValue(DomainValue.REGULAR, 2));
         effect.setText("<i>Domain</i> &mdash; You gain 2 life for each basic land type among lands you control");
         this.getSpellAbility().addEffect(effect);
         this.getSpellAbility().addHint(DomainHint.instance);
diff --git a/Mage.Sets/src/mage/cards/w/WayfaringGiant.java b/Mage.Sets/src/mage/cards/w/WayfaringGiant.java
index 93ba8004d7..cd0c0ae5a8 100644
--- a/Mage.Sets/src/mage/cards/w/WayfaringGiant.java
+++ b/Mage.Sets/src/mage/cards/w/WayfaringGiant.java
@@ -1,38 +1,35 @@
-
 package mage.cards.w;
 
-import java.util.UUID;
 import mage.MageInt;
 import mage.abilities.common.SimpleStaticAbility;
 import mage.abilities.dynamicvalue.common.DomainValue;
-import mage.abilities.effects.Effect;
 import mage.abilities.effects.common.continuous.BoostSourceEffect;
 import mage.abilities.hint.common.DomainHint;
 import mage.cards.CardImpl;
 import mage.cards.CardSetInfo;
+import mage.constants.AbilityWord;
 import mage.constants.CardType;
-import mage.constants.SubType;
 import mage.constants.Duration;
-import mage.constants.Zone;
+import mage.constants.SubType;
+
+import java.util.UUID;
 
 /**
- *
  * @author LoneFox
-
  */
 public final class WayfaringGiant extends CardImpl {
 
     public WayfaringGiant(UUID ownerId, CardSetInfo setInfo) {
-        super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{W}");
+        super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{W}");
         this.subtype.add(SubType.GIANT);
         this.power = new MageInt(1);
         this.toughness = new MageInt(3);
 
         // Domain - Wayfaring Giant gets +1/+1 for each basic land type among lands you control.
-        DomainValue dv = new DomainValue();
-        Effect effect = new BoostSourceEffect(dv, dv, Duration.WhileOnBattlefield);
-        effect.setText("<i>Domain</i> &mdash; {this} gets +1/+1 for each basic land type among lands you control.");
-        this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect).addHint(DomainHint.instance));
+        this.addAbility(new SimpleStaticAbility(new BoostSourceEffect(
+                DomainValue.REGULAR, DomainValue.REGULAR, Duration.WhileOnBattlefield
+        ).setText("{this} gets +1/+1 for each basic land type among lands you control."))
+                .addHint(DomainHint.instance).setAbilityWord(AbilityWord.DOMAIN));
     }
 
     private WayfaringGiant(final WayfaringGiant card) {
diff --git a/Mage.Sets/src/mage/cards/w/WorldlyCounsel.java b/Mage.Sets/src/mage/cards/w/WorldlyCounsel.java
index 204e8fa281..a1a10324ef 100644
--- a/Mage.Sets/src/mage/cards/w/WorldlyCounsel.java
+++ b/Mage.Sets/src/mage/cards/w/WorldlyCounsel.java
@@ -66,7 +66,7 @@ class WorldlyCounselEffect extends OneShotEffect {
             return false;
         }
 
-        Cards cards = new CardsImpl(controller.getLibrary().getTopCards(game, (new DomainValue()).calculate(game, source, this)));
+        Cards cards = new CardsImpl(controller.getLibrary().getTopCards(game, (DomainValue.REGULAR).calculate(game, source, this)));
         controller.lookAtCards(source, null, cards, game);
 
         if (!cards.isEmpty()) {
diff --git a/Mage/src/main/java/mage/abilities/dynamicvalue/common/DomainValue.java b/Mage/src/main/java/mage/abilities/dynamicvalue/common/DomainValue.java
index 374130420e..506438da00 100644
--- a/Mage/src/main/java/mage/abilities/dynamicvalue/common/DomainValue.java
+++ b/Mage/src/main/java/mage/abilities/dynamicvalue/common/DomainValue.java
@@ -14,49 +14,26 @@ import java.util.stream.Collectors;
 /**
  * @author Loki
  */
-public class DomainValue implements DynamicValue {
-
-    private final int amount;
-    private final boolean countTargetPlayer;
-    private UUID playerId;
-
-    public DomainValue() {
-        this(1);
-    }
-
-    public DomainValue(boolean countTargetPlayer) {
-        this(1, countTargetPlayer);
-    }
-
-    public DomainValue(int amount) {
-        this(amount, false);
-    }
-
-    public DomainValue(int amount, boolean countTargetPlayer) {
-        this.amount = amount;
-        this.countTargetPlayer = countTargetPlayer;
-    }
-
-    public DomainValue(int amount, UUID playerId) {
-        this(amount, false);
-        this.playerId = playerId;
-    }
-
-    public DomainValue(final DomainValue dynamicValue) {
-        this.amount = dynamicValue.amount;
-        this.countTargetPlayer = dynamicValue.countTargetPlayer;
-        this.playerId = dynamicValue.playerId;
-    }
+public enum DomainValue implements DynamicValue {
+    REGULAR,
+    TARGET,
+    ACTIVE;
 
     @Override
     public int calculate(Game game, Ability sourceAbility, Effect effect) {
         UUID targetPlayer;
-        if (playerId != null) {
-            targetPlayer = playerId;
-        } else if (countTargetPlayer) {
-            targetPlayer = effect.getTargetPointer().getFirst(game, sourceAbility);
-        } else {
-            targetPlayer = sourceAbility.getControllerId();
+        switch (this) {
+            case ACTIVE:
+                targetPlayer = game.getActivePlayerId();
+                break;
+            case TARGET:
+                targetPlayer = effect.getTargetPointer().getFirst(game, sourceAbility);
+                break;
+            case REGULAR:
+                targetPlayer = sourceAbility.getControllerId();
+                break;
+            default:
+                targetPlayer = null;
         }
         return game.getBattlefield()
                 .getActivePermanents(
@@ -70,26 +47,26 @@ public class DomainValue implements DynamicValue {
                         .collect(Collectors.toSet()))
                 .flatMap(Collection::stream)
                 .distinct()
-                .mapToInt(x -> amount)
+                .mapToInt(x -> 1)
                 .sum();
     }
 
     @Override
     public DomainValue copy() {
-        return new DomainValue(this);
+        return this;
     }
 
     @Override
     public String toString() {
-        return String.valueOf(amount);
+        return "1";
     }
 
     public int getAmount() {
-        return amount;
+        return 1;
     }
 
     @Override
     public String getMessage() {
-        return "basic land type among lands " + (countTargetPlayer ? "they control" : "you control");
+        return "basic land type among lands " + (this == TARGET ? "they control" : "you control");
     }
 }