diff --git a/Mage.Sets/src/mage/cards/e/ElspethsTalent.java b/Mage.Sets/src/mage/cards/e/ElspethsTalent.java
index e0610f11a2..0bf855505d 100644
--- a/Mage.Sets/src/mage/cards/e/ElspethsTalent.java
+++ b/Mage.Sets/src/mage/cards/e/ElspethsTalent.java
@@ -18,9 +18,12 @@ import mage.game.Game;
 import mage.game.events.GameEvent;
 import mage.game.permanent.Permanent;
 import mage.game.permanent.token.SoldierToken;
+import mage.game.stack.StackObject;
 import mage.target.TargetPermanent;
 import mage.target.common.TargetPlaneswalkerPermanent;
 
+import java.util.Objects;
+import java.util.Optional;
 import java.util.UUID;
 
 /**
@@ -86,8 +89,9 @@ class ElspethsTalentTriggeredAbility extends TriggeredAbilityImpl {
         return permanent != null
                 && event.getSourceId().equals(permanent.getAttachedTo())
                 && isControlledBy(event.getPlayerId())
-                && game
-                .getAbility(event.getTargetId(), event.getSourceId())
+                && Optional.ofNullable(game.getStack().getStackObject(event.getSourceId()))
+                .filter(Objects::nonNull)
+                .map(StackObject::getStackAbility)
                 .map(LoyaltyAbility.class::isInstance)
                 .orElse(false);
     }
diff --git a/Mage.Sets/src/mage/cards/r/RowansTalent.java b/Mage.Sets/src/mage/cards/r/RowansTalent.java
new file mode 100644
index 0000000000..fa0ce6a25f
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/r/RowansTalent.java
@@ -0,0 +1,112 @@
+package mage.cards.r;
+
+import mage.abilities.Ability;
+import mage.abilities.LoyaltyAbility;
+import mage.abilities.TriggeredAbilityImpl;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.effects.common.AttachEffect;
+import mage.abilities.effects.common.CopyStackObjectEffect;
+import mage.abilities.effects.common.continuous.BoostTargetEffect;
+import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
+import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
+import mage.abilities.keyword.EnchantAbility;
+import mage.abilities.keyword.FirstStrikeAbility;
+import mage.abilities.keyword.TrampleAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.*;
+import mage.game.Game;
+import mage.game.events.GameEvent;
+import mage.game.permanent.Permanent;
+import mage.game.stack.StackObject;
+import mage.target.TargetPermanent;
+import mage.target.common.TargetCreaturePermanent;
+import mage.target.common.TargetPlaneswalkerPermanent;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class RowansTalent extends CardImpl {
+
+    public RowansTalent(UUID ownerId, CardSetInfo setInfo) {
+        super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}{R}");
+
+        this.subtype.add(SubType.AURA);
+
+        // Enchant planeswalker
+        TargetPermanent auraTarget = new TargetPlaneswalkerPermanent();
+        this.getSpellAbility().addTarget(auraTarget);
+        this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
+        this.addAbility(new EnchantAbility(auraTarget));
+
+        // Enchanted planeswalker has "[+1]: Up to one target creature gets +2/+0 and gains first strike and trample until end of turn."
+        Ability ability = new LoyaltyAbility(new BoostTargetEffect(2, 0)
+                .setText("up to one target creature gets +2/+0"), 1);
+        ability.addEffect(new GainAbilityTargetEffect(FirstStrikeAbility.getInstance())
+                .setText("and gains first strike"));
+        ability.addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance())
+                .setText("and trample until end of turn"));
+        ability.addTarget(new TargetCreaturePermanent(0, 1));
+        this.addAbility(new SimpleStaticAbility(new GainAbilityAttachedEffect(
+                ability, AttachmentType.AURA, Duration.WhileOnBattlefield,
+                null, "planeswalker"
+        )));
+
+        // Whenever you activate a loyalty ability of enchanted planeswalker, copy that ability. You may choose new targets for the copy.
+        this.addAbility(new RowansTalentTriggeredAbility());
+    }
+
+    private RowansTalent(final RowansTalent card) {
+        super(card);
+    }
+
+    @Override
+    public RowansTalent copy() {
+        return new RowansTalent(this);
+    }
+}
+
+class RowansTalentTriggeredAbility extends TriggeredAbilityImpl {
+
+    RowansTalentTriggeredAbility() {
+        super(Zone.BATTLEFIELD, new CopyStackObjectEffect());
+    }
+
+    private RowansTalentTriggeredAbility(final RowansTalentTriggeredAbility ability) {
+        super(ability);
+    }
+
+    @Override
+    public RowansTalentTriggeredAbility copy() {
+        return new RowansTalentTriggeredAbility(this);
+    }
+
+    @Override
+    public boolean checkEventType(GameEvent event, Game game) {
+        return event.getType() == GameEvent.EventType.ACTIVATED_ABILITY;
+    }
+
+    @Override
+    public boolean checkTrigger(GameEvent event, Game game) {
+        Permanent permanent = getSourcePermanentIfItStillExists(game);
+        if (permanent == null
+                || !event.getSourceId().equals(permanent.getAttachedTo())
+                || !isControlledBy(event.getPlayerId())) {
+            return false;
+        }
+        StackObject stackObject = game.getStack().getStackObject(event.getSourceId());
+        if (stackObject == null || !(stackObject.getStackAbility() instanceof LoyaltyAbility)) {
+            return false;
+        }
+        this.getEffects().setValue("stackObject", stackObject);
+        return true;
+    }
+
+    @Override
+    public String getRule() {
+        return "Whenever you activate a loyalty ability of enchanted planeswalker, " +
+                "copy that ability. You may choose new targets for the copy.";
+    }
+}
diff --git a/Mage.Sets/src/mage/sets/MarchOfTheMachineCommander.java b/Mage.Sets/src/mage/sets/MarchOfTheMachineCommander.java
index 9366323448..1f6e7fbf18 100644
--- a/Mage.Sets/src/mage/sets/MarchOfTheMachineCommander.java
+++ b/Mage.Sets/src/mage/sets/MarchOfTheMachineCommander.java
@@ -254,6 +254,7 @@ public final class MarchOfTheMachineCommander extends ExpansionSet {
         cards.add(new SetCardInfo("Rishkar, Peema Renegade", 310, Rarity.RARE, mage.cards.r.RishkarPeemaRenegade.class));
         cards.add(new SetCardInfo("Rogue's Passage", 421, Rarity.UNCOMMON, mage.cards.r.RoguesPassage.class));
         cards.add(new SetCardInfo("Root Out", 311, Rarity.COMMON, mage.cards.r.RootOut.class));
+        cards.add(new SetCardInfo("Rowan's Talent", 77, Rarity.RARE, mage.cards.r.RowansTalent.class));
         cards.add(new SetCardInfo("Saheeli's Artistry", 234, Rarity.RARE, mage.cards.s.SaheelisArtistry.class));
         cards.add(new SetCardInfo("Saheeli, Sublime Artificer", 338, Rarity.UNCOMMON, mage.cards.s.SaheeliSublimeArtificer.class));
         cards.add(new SetCardInfo("Saint Traft and Rem Karolus", 9, Rarity.MYTHIC, mage.cards.s.SaintTraftAndRemKarolus.class));