diff --git a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/SimulatedPlayer2.java b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/SimulatedPlayer2.java
index 3e6935f311..f977862b4f 100644
--- a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/SimulatedPlayer2.java
+++ b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/SimulatedPlayer2.java
@@ -227,7 +227,7 @@ public class SimulatedPlayer2 extends ComputerPlayer<SimulatedPlayer2> {
 		// Start with X = {1}
 		for (int i = 1; i < numAvailable; i++) {
 			Ability newAbility = ability.copy();
-			newAbility.addManaCost(new GenericManaCost(i));
+			newAbility.getManaCostsToPay().add(new GenericManaCost(i));
 			allActions.add(newAbility);
 		}
 	}
diff --git a/Mage.Sets/src/mage/sets/innistrad/HarvestPyre.java b/Mage.Sets/src/mage/sets/innistrad/HarvestPyre.java
index be5d255b5a..46c79c43dc 100644
--- a/Mage.Sets/src/mage/sets/innistrad/HarvestPyre.java
+++ b/Mage.Sets/src/mage/sets/innistrad/HarvestPyre.java
@@ -128,5 +128,10 @@ class HarvestPyreCost extends CostImpl<HarvestPyreCost> implements VariableCost
     public HarvestPyreCost copy() {
         return new HarvestPyreCost(this);
     }
+
+    @Override
+    public void setAmount(int amount) {
+        amountPaid = amount;
+    }
         
 }
diff --git a/Mage/src/mage/abilities/costs/VariableCost.java b/Mage/src/mage/abilities/costs/VariableCost.java
index 755ec593bd..bf1a5d14df 100644
--- a/Mage/src/mage/abilities/costs/VariableCost.java
+++ b/Mage/src/mage/abilities/costs/VariableCost.java
@@ -37,5 +37,6 @@ import mage.filter.FilterMana;
 public interface VariableCost {
 
 	public int getAmount();
+    public void setAmount(int amount);
 	public void setFilter(FilterMana filter);
 }
diff --git a/Mage/src/mage/abilities/costs/common/PayVariableLoyaltyCost.java b/Mage/src/mage/abilities/costs/common/PayVariableLoyaltyCost.java
index 6f8d31ecb4..8816685aa5 100644
--- a/Mage/src/mage/abilities/costs/common/PayVariableLoyaltyCost.java
+++ b/Mage/src/mage/abilities/costs/common/PayVariableLoyaltyCost.java
@@ -88,7 +88,12 @@ public class PayVariableLoyaltyCost extends CostImpl<PayVariableLoyaltyCost> imp
 		return amountPaid;
 	}
 
-	@Override
+    @Override
+    public void setAmount(int amount) {
+        amountPaid = amount;
+    }
+
+    @Override
 	public void setFilter(FilterMana filter) {
 	}
 
diff --git a/Mage/src/mage/abilities/costs/common/TapVariableTargetCost.java b/Mage/src/mage/abilities/costs/common/TapVariableTargetCost.java
index 1b76e38327..0452cd4516 100644
--- a/Mage/src/mage/abilities/costs/common/TapVariableTargetCost.java
+++ b/Mage/src/mage/abilities/costs/common/TapVariableTargetCost.java
@@ -93,7 +93,12 @@ public class TapVariableTargetCost extends CostImpl<TapVariableTargetCost> imple
 		return amountPaid;
 	}
 
-	@Override
+    @Override
+    public void setAmount(int amount) {
+        amountPaid = amount;
+    }
+
+    @Override
 	public void setFilter(FilterMana filter) {
 	}
 
diff --git a/Mage/src/mage/abilities/costs/mana/ManaCosts.java b/Mage/src/mage/abilities/costs/mana/ManaCosts.java
index 2f36ee4eae..24ef875e36 100644
--- a/Mage/src/mage/abilities/costs/mana/ManaCosts.java
+++ b/Mage/src/mage/abilities/costs/mana/ManaCosts.java
@@ -41,6 +41,7 @@ public interface ManaCosts<T extends ManaCost> extends List<T>, ManaCost {
 	public ManaCosts<T> getUnpaidVariableCosts();
 	public List<VariableCost> getVariableCosts();
     public int getX();
+    public void setX(int x);
 	public void load(String mana);
 	public List<String> getSymbols();
     
diff --git a/Mage/src/mage/abilities/costs/mana/ManaCostsImpl.java b/Mage/src/mage/abilities/costs/mana/ManaCostsImpl.java
index fb23bc0b14..ea7129b1ca 100644
--- a/Mage/src/mage/abilities/costs/mana/ManaCostsImpl.java
+++ b/Mage/src/mage/abilities/costs/mana/ManaCostsImpl.java
@@ -28,6 +28,7 @@
 
 package mage.abilities.costs.mana;
 
+import java.util.*;
 import mage.Constants.ColoredManaSymbol;
 import mage.Mana;
 import mage.abilities.Ability;
@@ -39,8 +40,6 @@ import mage.players.ManaPool;
 import mage.players.Player;
 import mage.target.Targets;
 
-import java.util.*;
-
 /**
  * @author BetaSteward_at_googlemail.com
  */
@@ -195,6 +194,13 @@ public class ManaCostsImpl<T extends ManaCost> extends ArrayList<T> implements M
         return amount;
     }
 
+    @Override
+    public void setX(int x) {
+        List<VariableCost> variableCosts = getVariableCosts();
+        if (!variableCosts.isEmpty())
+            variableCosts.get(0).setAmount(x);
+    }
+
     @Override
     public void setPayment(Mana mana) {
     }
diff --git a/Mage/src/mage/abilities/costs/mana/VariableManaCost.java b/Mage/src/mage/abilities/costs/mana/VariableManaCost.java
index 873b46f0bc..0296169831 100644
--- a/Mage/src/mage/abilities/costs/mana/VariableManaCost.java
+++ b/Mage/src/mage/abilities/costs/mana/VariableManaCost.java
@@ -96,7 +96,12 @@ public class VariableManaCost extends ManaCostImpl<VariableManaCost> implements
 		return payment.count() / multiplier;
 	}
 
-	@Override
+    @Override
+    public void setAmount(int amount) {
+        payment.setColorless(amount);
+    }
+
+    @Override
 	public boolean testPay(Mana testMana) {
 		return true;
 	}
diff --git a/Mage/src/mage/abilities/keyword/FlashbackAbility.java b/Mage/src/mage/abilities/keyword/FlashbackAbility.java
index 7f5f537203..719d934ac2 100644
--- a/Mage/src/mage/abilities/keyword/FlashbackAbility.java
+++ b/Mage/src/mage/abilities/keyword/FlashbackAbility.java
@@ -32,8 +32,6 @@ import mage.abilities.Ability;
 import mage.abilities.ActivatedAbilityImpl;
 import mage.abilities.DelayedTriggeredAbility;
 import mage.abilities.costs.Cost;
-import mage.abilities.costs.mana.ManaCost;
-import mage.abilities.costs.mana.ManaCosts;
 import mage.abilities.effects.OneShotEffect;
 import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
 import mage.abilities.effects.common.ExileSourceEffect;
@@ -42,29 +40,28 @@ import mage.game.Game;
 import mage.game.events.GameEvent;
 import mage.game.events.ZoneChangeEvent;
 import mage.players.Player;
-import mage.target.targetpointer.FixedTarget;
 
 /**
  * @author nantuko
  */
 public class FlashbackAbility extends ActivatedAbilityImpl<FlashbackAbility> {
 
-	public FlashbackAbility(ManaCosts costs, Constants.TimingRule timingRule) {
-		super(Constants.Zone.GRAVEYARD, new FlashbackEffect(), costs);
+	public FlashbackAbility(Cost cost, Constants.TimingRule timingRule) {
+		super(Constants.Zone.GRAVEYARD, new FlashbackEffect(), cost);
 		this.timing = timingRule;
 		this.usesStack = false;
 		this.addEffect(new CreateDelayedTriggeredAbilityEffect(new FlashbackTriggeredAbility()));
 	}
 
-	@Override
-	public boolean activate(Game game, boolean noMana) {
-		Card card = game.getCard(sourceId);
-		if (card != null) {
-			getEffects().get(0).setTargetPointer(new FixedTarget(card.getId()));
-			return super.activate(game, noMana);
-		}
-		return false;
-	}
+//	@Override
+//	public boolean activate(Game game, boolean noMana) {
+//		Card card = game.getCard(sourceId);
+//		if (card != null) {
+//			getEffects().get(0).setTargetPointer(new FixedTarget(card.getId()));
+//			return super.activate(game, noMana);
+//		}
+//		return false;
+//	}
 
 	public FlashbackAbility(final FlashbackAbility ability) {
 		super(ability);
@@ -109,15 +106,13 @@ class FlashbackEffect extends OneShotEffect<FlashbackEffect> {
 
 	@Override
 	public boolean apply(Game game, Ability source) {
-		Card target = (Card) game.getObject(targetPointer.getFirst(source));
-		if (target != null) {
-			Player controller = game.getPlayer(target.getOwnerId());
+		Card card = (Card) game.getObject(source.getSourceId());
+		if (card != null) {
+			Player controller = game.getPlayer(source.getControllerId());
 			if (controller != null) {
-                target.getSpellAbility().getManaCostsToPay().clear();
-                for (Cost cost: source.getManaCostsToPay()) {
-                    target.getSpellAbility().getManaCostsToPay().add((ManaCost) cost.copy());
-                }
-				return controller.cast(target.getSpellAbility(), game, true);
+                int amount = source.getManaCostsToPay().getX();
+                card.getSpellAbility().getManaCostsToPay().setX(amount);
+				return controller.cast(card.getSpellAbility(), game, true);
 			}
 		}
 		return false;