diff --git a/Mage.Sets/src/mage/sets/alarareborn/SovereignsOfLostAlara.java b/Mage.Sets/src/mage/sets/alarareborn/SovereignsOfLostAlara.java
index a04ea9aaf2..26e5843509 100644
--- a/Mage.Sets/src/mage/sets/alarareborn/SovereignsOfLostAlara.java
+++ b/Mage.Sets/src/mage/sets/alarareborn/SovereignsOfLostAlara.java
@@ -151,7 +151,7 @@ class SovereignsOfLostAlaraEffect extends OneShotEffect {
                     }
                 }
             }
-            you.shuffleLibrary(game);
+            you.shuffleLibrary(source, game);
         }
         return false;
     }
diff --git a/Mage.Sets/src/mage/sets/alarareborn/ThoughtHemorrhage.java b/Mage.Sets/src/mage/sets/alarareborn/ThoughtHemorrhage.java
index 12eef6fe43..f3cc451325 100644
--- a/Mage.Sets/src/mage/sets/alarareborn/ThoughtHemorrhage.java
+++ b/Mage.Sets/src/mage/sets/alarareborn/ThoughtHemorrhage.java
@@ -140,7 +140,7 @@ class ThoughtHemorrhageEffect extends OneShotEffect {
                         controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true);
                     }
                 }
-                targetPlayer.shuffleLibrary(game);
+                targetPlayer.shuffleLibrary(source, game);
                 return true;     
             }
         }
diff --git a/Mage.Sets/src/mage/sets/alarareborn/Wargate.java b/Mage.Sets/src/mage/sets/alarareborn/Wargate.java
index 38654b0877..32a4950265 100644
--- a/Mage.Sets/src/mage/sets/alarareborn/Wargate.java
+++ b/Mage.Sets/src/mage/sets/alarareborn/Wargate.java
@@ -96,7 +96,7 @@ class WargateEffect extends OneShotEffect {
                 }
             }
         }
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return false;
     }
 
diff --git a/Mage.Sets/src/mage/sets/alliances/DiminishingReturns.java b/Mage.Sets/src/mage/sets/alliances/DiminishingReturns.java
index cf62afcf15..4e36f3a474 100644
--- a/Mage.Sets/src/mage/sets/alliances/DiminishingReturns.java
+++ b/Mage.Sets/src/mage/sets/alliances/DiminishingReturns.java
@@ -87,7 +87,7 @@ class DiminishingReturnsEffect extends OneShotEffect {
                     for (Card card: player.getGraveyard().getCards(game)) {
                         card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
                     }                    
-                    player.shuffleLibrary(game);
+                    player.shuffleLibrary(source, game);
                 }
             }
 
diff --git a/Mage.Sets/src/mage/sets/antiquities/TransmuteArtifact.java b/Mage.Sets/src/mage/sets/antiquities/TransmuteArtifact.java
index 7a12056f9a..edbd8ef02f 100644
--- a/Mage.Sets/src/mage/sets/antiquities/TransmuteArtifact.java
+++ b/Mage.Sets/src/mage/sets/antiquities/TransmuteArtifact.java
@@ -126,10 +126,10 @@ class TransmuteArtifactEffect extends SearchEffect {
                     }
                 }
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return false;
     }
 
diff --git a/Mage.Sets/src/mage/sets/apocalypse/WildResearch.java b/Mage.Sets/src/mage/sets/apocalypse/WildResearch.java
index 7784cb8d7f..8aedbe4998 100644
--- a/Mage.Sets/src/mage/sets/apocalypse/WildResearch.java
+++ b/Mage.Sets/src/mage/sets/apocalypse/WildResearch.java
@@ -121,7 +121,7 @@ class WildResearchEffect extends OneShotEffect {
                 }
             }
             controller.discardOne(true, source, game);
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/archenemy/YavimayaDryad.java b/Mage.Sets/src/mage/sets/archenemy/YavimayaDryad.java
index 54e4d9cb53..7852ec5ada 100644
--- a/Mage.Sets/src/mage/sets/archenemy/YavimayaDryad.java
+++ b/Mage.Sets/src/mage/sets/archenemy/YavimayaDryad.java
@@ -111,7 +111,7 @@ class YavimayaDryadEffect extends SearchEffect {
                 targetPlayer.moveCards(new CardsImpl(target.getTargets()).getCards(game),
                         Zone.BATTLEFIELD, source, game, true, false, false, null);
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/battleforzendikar/BringToLight.java b/Mage.Sets/src/mage/sets/battleforzendikar/BringToLight.java
index 5419dc8264..da15ccd19a 100644
--- a/Mage.Sets/src/mage/sets/battleforzendikar/BringToLight.java
+++ b/Mage.Sets/src/mage/sets/battleforzendikar/BringToLight.java
@@ -105,7 +105,7 @@ class BringToLightEffect extends OneShotEffect {
             if (card != null) {
                 controller.moveCards(card, Zone.EXILED, source, game);
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             if (card != null) {
                 if (controller.chooseUse(outcome, "Cast " + card.getName() + " without paying its mana cost?", source, game)) {
                     if (card.getSpellAbility() != null) {
diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/StreamOfConsciousness.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/StreamOfConsciousness.java
index f4b77fc4c3..3ddbb3b8b5 100644
--- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/StreamOfConsciousness.java
+++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/StreamOfConsciousness.java
@@ -105,7 +105,7 @@ class StreamOfConsciousnessEffect extends OneShotEffect {
                 }
             }
             if (shuffle) {
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
             }
             return true;
         }
diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/SwayOfTheStars.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/SwayOfTheStars.java
index 4764132a42..7903af1973 100644
--- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/SwayOfTheStars.java
+++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/SwayOfTheStars.java
@@ -98,7 +98,7 @@ class SwayOfTheStarsEffect extends OneShotEffect {
                 for (Permanent permanent : game.getBattlefield().getActivePermanents(filter, controller.getId(), source.getSourceId(), game)) {
                     permanent.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
                 }
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
             }
         }
         return true;
diff --git a/Mage.Sets/src/mage/sets/bornofthegods/Peregrination.java b/Mage.Sets/src/mage/sets/bornofthegods/Peregrination.java
index 688d96d808..0a8854394a 100644
--- a/Mage.Sets/src/mage/sets/bornofthegods/Peregrination.java
+++ b/Mage.Sets/src/mage/sets/bornofthegods/Peregrination.java
@@ -123,10 +123,10 @@ class PeregrinationEffect extends OneShotEffect {
                 }
 
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return false;
 
     }
diff --git a/Mage.Sets/src/mage/sets/bornofthegods/UnravelTheAEther.java b/Mage.Sets/src/mage/sets/bornofthegods/UnravelTheAEther.java
index fd87b5d72d..54722c6684 100644
--- a/Mage.Sets/src/mage/sets/bornofthegods/UnravelTheAEther.java
+++ b/Mage.Sets/src/mage/sets/bornofthegods/UnravelTheAEther.java
@@ -97,7 +97,7 @@ class UnravelTheAEtherShuffleIntoLibraryEffect extends OneShotEffect {
         Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
         if (permanent != null) {
             if (permanent.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true)) {
-                game.getPlayer(permanent.getOwnerId()).shuffleLibrary(game);
+                game.getPlayer(permanent.getOwnerId()).shuffleLibrary(source, game);
                 return true;
             }
         }
diff --git a/Mage.Sets/src/mage/sets/bornofthegods/VortexElemental.java b/Mage.Sets/src/mage/sets/bornofthegods/VortexElemental.java
index de6aaec283..7f458c5270 100644
--- a/Mage.Sets/src/mage/sets/bornofthegods/VortexElemental.java
+++ b/Mage.Sets/src/mage/sets/bornofthegods/VortexElemental.java
@@ -124,7 +124,7 @@ class VortexElementalEffect extends OneShotEffect {
             for (UUID playerId: playersToShuffle){
                 Player player = game.getPlayer(playerId);
                 if (player != null) {
-                    player.shuffleLibrary(game);
+                    player.shuffleLibrary(source, game);
                 }
             }
 
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/GiftsUngiven.java b/Mage.Sets/src/mage/sets/championsofkamigawa/GiftsUngiven.java
index d35a0c4b9b..9cfc2e45ec 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/GiftsUngiven.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/GiftsUngiven.java
@@ -122,10 +122,10 @@ class GiftsUngivenEffect extends OneShotEffect {
                 player.moveCards(cards, Zone.LIBRARY, Zone.GRAVEYARD, source, game);
                 player.moveCards(cardsToKeep, Zone.LIBRARY, Zone.HAND, source, game);
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
-        player.shuffleLibrary(game);
+        player.shuffleLibrary(source, game);
         return false;
     }
 }
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/InameDeathAspect.java b/Mage.Sets/src/mage/sets/championsofkamigawa/InameDeathAspect.java
index 006973f52e..01b06c60d7 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/InameDeathAspect.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/InameDeathAspect.java
@@ -100,7 +100,7 @@ class InameDeathAspectEffect extends SearchEffect {
             if (target.getTargets().size() > 0) {
                 player.moveCards(new CardsImpl(target.getTargets()), Zone.LIBRARY, Zone.GRAVEYARD, source, game);
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/Mindblaze.java b/Mage.Sets/src/mage/sets/championsofkamigawa/Mindblaze.java
index 00550c441b..11704941c4 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/Mindblaze.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/Mindblaze.java
@@ -129,7 +129,7 @@ class MindblazeEffect extends OneShotEffect {
             if (player.getLibrary().count(filter, game) == count) {
                 player.damage(8, source.getSourceId(), game.copy(), false, true);
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
         }
         return false;
     }
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/NightDealings.java b/Mage.Sets/src/mage/sets/championsofkamigawa/NightDealings.java
index 79ca6d3680..253d8cf560 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/NightDealings.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/NightDealings.java
@@ -201,10 +201,10 @@ public class NightDealings extends CardImpl {
                     player.revealCards(name, cards, game);
                     game.informPlayers(player.getLogName() + " reveals " + card.getName());
                 }
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
                 return true;
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return false;
         }
     }
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/Reweave.java b/Mage.Sets/src/mage/sets/championsofkamigawa/Reweave.java
index 6a82d96309..9e63fbf59f 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/Reweave.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/Reweave.java
@@ -132,7 +132,7 @@ class ReweaveEffect extends OneShotEffect {
                                 cards.remove(card);
                             }
                             library.addAll(cards.getCards(game), game);
-                            permanentController.shuffleLibrary(game);
+                            permanentController.shuffleLibrary(source, game);
                         }
                     }
                     return true;
diff --git a/Mage.Sets/src/mage/sets/coldsnap/ArcumDagsson.java b/Mage.Sets/src/mage/sets/coldsnap/ArcumDagsson.java
index 7205351a47..9c131bc8ad 100644
--- a/Mage.Sets/src/mage/sets/coldsnap/ArcumDagsson.java
+++ b/Mage.Sets/src/mage/sets/coldsnap/ArcumDagsson.java
@@ -125,7 +125,7 @@ class ArcumDagssonEffect extends OneShotEffect {
                             player.moveCards(card, Zone.BATTLEFIELD, source, game);
                         }
                     }
-                    player.shuffleLibrary(game);
+                    player.shuffleLibrary(source, game);
                 }
                 return true;
             }
diff --git a/Mage.Sets/src/mage/sets/commander/BuriedAlive.java b/Mage.Sets/src/mage/sets/commander/BuriedAlive.java
index d22057fca8..0419ce5533 100644
--- a/Mage.Sets/src/mage/sets/commander/BuriedAlive.java
+++ b/Mage.Sets/src/mage/sets/commander/BuriedAlive.java
@@ -93,7 +93,7 @@ class BuriedAliveEffect extends SearchEffect {
             if (controller.searchLibrary(target, game)) {
                 controller.moveCards(new CardsImpl(target.getTargets()), Zone.LIBRARY, Zone.GRAVEYARD, source, game);
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/commander/CollectiveVoyage.java b/Mage.Sets/src/mage/sets/commander/CollectiveVoyage.java
index 311d9dc066..76f6ff4e52 100644
--- a/Mage.Sets/src/mage/sets/commander/CollectiveVoyage.java
+++ b/Mage.Sets/src/mage/sets/commander/CollectiveVoyage.java
@@ -111,7 +111,7 @@ class CollectiveVoyageEffect extends OneShotEffect {
                             }
 
                         }
-                        player.shuffleLibrary(game);
+                        player.shuffleLibrary(source, game);
                     }
 
                 }
diff --git a/Mage.Sets/src/mage/sets/commander/KodamasReach.java b/Mage.Sets/src/mage/sets/commander/KodamasReach.java
index 19c3bae05c..07d0f1ba55 100644
--- a/Mage.Sets/src/mage/sets/commander/KodamasReach.java
+++ b/Mage.Sets/src/mage/sets/commander/KodamasReach.java
@@ -125,10 +125,10 @@ class KodamasReachEffect extends OneShotEffect {
                 }
 
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return false;
 
     }
diff --git a/Mage.Sets/src/mage/sets/commander/TrenchGorger.java b/Mage.Sets/src/mage/sets/commander/TrenchGorger.java
index b9ca2c2412..123a8eeb62 100644
--- a/Mage.Sets/src/mage/sets/commander/TrenchGorger.java
+++ b/Mage.Sets/src/mage/sets/commander/TrenchGorger.java
@@ -106,7 +106,7 @@ class TrenchGorgerEffect extends OneShotEffect {
                 controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true);
                 count++;
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             game.addEffect(new SetPowerToughnessSourceEffect(count, count, Duration.EndOfGame, SubLayer.SetPT_7b), source);
             return true;
         }
diff --git a/Mage.Sets/src/mage/sets/commander/VeteranExplorer.java b/Mage.Sets/src/mage/sets/commander/VeteranExplorer.java
index 2f82430554..1001efeb04 100644
--- a/Mage.Sets/src/mage/sets/commander/VeteranExplorer.java
+++ b/Mage.Sets/src/mage/sets/commander/VeteranExplorer.java
@@ -106,7 +106,7 @@ class VeteranExplorerEffect extends OneShotEffect {
                 }
             }
             for (Player player: usingPlayers) {
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
             }
             return true;
         }
diff --git a/Mage.Sets/src/mage/sets/commander2013/FromTheAshes.java b/Mage.Sets/src/mage/sets/commander2013/FromTheAshes.java
index dcb24b8bb0..f22d72c29b 100644
--- a/Mage.Sets/src/mage/sets/commander2013/FromTheAshes.java
+++ b/Mage.Sets/src/mage/sets/commander2013/FromTheAshes.java
@@ -126,7 +126,7 @@ class FromTheAshesEffect extends OneShotEffect {
                             }
                         }
                     }
-                    player.shuffleLibrary(game);
+                    player.shuffleLibrary(source, game);
                 }
 
             }
diff --git a/Mage.Sets/src/mage/sets/commander2013/LimDulsVault.java b/Mage.Sets/src/mage/sets/commander2013/LimDulsVault.java
index b3a64dece0..2e3b21d07d 100644
--- a/Mage.Sets/src/mage/sets/commander2013/LimDulsVault.java
+++ b/Mage.Sets/src/mage/sets/commander2013/LimDulsVault.java
@@ -108,7 +108,7 @@ class LimDulsVaultEffect extends OneShotEffect {
             if (doAgain) {
                 player.loseLife(1, game);
             } else {
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
             }
             
             TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCard(doAgain ? textBottom : textTop));
diff --git a/Mage.Sets/src/mage/sets/commander2013/TemptWithDiscovery.java b/Mage.Sets/src/mage/sets/commander2013/TemptWithDiscovery.java
index 608f28407c..bc9ee690e0 100644
--- a/Mage.Sets/src/mage/sets/commander2013/TemptWithDiscovery.java
+++ b/Mage.Sets/src/mage/sets/commander2013/TemptWithDiscovery.java
@@ -134,7 +134,7 @@ class TemptWithDiscoveryEffect extends OneShotEffect {
             for (UUID playerId : playersShuffle) {
                 Player player = game.getPlayer(playerId);
                 if (player != null) {
-                    player.shuffleLibrary(game);
+                    player.shuffleLibrary(source, game);
                 }
             }
             return true;
diff --git a/Mage.Sets/src/mage/sets/commander2013/WidespreadPanic.java b/Mage.Sets/src/mage/sets/commander2013/WidespreadPanic.java
index 7dd5c75d80..73a4942b56 100644
--- a/Mage.Sets/src/mage/sets/commander2013/WidespreadPanic.java
+++ b/Mage.Sets/src/mage/sets/commander2013/WidespreadPanic.java
@@ -55,7 +55,6 @@ public class WidespreadPanic extends CardImpl {
         super(ownerId, 131, "Widespread Panic", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}");
         this.expansionSetCode = "C13";
 
-
         // Whenever a spell or ability causes its controller to shuffle his or her library, that player puts a card from his or her hand on top of his or her library.
         this.addAbility(new WidespreadPanicTriggeredAbility());
     }
@@ -92,10 +91,13 @@ class WidespreadPanicTriggeredAbility extends TriggeredAbilityImpl {
 
     @Override
     public boolean checkTrigger(GameEvent event, Game game) {
-        for (Effect effect :this.getEffects()) {
-            effect.setTargetPointer(new FixedTarget(event.getPlayerId()));
+        if (event.getPlayerId().equals(game.getControllerId(event.getSourceId()))) {
+            for (Effect effect : this.getEffects()) {
+                effect.setTargetPointer(new FixedTarget(event.getPlayerId()));
+            }
+            return true;
         }
-        return true;
+        return false;
     }
 
     @Override
diff --git a/Mage.Sets/src/mage/sets/commander2014/WaveOfVitriol.java b/Mage.Sets/src/mage/sets/commander2014/WaveOfVitriol.java
index 896954128f..b7983fd819 100644
--- a/Mage.Sets/src/mage/sets/commander2014/WaveOfVitriol.java
+++ b/Mage.Sets/src/mage/sets/commander2014/WaveOfVitriol.java
@@ -138,7 +138,7 @@ class WaveOfVitriolEffect extends OneShotEffect {
             }
             controller.moveCards(toBattlefield.getCards(game), Zone.BATTLEFIELD, source, game, true, false, true, null);
             for (Player player : playersToShuffle) {
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
             }
 
             return true;
diff --git a/Mage.Sets/src/mage/sets/commander2015/OreskosExplorer.java b/Mage.Sets/src/mage/sets/commander2015/OreskosExplorer.java
index 2eaff4701e..85ff91a312 100644
--- a/Mage.Sets/src/mage/sets/commander2015/OreskosExplorer.java
+++ b/Mage.Sets/src/mage/sets/commander2015/OreskosExplorer.java
@@ -123,7 +123,7 @@ class OreskosExplorerEffect extends OneShotEffect {
                 controller.moveCards(cards.getCards(game), Zone.HAND, source, game);
             }
         }
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return true;
     }
 }
diff --git a/Mage.Sets/src/mage/sets/commander2015/SyntheticDestiny.java b/Mage.Sets/src/mage/sets/commander2015/SyntheticDestiny.java
index 142ddc269a..fd73800981 100644
--- a/Mage.Sets/src/mage/sets/commander2015/SyntheticDestiny.java
+++ b/Mage.Sets/src/mage/sets/commander2015/SyntheticDestiny.java
@@ -150,7 +150,7 @@ class SyntheticDestinyDelayedEffect extends OneShotEffect {
             controller.revealCards(sourceObject.getIdName(), revealed, game);
             controller.moveCards(creatureCards, Zone.BATTLEFIELD, source, game, false, false, true, null);
             controller.putCardsOnTopOfLibrary(nonCreatureCards, game, source, false);
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/conflux/Conflux.java b/Mage.Sets/src/mage/sets/conflux/Conflux.java
index 1172422abe..2ba3da3696 100644
--- a/Mage.Sets/src/mage/sets/conflux/Conflux.java
+++ b/Mage.Sets/src/mage/sets/conflux/Conflux.java
@@ -173,7 +173,7 @@ class ConfluxEffect extends OneShotEffect {
             for (Card card : cards.getCards(game)) {
                 card.moveToZone(Zone.HAND, source.getSourceId(), game, true);
             }
-            you.shuffleLibrary(game);
+            you.shuffleLibrary(source, game);
         }
         return true;
     }
diff --git a/Mage.Sets/src/mage/sets/conflux/PathToExile.java b/Mage.Sets/src/mage/sets/conflux/PathToExile.java
index ed66cc9597..dcb75c4167 100644
--- a/Mage.Sets/src/mage/sets/conflux/PathToExile.java
+++ b/Mage.Sets/src/mage/sets/conflux/PathToExile.java
@@ -101,7 +101,7 @@ class PathToExileEffect extends OneShotEffect {
                         player.moveCards(card, Zone.BATTLEFIELD, source, game, true, false, false, null);
                     }
                 }
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
             }
             return true;
         }
diff --git a/Mage.Sets/src/mage/sets/conflux/ShardConvergence.java b/Mage.Sets/src/mage/sets/conflux/ShardConvergence.java
index aa3393ce8c..a263079ea0 100644
--- a/Mage.Sets/src/mage/sets/conflux/ShardConvergence.java
+++ b/Mage.Sets/src/mage/sets/conflux/ShardConvergence.java
@@ -95,7 +95,7 @@ class ShardConvergenceEffect extends OneShotEffect {
         searchLand(player, source, game, cards, "Mountain");
 
         player.revealCards("Shard Convergence", cards, game);
-        player.shuffleLibrary(game);
+        player.shuffleLibrary(source, game);
 
         return true;
     }
diff --git a/Mage.Sets/src/mage/sets/darkascension/ArchangelsLight.java b/Mage.Sets/src/mage/sets/darkascension/ArchangelsLight.java
index 79d44bb154..1894a66535 100644
--- a/Mage.Sets/src/mage/sets/darkascension/ArchangelsLight.java
+++ b/Mage.Sets/src/mage/sets/darkascension/ArchangelsLight.java
@@ -87,7 +87,7 @@ class ArchangelsLightEffect extends OneShotEffect {
             for (Card card: controller.getGraveyard().getCards(game)) {
                 controller.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true);
             }            
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/darkascension/CurseOfMisfortunes.java b/Mage.Sets/src/mage/sets/darkascension/CurseOfMisfortunes.java
index ded4f2fa83..29dae5d38e 100644
--- a/Mage.Sets/src/mage/sets/darkascension/CurseOfMisfortunes.java
+++ b/Mage.Sets/src/mage/sets/darkascension/CurseOfMisfortunes.java
@@ -119,11 +119,11 @@ class CurseOfMisfortunesEffect extends OneShotEffect {
                     if (card != null) {
                         this.setTargetPointer(new FixedTarget(targetPlayer.getId()));
                         game.getState().setValue("attachTo:" + card.getId(), targetPlayer.getId());
-                        player.shuffleLibrary(game);
+                        player.shuffleLibrary(source, game);
                         return card.putOntoBattlefield(game, Zone.LIBRARY, source.getSourceId(), source.getControllerId());
                     }
                 }
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
             }
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/darkascension/IncreasingAmbition.java b/Mage.Sets/src/mage/sets/darkascension/IncreasingAmbition.java
index 281374c092..e17c8d332c 100644
--- a/Mage.Sets/src/mage/sets/darkascension/IncreasingAmbition.java
+++ b/Mage.Sets/src/mage/sets/darkascension/IncreasingAmbition.java
@@ -114,7 +114,7 @@ class IncreasingAmbitionEffect extends SearchEffect {
                     }
                 }
                 // shuffle anyway
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
                 return true;
             }
         }
diff --git a/Mage.Sets/src/mage/sets/darksteel/Reshape.java b/Mage.Sets/src/mage/sets/darksteel/Reshape.java
index c1472d3c26..88c672c4fa 100644
--- a/Mage.Sets/src/mage/sets/darksteel/Reshape.java
+++ b/Mage.Sets/src/mage/sets/darksteel/Reshape.java
@@ -109,10 +109,10 @@ class ReshapeSearchEffect extends OneShotEffect {
                     controller.moveCards(card, Zone.BATTLEFIELD, source, game);
                 }
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return false;
     }
 
diff --git a/Mage.Sets/src/mage/sets/dissension/HideSeek.java b/Mage.Sets/src/mage/sets/dissension/HideSeek.java
index ec7a715806..6b787b1e8d 100644
--- a/Mage.Sets/src/mage/sets/dissension/HideSeek.java
+++ b/Mage.Sets/src/mage/sets/dissension/HideSeek.java
@@ -122,7 +122,7 @@ class SeekEffect extends OneShotEffect {
                     }
                 }
             }
-            opponent.shuffleLibrary(game);
+            opponent.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/dissension/LoamingShaman.java b/Mage.Sets/src/mage/sets/dissension/LoamingShaman.java
index ebcb19547c..cd000b50aa 100644
--- a/Mage.Sets/src/mage/sets/dissension/LoamingShaman.java
+++ b/Mage.Sets/src/mage/sets/dissension/LoamingShaman.java
@@ -102,7 +102,7 @@ class LoamingShamanEffect extends OneShotEffect {
                     card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
                 }
             }
-            targetPlayer.shuffleLibrary(game);
+            targetPlayer.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/dissension/ProteanHulk.java b/Mage.Sets/src/mage/sets/dissension/ProteanHulk.java
index a05dbabe29..909aca4c6e 100644
--- a/Mage.Sets/src/mage/sets/dissension/ProteanHulk.java
+++ b/Mage.Sets/src/mage/sets/dissension/ProteanHulk.java
@@ -99,7 +99,7 @@ class ProteanHulkEffect extends OneShotEffect {
         if (controller != null) {
             Cards cardsPicked = this.ProteanHulkSearch(game, source);
             controller.moveCards(cardsPicked.getCards(game), Zone.BATTLEFIELD, source, game);
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/dissension/ResearchDevelopment.java b/Mage.Sets/src/mage/sets/dissension/ResearchDevelopment.java
index 7f8df2846f..d18336fdd9 100644
--- a/Mage.Sets/src/mage/sets/dissension/ResearchDevelopment.java
+++ b/Mage.Sets/src/mage/sets/dissension/ResearchDevelopment.java
@@ -140,7 +140,7 @@ class ResearchEffect extends OneShotEffect {
             game.informPlayers(player.getLogName() + " has chosen " + count + " card(s) to shuffle into his or her library.");
 
             if (count > 0) {
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
             }
 
             return true;
diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/ReapIntellect.java b/Mage.Sets/src/mage/sets/dragonsmaze/ReapIntellect.java
index 4525ee27d9..1515e56a5b 100644
--- a/Mage.Sets/src/mage/sets/dragonsmaze/ReapIntellect.java
+++ b/Mage.Sets/src/mage/sets/dragonsmaze/ReapIntellect.java
@@ -168,7 +168,7 @@ class ReapIntellectEffect extends OneShotEffect {
 
             }
 
-            targetPlayer.shuffleLibrary(game);
+            targetPlayer.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/LearnFromThePast.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/LearnFromThePast.java
index 59d356c1f4..6b5e55c3dd 100644
--- a/Mage.Sets/src/mage/sets/dragonsoftarkir/LearnFromThePast.java
+++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/LearnFromThePast.java
@@ -92,7 +92,7 @@ class LearnFromThePastEffect extends OneShotEffect {
             for (Card card: player.getGraveyard().getCards(game)) {
                 player.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true);
             }            
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/eventide/EndlessHorizons.java b/Mage.Sets/src/mage/sets/eventide/EndlessHorizons.java
index 17af8a3fdc..4524eb35c0 100644
--- a/Mage.Sets/src/mage/sets/eventide/EndlessHorizons.java
+++ b/Mage.Sets/src/mage/sets/eventide/EndlessHorizons.java
@@ -115,7 +115,7 @@ class EndlessHorizonsEffect extends SearchEffect {
                     }
                 }
             }
-            you.shuffleLibrary(game);
+            you.shuffleLibrary(source, game);
             return true;
 
         }
diff --git a/Mage.Sets/src/mage/sets/eventide/NightmareIncursion.java b/Mage.Sets/src/mage/sets/eventide/NightmareIncursion.java
index 5f418502f6..81101765b8 100644
--- a/Mage.Sets/src/mage/sets/eventide/NightmareIncursion.java
+++ b/Mage.Sets/src/mage/sets/eventide/NightmareIncursion.java
@@ -122,7 +122,7 @@ class NightmareIncursionEffect extends OneShotEffect {
             }
         }
         if (targetPlayer != null) {
-            targetPlayer.shuffleLibrary(game);
+            targetPlayer.shuffleLibrary(source, game);
         }
         return result;
     }
diff --git a/Mage.Sets/src/mage/sets/fatereforged/RenownedWeaponsmith.java b/Mage.Sets/src/mage/sets/fatereforged/RenownedWeaponsmith.java
index d2daeff57e..4a1a01b88e 100644
--- a/Mage.Sets/src/mage/sets/fatereforged/RenownedWeaponsmith.java
+++ b/Mage.Sets/src/mage/sets/fatereforged/RenownedWeaponsmith.java
@@ -153,7 +153,7 @@ class RenownedWeaponsmithEffect extends OneShotEffect {
                     controller.moveCards(revealed, null, Zone.HAND, source, game);
                 }
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/fifthdawn/Acquire.java b/Mage.Sets/src/mage/sets/fifthdawn/Acquire.java
index bae08d6783..92a530228b 100644
--- a/Mage.Sets/src/mage/sets/fifthdawn/Acquire.java
+++ b/Mage.Sets/src/mage/sets/fifthdawn/Acquire.java
@@ -69,7 +69,7 @@ class AcquireEffect extends OneShotEffect {
             if (targetCard != null) {
                 controller.moveCards(targetCard, Zone.BATTLEFIELD, source, game);
             }
-            opponent.shuffleLibrary(game);
+            opponent.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/fifthedition/JestersCap.java b/Mage.Sets/src/mage/sets/fifthedition/JestersCap.java
index c6b4c69acd..09783fc3c2 100644
--- a/Mage.Sets/src/mage/sets/fifthedition/JestersCap.java
+++ b/Mage.Sets/src/mage/sets/fifthedition/JestersCap.java
@@ -104,7 +104,7 @@ class JestersCapEffect extends OneShotEffect {
                     applied |= player.moveCardToExileWithInfo(targetCard, null, null, source.getSourceId(), game, Zone.LIBRARY, true);
                 }
             }
-            targetPlayer.shuffleLibrary(game);
+            targetPlayer.shuffleLibrary(source, game);
         }
         return applied;
     }
diff --git a/Mage.Sets/src/mage/sets/fifthedition/Portent.java b/Mage.Sets/src/mage/sets/fifthedition/Portent.java
index cd0e30a64a..0f5607e1a3 100644
--- a/Mage.Sets/src/mage/sets/fifthedition/Portent.java
+++ b/Mage.Sets/src/mage/sets/fifthedition/Portent.java
@@ -123,7 +123,7 @@ class  PortentEffect extends OneShotEffect {
             card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
         }
         if (you.chooseUse(Outcome.Neutral, "You may have that player shuffle his or her library", source, game)){
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
         }
         return true;
     }
diff --git a/Mage.Sets/src/mage/sets/fifthedition/WindsOfChange.java b/Mage.Sets/src/mage/sets/fifthedition/WindsOfChange.java
index c056c1ec21..5c110b4600 100644
--- a/Mage.Sets/src/mage/sets/fifthedition/WindsOfChange.java
+++ b/Mage.Sets/src/mage/sets/fifthedition/WindsOfChange.java
@@ -90,7 +90,7 @@ class WindsOfChangeEffect extends OneShotEffect {
                 if (player != null) {
                     permanentsCount.put(playerId, player.getHand().size());
                     player.moveCards(player.getHand(), Zone.HAND, Zone.LIBRARY, source, game);
-                    player.shuffleLibrary(game);
+                    player.shuffleLibrary(source, game);
                 }
             }
             for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) {
diff --git a/Mage.Sets/src/mage/sets/futuresight/BitterOrdeal.java b/Mage.Sets/src/mage/sets/futuresight/BitterOrdeal.java
index e11657f27d..ce2c55a4a4 100644
--- a/Mage.Sets/src/mage/sets/futuresight/BitterOrdeal.java
+++ b/Mage.Sets/src/mage/sets/futuresight/BitterOrdeal.java
@@ -99,7 +99,7 @@ class BitterOrdealEffect extends OneShotEffect {
                     controller.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY, true);
                 }
             }
-            targetPlayer.shuffleLibrary(game);
+            targetPlayer.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/gatecrash/SereneRemembrance.java b/Mage.Sets/src/mage/sets/gatecrash/SereneRemembrance.java
index 50959950ba..1a5aebf412 100644
--- a/Mage.Sets/src/mage/sets/gatecrash/SereneRemembrance.java
+++ b/Mage.Sets/src/mage/sets/gatecrash/SereneRemembrance.java
@@ -106,10 +106,10 @@ class SereneRemembranceEffect extends OneShotEffect {
         result |= card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, false);
         Player player = game.getPlayer(card.getOwnerId());
         if (player != null){
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
         }
         if (graveyardPlayer != null && !graveyardPlayer.equals(player)) {
-            graveyardPlayer.shuffleLibrary(game);
+            graveyardPlayer.shuffleLibrary(source, game);
         }
         return result;
     }
diff --git a/Mage.Sets/src/mage/sets/gatecrash/SignalTheClans.java b/Mage.Sets/src/mage/sets/gatecrash/SignalTheClans.java
index 895994b2fd..eccdf8921b 100644
--- a/Mage.Sets/src/mage/sets/gatecrash/SignalTheClans.java
+++ b/Mage.Sets/src/mage/sets/gatecrash/SignalTheClans.java
@@ -118,10 +118,10 @@ class SignalTheClansEffect extends SearchEffect {
                     card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
                 }
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
-        player.shuffleLibrary(game);
+        player.shuffleLibrary(source, game);
         return false;
     }
 
diff --git a/Mage.Sets/src/mage/sets/gatecrash/UnexpectedResults.java b/Mage.Sets/src/mage/sets/gatecrash/UnexpectedResults.java
index e5a485d81f..932574c998 100644
--- a/Mage.Sets/src/mage/sets/gatecrash/UnexpectedResults.java
+++ b/Mage.Sets/src/mage/sets/gatecrash/UnexpectedResults.java
@@ -111,7 +111,7 @@ class UnexpectedResultEffect extends OneShotEffect {
             return false;
         }
         if (controller.getLibrary().size() > 0) {
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             Card card = controller.getLibrary().getFromTop(game);
             if (card == null) {
                 return false;
diff --git a/Mage.Sets/src/mage/sets/guildpact/SkeletalVampire.java b/Mage.Sets/src/mage/sets/guildpact/SkeletalVampire.java
index 66437c854b..8f46265a15 100644
--- a/Mage.Sets/src/mage/sets/guildpact/SkeletalVampire.java
+++ b/Mage.Sets/src/mage/sets/guildpact/SkeletalVampire.java
@@ -28,11 +28,7 @@
 package mage.sets.guildpact;
 
 import java.util.UUID;
-
-import mage.constants.CardType;
-import mage.constants.Rarity;
 import mage.MageInt;
-import mage.ObjectColor;
 import mage.abilities.Ability;
 import mage.abilities.common.EntersBattlefieldTriggeredAbility;
 import mage.abilities.common.SimpleActivatedAbility;
@@ -42,6 +38,8 @@ import mage.abilities.effects.common.CreateTokenEffect;
 import mage.abilities.effects.common.RegenerateSourceEffect;
 import mage.abilities.keyword.FlyingAbility;
 import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Rarity;
 import mage.constants.Zone;
 import mage.filter.common.FilterControlledCreaturePermanent;
 import mage.filter.predicate.mageobject.SubtypePredicate;
diff --git a/Mage.Sets/src/mage/sets/innistrad/BitterheartWitch.java b/Mage.Sets/src/mage/sets/innistrad/BitterheartWitch.java
index 2fe0fc9e9a..f5250fd577 100644
--- a/Mage.Sets/src/mage/sets/innistrad/BitterheartWitch.java
+++ b/Mage.Sets/src/mage/sets/innistrad/BitterheartWitch.java
@@ -111,10 +111,10 @@ class BitterheartWitchEffect extends OneShotEffect {
                     card.putOntoBattlefield(game, Zone.LIBRARY, source.getSourceId(), source.getControllerId());
                     targetPlayer.addAttachment(card.getId(), game);
                 }
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
                 return true;
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
         }
         return false;
     }
diff --git a/Mage.Sets/src/mage/sets/innistrad/CaravanVigil.java b/Mage.Sets/src/mage/sets/innistrad/CaravanVigil.java
index 7bbd95e03b..83381655cf 100644
--- a/Mage.Sets/src/mage/sets/innistrad/CaravanVigil.java
+++ b/Mage.Sets/src/mage/sets/innistrad/CaravanVigil.java
@@ -106,7 +106,7 @@ class CaravanVigilEffect extends OneShotEffect {
                     controller.revealCards(sourceObject.getIdName(), cards, game);
                 }
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/innistrad/GarrukTheVeilCursed.java b/Mage.Sets/src/mage/sets/innistrad/GarrukTheVeilCursed.java
index 4a5d8e531d..62381ffeae 100644
--- a/Mage.Sets/src/mage/sets/innistrad/GarrukTheVeilCursed.java
+++ b/Mage.Sets/src/mage/sets/innistrad/GarrukTheVeilCursed.java
@@ -184,7 +184,7 @@ class GarrukTheVeilCursedEffect extends OneShotEffect {
                 controller.revealCards("Garruk, the Veil-Cursed", cards, game);
             }
             // shuffle
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/innistrad/GhostQuarter.java b/Mage.Sets/src/mage/sets/innistrad/GhostQuarter.java
index b765642f37..398588bc19 100644
--- a/Mage.Sets/src/mage/sets/innistrad/GhostQuarter.java
+++ b/Mage.Sets/src/mage/sets/innistrad/GhostQuarter.java
@@ -107,7 +107,7 @@ class GhostQuarterEffect extends OneShotEffect {
                         controller.moveCards(card, Zone.BATTLEFIELD, source, game);
                     }
                 }
-                controller.shuffleLibrary(game);
+                controller.shuffleLibrary(source, game);
             }
             return true;
         }
diff --git a/Mage.Sets/src/mage/sets/innistrad/MemorysJourney.java b/Mage.Sets/src/mage/sets/innistrad/MemorysJourney.java
index 654c90130c..2bc4ea3ef5 100644
--- a/Mage.Sets/src/mage/sets/innistrad/MemorysJourney.java
+++ b/Mage.Sets/src/mage/sets/innistrad/MemorysJourney.java
@@ -108,7 +108,7 @@ class MemorysJourneyEffect extends OneShotEffect {
                 }
             }
             if (shuffle) {
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
             }
             return true;
         }
diff --git a/Mage.Sets/src/mage/sets/innistrad/MirrorMadPhantasm.java b/Mage.Sets/src/mage/sets/innistrad/MirrorMadPhantasm.java
index 6b54330e69..2fad473b1d 100644
--- a/Mage.Sets/src/mage/sets/innistrad/MirrorMadPhantasm.java
+++ b/Mage.Sets/src/mage/sets/innistrad/MirrorMadPhantasm.java
@@ -94,7 +94,7 @@ class MirrorMadPhantasmEffect extends OneShotEffect {
             Player player = game.getPlayer(perm.getOwnerId());
             if (player != null) {
                 perm.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
                 Cards cards = new CardsImpl();
                 while (true) {
                     Card card = player.getLibrary().removeFromTop(game);
diff --git a/Mage.Sets/src/mage/sets/invasion/ThicketElemental.java b/Mage.Sets/src/mage/sets/invasion/ThicketElemental.java
index e669ddd5ad..c444c5d63f 100644
--- a/Mage.Sets/src/mage/sets/invasion/ThicketElemental.java
+++ b/Mage.Sets/src/mage/sets/invasion/ThicketElemental.java
@@ -107,7 +107,7 @@ class ThicketElementalEffect extends OneShotEffect {
             }
             controller.revealCards(sourceObject.getIdName(), revealedCards, game);
             controller.moveCards(revealedCards, Zone.LIBRARY, source, game);
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/judgment/KrosanReclamation.java b/Mage.Sets/src/mage/sets/judgment/KrosanReclamation.java
index 70ba340902..28f4ee0b65 100644
--- a/Mage.Sets/src/mage/sets/judgment/KrosanReclamation.java
+++ b/Mage.Sets/src/mage/sets/judgment/KrosanReclamation.java
@@ -108,7 +108,7 @@ class KrosanReclamationEffect extends OneShotEffect {
                 }
             }
             if (shuffle) {
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
             }
             return true;
         }
diff --git a/Mage.Sets/src/mage/sets/judgment/QuietSpeculation.java b/Mage.Sets/src/mage/sets/judgment/QuietSpeculation.java
index 0891389430..dfa2e1e17e 100644
--- a/Mage.Sets/src/mage/sets/judgment/QuietSpeculation.java
+++ b/Mage.Sets/src/mage/sets/judgment/QuietSpeculation.java
@@ -109,10 +109,10 @@ class SearchLibraryPutInGraveEffect extends SearchEffect {
                 player.revealCards("Quiet Speculation", cards, game);
                 player.moveCards(cards, Zone.LIBRARY, Zone.GRAVEYARD, source, game);
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
-        player.shuffleLibrary(game);
+        player.shuffleLibrary(source, game);
         return false;
     }
 
diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/CranialArchive.java b/Mage.Sets/src/mage/sets/khansoftarkir/CranialArchive.java
index 8c3ffe1705..2152a9cbc8 100644
--- a/Mage.Sets/src/mage/sets/khansoftarkir/CranialArchive.java
+++ b/Mage.Sets/src/mage/sets/khansoftarkir/CranialArchive.java
@@ -96,7 +96,7 @@ class CranialArchiveEffect extends OneShotEffect {
                 for (Card card: targetPlayer.getGraveyard().getCards(game)){
                     targetPlayer.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true);
                 }
-                targetPlayer.shuffleLibrary(game);
+                targetPlayer.shuffleLibrary(source, game);
             }
             controller.drawCards(1, game);
             return true;
diff --git a/Mage.Sets/src/mage/sets/legions/DarkSupplicant.java b/Mage.Sets/src/mage/sets/legions/DarkSupplicant.java
index 36d802aa73..a1216dc0c2 100644
--- a/Mage.Sets/src/mage/sets/legions/DarkSupplicant.java
+++ b/Mage.Sets/src/mage/sets/legions/DarkSupplicant.java
@@ -128,7 +128,7 @@ class DarkSupplicantEffect extends OneShotEffect {
                     }
                 }
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
         }
         // Graveyard check
         if (player.chooseUse(Outcome.Benefit, "Do you want to search your graveyard for Scion of Darkness?", source, game)) {
diff --git a/Mage.Sets/src/mage/sets/legions/ElvishSoultiller.java b/Mage.Sets/src/mage/sets/legions/ElvishSoultiller.java
index 014632be1d..d874ba5654 100644
--- a/Mage.Sets/src/mage/sets/legions/ElvishSoultiller.java
+++ b/Mage.Sets/src/mage/sets/legions/ElvishSoultiller.java
@@ -113,7 +113,7 @@ class ElvishSoultillerEffect extends OneShotEffect {
             filter.add(new SubtypePredicate(typeChoice.getChoice()));
             cardsToLibrary.addAll(controller.getGraveyard().getCards(filter, source.getSourceId(), source.getControllerId(), game));
             controller.putCardsOnTopOfLibrary(cardsToLibrary, game, source, false);
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/limitedalpha/NaturalSelection.java b/Mage.Sets/src/mage/sets/limitedalpha/NaturalSelection.java
index 160c413016..c6b246ee6f 100644
--- a/Mage.Sets/src/mage/sets/limitedalpha/NaturalSelection.java
+++ b/Mage.Sets/src/mage/sets/limitedalpha/NaturalSelection.java
@@ -120,7 +120,7 @@ class  NaturalSelectionEffect extends OneShotEffect {
             card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
         }
         if (you.chooseUse(Outcome.Neutral, "You may have that player shuffle his or her library", source, game)){
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
         }
         return true;
     }
diff --git a/Mage.Sets/src/mage/sets/limitedalpha/Timetwister.java b/Mage.Sets/src/mage/sets/limitedalpha/Timetwister.java
index b515aba3a5..479b4d68a2 100644
--- a/Mage.Sets/src/mage/sets/limitedalpha/Timetwister.java
+++ b/Mage.Sets/src/mage/sets/limitedalpha/Timetwister.java
@@ -86,7 +86,7 @@ class TimetwisterEffect extends OneShotEffect {
             if (player != null) {
                 player.moveCards(player.getHand(), Zone.HAND, Zone.LIBRARY, source, game);
                 player.moveCards(player.getGraveyard(), Zone.GRAVEYARD, Zone.LIBRARY, source, game);
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
             }
         }
         return true;
diff --git a/Mage.Sets/src/mage/sets/lorwyn/PrimalCommand.java b/Mage.Sets/src/mage/sets/lorwyn/PrimalCommand.java
index 8c241d4b72..09797b749f 100644
--- a/Mage.Sets/src/mage/sets/lorwyn/PrimalCommand.java
+++ b/Mage.Sets/src/mage/sets/lorwyn/PrimalCommand.java
@@ -124,7 +124,7 @@ class PrimalCommandShuffleGraveyardEffect extends OneShotEffect {
             for (Card card: player.getGraveyard().getCards(game)) {
                 player.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true);
             }                 
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/magic2010/HauntingEchoes.java b/Mage.Sets/src/mage/sets/magic2010/HauntingEchoes.java
index 56cd51479a..aebf7a0490 100644
--- a/Mage.Sets/src/mage/sets/magic2010/HauntingEchoes.java
+++ b/Mage.Sets/src/mage/sets/magic2010/HauntingEchoes.java
@@ -107,7 +107,7 @@ class HauntingEchoesEffect extends OneShotEffect {
                     }
                 }
             }
-            targetPlayer.shuffleLibrary(game);
+            targetPlayer.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/magic2010/SphinxAmbassador.java b/Mage.Sets/src/mage/sets/magic2010/SphinxAmbassador.java
index c76befa295..6c755b0e61 100644
--- a/Mage.Sets/src/mage/sets/magic2010/SphinxAmbassador.java
+++ b/Mage.Sets/src/mage/sets/magic2010/SphinxAmbassador.java
@@ -130,7 +130,7 @@ class SphinxAmbassadorEffect extends OneShotEffect {
                 }
             }
 
-            targetPlayer.shuffleLibrary(game);
+            targetPlayer.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/magic2010/WarpWorld.java b/Mage.Sets/src/mage/sets/magic2010/WarpWorld.java
index 71a2986efa..3bd2c0129c 100644
--- a/Mage.Sets/src/mage/sets/magic2010/WarpWorld.java
+++ b/Mage.Sets/src/mage/sets/magic2010/WarpWorld.java
@@ -117,7 +117,7 @@ class WarpWorldEffect extends OneShotEffect {
                 }
 
                 if (count > 0) {
-                    player.shuffleLibrary(game);
+                    player.shuffleLibrary(source, game);
                 }
                 permanentsCount.put(playerId, count);
             }
diff --git a/Mage.Sets/src/mage/sets/magic2011/Cultivate.java b/Mage.Sets/src/mage/sets/magic2011/Cultivate.java
index d8b36c4334..2366ad34ff 100644
--- a/Mage.Sets/src/mage/sets/magic2011/Cultivate.java
+++ b/Mage.Sets/src/mage/sets/magic2011/Cultivate.java
@@ -126,10 +126,10 @@ class CultivateEffect extends OneShotEffect {
                 }
 
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return false;
 
     }
diff --git a/Mage.Sets/src/mage/sets/magic2011/ElixirOfImmortality.java b/Mage.Sets/src/mage/sets/magic2011/ElixirOfImmortality.java
index 19f46b5c95..59fce8e85e 100644
--- a/Mage.Sets/src/mage/sets/magic2011/ElixirOfImmortality.java
+++ b/Mage.Sets/src/mage/sets/magic2011/ElixirOfImmortality.java
@@ -92,7 +92,7 @@ class ElixerOfImmortalityEffect extends OneShotEffect {
             for (Card card: player.getGraveyard().getCards(game)) {
                 player.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true);
             }                 
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/magic2011/HoardingDragon.java b/Mage.Sets/src/mage/sets/magic2011/HoardingDragon.java
index 409bfe4f20..d4cbb80a3f 100644
--- a/Mage.Sets/src/mage/sets/magic2011/HoardingDragon.java
+++ b/Mage.Sets/src/mage/sets/magic2011/HoardingDragon.java
@@ -113,7 +113,7 @@ class HoardingDragonEffect extends OneShotEffect {
                     }
                 }
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }       
         return false;
diff --git a/Mage.Sets/src/mage/sets/magic2011/MassPolymorph.java b/Mage.Sets/src/mage/sets/magic2011/MassPolymorph.java
index cd3743fde2..b6dc54bedb 100644
--- a/Mage.Sets/src/mage/sets/magic2011/MassPolymorph.java
+++ b/Mage.Sets/src/mage/sets/magic2011/MassPolymorph.java
@@ -112,7 +112,7 @@ class MassPolymorphEffect extends OneShotEffect {
             controller.revealCards(sourceObject.getIdName(), revealed, game);
             controller.moveCards(creatureCards, Zone.BATTLEFIELD, source, game, false, false, true, null);
             controller.putCardsOnTopOfLibrary(nonCreatureCards, game, source, false);
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/magic2011/TimeReversal.java b/Mage.Sets/src/mage/sets/magic2011/TimeReversal.java
index adf004f62a..546496984a 100644
--- a/Mage.Sets/src/mage/sets/magic2011/TimeReversal.java
+++ b/Mage.Sets/src/mage/sets/magic2011/TimeReversal.java
@@ -88,7 +88,7 @@ class TimeReversalEffect extends OneShotEffect {
             if (player != null) {
                 player.moveCards(player.getHand(), Zone.HAND, Zone.LIBRARY, source, game);
                 player.moveCards(player.getGraveyard(), Zone.GRAVEYARD, Zone.LIBRARY, source, game);
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
             }
         }
         return true;
diff --git a/Mage.Sets/src/mage/sets/magic2012/ArachnusSpinner.java b/Mage.Sets/src/mage/sets/magic2012/ArachnusSpinner.java
index e4b6948586..ee691e0c3b 100644
--- a/Mage.Sets/src/mage/sets/magic2012/ArachnusSpinner.java
+++ b/Mage.Sets/src/mage/sets/magic2012/ArachnusSpinner.java
@@ -140,7 +140,7 @@ class ArachnusSpinnerEffect extends OneShotEffect {
                     zone = Zone.LIBRARY;
                 }
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
         }
         if (card != null) {
             Permanent permanent = game.getPermanent(source.getFirstTarget());
diff --git a/Mage.Sets/src/mage/sets/magic2012/DoublingChant.java b/Mage.Sets/src/mage/sets/magic2012/DoublingChant.java
index 339fc133be..275f508d8b 100644
--- a/Mage.Sets/src/mage/sets/magic2012/DoublingChant.java
+++ b/Mage.Sets/src/mage/sets/magic2012/DoublingChant.java
@@ -123,7 +123,7 @@ class DoublingChantEffect extends OneShotEffect {
         for (Card card : chosenCards) {
             card.putOntoBattlefield(game, Zone.LIBRARY, source.getSourceId(), source.getControllerId());
         }
-        player.shuffleLibrary(game);
+        player.shuffleLibrary(source, game);
         return true;
     }
 }
diff --git a/Mage.Sets/src/mage/sets/magic2013/BoundlessRealms.java b/Mage.Sets/src/mage/sets/magic2013/BoundlessRealms.java
index 922f1e1f5f..e84cfae55b 100644
--- a/Mage.Sets/src/mage/sets/magic2013/BoundlessRealms.java
+++ b/Mage.Sets/src/mage/sets/magic2013/BoundlessRealms.java
@@ -99,7 +99,7 @@ class BoundlessRealmsEffect extends OneShotEffect {
         if (controller.searchLibrary(target, game)) {
             controller.moveCards(new CardsImpl(target.getTargets()).getCards(game), Zone.BATTLEFIELD, source, game, true, false, false, null);
         }
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return true;
     }
 }
diff --git a/Mage.Sets/src/mage/sets/magic2013/DiabolicRevelation.java b/Mage.Sets/src/mage/sets/magic2013/DiabolicRevelation.java
index 1d602cf2b4..5dc66de7b4 100644
--- a/Mage.Sets/src/mage/sets/magic2013/DiabolicRevelation.java
+++ b/Mage.Sets/src/mage/sets/magic2013/DiabolicRevelation.java
@@ -103,7 +103,7 @@ class DiabolicRevelationEffect extends OneShotEffect {
             }
         }
 
-        player.shuffleLibrary(game);
+        player.shuffleLibrary(source, game);
         return true;
     }
 }
diff --git a/Mage.Sets/src/mage/sets/magic2013/GemOfBecoming.java b/Mage.Sets/src/mage/sets/magic2013/GemOfBecoming.java
index 2cd24acb98..0a17e98f28 100644
--- a/Mage.Sets/src/mage/sets/magic2013/GemOfBecoming.java
+++ b/Mage.Sets/src/mage/sets/magic2013/GemOfBecoming.java
@@ -106,7 +106,7 @@ class GemOfBecomingEffect extends OneShotEffect {
         searchLand(player, source, game, cards, "Mountain");
 
         player.revealCards("Gem of Becoming", cards, game);
-        player.shuffleLibrary(game);
+        player.shuffleLibrary(source, game);
 
         return false;
     }
diff --git a/Mage.Sets/src/mage/sets/magic2013/ShimianSpecter.java b/Mage.Sets/src/mage/sets/magic2013/ShimianSpecter.java
index a8753258ab..9dff0e9280 100644
--- a/Mage.Sets/src/mage/sets/magic2013/ShimianSpecter.java
+++ b/Mage.Sets/src/mage/sets/magic2013/ShimianSpecter.java
@@ -157,7 +157,7 @@ class ShimianSpecterEffect extends OneShotEffect {
                         controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true);
                     }
                 }
-                targetPlayer.shuffleLibrary(game);
+                targetPlayer.shuffleLibrary(source, game);
             }
             return true;
         }
diff --git a/Mage.Sets/src/mage/sets/magic2013/VoidStalker.java b/Mage.Sets/src/mage/sets/magic2013/VoidStalker.java
index 516e26059b..a305d23ca8 100644
--- a/Mage.Sets/src/mage/sets/magic2013/VoidStalker.java
+++ b/Mage.Sets/src/mage/sets/magic2013/VoidStalker.java
@@ -94,13 +94,13 @@ class VoidStalkerEffect extends OneShotEffect {
             p.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
             Player pl = game.getPlayer(p.getControllerId());
             if (pl != null)
-                pl.shuffleLibrary(game);
+                pl.shuffleLibrary(source, game);
         }
         if (s != null) {
             s.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
             Player pl = game.getPlayer(s.getControllerId());
             if (pl != null)
-                pl.shuffleLibrary(game);
+                pl.shuffleLibrary(source, game);
         }
         return true;
     }
diff --git a/Mage.Sets/src/mage/sets/magic2015/BoonweaverGiant.java b/Mage.Sets/src/mage/sets/magic2015/BoonweaverGiant.java
index d5f432ff10..29ca0b29c1 100644
--- a/Mage.Sets/src/mage/sets/magic2015/BoonweaverGiant.java
+++ b/Mage.Sets/src/mage/sets/magic2015/BoonweaverGiant.java
@@ -134,7 +134,7 @@ class BoonweaverGiantEffect extends OneShotEffect {
                     zone = Zone.LIBRARY;
                 }
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
         }
         // aura card found - attach it
         if (card != null) {
diff --git a/Mage.Sets/src/mage/sets/magic2015/GenesisHydra.java b/Mage.Sets/src/mage/sets/magic2015/GenesisHydra.java
index 03eda36b2f..6aabfd7510 100644
--- a/Mage.Sets/src/mage/sets/magic2015/GenesisHydra.java
+++ b/Mage.Sets/src/mage/sets/magic2015/GenesisHydra.java
@@ -141,7 +141,7 @@ class GenesisHydraPutOntoBattlefieldEffect extends OneShotEffect {
             game.informPlayers("No nonland permanent card with converted mana cost " + count + " or less to choose.");
         }
         controller.moveCards(cards, Zone.LIBRARY, source, game);
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return true;
     }
 
diff --git a/Mage.Sets/src/mage/sets/magic2015/JaceTheLivingGuildpact.java b/Mage.Sets/src/mage/sets/magic2015/JaceTheLivingGuildpact.java
index 796b76aab9..00a3ffac0c 100644
--- a/Mage.Sets/src/mage/sets/magic2015/JaceTheLivingGuildpact.java
+++ b/Mage.Sets/src/mage/sets/magic2015/JaceTheLivingGuildpact.java
@@ -119,7 +119,7 @@ class JaceTheLivingGuildpactEffect extends OneShotEffect {
                     for (Card card : player.getGraveyard().getCards(game)) {
                         card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
                     }
-                    player.shuffleLibrary(game);
+                    player.shuffleLibrary(source, game);
                 }
             }
             controller.drawCards(7, game);
diff --git a/Mage.Sets/src/mage/sets/magic2015/NissaWorldwaker.java b/Mage.Sets/src/mage/sets/magic2015/NissaWorldwaker.java
index c1fc0b51a8..87157efcc9 100644
--- a/Mage.Sets/src/mage/sets/magic2015/NissaWorldwaker.java
+++ b/Mage.Sets/src/mage/sets/magic2015/NissaWorldwaker.java
@@ -145,7 +145,7 @@ class NissaWorldwakerSearchEffect extends OneShotEffect {
                 }
             }
         }
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return true;
     }
 }
diff --git a/Mage.Sets/src/mage/sets/magic2015/YisanTheWandererBard.java b/Mage.Sets/src/mage/sets/magic2015/YisanTheWandererBard.java
index 978e17f81d..e4344e181d 100644
--- a/Mage.Sets/src/mage/sets/magic2015/YisanTheWandererBard.java
+++ b/Mage.Sets/src/mage/sets/magic2015/YisanTheWandererBard.java
@@ -114,7 +114,7 @@ class YisanTheWandererBardEffect extends OneShotEffect {
                 Card card = controller.getLibrary().getCard(target.getFirstTarget(), game);
                 controller.moveCards(card, Zone.BATTLEFIELD, source, game);
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/magicorigins/DaysUndoing.java b/Mage.Sets/src/mage/sets/magicorigins/DaysUndoing.java
index 9e68ba3fd7..25ec4f5455 100644
--- a/Mage.Sets/src/mage/sets/magicorigins/DaysUndoing.java
+++ b/Mage.Sets/src/mage/sets/magicorigins/DaysUndoing.java
@@ -90,7 +90,7 @@ class DaysUndoingEffect extends OneShotEffect {
             if (player != null) {
                 player.moveCards(player.getHand(), Zone.HAND, Zone.LIBRARY, source, game);
                 player.moveCards(player.getGraveyard(), Zone.GRAVEYARD, Zone.LIBRARY, source, game);
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
 
             }
         }
diff --git a/Mage.Sets/src/mage/sets/magicorigins/NissasPilgrimage.java b/Mage.Sets/src/mage/sets/magicorigins/NissasPilgrimage.java
index d6023fed3f..491a0a1442 100644
--- a/Mage.Sets/src/mage/sets/magicorigins/NissasPilgrimage.java
+++ b/Mage.Sets/src/mage/sets/magicorigins/NissasPilgrimage.java
@@ -118,7 +118,7 @@ class NissasPilgrimageEffect extends OneShotEffect {
                     }
                 }
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/magicorigins/TheGreatAurora.java b/Mage.Sets/src/mage/sets/magicorigins/TheGreatAurora.java
index 82e8cf7636..23e0f0f1ee 100644
--- a/Mage.Sets/src/mage/sets/magicorigins/TheGreatAurora.java
+++ b/Mage.Sets/src/mage/sets/magicorigins/TheGreatAurora.java
@@ -120,7 +120,7 @@ class TheGreatAuroraEffect extends OneShotEffect {
                     for (Permanent permanent : list) {
                         player.moveCardToLibraryWithInfo(permanent, source.getSourceId(), game, Zone.BATTLEFIELD, true, true);
                     }
-                    player.shuffleLibrary(game);
+                    player.shuffleLibrary(source, game);
                 }
             }
 
diff --git a/Mage.Sets/src/mage/sets/magicorigins/WoodlandBellower.java b/Mage.Sets/src/mage/sets/magicorigins/WoodlandBellower.java
index 3df2f8848c..28dd2aa24d 100644
--- a/Mage.Sets/src/mage/sets/magicorigins/WoodlandBellower.java
+++ b/Mage.Sets/src/mage/sets/magicorigins/WoodlandBellower.java
@@ -105,10 +105,10 @@ class WoodlandBellowerEffect extends OneShotEffect {
                 Card card = controller.getLibrary().getCard(target.getFirstTarget(), game);
                 controller.moveCards(card, Zone.BATTLEFIELD, source, game);
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return false;
     }
 
diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/Bribery.java b/Mage.Sets/src/mage/sets/mercadianmasques/Bribery.java
index c7aec37344..ff5f26b092 100644
--- a/Mage.Sets/src/mage/sets/mercadianmasques/Bribery.java
+++ b/Mage.Sets/src/mage/sets/mercadianmasques/Bribery.java
@@ -93,7 +93,7 @@ class BriberyEffect extends OneShotEffect {
                 Card card = opponent.getLibrary().getCard(target.getFirstTarget(), game);
                 controller.moveCards(card, Zone.BATTLEFIELD, source, game);
             }
-            opponent.shuffleLibrary(game);
+            opponent.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/mirrodin/PsychogenicProbe.java b/Mage.Sets/src/mage/sets/mirrodin/PsychogenicProbe.java
index 0c4b4c1004..53caca3bf0 100644
--- a/Mage.Sets/src/mage/sets/mirrodin/PsychogenicProbe.java
+++ b/Mage.Sets/src/mage/sets/mirrodin/PsychogenicProbe.java
@@ -83,7 +83,7 @@ class PsychogenicProbeTriggeredAbility extends TriggeredAbilityImpl {
     public boolean checkEventType(GameEvent event, Game game) {
         return event.getType().equals(EventType.LIBRARY_SHUFFLED);
     }
-    
+
     @java.lang.Override
     public boolean checkTrigger(GameEvent event, Game game) {
         for (Effect effect : this.getEffects()) {
@@ -94,6 +94,6 @@ class PsychogenicProbeTriggeredAbility extends TriggeredAbilityImpl {
 
     @java.lang.Override
     public String getRule() {
-        return "Whenever a spell or ability causes a player to shuffle his or her library, Psychogenic Probe deals 2 damage to him or her.";
+        return "Whenever a spell or ability causes a player to shuffle his or her library, {this}    deals 2 damage to him or her.";
     }
 }
diff --git a/Mage.Sets/src/mage/sets/mirrodin/TemporalCascade.java b/Mage.Sets/src/mage/sets/mirrodin/TemporalCascade.java
index 608423f382..23fe883035 100644
--- a/Mage.Sets/src/mage/sets/mirrodin/TemporalCascade.java
+++ b/Mage.Sets/src/mage/sets/mirrodin/TemporalCascade.java
@@ -96,7 +96,7 @@ class TemporalCascadeShuffleEffect extends OneShotEffect {
                 for (Card card: player.getGraveyard().getCards(game)) {
                     card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
                 }
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
                 
             }
         }
diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/DistantMemories.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/DistantMemories.java
index 7277623499..35ab4db555 100644
--- a/Mage.Sets/src/mage/sets/mirrodinbesieged/DistantMemories.java
+++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/DistantMemories.java
@@ -93,7 +93,7 @@ class DistantMemoriesEffect extends OneShotEffect {
             Card card = player.getLibrary().remove(target.getFirstTarget(), game);
             if (card != null) {
                 card.moveToZone(Zone.EXILED, source.getSourceId(), game, false);
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
 
                 StringBuilder sb = new StringBuilder();
                 sb.append("Have ").append(player.getLogName()).append(" put ").append(card.getName());
@@ -117,7 +117,7 @@ class DistantMemoriesEffect extends OneShotEffect {
                 return true;
             }
         }
-        player.shuffleLibrary(game);
+        player.shuffleLibrary(source, game);
         return false;
     }
 }
diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/GreenSunsZenith.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/GreenSunsZenith.java
index 03cb3e2fbf..34f473222e 100644
--- a/Mage.Sets/src/mage/sets/mirrodinbesieged/GreenSunsZenith.java
+++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/GreenSunsZenith.java
@@ -105,10 +105,10 @@ class GreenSunsZenithSearchEffect extends OneShotEffect {
                     controller.moveCards(card, Zone.BATTLEFIELD, source, game);
                 }
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return false;
     }
 
diff --git a/Mage.Sets/src/mage/sets/modernmasters/EarwigSquad.java b/Mage.Sets/src/mage/sets/modernmasters/EarwigSquad.java
index f27ad78a1c..32550c635a 100644
--- a/Mage.Sets/src/mage/sets/modernmasters/EarwigSquad.java
+++ b/Mage.Sets/src/mage/sets/modernmasters/EarwigSquad.java
@@ -114,7 +114,7 @@ class EarwigSquadEffect extends OneShotEffect {
                     }
                 }
             }
-            opponent.shuffleLibrary(game);
+            opponent.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/modernmasters/Riftsweeper.java b/Mage.Sets/src/mage/sets/modernmasters/Riftsweeper.java
index 04994b60d4..39263316f1 100644
--- a/Mage.Sets/src/mage/sets/modernmasters/Riftsweeper.java
+++ b/Mage.Sets/src/mage/sets/modernmasters/Riftsweeper.java
@@ -105,7 +105,7 @@ class RiftsweeperEffect extends OneShotEffect {
             card.getCounters(game).clear();
             // move to exile
             card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
-            game.getPlayer(card.getOwnerId()).shuffleLibrary(game);
+            game.getPlayer(card.getOwnerId()).shuffleLibrary(source, game);
             game.informPlayers(new StringBuilder("Riftsweeper: Choosen card was ").append(card.getName()).toString());
             return true;
         }
diff --git a/Mage.Sets/src/mage/sets/modernmasters/StonehewerGiant.java b/Mage.Sets/src/mage/sets/modernmasters/StonehewerGiant.java
index 4529b1346e..948ffd8430 100644
--- a/Mage.Sets/src/mage/sets/modernmasters/StonehewerGiant.java
+++ b/Mage.Sets/src/mage/sets/modernmasters/StonehewerGiant.java
@@ -123,7 +123,7 @@ class StonehewerGiantEffect extends OneShotEffect {
                 }
             }
         }
-        player.shuffleLibrary(game);
+        player.shuffleLibrary(source, game);
         return true;
     }
 }
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/sets/morningtide/Deglamer.java b/Mage.Sets/src/mage/sets/morningtide/Deglamer.java
index 4c1007a491..d846617c89 100644
--- a/Mage.Sets/src/mage/sets/morningtide/Deglamer.java
+++ b/Mage.Sets/src/mage/sets/morningtide/Deglamer.java
@@ -97,7 +97,7 @@ class DeglamerShuffleIntoLibraryEffect extends OneShotEffect {
         Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
         if (permanent != null) {
             if (permanent.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true) ) {
-                game.getPlayer(permanent.getOwnerId()).shuffleLibrary(game);
+                game.getPlayer(permanent.getOwnerId()).shuffleLibrary(source, game);
                 return true;
             }
         }
diff --git a/Mage.Sets/src/mage/sets/morningtide/KnowledgeExploitation.java b/Mage.Sets/src/mage/sets/morningtide/KnowledgeExploitation.java
index be0f8018af..6edc2d12ad 100644
--- a/Mage.Sets/src/mage/sets/morningtide/KnowledgeExploitation.java
+++ b/Mage.Sets/src/mage/sets/morningtide/KnowledgeExploitation.java
@@ -99,7 +99,7 @@ class KnowledgeExploitationEffect extends OneShotEffect {
                     controller.cast(card.getSpellAbility(), game, true);
                 }
             }
-            opponent.shuffleLibrary(game);
+            opponent.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/morningtide/MaralenOfTheMornsong.java b/Mage.Sets/src/mage/sets/morningtide/MaralenOfTheMornsong.java
index a27ea51b97..284937582f 100644
--- a/Mage.Sets/src/mage/sets/morningtide/MaralenOfTheMornsong.java
+++ b/Mage.Sets/src/mage/sets/morningtide/MaralenOfTheMornsong.java
@@ -137,7 +137,7 @@ class MaralenOfTheMornsongEffect2 extends OneShotEffect {
                     player.putInHand(card, game);
                 }
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/morningtide/Scapeshift.java b/Mage.Sets/src/mage/sets/morningtide/Scapeshift.java
index 5e7f57e6dd..4d7429c65f 100644
--- a/Mage.Sets/src/mage/sets/morningtide/Scapeshift.java
+++ b/Mage.Sets/src/mage/sets/morningtide/Scapeshift.java
@@ -105,10 +105,10 @@ class ScapeshiftEffect extends OneShotEffect {
         if (controller.searchLibrary(target, game)) {
             controller.moveCards(new CardsImpl(target.getTargets()).getCards(game),
                     Zone.BATTLEFIELD, source, game, true, false, false, null);
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return false;
     }
 
diff --git a/Mage.Sets/src/mage/sets/nemesis/LinSivviDefiantHero.java b/Mage.Sets/src/mage/sets/nemesis/LinSivviDefiantHero.java
index 3748ad5425..e7885670b1 100644
--- a/Mage.Sets/src/mage/sets/nemesis/LinSivviDefiantHero.java
+++ b/Mage.Sets/src/mage/sets/nemesis/LinSivviDefiantHero.java
@@ -136,10 +136,10 @@ class LinSivviDefiantHeroEffect extends OneShotEffect {
             if (card != null) {
                 controller.moveCards(card, Zone.BATTLEFIELD, source, game);
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return false;
     }
 }
diff --git a/Mage.Sets/src/mage/sets/nemesis/RootwaterThief.java b/Mage.Sets/src/mage/sets/nemesis/RootwaterThief.java
index 3cc720fe8c..fee16b3d10 100644
--- a/Mage.Sets/src/mage/sets/nemesis/RootwaterThief.java
+++ b/Mage.Sets/src/mage/sets/nemesis/RootwaterThief.java
@@ -111,7 +111,7 @@ class RootwaterThiefEffect extends OneShotEffect {
                 }
             }
 
-            damagedPlayer.shuffleLibrary(game);
+            damagedPlayer.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/newphyrexia/BirthingPod.java b/Mage.Sets/src/mage/sets/newphyrexia/BirthingPod.java
index 8109def52a..af8b2dc64e 100644
--- a/Mage.Sets/src/mage/sets/newphyrexia/BirthingPod.java
+++ b/Mage.Sets/src/mage/sets/newphyrexia/BirthingPod.java
@@ -111,7 +111,7 @@ class BirthingPodEffect extends OneShotEffect {
                 Card card = controller.getLibrary().getCard(target.getFirstTarget(), game);
                 controller.moveCards(card, Zone.BATTLEFIELD, source, game);
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/newphyrexia/LifesFinale.java b/Mage.Sets/src/mage/sets/newphyrexia/LifesFinale.java
index cb6f9dcb8c..04e61c187a 100644
--- a/Mage.Sets/src/mage/sets/newphyrexia/LifesFinale.java
+++ b/Mage.Sets/src/mage/sets/newphyrexia/LifesFinale.java
@@ -102,7 +102,7 @@ class LifesFinaleEffect extends OneShotEffect {
             if (player.searchLibrary(target, game, opponent.getId())) {
                 player.moveCards(new CardsImpl(target.getTargets()), Zone.LIBRARY, Zone.GRAVEYARD, source, game);
             }
-            opponent.shuffleLibrary(game);
+            opponent.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/newphyrexia/PraetorsGrasp.java b/Mage.Sets/src/mage/sets/newphyrexia/PraetorsGrasp.java
index f101663e2b..d1cf987a55 100644
--- a/Mage.Sets/src/mage/sets/newphyrexia/PraetorsGrasp.java
+++ b/Mage.Sets/src/mage/sets/newphyrexia/PraetorsGrasp.java
@@ -107,7 +107,7 @@ class PraetorsGraspEffect extends OneShotEffect {
                     game.addEffect(new PraetorsGraspRevealEffect(card.getId()), source);
                 }
             }
-            opponent.shuffleLibrary(game);
+            opponent.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/newphyrexia/SurgicalExtraction.java b/Mage.Sets/src/mage/sets/newphyrexia/SurgicalExtraction.java
index 2c5f5d0272..f0ed025488 100644
--- a/Mage.Sets/src/mage/sets/newphyrexia/SurgicalExtraction.java
+++ b/Mage.Sets/src/mage/sets/newphyrexia/SurgicalExtraction.java
@@ -157,7 +157,7 @@ class SurgicalExtractionEffect extends OneShotEffect {
                         }
                     }
                 }
-                owner.shuffleLibrary(game);
+                owner.shuffleLibrary(source, game);
                 return true;
             }
         }
diff --git a/Mage.Sets/src/mage/sets/oathofthegatewatch/InverterOfTruth.java b/Mage.Sets/src/mage/sets/oathofthegatewatch/InverterOfTruth.java
index a182186ab9..7082e7d9fd 100644
--- a/Mage.Sets/src/mage/sets/oathofthegatewatch/InverterOfTruth.java
+++ b/Mage.Sets/src/mage/sets/oathofthegatewatch/InverterOfTruth.java
@@ -102,7 +102,7 @@ class ExileLibraryEffect extends OneShotEffect {
             for (Card cardToLibrary: controller.getGraveyard().getCards(game)) {
                 controller.moveCardToLibraryWithInfo(cardToLibrary, source.getSourceId(), game, Zone.GRAVEYARD, true, true);
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/oathofthegatewatch/RuinInTheirWake.java b/Mage.Sets/src/mage/sets/oathofthegatewatch/RuinInTheirWake.java
index 03735bc69f..907e3f421e 100644
--- a/Mage.Sets/src/mage/sets/oathofthegatewatch/RuinInTheirWake.java
+++ b/Mage.Sets/src/mage/sets/oathofthegatewatch/RuinInTheirWake.java
@@ -114,7 +114,7 @@ class RuinInTheirWakeEffect extends OneShotEffect {
                     }
                 }
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/odyssey/Entomb.java b/Mage.Sets/src/mage/sets/odyssey/Entomb.java
index 887ef80e5d..5d0d2a3ed6 100644
--- a/Mage.Sets/src/mage/sets/odyssey/Entomb.java
+++ b/Mage.Sets/src/mage/sets/odyssey/Entomb.java
@@ -94,7 +94,7 @@ class SearchLibraryPutInGraveyard extends SearchEffect {
         if (controller.searchLibrary(target, game)) {
             controller.moveCards(game.getCard(target.getFirstTarget()), Zone.LIBRARY, Zone.GRAVEYARD, source, game);
         }
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return true;
     }
     
diff --git a/Mage.Sets/src/mage/sets/odyssey/Extract.java b/Mage.Sets/src/mage/sets/odyssey/Extract.java
index 2e2c46f05f..55b494d636 100644
--- a/Mage.Sets/src/mage/sets/odyssey/Extract.java
+++ b/Mage.Sets/src/mage/sets/odyssey/Extract.java
@@ -99,7 +99,7 @@ class ExtractEffect extends OneShotEffect {
                     player.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY, true);
                 }
             }
-            targetPlayer.shuffleLibrary(game);
+            targetPlayer.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/onslaught/Oblation.java b/Mage.Sets/src/mage/sets/onslaught/Oblation.java
index 5bf88ee64a..faad36c4c6 100644
--- a/Mage.Sets/src/mage/sets/onslaught/Oblation.java
+++ b/Mage.Sets/src/mage/sets/onslaught/Oblation.java
@@ -88,7 +88,7 @@ class OblationEffect extends OneShotEffect {
             Player player = game.getPlayer(permanent.getOwnerId());
             if (player != null) {
                 player.moveCardToLibraryWithInfo(permanent, source.getSourceId(), game, Zone.BATTLEFIELD, true, true);
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
 
                 game.applyEffects(); // so effects from creatures that were on the battlefield won't trigger from draw 
 
diff --git a/Mage.Sets/src/mage/sets/onslaught/Reminisce.java b/Mage.Sets/src/mage/sets/onslaught/Reminisce.java
index 1b8f8181c3..8cf4c1b01c 100644
--- a/Mage.Sets/src/mage/sets/onslaught/Reminisce.java
+++ b/Mage.Sets/src/mage/sets/onslaught/Reminisce.java
@@ -88,7 +88,7 @@ class ReminisceEffect extends OneShotEffect {
             for (Card card: player.getGraveyard().getCards(game)) {
                 card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
             }               
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/onslaught/RiptideShapeshifter.java b/Mage.Sets/src/mage/sets/onslaught/RiptideShapeshifter.java
index 615d8f2ee1..960c8515a4 100644
--- a/Mage.Sets/src/mage/sets/onslaught/RiptideShapeshifter.java
+++ b/Mage.Sets/src/mage/sets/onslaught/RiptideShapeshifter.java
@@ -119,7 +119,7 @@ class RiptideShapeshifterEffect extends OneShotEffect {
             }
             controller.revealCards(sourceObject.getIdName(), revealedCards, game);
             controller.moveCards(revealedCards, Zone.LIBRARY, source, game);
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/onslaught/SupremeInquisitor.java b/Mage.Sets/src/mage/sets/onslaught/SupremeInquisitor.java
index 6ee3d653f1..bad15e8680 100644
--- a/Mage.Sets/src/mage/sets/onslaught/SupremeInquisitor.java
+++ b/Mage.Sets/src/mage/sets/onslaught/SupremeInquisitor.java
@@ -125,7 +125,7 @@ class SupremeInquisitorEffect extends OneShotEffect {
                     }
                 }
             }
-            targetPlayer.shuffleLibrary(game);
+            targetPlayer.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/onslaught/WeirdHarvest.java b/Mage.Sets/src/mage/sets/onslaught/WeirdHarvest.java
index 2818d33279..27d13e909a 100644
--- a/Mage.Sets/src/mage/sets/onslaught/WeirdHarvest.java
+++ b/Mage.Sets/src/mage/sets/onslaught/WeirdHarvest.java
@@ -103,7 +103,7 @@ class WeirdHarvestEffect extends OneShotEffect {
                     }
                 }
                 for (Player player : usingPlayers) {
-                    player.shuffleLibrary(game);
+                    player.shuffleLibrary(source, game);
                 }
                 return true;
             }
diff --git a/Mage.Sets/src/mage/sets/planarchaos/Extirpate.java b/Mage.Sets/src/mage/sets/planarchaos/Extirpate.java
index 3fc6247b90..0a0ba9fbb1 100644
--- a/Mage.Sets/src/mage/sets/planarchaos/Extirpate.java
+++ b/Mage.Sets/src/mage/sets/planarchaos/Extirpate.java
@@ -149,7 +149,7 @@ class ExtirpateEffect extends OneShotEffect {
                     }
                 }
             }
-            owner.shuffleLibrary(game);
+            owner.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/planarchaos/WildPair.java b/Mage.Sets/src/mage/sets/planarchaos/WildPair.java
index 0f917e6940..6318fb6558 100644
--- a/Mage.Sets/src/mage/sets/planarchaos/WildPair.java
+++ b/Mage.Sets/src/mage/sets/planarchaos/WildPair.java
@@ -111,7 +111,7 @@ class WildPairEffect extends OneShotEffect {
                         controller.moveCards(new CardsImpl(target.getTargets()), Zone.BATTLEFIELD, source, game);
                     }
                 }
-                controller.shuffleLibrary(game);
+                controller.shuffleLibrary(source, game);
                 return true;
             }
         }
diff --git a/Mage.Sets/src/mage/sets/planechase/CorpseHarvester.java b/Mage.Sets/src/mage/sets/planechase/CorpseHarvester.java
index f3cd4d23d9..cc0e3729b6 100644
--- a/Mage.Sets/src/mage/sets/planechase/CorpseHarvester.java
+++ b/Mage.Sets/src/mage/sets/planechase/CorpseHarvester.java
@@ -112,7 +112,7 @@ class CorpseHarvesterEffect extends OneShotEffect {
         searchCard(you, source, game, cards, "Zombie");
         searchCard(you, source, game, cards, "Swamp");
         you.revealCards("Corpse Harvester", cards, game);
-        you.shuffleLibrary(game);
+        you.shuffleLibrary(source, game);
         return true;
     }
 
diff --git a/Mage.Sets/src/mage/sets/planechase2012/WhirlpoolWarrior.java b/Mage.Sets/src/mage/sets/planechase2012/WhirlpoolWarrior.java
index 5b32fa15d1..3be9f4ea43 100644
--- a/Mage.Sets/src/mage/sets/planechase2012/WhirlpoolWarrior.java
+++ b/Mage.Sets/src/mage/sets/planechase2012/WhirlpoolWarrior.java
@@ -109,7 +109,7 @@ class WhirlpoolWarriorActivatedEffect extends OneShotEffect {
                     if (cardsHand > 0) {
                         playerCards.put(playerId, cardsHand);
                         player.moveCards(player.getHand(), Zone.LIBRARY, source, game);
-                        player.shuffleLibrary(game);
+                        player.shuffleLibrary(source, game);
                     }
                 }
             }
diff --git a/Mage.Sets/src/mage/sets/planeshift/SkyshipWeatherlight.java b/Mage.Sets/src/mage/sets/planeshift/SkyshipWeatherlight.java
index 06d9fb2a02..c7eaa582df 100644
--- a/Mage.Sets/src/mage/sets/planeshift/SkyshipWeatherlight.java
+++ b/Mage.Sets/src/mage/sets/planeshift/SkyshipWeatherlight.java
@@ -102,7 +102,7 @@ class SkyshipWeatherlightEffect extends SearchEffect {
                     }
                 }
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/ravnica/ChordOfCalling.java b/Mage.Sets/src/mage/sets/ravnica/ChordOfCalling.java
index 4a499e1aa2..fe6d0131c9 100644
--- a/Mage.Sets/src/mage/sets/ravnica/ChordOfCalling.java
+++ b/Mage.Sets/src/mage/sets/ravnica/ChordOfCalling.java
@@ -104,10 +104,10 @@ class ChordofCallingSearchEffect extends OneShotEffect {
                     card.putOntoBattlefield(game, Zone.LIBRARY, source.getSourceId(), source.getControllerId());
                 }
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
-        player.shuffleLibrary(game);
+        player.shuffleLibrary(source, game);
         return false;
     }
 
diff --git a/Mage.Sets/src/mage/sets/ravnica/CongregationAtDawn.java b/Mage.Sets/src/mage/sets/ravnica/CongregationAtDawn.java
index 555db0e605..4330cd0bbe 100644
--- a/Mage.Sets/src/mage/sets/ravnica/CongregationAtDawn.java
+++ b/Mage.Sets/src/mage/sets/ravnica/CongregationAtDawn.java
@@ -103,7 +103,7 @@ class CongregationAtDawnEffect extends OneShotEffect {
                         revealed.add(card);
                     }
                     controller.revealCards(sourceObject.getName(), revealed, game);
-                    controller.shuffleLibrary(game);
+                    controller.shuffleLibrary(source, game);
 
                     TargetCard targetToLib = new TargetCard(Zone.LIBRARY, new FilterCard(textTop));
 
diff --git a/Mage.Sets/src/mage/sets/ravnica/Grozoth.java b/Mage.Sets/src/mage/sets/ravnica/Grozoth.java
index 275279bbff..f6dd13b3a6 100644
--- a/Mage.Sets/src/mage/sets/ravnica/Grozoth.java
+++ b/Mage.Sets/src/mage/sets/ravnica/Grozoth.java
@@ -130,7 +130,7 @@ class GrozothEffect extends SearchEffect {
                 player.revealCards(sourceCard.getIdName(), cards, game);
                 player.moveCards(cards, Zone.LIBRARY, Zone.HAND, source, game);
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/ravnica/MnemonicNexus.java b/Mage.Sets/src/mage/sets/ravnica/MnemonicNexus.java
index 6cbfa4b855..7ca214e12f 100644
--- a/Mage.Sets/src/mage/sets/ravnica/MnemonicNexus.java
+++ b/Mage.Sets/src/mage/sets/ravnica/MnemonicNexus.java
@@ -83,7 +83,7 @@ class MnemonicNexusEffect extends OneShotEffect {
                 for (Card card: player.getGraveyard().getCards(game)) {
                     card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
                 }                               
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
             }
         }
         return true;
diff --git a/Mage.Sets/src/mage/sets/ravnica/Sunforger.java b/Mage.Sets/src/mage/sets/ravnica/Sunforger.java
index 5c0fbb8d9e..dec4f5974e 100644
--- a/Mage.Sets/src/mage/sets/ravnica/Sunforger.java
+++ b/Mage.Sets/src/mage/sets/ravnica/Sunforger.java
@@ -132,7 +132,7 @@ class SunforgerEffect extends OneShotEffect {
                     }
                 }
             }
-            you.shuffleLibrary(game);
+            you.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/returntoravnica/FiremindsForesight.java b/Mage.Sets/src/mage/sets/returntoravnica/FiremindsForesight.java
index c56f82b0dd..babc433d1b 100644
--- a/Mage.Sets/src/mage/sets/returntoravnica/FiremindsForesight.java
+++ b/Mage.Sets/src/mage/sets/returntoravnica/FiremindsForesight.java
@@ -128,7 +128,7 @@ class FiremindsForesightSearchEffect extends  OneShotEffect {
             }
         }
 
-        player.shuffleLibrary(game);
+        player.shuffleLibrary(source, game);
         return true;
     }
 }
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/sets/returntoravnica/JaceArchitectOfThought.java b/Mage.Sets/src/mage/sets/returntoravnica/JaceArchitectOfThought.java
index 3625172df1..548cc80d1e 100644
--- a/Mage.Sets/src/mage/sets/returntoravnica/JaceArchitectOfThought.java
+++ b/Mage.Sets/src/mage/sets/returntoravnica/JaceArchitectOfThought.java
@@ -311,7 +311,7 @@ class JaceArchitectOfThoughtEffect3 extends OneShotEffect {
                     controller.moveCardToExileWithInfo(card, CardUtil.getCardExileZoneId(game, source), sourcePermanent.getIdName(), source.getSourceId(), game, Zone.LIBRARY, true);
                 }
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
         }
 
         ExileZone jaceExileZone = game.getExile().getExileZone(CardUtil.getCardExileZoneId(game, source));
diff --git a/Mage.Sets/src/mage/sets/returntoravnica/JaradsOrders.java b/Mage.Sets/src/mage/sets/returntoravnica/JaradsOrders.java
index 89e8c94500..63adffc93b 100644
--- a/Mage.Sets/src/mage/sets/returntoravnica/JaradsOrders.java
+++ b/Mage.Sets/src/mage/sets/returntoravnica/JaradsOrders.java
@@ -114,10 +114,10 @@ class JaradsOrdersEffect extends OneShotEffect {
                     }
 
                 }
-                controller.shuffleLibrary(game);
+                controller.shuffleLibrary(source, game);
                 return true;
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
         }
         return false;
 
diff --git a/Mage.Sets/src/mage/sets/returntoravnica/PsychicSpiral.java b/Mage.Sets/src/mage/sets/returntoravnica/PsychicSpiral.java
index d0ce2b5975..5289356683 100644
--- a/Mage.Sets/src/mage/sets/returntoravnica/PsychicSpiral.java
+++ b/Mage.Sets/src/mage/sets/returntoravnica/PsychicSpiral.java
@@ -85,7 +85,7 @@ class PsychicSpiralEffect extends OneShotEffect {
             for (Card card: player.getGraveyard().getCards(game)) {
                 card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
             }                           
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
 
             if (cardsInGraveyard > 0) {
                 Player targetPlayer = game.getPlayer(source.getFirstTarget());
diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/PerishTheThought.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/PerishTheThought.java
index 998441b36f..ff0d0d75e8 100644
--- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/PerishTheThought.java
+++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/PerishTheThought.java
@@ -101,7 +101,7 @@ class PerishTheThoughtEffect extends OneShotEffect {
                         if (chosenCard != null) {
                             if (targetOpponent != null) {
                                 chosenCard.moveToZone(Zone.LIBRARY, id, game, false);
-                                targetOpponent.shuffleLibrary(game);
+                                targetOpponent.shuffleLibrary(source, game);
                             }
                         }
                     }
diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/RealmsUncharted.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/RealmsUncharted.java
index e597ad9474..b11bf75a81 100644
--- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/RealmsUncharted.java
+++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/RealmsUncharted.java
@@ -132,10 +132,10 @@ class RealmsUnchartedEffect extends OneShotEffect {
                 controller.moveCards(cards, Zone.LIBRARY, Zone.GRAVEYARD, source, game);
                 controller.moveCards(cardsToKeep, Zone.LIBRARY, Zone.HAND, source, game);
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return false;
     }
 }
diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/SeeBeyond.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/SeeBeyond.java
index d4a8c1df12..e8d50c2b6a 100644
--- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/SeeBeyond.java
+++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/SeeBeyond.java
@@ -90,7 +90,7 @@ class SeeBeyondEffect extends OneShotEffect {
             if (card != null) {
                 player.removeFromHand(card, game);
                 card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
                 return true;
             }
         }
diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/EnduringIdeal.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/EnduringIdeal.java
index 02c4cf52ea..1b68f2d9db 100644
--- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/EnduringIdeal.java
+++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/EnduringIdeal.java
@@ -101,7 +101,7 @@ class EnduringIdealEffect extends OneShotEffect {
                 applied = false;
             } else {
                 applied = controller.moveCards(targetCard, Zone.BATTLEFIELD, source, game);
-                controller.shuffleLibrary(game);
+                controller.shuffleLibrary(source, game);
             }
         }
         return applied;
diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/EternalDominion.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/EternalDominion.java
index 81c15da577..4a9dd50c1d 100644
--- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/EternalDominion.java
+++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/EternalDominion.java
@@ -108,7 +108,7 @@ class EternalDominionEffect extends OneShotEffect {
             if (targetCard != null) {
                 applied = controller.moveCards(targetCard, Zone.BATTLEFIELD, source, game);
             }
-            opponent.shuffleLibrary(game);
+            opponent.shuffleLibrary(source, game);
         }
         return applied;
     }
diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/KahoMinamoHistorian.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/KahoMinamoHistorian.java
index 88cd714a83..2acefa0a91 100644
--- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/KahoMinamoHistorian.java
+++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/KahoMinamoHistorian.java
@@ -126,7 +126,7 @@ class KahoMinamoHistorianEffect extends SearchEffect {
                     }
                 }
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
 
         }
diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/NeverendingTorment.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/NeverendingTorment.java
index 28bb4f962b..bc0d6c7bed 100644
--- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/NeverendingTorment.java
+++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/NeverendingTorment.java
@@ -101,7 +101,7 @@ class NeverendingTormentEffect extends OneShotEffect {
                     applied |= you.moveCardToExileWithInfo(targetCard, null, null, source.getSourceId(), game, Zone.LIBRARY, true);
                 }
             }
-            targetPlayer.shuffleLibrary(game);
+            targetPlayer.shuffleLibrary(source, game);
         }
         return applied;
     }
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/MoltenPsyche.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/MoltenPsyche.java
index 1b52232215..1c4ac08726 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/MoltenPsyche.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/MoltenPsyche.java
@@ -98,7 +98,7 @@ class MoltenPsycheEffect extends OneShotEffect {
                         cardsToDraw.put(playerId, cardsInHand);
                     }
                     player.moveCards(player.getHand(), Zone.HAND, Zone.LIBRARY, source, game);
-                    player.shuffleLibrary(game);
+                    player.shuffleLibrary(source, game);
                 }
             }
 
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/ShapeAnew.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/ShapeAnew.java
index c42e48fa8e..43128a73da 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/ShapeAnew.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/ShapeAnew.java
@@ -118,7 +118,7 @@ public class ShapeAnew extends CardImpl {
                 targetController.moveCards(artifactCard, Zone.BATTLEFIELD, source, game);
             }
             targetController.putCardsOnTopOfLibrary(nonArtifactCards, game, source, false);
-            targetController.shuffleLibrary(game);
+            targetController.shuffleLibrary(source, game);
             return true;
         }
 
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/StrataScythe.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/StrataScythe.java
index 29b6a6ab7f..d9cec6ad24 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/StrataScythe.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/StrataScythe.java
@@ -108,7 +108,7 @@ class StrataScytheImprintEffect extends OneShotEffect {
                 }
             }
         }
-        player.shuffleLibrary(game);
+        player.shuffleLibrary(source, game);
         return true;
     }
 
diff --git a/Mage.Sets/src/mage/sets/scourge/LongTermPlans.java b/Mage.Sets/src/mage/sets/scourge/LongTermPlans.java
index 63ae7ed652..e9c23fd006 100644
--- a/Mage.Sets/src/mage/sets/scourge/LongTermPlans.java
+++ b/Mage.Sets/src/mage/sets/scourge/LongTermPlans.java
@@ -88,7 +88,7 @@ class LongTermPlansEffect extends OneShotEffect {
             if (player.searchLibrary(target, game)) {
                 Card card = player.getLibrary().remove(target.getFirstTarget(), game);
                 if (card != null) {
-                    player.shuffleLibrary(game);
+                    player.shuffleLibrary(source, game);
                     Card cardTop = null;
                     Card cardSecond = null;
                     if (player.getLibrary().size() > 0) {
diff --git a/Mage.Sets/src/mage/sets/shadowmoor/PutAway.java b/Mage.Sets/src/mage/sets/shadowmoor/PutAway.java
index df636326b3..a4e64ac032 100644
--- a/Mage.Sets/src/mage/sets/shadowmoor/PutAway.java
+++ b/Mage.Sets/src/mage/sets/shadowmoor/PutAway.java
@@ -104,7 +104,7 @@ class PutAwayEffect extends OneShotEffect {
                     && you.chooseUse(Outcome.Benefit, "Do you wish to shuffle up to one target card from your graveyard into your library?", source, game)
                     && game.getState().getZone(card.getId()).match(Zone.GRAVEYARD)) {
                 card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, false);
-                you.shuffleLibrary(game);
+                you.shuffleLibrary(source, game);
             }
         }
         return countered;
diff --git a/Mage.Sets/src/mage/sets/shadowmoor/Worldpurge.java b/Mage.Sets/src/mage/sets/shadowmoor/Worldpurge.java
index 40e2594c36..9c364fca7f 100644
--- a/Mage.Sets/src/mage/sets/shadowmoor/Worldpurge.java
+++ b/Mage.Sets/src/mage/sets/shadowmoor/Worldpurge.java
@@ -114,7 +114,7 @@ class WorldpurgeEffect extends OneShotEffect {
                         }
                     }
                     player.putCardsOnTopOfLibrary(cardsToLibrary, game, source, false);
-                    player.shuffleLibrary(game);
+                    player.shuffleLibrary(source, game);
                 }
             }
             game.emptyManaPools();
diff --git a/Mage.Sets/src/mage/sets/shardsofalara/ClarionUltimatum.java b/Mage.Sets/src/mage/sets/shardsofalara/ClarionUltimatum.java
index 86ba12cbe9..4d4612d869 100644
--- a/Mage.Sets/src/mage/sets/shardsofalara/ClarionUltimatum.java
+++ b/Mage.Sets/src/mage/sets/shardsofalara/ClarionUltimatum.java
@@ -124,7 +124,7 @@ class ClarionUltimatumEffect extends OneShotEffect {
         }
 
         controller.moveCards(chosenCards, Zone.BATTLEFIELD, source, game, true, false, false, null);
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return true;
     }
 }
diff --git a/Mage.Sets/src/mage/sets/shardsofalara/CorpseConnoisseur.java b/Mage.Sets/src/mage/sets/shardsofalara/CorpseConnoisseur.java
index adc0352046..dd82744a6f 100644
--- a/Mage.Sets/src/mage/sets/shardsofalara/CorpseConnoisseur.java
+++ b/Mage.Sets/src/mage/sets/shardsofalara/CorpseConnoisseur.java
@@ -108,7 +108,7 @@ class SearchLibraryPutInGraveyard extends SearchEffect {
                     }
                 }
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }    
         return false;
diff --git a/Mage.Sets/src/mage/sets/shardsofalara/LichsMirror.java b/Mage.Sets/src/mage/sets/shardsofalara/LichsMirror.java
index fd93901578..033a047bd3 100644
--- a/Mage.Sets/src/mage/sets/shardsofalara/LichsMirror.java
+++ b/Mage.Sets/src/mage/sets/shardsofalara/LichsMirror.java
@@ -110,7 +110,7 @@ class LichsMirrorEffect extends ReplacementEffectImpl {
             for(Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)){
                 permanent.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             
             player.drawCards(7, game);
             
diff --git a/Mage.Sets/src/mage/sets/shardsofalara/TezzeretTheSeeker.java b/Mage.Sets/src/mage/sets/shardsofalara/TezzeretTheSeeker.java
index d4a44c46ef..91f1197cbe 100644
--- a/Mage.Sets/src/mage/sets/shardsofalara/TezzeretTheSeeker.java
+++ b/Mage.Sets/src/mage/sets/shardsofalara/TezzeretTheSeeker.java
@@ -128,10 +128,10 @@ class TezzeretTheSeekerEffect2 extends OneShotEffect {
             if (card != null) {
                 controller.moveCards(card, Zone.BATTLEFIELD, source, game);
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return false;
     }
 }
diff --git a/Mage.Sets/src/mage/sets/tempest/Intuition.java b/Mage.Sets/src/mage/sets/tempest/Intuition.java
index 37c24daa36..aa3c207cb5 100644
--- a/Mage.Sets/src/mage/sets/tempest/Intuition.java
+++ b/Mage.Sets/src/mage/sets/tempest/Intuition.java
@@ -124,11 +124,11 @@ class IntuitionEffect extends SearchEffect {
                 }
                 controller.moveCards(cards, Zone.LIBRARY, Zone.GRAVEYARD, source, game);                
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return false;
     }
 
diff --git a/Mage.Sets/src/mage/sets/tempest/Lobotomy.java b/Mage.Sets/src/mage/sets/tempest/Lobotomy.java
index e666c50d0e..b7d6e962a9 100644
--- a/Mage.Sets/src/mage/sets/tempest/Lobotomy.java
+++ b/Mage.Sets/src/mage/sets/tempest/Lobotomy.java
@@ -156,7 +156,7 @@ class LobotomyEffect extends OneShotEffect {
             if (!cardsToExile.isEmpty()) {
                 controller.moveCards(cardsToExile, null, Zone.EXILED, source, game);
             }
-            targetPlayer.shuffleLibrary(game);
+            targetPlayer.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/tempest/ManaSeverance.java b/Mage.Sets/src/mage/sets/tempest/ManaSeverance.java
index 6bb3a3c78c..19f89c1918 100644
--- a/Mage.Sets/src/mage/sets/tempest/ManaSeverance.java
+++ b/Mage.Sets/src/mage/sets/tempest/ManaSeverance.java
@@ -75,7 +75,7 @@ class ManaSeveranceEffect extends SearchEffect {
                     }
                 }
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
 
         }
diff --git a/Mage.Sets/src/mage/sets/timeshifted/FeldonsCane.java b/Mage.Sets/src/mage/sets/timeshifted/FeldonsCane.java
index 5e58caddf2..65a2630071 100644
--- a/Mage.Sets/src/mage/sets/timeshifted/FeldonsCane.java
+++ b/Mage.Sets/src/mage/sets/timeshifted/FeldonsCane.java
@@ -91,7 +91,7 @@ class FeldonsCaneEffect extends OneShotEffect {
             for (Card card: controller.getGraveyard().getCards(game)) {
                 controller.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true);
             }            
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/timeshifted/GaeasBlessing.java b/Mage.Sets/src/mage/sets/timeshifted/GaeasBlessing.java
index fc3f75e23c..dffbfa04c1 100644
--- a/Mage.Sets/src/mage/sets/timeshifted/GaeasBlessing.java
+++ b/Mage.Sets/src/mage/sets/timeshifted/GaeasBlessing.java
@@ -111,7 +111,7 @@ class GaeasBlessingEffect extends OneShotEffect {
                 }
             }
             if (shuffle) {
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
             }
             return true;
         }
@@ -189,7 +189,7 @@ class GaeasBlessingGraveToLibraryEffect extends OneShotEffect {
             }               
             controller.getLibrary().addAll(controller.getGraveyard().getCards(game), game);
             controller.getGraveyard().clear();
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/timeshifted/GrinningTotem.java b/Mage.Sets/src/mage/sets/timeshifted/GrinningTotem.java
index cd144347d1..9f02ecd2f0 100644
--- a/Mage.Sets/src/mage/sets/timeshifted/GrinningTotem.java
+++ b/Mage.Sets/src/mage/sets/timeshifted/GrinningTotem.java
@@ -126,7 +126,7 @@ class GrinningTotemSearchAndExileEffect extends OneShotEffect {
                     }
                 }
             }
-            targetOpponent.shuffleLibrary(game);
+            targetOpponent.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/timespiral/MishraArtificerProdigy.java b/Mage.Sets/src/mage/sets/timespiral/MishraArtificerProdigy.java
index 0ef45b5d50..47a8cfceb0 100644
--- a/Mage.Sets/src/mage/sets/timespiral/MishraArtificerProdigy.java
+++ b/Mage.Sets/src/mage/sets/timespiral/MishraArtificerProdigy.java
@@ -163,7 +163,7 @@ class MishraArtificerProdigyEffect extends OneShotEffect {
                 if (controller.searchLibrary(target, game)) {
                     card = game.getCard(target.getFirstTarget());
                 }
-                controller.shuffleLibrary(game);
+                controller.shuffleLibrary(source, game);
             }
             // Put on battlefield
             if (card != null) {
diff --git a/Mage.Sets/src/mage/sets/timespiral/ScionOfTheUrDragon.java b/Mage.Sets/src/mage/sets/timespiral/ScionOfTheUrDragon.java
index 1a3700f00b..7cee6c5810 100644
--- a/Mage.Sets/src/mage/sets/timespiral/ScionOfTheUrDragon.java
+++ b/Mage.Sets/src/mage/sets/timespiral/ScionOfTheUrDragon.java
@@ -105,21 +105,21 @@ class ScionOfTheUrDragonEffect extends SearchEffect {
     }
 
     @Override
-    public boolean apply(Game game, Ability ability) {
-        Player player = game.getPlayer(ability.getControllerId());
-        Permanent sourcePermanent = game.getPermanent(ability.getSourceId());
+    public boolean apply(Game game, Ability source) {
+        Player player = game.getPlayer(source.getControllerId());
+        Permanent sourcePermanent = game.getPermanent(source.getSourceId());
         if (player != null && sourcePermanent != null) {
             if (player.searchLibrary(target, game)) {
                 for (UUID cardId : target.getTargets()) {
                     Card card = player.getLibrary().getCard(cardId, game);
                     if (card != null) {
-                        player.moveCards(card, Zone.LIBRARY, Zone.GRAVEYARD, ability, game);
-                        CopyEffect copyEffect = new CopyEffect(Duration.EndOfTurn, card, ability.getSourceId());
-                        game.addEffect(copyEffect, ability);
+                        player.moveCards(card, Zone.LIBRARY, Zone.GRAVEYARD, source, game);
+                        CopyEffect copyEffect = new CopyEffect(Duration.EndOfTurn, card, source.getSourceId());
+                        game.addEffect(copyEffect, source);
                     }
                 }
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/torment/DwellOnThePast.java b/Mage.Sets/src/mage/sets/torment/DwellOnThePast.java
index e1c8774608..1b0a93f4ae 100644
--- a/Mage.Sets/src/mage/sets/torment/DwellOnThePast.java
+++ b/Mage.Sets/src/mage/sets/torment/DwellOnThePast.java
@@ -103,7 +103,7 @@ class DwellOnThePastEffect extends OneShotEffect {
                 }
             }
             if (shuffle) {
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
             }
             return true;
         }
diff --git a/Mage.Sets/src/mage/sets/urzasdestiny/AcademyRector.java b/Mage.Sets/src/mage/sets/urzasdestiny/AcademyRector.java
index 502842da89..1e2a2401a0 100644
--- a/Mage.Sets/src/mage/sets/urzasdestiny/AcademyRector.java
+++ b/Mage.Sets/src/mage/sets/urzasdestiny/AcademyRector.java
@@ -108,7 +108,7 @@ class AcademyRectorEffect extends OneShotEffect {
             if (targetCard != null) {
                 controller.moveCards(targetCard, Zone.BATTLEFIELD, source, game);
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/urzasdestiny/ThranFoundry.java b/Mage.Sets/src/mage/sets/urzasdestiny/ThranFoundry.java
index 493c19a22f..e6e4230938 100644
--- a/Mage.Sets/src/mage/sets/urzasdestiny/ThranFoundry.java
+++ b/Mage.Sets/src/mage/sets/urzasdestiny/ThranFoundry.java
@@ -95,7 +95,7 @@ class ThranFoundryEffect extends OneShotEffect {
             for (Card card: player.getGraveyard().getCards(game)) {
                 player.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true);
             }              
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/urzaslegacy/Repopulate.java b/Mage.Sets/src/mage/sets/urzaslegacy/Repopulate.java
index ce77cf6bc1..a150c44fbf 100644
--- a/Mage.Sets/src/mage/sets/urzaslegacy/Repopulate.java
+++ b/Mage.Sets/src/mage/sets/urzaslegacy/Repopulate.java
@@ -93,7 +93,7 @@ class RepopulateEffect extends OneShotEffect {
             {
                 card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/urzassaga/CitanulFlute.java b/Mage.Sets/src/mage/sets/urzassaga/CitanulFlute.java
index 0e984c3021..6a6ad87741 100644
--- a/Mage.Sets/src/mage/sets/urzassaga/CitanulFlute.java
+++ b/Mage.Sets/src/mage/sets/urzassaga/CitanulFlute.java
@@ -121,10 +121,10 @@ class CitanulFluteSearchEffect extends OneShotEffect {
                 }
                 player.revealCards(name, cards, game);
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
-	player.shuffleLibrary(game);
+	player.shuffleLibrary(source, game);
         return false;
     }
 }
diff --git a/Mage.Sets/src/mage/sets/urzassaga/TimeSpiral.java b/Mage.Sets/src/mage/sets/urzassaga/TimeSpiral.java
index 46765bbacf..6048a9f4cc 100644
--- a/Mage.Sets/src/mage/sets/urzassaga/TimeSpiral.java
+++ b/Mage.Sets/src/mage/sets/urzassaga/TimeSpiral.java
@@ -95,7 +95,7 @@ class TimeSpiralEffect extends OneShotEffect {
                 for (Card card : player.getGraveyard().getCards(game)) {
                     card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true);
                 }
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
             }
         }
         return true;
diff --git a/Mage.Sets/src/mage/sets/vintagemasters/ChaosWarp.java b/Mage.Sets/src/mage/sets/vintagemasters/ChaosWarp.java
index d4e09af0c9..118ff3577a 100644
--- a/Mage.Sets/src/mage/sets/vintagemasters/ChaosWarp.java
+++ b/Mage.Sets/src/mage/sets/vintagemasters/ChaosWarp.java
@@ -98,7 +98,7 @@ class ChaosWarpShuffleIntoLibraryEffect extends OneShotEffect {
             Player owner = game.getPlayer(permanent.getOwnerId());
             if (owner != null) {
                 owner.moveCardToLibraryWithInfo(permanent, source.getSourceId(), game, Zone.BATTLEFIELD, true, true);
-                owner.shuffleLibrary(game);
+                owner.shuffleLibrary(source, game);
                 return true;
             }
         }
diff --git a/Mage.Sets/src/mage/sets/vintagemasters/MindsDesire.java b/Mage.Sets/src/mage/sets/vintagemasters/MindsDesire.java
index 184e2b898b..7acda79f7a 100644
--- a/Mage.Sets/src/mage/sets/vintagemasters/MindsDesire.java
+++ b/Mage.Sets/src/mage/sets/vintagemasters/MindsDesire.java
@@ -95,7 +95,7 @@ class MindsDesireEffect extends OneShotEffect {
         Player controller = game.getPlayer(source.getControllerId());
         MageObject sourceObject = source.getSourceObject(game);
         if (controller != null && sourceObject != null) {
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             if (controller.getLibrary().size() > 0) {
                 Card card = controller.getLibrary().removeFromTop(game);
                 if (card != null) {
diff --git a/Mage.Sets/src/mage/sets/weatherlight/ParadigmShift.java b/Mage.Sets/src/mage/sets/weatherlight/ParadigmShift.java
index 452e05a6cb..46a3f65c8f 100644
--- a/Mage.Sets/src/mage/sets/weatherlight/ParadigmShift.java
+++ b/Mage.Sets/src/mage/sets/weatherlight/ParadigmShift.java
@@ -89,7 +89,7 @@ class ExileLibraryEffect extends OneShotEffect {
             for (Card card: controller.getGraveyard().getCards(game)) {
                 controller.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true);
             }            
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/worldwake/JaceTheMindSculptor.java b/Mage.Sets/src/mage/sets/worldwake/JaceTheMindSculptor.java
index 26c00ef4c8..144d8da05e 100644
--- a/Mage.Sets/src/mage/sets/worldwake/JaceTheMindSculptor.java
+++ b/Mage.Sets/src/mage/sets/worldwake/JaceTheMindSculptor.java
@@ -196,7 +196,7 @@ class JaceTheMindSculptorEffect3 extends OneShotEffect {
             for (Card card : player.getHand().getCards(game)) {
                 card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, false);
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/worldwake/SelectiveMemory.java b/Mage.Sets/src/mage/sets/worldwake/SelectiveMemory.java
index eb883dbc96..0fb339b73f 100644
--- a/Mage.Sets/src/mage/sets/worldwake/SelectiveMemory.java
+++ b/Mage.Sets/src/mage/sets/worldwake/SelectiveMemory.java
@@ -95,7 +95,7 @@ class SelectiveMemoryEffect extends OneShotEffect {
                 }
             }
 
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/worldwake/ThadaAdelAcquisitor.java b/Mage.Sets/src/mage/sets/worldwake/ThadaAdelAcquisitor.java
index 55124b98a1..9f483140d6 100644
--- a/Mage.Sets/src/mage/sets/worldwake/ThadaAdelAcquisitor.java
+++ b/Mage.Sets/src/mage/sets/worldwake/ThadaAdelAcquisitor.java
@@ -114,7 +114,7 @@ class ThadaAdelAcquisitorEffect extends OneShotEffect {
                 }
             }
         }
-        damagedPlayer.shuffleLibrary(game);
+        damagedPlayer.shuffleLibrary(source, game);
         return true;
     }
 
diff --git a/Mage.Sets/src/mage/sets/zendikar/ArchmageAscension.java b/Mage.Sets/src/mage/sets/zendikar/ArchmageAscension.java
index 0142944763..4c61d6c0b3 100644
--- a/Mage.Sets/src/mage/sets/zendikar/ArchmageAscension.java
+++ b/Mage.Sets/src/mage/sets/zendikar/ArchmageAscension.java
@@ -173,7 +173,7 @@ class ArchmageAscensionReplacementEffect extends ReplacementEffectImpl {
                 Card card = game.getCard(target.getFirstTarget());
                 if (card != null) {
                     card.moveToZone(Zone.HAND, id, game, false);
-                    player.shuffleLibrary(game);
+                    player.shuffleLibrary(source, game);
                 }
             }
         }
diff --git a/Mage.Sets/src/mage/sets/zendikar/Gigantiform.java b/Mage.Sets/src/mage/sets/zendikar/Gigantiform.java
index 52cf488840..0aae06726e 100644
--- a/Mage.Sets/src/mage/sets/zendikar/Gigantiform.java
+++ b/Mage.Sets/src/mage/sets/zendikar/Gigantiform.java
@@ -150,7 +150,7 @@ class GigantiformEffect extends OneShotEffect {
             if (card != null) {
                 controller.moveCards(card, Zone.BATTLEFIELD, source, game);
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/zendikar/Gomazoa.java b/Mage.Sets/src/mage/sets/zendikar/Gomazoa.java
index 926f87731f..06d61f0893 100644
--- a/Mage.Sets/src/mage/sets/zendikar/Gomazoa.java
+++ b/Mage.Sets/src/mage/sets/zendikar/Gomazoa.java
@@ -128,7 +128,7 @@ class GomazoaEffect extends OneShotEffect {
             for (UUID player : players) {
                 Player owner = game.getPlayer(player);
                 if (owner != null) {
-                    owner.shuffleLibrary(game);
+                    owner.shuffleLibrary(source, game);
                 }
             }
             return true;
diff --git a/Mage.Sets/src/mage/sets/zendikar/QuestForAncientSecrets.java b/Mage.Sets/src/mage/sets/zendikar/QuestForAncientSecrets.java
index 58b0bd0db8..d71bdcf7bd 100644
--- a/Mage.Sets/src/mage/sets/zendikar/QuestForAncientSecrets.java
+++ b/Mage.Sets/src/mage/sets/zendikar/QuestForAncientSecrets.java
@@ -104,7 +104,7 @@ class QuestForAncientSecretsEffect extends OneShotEffect {
             for (Card card: player.getGraveyard().getCards(game)) {
                 player.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true);
             }                
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage.Sets/src/mage/sets/zendikar/QuestForTheHolyRelic.java b/Mage.Sets/src/mage/sets/zendikar/QuestForTheHolyRelic.java
index dd7ee2ac45..eabb11d67d 100644
--- a/Mage.Sets/src/mage/sets/zendikar/QuestForTheHolyRelic.java
+++ b/Mage.Sets/src/mage/sets/zendikar/QuestForTheHolyRelic.java
@@ -124,7 +124,7 @@ class QuestForTheHolyRelicEffect extends OneShotEffect {
                 }
             }
         }
-        controller.shuffleLibrary(game);
+        controller.shuffleLibrary(source, game);
         return true;
     }
 }
diff --git a/Mage.Sets/src/mage/sets/zendikar/SadisticSacrament.java b/Mage.Sets/src/mage/sets/zendikar/SadisticSacrament.java
index b45c30f407..638a4bb37d 100644
--- a/Mage.Sets/src/mage/sets/zendikar/SadisticSacrament.java
+++ b/Mage.Sets/src/mage/sets/zendikar/SadisticSacrament.java
@@ -116,7 +116,7 @@ class SadisticSacramentEffect extends OneShotEffect {
                     }
                 }
             }
-            targetPlayer.shuffleLibrary(game);
+            targetPlayer.shuffleLibrary(source, game);
             return true;
         }
 
diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/ShuffleTriggeredTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/ShuffleTriggeredTest.java
new file mode 100644
index 0000000000..d7267712e4
--- /dev/null
+++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/ShuffleTriggeredTest.java
@@ -0,0 +1,93 @@
+/*
+ *  Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without modification, are
+ *  permitted provided that the following conditions are met:
+ *
+ *     1. Redistributions of source code must retain the above copyright notice, this list of
+ *        conditions and the following disclaimer.
+ *
+ *     2. Redistributions in binary form must reproduce the above copyright notice, this list
+ *        of conditions and the following disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ *  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ *  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ *  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ *  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *  The views and conclusions contained in the software and documentation are those of the
+ *  authors and should not be interpreted as representing official policies, either expressed
+ *  or implied, of BetaSteward_at_googlemail.com.
+ */
+package org.mage.test.cards.triggers;
+
+import mage.constants.PhaseStep;
+import mage.constants.Zone;
+import org.junit.Test;
+import org.mage.test.serverside.base.CardTestPlayerBase;
+
+/**
+ *
+ * @author LevelX2
+ */
+public class ShuffleTriggeredTest extends CardTestPlayerBase {
+
+    @Test
+    public void testWidespreadPanicDoesTrigger() {
+        addCard(Zone.BATTLEFIELD, playerA, "Forest", 5);
+        addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1);
+        // Whenever a spell or ability causes its controller to shuffle his or her library, that player puts a card from his or her hand on top of his or her library.
+        addCard(Zone.HAND, playerA, "Widespread Panic", 1); // Enchantment {2}{R}
+        // Search your library for a basic land card and put that card onto the battlefield. Then shuffle your library.
+        addCard(Zone.HAND, playerA, "Untamed Wilds"); // Sorcery - {2}{G}
+
+        addCard(Zone.HAND, playerA, "Silvercoat Lion");
+
+        castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Widespread Panic");
+        castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Untamed Wilds");
+
+        setStopAt(1, PhaseStep.BEGIN_COMBAT);
+        execute();
+
+        assertPermanentCount(playerA, "Widespread Panic", 1);
+        assertGraveyardCount(playerA, "Untamed Wilds", 1);
+
+        assertHandCount(playerA, "Silvercoat Lion", 0); // Because Untamed Wilds does trigger Widespread Panic the card goes to library
+    }
+
+    /**
+     * Wenn ich mit Knowledge Exploitation einen Gegner seine Bibliothek mischen
+     * lasse, dann triggert Widespread Panic für ihn (sollte garnicht triggern).
+     * Bei Bribery ist es genauso.
+     */
+    @Test
+    public void testWidespreadPanicDoesNotTriggerIfOpponentShufflesPlayersLibrary() {
+        addCard(Zone.BATTLEFIELD, playerA, "Island", 9);
+        addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1);
+        // Whenever a spell or ability causes its controller to shuffle his or her library, that player puts a card from his or her hand on top of his or her library.
+        addCard(Zone.HAND, playerA, "Widespread Panic", 1); // Enchantment {2}{R}
+        // Prowl {3}{U}
+        // Search target opponent's library for an instant or sorcery card. You may cast that card without paying its mana cost. Then that player shuffles his or her library.
+        addCard(Zone.HAND, playerA, "Knowledge Exploitation"); // Sorcery - {5}{U}{U}
+
+        addCard(Zone.HAND, playerB, "Silvercoat Lion");
+
+        castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Widespread Panic");
+        castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Knowledge Exploitation", playerB);
+
+        setStopAt(1, PhaseStep.BEGIN_COMBAT);
+        execute();
+
+        assertPermanentCount(playerA, "Widespread Panic", 1);
+        assertGraveyardCount(playerA, "Knowledge Exploitation", 1);
+
+        assertHandCount(playerB, "Silvercoat Lion", 1); // Because Knowledge Exploitation does not trigger the card stays in hand
+    }
+
+}
diff --git a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java
index 6ab3d11fbc..7964f09a4e 100644
--- a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java
+++ b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java
@@ -1275,8 +1275,8 @@ public class TestPlayer implements Player {
     }
 
     @Override
-    public void shuffleLibrary(Game game) {
-        computerPlayer.shuffleLibrary(game);
+    public void shuffleLibrary(Ability source, Game game) {
+        computerPlayer.shuffleLibrary(source, game);
     }
 
     @Override
diff --git a/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java b/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java
index 18288af786..86d39bd888 100644
--- a/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java
+++ b/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java
@@ -544,7 +544,7 @@ public class PlayerStub implements Player {
     }
 
     @Override
-    public void shuffleLibrary(Game game) {
+    public void shuffleLibrary(Ability source, Game game) {
 
     }
 
diff --git a/Mage/src/main/java/mage/abilities/effects/common/LookLibraryControllerEffect.java b/Mage/src/main/java/mage/abilities/effects/common/LookLibraryControllerEffect.java
index 087323a12c..e6c8482992 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/LookLibraryControllerEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/LookLibraryControllerEffect.java
@@ -186,7 +186,7 @@ public class LookLibraryControllerEffect extends OneShotEffect {
      */
     protected void mayShuffle(Player player, Ability source, Game game) {
         if (this.mayShuffleAfter && player.chooseUse(Outcome.Benefit, "Shuffle your library?", source, game)) {
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
         }
     }
 
diff --git a/Mage/src/main/java/mage/abilities/effects/common/RecruiterEffect.java b/Mage/src/main/java/mage/abilities/effects/common/RecruiterEffect.java
index 1ae859cff2..9e8e2f1402 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/RecruiterEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/RecruiterEffect.java
@@ -71,7 +71,7 @@ public class RecruiterEffect extends OneShotEffect {
                 cards.addAll(targetCards.getTargets());
             }
             controller.revealCards(staticText, cards, game);
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
 
             if(cards.size() > 0) {
                 controller.putCardsOnTopOfLibrary(cards, game, source, true);
diff --git a/Mage/src/main/java/mage/abilities/effects/common/RevealAndShuffleIntoLibrarySourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/RevealAndShuffleIntoLibrarySourceEffect.java
index 9165ed4bfa..5a26c8d2c8 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/RevealAndShuffleIntoLibrarySourceEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/RevealAndShuffleIntoLibrarySourceEffect.java
@@ -90,7 +90,7 @@ public class RevealAndShuffleIntoLibrarySourceEffect extends OneShotEffect {
                     controller.moveCardToLibraryWithInfo((Card)sourceObject, source.getSourceId(), game, fromZone, true, true);
                 }
                 if (!cards.isEmpty()) {
-                    controller.shuffleLibrary(game);
+                    controller.shuffleLibrary(source, game);
                 }
             }
             return true;
diff --git a/Mage/src/main/java/mage/abilities/effects/common/ShuffleHandIntoLibraryDrawThatManySourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ShuffleHandIntoLibraryDrawThatManySourceEffect.java
index ae9dd26988..0b7d1de0cb 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/ShuffleHandIntoLibraryDrawThatManySourceEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/ShuffleHandIntoLibraryDrawThatManySourceEffect.java
@@ -61,7 +61,7 @@ public class ShuffleHandIntoLibraryDrawThatManySourceEffect extends OneShotEffec
             int cardsHand = controller.getHand().size();
             if (cardsHand > 0) {
                 controller.moveCards(controller.getHand(), Zone.LIBRARY, source, game);
-                controller.shuffleLibrary(game);
+                controller.shuffleLibrary(source, game);
                 game.applyEffects(); // then
                 controller.drawCards(cardsHand, game);
             }
diff --git a/Mage/src/main/java/mage/abilities/effects/common/ShuffleIntoLibraryGraveOfSourceOwnerEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ShuffleIntoLibraryGraveOfSourceOwnerEffect.java
index 149117f39f..ee41437b42 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/ShuffleIntoLibraryGraveOfSourceOwnerEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/ShuffleIntoLibraryGraveOfSourceOwnerEffect.java
@@ -59,7 +59,7 @@ public class ShuffleIntoLibraryGraveOfSourceOwnerEffect extends OneShotEffect {
         Player owner = game.getPlayer(ownerId);
         if (owner != null) {
             owner.moveCards(owner.getGraveyard(), null, Zone.LIBRARY, source, game);
-            owner.shuffleLibrary(game);
+            owner.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage/src/main/java/mage/abilities/effects/common/ShuffleIntoLibrarySourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ShuffleIntoLibrarySourceEffect.java
index 5310e50938..3b64af1f58 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/ShuffleIntoLibrarySourceEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/ShuffleIntoLibrarySourceEffect.java
@@ -64,14 +64,14 @@ public class ShuffleIntoLibrarySourceEffect extends OneShotEffect {
                 owner = game.getPlayer(((Permanent) mageObject).getOwnerId());
                 if (owner != null) {
                     owner.moveCardToLibraryWithInfo((Permanent)mageObject, source.getSourceId(), game, fromZone, true, true);                
-                    owner.shuffleLibrary(game);
+                    owner.shuffleLibrary(source, game);
                     return true;
                 }
             } else if (mageObject instanceof Card) {
                 owner = game.getPlayer(((Card) mageObject).getOwnerId());
                 if (owner != null) {
                     owner.moveCardToLibraryWithInfo((Card)mageObject, source.getSourceId(), game, fromZone, true, true);                
-                    owner.shuffleLibrary(game);
+                    owner.shuffleLibrary(source, game);
                     return true;
                 }
             }
diff --git a/Mage/src/main/java/mage/abilities/effects/common/ShuffleLibrarySourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ShuffleLibrarySourceEffect.java
index 7926a316a2..9e94d0e2e1 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/ShuffleLibrarySourceEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/ShuffleLibrarySourceEffect.java
@@ -58,7 +58,7 @@ public class ShuffleLibrarySourceEffect extends OneShotEffect {
     public boolean apply(Game game, Ability source) {
         Player player = game.getPlayer(source.getControllerId());
         if (player != null) {
-			player.shuffleLibrary(game);
+			player.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage/src/main/java/mage/abilities/effects/common/ShuffleLibraryTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ShuffleLibraryTargetEffect.java
index e3e9e5d104..a44b5a03b6 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/ShuffleLibraryTargetEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/ShuffleLibraryTargetEffect.java
@@ -58,7 +58,7 @@ public class ShuffleLibraryTargetEffect extends OneShotEffect {
     public boolean apply(Game game, Ability source) {
         Player player = game.getPlayer(targetPointer.getFirst(game, source));
         if (player != null) {
-			player.shuffleLibrary(game);
+			player.shuffleLibrary(source, game);
             return true;
         }
         return false;
diff --git a/Mage/src/main/java/mage/abilities/effects/common/ShuffleSpellEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ShuffleSpellEffect.java
index fa8e72af49..c1e0e79bcc 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/ShuffleSpellEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/ShuffleSpellEffect.java
@@ -63,7 +63,7 @@ public class ShuffleSpellEffect extends OneShotEffect implements MageSingleton {
                 if (controller.moveCards(spell, Zone.LIBRARY, source, game) && !spell.isCopy()) {
                     Player owner = game.getPlayer(spell.getCard().getOwnerId());
                     if (owner != null) {
-                        owner.shuffleLibrary(game);
+                        owner.shuffleLibrary(source, game);
                     }
 
                 }
diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInHandEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInHandEffect.java
index f47985c9ad..de5bbdc6c2 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInHandEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInHandEffect.java
@@ -108,11 +108,11 @@ public class SearchLibraryPutInHandEffect extends SearchEffect {
                     controller.revealCards(name, cards, game);
                 }
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
         if (forceShuffle) {
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
         }
         return false;
     }
diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInPlayEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInPlayEffect.java
index de9c442f28..c0b387f67d 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInPlayEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInPlayEffect.java
@@ -92,11 +92,11 @@ public class SearchLibraryPutInPlayEffect extends SearchEffect {
                 player.moveCards(new CardsImpl(target.getTargets()).getCards(game),
                         Zone.BATTLEFIELD, source, game, tapped, false, false, null);
             }
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
             return true;
         }
         if (forceShuffle) {
-            player.shuffleLibrary(game);
+            player.shuffleLibrary(source, game);
         }
         return false;
     }
diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInPlayTargetPlayerEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInPlayTargetPlayerEffect.java
index 8c68601cb3..9c09299bd3 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInPlayTargetPlayerEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInPlayTargetPlayerEffect.java
@@ -75,12 +75,12 @@ public class SearchLibraryPutInPlayTargetPlayerEffect extends SearchEffect {
                     player.moveCards(new CardsImpl(target.getTargets()).getCards(game),
                             Zone.BATTLEFIELD, source, game, tapped, false, ownerIsController, null);
                 }
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
                 return true;
             }
 
             if (forceShuffle) {
-                player.shuffleLibrary(game);
+                player.shuffleLibrary(source, game);
             }
         }
 
diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutOnLibraryEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutOnLibraryEffect.java
index 124b173a5a..87ff7a4e56 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutOnLibraryEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutOnLibraryEffect.java
@@ -82,14 +82,14 @@ public class SearchLibraryPutOnLibraryEffect extends SearchEffect {
                 controller.revealCards(sourceObject.getIdName(), foundCards, game);
             }
             if (forceShuffle) {
-                controller.shuffleLibrary(game);
+                controller.shuffleLibrary(source, game);
             }
             controller.putCardsOnTopOfLibrary(foundCards, game, source, reveal);
             return true;
         }
         // shuffle
         if (forceShuffle) {
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
         }
         return false;
     }
diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchTargetGraveyardHandLibraryForCardNameAndExileEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchTargetGraveyardHandLibraryForCardNameAndExileEffect.java
index 5629f01ef4..47d6827f2d 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchTargetGraveyardHandLibraryForCardNameAndExileEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchTargetGraveyardHandLibraryForCardNameAndExileEffect.java
@@ -117,7 +117,7 @@ public abstract class SearchTargetGraveyardHandLibraryForCardNameAndExileEffect
                 if (controller.choose(Outcome.Exile, cardsInLibrary, targetLib, game)) {
                     controller.moveCards(new CardsImpl(targetLib.getTargets()), Zone.EXILED, source, game);
                 }
-                targetPlayer.shuffleLibrary(game);
+                targetPlayer.shuffleLibrary(source, game);
             }
 
             return true;
diff --git a/Mage/src/main/java/mage/abilities/keyword/TransmuteAbility.java b/Mage/src/main/java/mage/abilities/keyword/TransmuteAbility.java
index c861d23621..bc46eac776 100644
--- a/Mage/src/main/java/mage/abilities/keyword/TransmuteAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/TransmuteAbility.java
@@ -88,7 +88,7 @@ class TransmuteEffect extends OneShotEffect {
                     controller.moveCards(revealed, null, Zone.HAND, source, game);
                 }
             }
-            controller.shuffleLibrary(game);
+            controller.shuffleLibrary(source, game);
             return true;
         }
 
diff --git a/Mage/src/main/java/mage/game/GameCommanderImpl.java b/Mage/src/main/java/mage/game/GameCommanderImpl.java
index a875b5fd3d..49e17a3536 100644
--- a/Mage/src/main/java/mage/game/GameCommanderImpl.java
+++ b/Mage/src/main/java/mage/game/GameCommanderImpl.java
@@ -176,7 +176,7 @@ public abstract class GameCommanderImpl extends GameImpl {
                 }
             }
             if (mulliganedCards.get(playerId).size() > 0) {
-                player.shuffleLibrary(this);
+                player.shuffleLibrary(null, this);
             }
         }
     }
diff --git a/Mage/src/main/java/mage/game/GameImpl.java b/Mage/src/main/java/mage/game/GameImpl.java
index 5b39cac2a6..2298f96a77 100644
--- a/Mage/src/main/java/mage/game/GameImpl.java
+++ b/Mage/src/main/java/mage/game/GameImpl.java
@@ -881,7 +881,7 @@ public abstract class GameImpl implements Game, Serializable {
         //20091005 - 103.1
         if (!gameOptions.skipInitShuffling) { //don't shuffle in test mode for card injection on top of player's libraries
             for (Player player : state.getPlayers().values()) {
-                player.shuffleLibrary(this);
+                player.shuffleLibrary(null, this);
             }
         }
 
@@ -1147,7 +1147,7 @@ public abstract class GameImpl implements Game, Serializable {
         int numCards = player.getHand().size();
         player.getLibrary().addAll(player.getHand().getCards(this), this);
         player.getHand().clear();
-        player.shuffleLibrary(this);
+        player.shuffleLibrary(null, this);
         int deduction = 1;
         if (freeMulligans > 0) {
             if (usedFreeMulligans != null && usedFreeMulligans.containsKey(player.getId())) {
diff --git a/Mage/src/main/java/mage/players/Player.java b/Mage/src/main/java/mage/players/Player.java
index 9bad10ada9..e15d22f185 100644
--- a/Mage/src/main/java/mage/players/Player.java
+++ b/Mage/src/main/java/mage/players/Player.java
@@ -333,7 +333,7 @@ public interface Player extends MageItem, Copyable<Player> {
      */
     void reset();
 
-    void shuffleLibrary(Game game);
+    void shuffleLibrary(Ability source, Game game);
 
     int drawCards(int num, Game game);
 
diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java
index eea2d6df5a..1b8dfeb870 100644
--- a/Mage/src/main/java/mage/players/PlayerImpl.java
+++ b/Mage/src/main/java/mage/players/PlayerImpl.java
@@ -1403,13 +1403,13 @@ public abstract class PlayerImpl implements Player, Serializable {
     }
 
     @Override
-    public void shuffleLibrary(Game game) {
+    public void shuffleLibrary(Ability source, Game game) {
         if (!game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.SHUFFLE_LIBRARY, playerId, playerId))) {
             this.library.shuffle();
             if (!game.isSimulation()) {
-                game.informPlayers(getLogName() + " shuffles his or her library.");
+                game.informPlayers(getLogName() + "'s library is shuffled");
             }
-            game.fireEvent(GameEvent.getEvent(GameEvent.EventType.LIBRARY_SHUFFLED, playerId, playerId));
+            game.fireEvent(GameEvent.getEvent(GameEvent.EventType.LIBRARY_SHUFFLED, playerId, (source == null ? null : source.getSourceId()), playerId));
         }
     }