diff --git a/Mage/src/main/java/mage/abilities/AbilityImpl.java b/Mage/src/main/java/mage/abilities/AbilityImpl.java
index fe39fd4adf..d15005ecf3 100644
--- a/Mage/src/main/java/mage/abilities/AbilityImpl.java
+++ b/Mage/src/main/java/mage/abilities/AbilityImpl.java
@@ -346,23 +346,6 @@ public abstract class AbilityImpl implements Ability {
                 }
             }
         }
-        //20100716 - 601.2e
-        if (sourceObject != null) {
-            sourceObject.adjustCosts(this, game);
-            if (sourceObject instanceof Card) {
-                for (Ability ability : ((Card) sourceObject).getAbilities(game)) {
-                    if (ability instanceof AdjustingSourceCosts) {
-                        ((AdjustingSourceCosts) ability).adjustCosts(this, game);
-                    }
-                }
-            } else {
-                for (Ability ability : sourceObject.getAbilities()) {
-                    if (ability instanceof AdjustingSourceCosts) {
-                        ((AdjustingSourceCosts) ability).adjustCosts(this, game);
-                    }
-                }
-            }
-        }
 
         // this is a hack to prevent mana abilities with mana costs from causing endless loops - pay other costs first
         if (this instanceof ActivatedManaAbilityImpl && !costs.pay(this, game, sourceId, controllerId, noMana, null)) {
@@ -372,6 +355,26 @@ public abstract class AbilityImpl implements Ability {
 
         //20101001 - 601.2e
         if (costModificationActive) {
+
+            // TODO: replace all AdjustingSourceCosts abilities to continuus effect, see Affinity example
+            //20100716 - 601.2e
+            if (sourceObject != null) {
+                sourceObject.adjustCosts(this, game);
+                if (sourceObject instanceof Card) {
+                    for (Ability ability : ((Card) sourceObject).getAbilities(game)) {
+                        if (ability instanceof AdjustingSourceCosts) {
+                            ((AdjustingSourceCosts) ability).adjustCosts(this, game);
+                        }
+                    }
+                } else {
+                    for (Ability ability : sourceObject.getAbilities()) {
+                        if (ability instanceof AdjustingSourceCosts) {
+                            ((AdjustingSourceCosts) ability).adjustCosts(this, game);
+                        }
+                    }
+                }
+            }
+
             game.getContinuousEffects().costModification(this, game);
         } else {
             costModificationActive = true;
diff --git a/Mage/src/main/java/mage/abilities/costs/AdjustingSourceCosts.java b/Mage/src/main/java/mage/abilities/costs/AdjustingSourceCosts.java
index e1723c5b46..34d951a97c 100644
--- a/Mage/src/main/java/mage/abilities/costs/AdjustingSourceCosts.java
+++ b/Mage/src/main/java/mage/abilities/costs/AdjustingSourceCosts.java
@@ -7,12 +7,14 @@ import mage.game.Game;
  * Interface for abilities that adjust source and only source costs. For the
  * cases when some permanent adjusts costs of other spells use
  * {@link mage.abilities.effects.CostModificationEffect}.
- *
+ * <p>
  * Example of such source costs adjusting:
  * {@link mage.abilities.keyword.AffinityForArtifactsAbility}
  *
  * @author nantuko
  */
+@Deprecated
+// replace all AdjustingSourceCosts with "extends CostModificationEffectImpl with zone.ALL" (see Affinity example)
 @FunctionalInterface
 public interface AdjustingSourceCosts {
 
diff --git a/Mage/src/main/java/mage/abilities/keyword/AffinityForArtifactsAbility.java b/Mage/src/main/java/mage/abilities/keyword/AffinityForArtifactsAbility.java
index 12e4e37797..cb7991935c 100644
--- a/Mage/src/main/java/mage/abilities/keyword/AffinityForArtifactsAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/AffinityForArtifactsAbility.java
@@ -1,24 +1,21 @@
-
 package mage.abilities.keyword;
 
-import mage.abilities.Ability;
-import mage.abilities.SpellAbility;
 import mage.abilities.common.SimpleStaticAbility;
-import mage.abilities.costs.AdjustingSourceCosts;
 import mage.abilities.effects.common.AffinityEffect;
+import mage.abilities.hint.common.ArtifactsYouControlHint;
 import mage.constants.Zone;
 import mage.filter.StaticFilters;
-import mage.game.Game;
-import mage.util.CardUtil;
 
 /**
  * Affinity for artifacts
  */
-public class AffinityForArtifactsAbility extends SimpleStaticAbility implements AdjustingSourceCosts {
+public class AffinityForArtifactsAbility extends SimpleStaticAbility {
 
     public AffinityForArtifactsAbility() {
-        super(Zone.OUTSIDE, new AffinityEffect(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT));
+        super(Zone.ALL, new AffinityEffect(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT));
         setRuleAtTheTop(true);
+
+        this.addHint(ArtifactsYouControlHint.instance);
     }
 
     public AffinityForArtifactsAbility(final AffinityForArtifactsAbility ability) {
@@ -34,14 +31,4 @@ public class AffinityForArtifactsAbility extends SimpleStaticAbility implements
     public String getRule() {
         return "affinity for artifacts <i>(This spell costs {1} less to cast for each artifact you control.)</i>";
     }
-
-    @Override
-    public void adjustCosts(Ability ability, Game game) {
-        if (ability instanceof SpellAbility) {
-            int count = game.getBattlefield().getAllActivePermanents(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT, ability.getControllerId(), game).size();
-            if (count > 0) {
-                CardUtil.adjustCost((SpellAbility)ability, count);
-            }
-        }
-    }
 }