diff --git a/Assets/Scripts/Alterations/DrawExtraCards.cs b/Assets/Scripts/Alterations/DrawExtraCards.cs
index ac38690b289f623df48d334ad5563964f067e4a2..9973b637ad9f0e625469463f63067a2a88625a5e 100644
--- a/Assets/Scripts/Alterations/DrawExtraCards.cs
+++ b/Assets/Scripts/Alterations/DrawExtraCards.cs
@@ -1,8 +1,11 @@
 public class DrawExtraCards : Alteration
 {
+    private int mTimeApplyed = 0;
+
     public DrawExtraCards(AlterationInfo info, AlterationPool pool) : base(info, pool)
     {
         CardEvent<Card>.Register(Event.CARD_DRAW, OnCardDrawn);
+        CardEvent<Card>.Register(Event.CARD_EFFECT_APPLIED, OnCardEffectApplied);
     }
 
     private void OnCardDrawn(Card param)
@@ -11,10 +14,21 @@
         {
             GameManager.Instance.Hand.ExtraDraw();
         }
+        if (mValue < 0)
+        {
+            if (mTimeApplyed < -mValue)
+                GameManager.Instance.Hand.Discard(param,true); //actually just discard it
+        }
+    }
+
+    private void OnCardEffectApplied(Card param)
+    {
+        mTimeApplyed = 0;
     }
 
     public override void CleanUp()
     {
         CardEvent<Card>.Unregister(Event.CARD_DRAW, OnCardDrawn);
+        CardEvent<Card>.Unregister(Event.CARD_EFFECT_APPLIED, OnCardEffectApplied);
     }
 }
diff --git a/Assets/Scripts/CardEvents.cs b/Assets/Scripts/CardEvents.cs
index 94d104048718bf4e48149fde92b87333e0113313..dff366c497815ef59eec3b053ae9a404ee737537 100644
--- a/Assets/Scripts/CardEvents.cs
+++ b/Assets/Scripts/CardEvents.cs
@@ -7,7 +7,8 @@ public enum Event
     SCORE_GAINED,
     CARD_PLAYED,
     CARD_DRAW,
-    CARD_DISCARD
+    CARD_DISCARD,
+    CARD_EFFECT_APPLIED
 }
 
 public class CardEvent<T>
diff --git a/Assets/Scripts/Cards/Card.cs b/Assets/Scripts/Cards/Card.cs
index aad4eb26d1af830f36f0d4ad7a4739c8b9b3734b..9e580926292c6ac4eeccdbce46e90e2aac7de7cb 100644
--- a/Assets/Scripts/Cards/Card.cs
+++ b/Assets/Scripts/Cards/Card.cs
@@ -61,6 +61,7 @@ public class Card : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
             mEffectMultiplicator = 1;
             if (Player.Instance.Energy < mCost)
                 return;
+            Player.Instance.Energy -= mCost;
             CardEvent<Card>.Trigger(Event.CARD_PLAYED, this);
             Effect endEffect = null;
             for (int i = 0; i < mEffectMultiplicator; i++)
@@ -78,8 +79,8 @@ public class Card : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
                     break;
                 }
             }
+            CardEvent<Card>.Trigger(Event.CARD_EFFECT_APPLIED, this);
             gameObject.GetComponentInParent<Hand>().Discard(this);
-            Player.Instance.Energy -= mCost;
         }
         else
         {