diff --git a/Mage.Sets/src/mage/cards/a/Aeromunculus.java b/Mage.Sets/src/mage/cards/a/Aeromunculus.java
index 0dca6864e6..4f2d962f01 100644
--- a/Mage.Sets/src/mage/cards/a/Aeromunculus.java
+++ b/Mage.Sets/src/mage/cards/a/Aeromunculus.java
@@ -1,9 +1,7 @@
 package mage.cards.a;
 
 import mage.MageInt;
-import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.mana.ManaCostsImpl;
-import mage.abilities.effects.keyword.AdaptEffect;
+import mage.abilities.keyword.AdaptAbility;
 import mage.abilities.keyword.FlyingAbility;
 import mage.cards.CardImpl;
 import mage.cards.CardSetInfo;
@@ -29,9 +27,7 @@ public final class Aeromunculus extends CardImpl {
         this.addAbility(FlyingAbility.getInstance());
 
         // {2}{G}{U}: Adapt 1.
-        this.addAbility(new SimpleActivatedAbility(
-                new AdaptEffect(1), new ManaCostsImpl("{2}{G}{U}")
-        ));
+        this.addAbility(new AdaptAbility(1, "{2}{G}{U}"));
     }
 
     public Aeromunculus(final Aeromunculus card) {
diff --git a/Mage.Sets/src/mage/cards/g/GrowthChamberGuardian.java b/Mage.Sets/src/mage/cards/g/GrowthChamberGuardian.java
index 07dc7cb94c..8048b31642 100644
--- a/Mage.Sets/src/mage/cards/g/GrowthChamberGuardian.java
+++ b/Mage.Sets/src/mage/cards/g/GrowthChamberGuardian.java
@@ -2,10 +2,8 @@ package mage.cards.g;
 
 import mage.MageInt;
 import mage.abilities.TriggeredAbilityImpl;
-import mage.abilities.common.SimpleActivatedAbility;
-import mage.abilities.costs.mana.ManaCostsImpl;
 import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
-import mage.abilities.effects.keyword.AdaptEffect;
+import mage.abilities.keyword.AdaptAbility;
 import mage.cards.CardImpl;
 import mage.cards.CardSetInfo;
 import mage.constants.CardType;
@@ -35,9 +33,7 @@ public final class GrowthChamberGuardian extends CardImpl {
         this.toughness = new MageInt(2);
 
         // {2}{G}: Adapt 2.
-        this.addAbility(new SimpleActivatedAbility(
-                new AdaptEffect(2), new ManaCostsImpl("{2}{G}")
-        ));
+        this.addAbility(new AdaptAbility(2, "{2}{G}"));
 
         // Whenever one or more +1/+1 counters are put on Growth-Chamber Guardian, you may search your library for a card named Growth-Chamber Guardian, reveal it, put it into your hand, then shuffle your library.
         this.addAbility(new GrowthChamberGuardianTriggeredAbility());
diff --git a/Mage.Sets/src/mage/cards/z/ZeganaUtopianSpeaker.java b/Mage.Sets/src/mage/cards/z/ZeganaUtopianSpeaker.java
index d373a86a37..1fbf2ef563 100644
--- a/Mage.Sets/src/mage/cards/z/ZeganaUtopianSpeaker.java
+++ b/Mage.Sets/src/mage/cards/z/ZeganaUtopianSpeaker.java
@@ -2,14 +2,12 @@ package mage.cards.z;
 
 import mage.MageInt;
 import mage.abilities.common.EntersBattlefieldTriggeredAbility;
-import mage.abilities.common.SimpleActivatedAbility;
 import mage.abilities.common.SimpleStaticAbility;
 import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
-import mage.abilities.costs.mana.ManaCostsImpl;
 import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
 import mage.abilities.effects.common.DrawCardSourceControllerEffect;
 import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
-import mage.abilities.effects.keyword.AdaptEffect;
+import mage.abilities.keyword.AdaptAbility;
 import mage.abilities.keyword.TrampleAbility;
 import mage.cards.CardImpl;
 import mage.cards.CardSetInfo;
@@ -56,9 +54,7 @@ public final class ZeganaUtopianSpeaker extends CardImpl {
         ));
 
         // {4}{G}{U}: Adapt 4.
-        this.addAbility(new SimpleActivatedAbility(
-                new AdaptEffect(4), new ManaCostsImpl("{4}{G}{U}")
-        ));
+        this.addAbility(new AdaptAbility(4, "{4}{G}{U}"));
 
         // Each creature you control with a +1/+1 counter on it has trample.
         this.addAbility(new SimpleStaticAbility(
diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/AdaptEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/AdaptEffect.java
index 0bbc9ebbb5..ed29b59aea 100644
--- a/Mage/src/main/java/mage/abilities/effects/keyword/AdaptEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/keyword/AdaptEffect.java
@@ -5,6 +5,7 @@ import mage.abilities.effects.OneShotEffect;
 import mage.constants.Outcome;
 import mage.counters.CounterType;
 import mage.game.Game;
+import mage.game.events.GameEvent;
 import mage.game.permanent.Permanent;
 import mage.util.CardUtil;
 
@@ -40,8 +41,15 @@ public class AdaptEffect extends OneShotEffect {
         if (permanent == null) {
             return false;
         }
-        if (permanent.getCounters(game).getCount(CounterType.P1P1) == 0) {
-            permanent.addCounters(CounterType.P1P1.createInstance(adaptNumber), source, game);
+        GameEvent event = new GameEvent(
+                GameEvent.EventType.ADAPT, source.getSourceId(), source.getSourceId(),
+                source.getControllerId(), adaptNumber, false
+        );
+        if (game.replaceEvent(event)) {
+            return false;
+        }
+        if (permanent.getCounters(game).getCount(CounterType.P1P1) == 0 || event.getFlag()) {
+            permanent.addCounters(CounterType.P1P1.createInstance(event.getAmount()), source, game);
         }
         return true;
     }
diff --git a/Mage/src/main/java/mage/abilities/keyword/AdaptAbility.java b/Mage/src/main/java/mage/abilities/keyword/AdaptAbility.java
new file mode 100644
index 0000000000..634c38bd4d
--- /dev/null
+++ b/Mage/src/main/java/mage/abilities/keyword/AdaptAbility.java
@@ -0,0 +1,27 @@
+
+
+package mage.abilities.keyword;
+
+import mage.abilities.ActivatedAbilityImpl;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.keyword.AdaptEffect;
+import mage.constants.Zone;
+
+/**
+ * @author TheElk801
+ */
+public class AdaptAbility extends ActivatedAbilityImpl {
+
+    public AdaptAbility(int adaptNumber, String manaCost) {
+        super(Zone.BATTLEFIELD, new AdaptEffect(adaptNumber), new ManaCostsImpl(manaCost));
+    }
+
+    public AdaptAbility(final AdaptAbility ability) {
+        super(ability);
+    }
+
+    @Override
+    public AdaptAbility copy() {
+        return new AdaptAbility(this);
+    }
+}
diff --git a/Mage/src/main/java/mage/game/events/GameEvent.java b/Mage/src/main/java/mage/game/events/GameEvent.java
index eeb746ce95..622ee3eadd 100644
--- a/Mage/src/main/java/mage/game/events/GameEvent.java
+++ b/Mage/src/main/java/mage/game/events/GameEvent.java
@@ -1,14 +1,14 @@
 package mage.game.events;
 
+import mage.MageObjectReference;
+import mage.constants.Zone;
+
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
-import mage.MageObjectReference;
-import mage.constants.Zone;
 
 /**
- *
  * @author BetaSteward_at_googlemail.com
  */
 public class GameEvent implements Serializable {
@@ -232,6 +232,7 @@ public class GameEvent implements Serializable {
         FLIP, FLIPPED,
         UNFLIP, UNFLIPPED,
         TRANSFORM, TRANSFORMED,
+        ADAPT,
         BECOMES_MONSTROUS,
         BECOMES_EXERTED,
         /* BECOMES_EXERTED
@@ -383,12 +384,12 @@ public class GameEvent implements Serializable {
     }
 
     private GameEvent(EventType type, UUID customEventType,
-            UUID targetId, UUID sourceId, UUID playerId, int amount, boolean flag) {
+                      UUID targetId, UUID sourceId, UUID playerId, int amount, boolean flag) {
         this(type, customEventType, targetId, sourceId, playerId, amount, flag, null);
     }
 
     private GameEvent(EventType type, UUID customEventType,
-            UUID targetId, UUID sourceId, UUID playerId, int amount, boolean flag, MageObjectReference reference) {
+                      UUID targetId, UUID sourceId, UUID playerId, int amount, boolean flag, MageObjectReference reference) {
         this.type = type;
         this.customEventType = customEventType;
         this.targetId = targetId;
@@ -466,7 +467,7 @@ public class GameEvent implements Serializable {
     /**
      * used to store which replacement effects were already applied to an event
      * or or any modified events that may replace it
-     *
+     * <p>
      * 614.5. A replacement effect doesn't invoke itself repeatedly; it gets
      * only one opportunity to affect an event or any modified events that may
      * replace it. Example: A player controls two permanents, each with an