diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html index 5bb8de5c0..4d472fd5f 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html +++ b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html @@ -1,4 +1,7 @@
+7 Aug. 2014
+- Changed how revealing hand or cards from hand works.
+
 23 July 2014
 - It should be now possible to use "Trophy" cards in "My cards" tournaments and leagues (starting with any newly created
 league).
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealAndChooseCardsFromOpponentHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealAndChooseCardsFromOpponentHandEffect.java
index cfcbd29dc..a4836b6b0 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealAndChooseCardsFromOpponentHandEffect.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealAndChooseCardsFromOpponentHandEffect.java
@@ -4,7 +4,7 @@ import com.gempukku.lotro.common.Filterable;
 import com.gempukku.lotro.filters.Filters;
 import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.LotroGame;
-import com.gempukku.lotro.logic.actions.SubAction;
+import com.gempukku.lotro.logic.PlayOrder;
 import com.gempukku.lotro.logic.decisions.ArbitraryCardsSelectionDecision;
 import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
 import com.gempukku.lotro.logic.timing.AbstractSubActionEffect;
@@ -12,6 +12,7 @@ import com.gempukku.lotro.logic.timing.Action;
 import com.gempukku.lotro.logic.timing.Effect;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -47,21 +48,32 @@ public abstract class RevealAndChooseCardsFromOpponentHandEffect extends Abstrac
         if (game.getModifiersQuerying().canLookOrRevealCardsInHand(game.getGameState(), _opponentId, _playerId)) {
             List opponentHand = new LinkedList(game.getGameState().getHand(_opponentId));
 
-            SubAction subAction = new SubAction(_action);
-            subAction.appendEffect(
-                    new RevealCardsFromHandEffect(_source, _opponentId, opponentHand));
-            processSubAction(game, subAction);
+            final PlayOrder playOrder = game.getGameState().getPlayerOrder().getCounterClockwisePlayOrder(_opponentId, false);
+            // Skip hand owner (opponent)
+            playOrder.getNextPlayer();
 
-            Collection selectable = Filters.filter(opponentHand, game.getGameState(), game.getModifiersQuerying(), _selectionFilter);
+            String nextPlayer;
+            while ((nextPlayer = playOrder.getNextPlayer()) != null) {
+                if (nextPlayer.equals(_playerId)) {
+                    Collection selectable = Filters.filter(opponentHand, game.getGameState(), game.getModifiersQuerying(), _selectionFilter);
 
-            game.getUserFeedback().sendAwaitingDecision(_playerId,
-                    new ArbitraryCardsSelectionDecision(1, _text, opponentHand, new LinkedList(selectable), Math.min(_minChosen, selectable.size()), Math.min(_maxChosen, selectable.size())) {
-                        @Override
-                        public void decisionMade(String result) throws DecisionResultInvalidException {
-                            List selectedCards = getSelectedCardsByResponse(result);
-                            cardsSelected(selectedCards);
-                        }
-                    });
+                    game.getUserFeedback().sendAwaitingDecision(nextPlayer,
+                            new ArbitraryCardsSelectionDecision(1, _text, opponentHand, new LinkedList(selectable), Math.min(_minChosen, selectable.size()), Math.min(_maxChosen, selectable.size())) {
+                                @Override
+                                public void decisionMade(String result) throws DecisionResultInvalidException {
+                                    List selectedCards = getSelectedCardsByResponse(result);
+                                    cardsSelected(selectedCards);
+                                }
+                            });
+                } else if (!nextPlayer.equals(_opponentId)) {
+                    game.getUserFeedback().sendAwaitingDecision(nextPlayer,
+                            new ArbitraryCardsSelectionDecision(1, "Hand of " + _opponentId, opponentHand, Collections.emptySet(), 0, 0) {
+                                @Override
+                                public void decisionMade(String result) throws DecisionResultInvalidException {
+                                }
+                            });
+                }
+            }
         }
     }
 
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealCardsFromHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealCardsFromYourHandEffect.java
similarity index 51%
rename from gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealCardsFromHandEffect.java
rename to gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealCardsFromYourHandEffect.java
index ecd616006..6cf0fcaeb 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealCardsFromHandEffect.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealCardsFromYourHandEffect.java
@@ -4,18 +4,26 @@ import com.gempukku.lotro.common.Zone;
 import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.LotroGame;
 import com.gempukku.lotro.logic.GameUtils;
+import com.gempukku.lotro.logic.PlayOrder;
+import com.gempukku.lotro.logic.decisions.ArbitraryCardsSelectionDecision;
+import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
 import com.gempukku.lotro.logic.timing.AbstractEffect;
 import com.gempukku.lotro.logic.timing.Effect;
 import com.gempukku.lotro.logic.timing.results.RevealCardFromHandResult;
 
 import java.util.Collection;
+import java.util.Collections;
 
-public class RevealCardsFromHandEffect extends AbstractEffect {
+public class RevealCardsFromYourHandEffect extends AbstractEffect {
     private PhysicalCard _source;
     private String _handPlayerId;
-    private Collection _cards;
+    private Collection _cards;
 
-    public RevealCardsFromHandEffect(PhysicalCard source, String handPlayerId, Collection cards) {
+    public RevealCardsFromYourHandEffect(PhysicalCard source, String handPlayerId, PhysicalCard card) {
+        this(source, handPlayerId, Collections.singleton(card));
+    }
+
+    public RevealCardsFromYourHandEffect(PhysicalCard source, String handPlayerId, Collection cards) {
         _source = source;
         _handPlayerId = handPlayerId;
         _cards = cards;
@@ -45,6 +53,20 @@ public class RevealCardsFromHandEffect extends AbstractEffect {
     protected FullEffectResult playEffectReturningResult(LotroGame game) {
         game.getGameState().sendMessage(GameUtils.getCardLink(_source) + " revealed " + _handPlayerId + " cards in hand - " + getAppendedNames(_cards));
 
+        final PlayOrder playerOrder = game.getGameState().getPlayerOrder().getCounterClockwisePlayOrder(_handPlayerId, false);
+        // Skip hand owner
+        playerOrder.getNextPlayer();
+
+        String nextPlayer;
+        while ((nextPlayer = playerOrder.getNextPlayer()) != null) {
+            game.getUserFeedback().sendAwaitingDecision(nextPlayer,
+                    new ArbitraryCardsSelectionDecision(1, _handPlayerId + " revealed card(s) in hand", _cards, Collections.emptySet(), 0, 0) {
+                        @Override
+                        public void decisionMade(String result) throws DecisionResultInvalidException {
+                        }
+                    });
+        }
+
         for (PhysicalCard card : _cards) {
             game.getActionsEnvironment().emitEffectResult(new RevealCardFromHandResult(_source, _handPlayerId, card));
         }
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealHandEffect.java
new file mode 100644
index 000000000..de09ef49d
--- /dev/null
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealHandEffect.java
@@ -0,0 +1,73 @@
+package com.gempukku.lotro.cards.effects;
+
+import com.gempukku.lotro.game.PhysicalCard;
+import com.gempukku.lotro.game.state.LotroGame;
+import com.gempukku.lotro.logic.GameUtils;
+import com.gempukku.lotro.logic.PlayOrder;
+import com.gempukku.lotro.logic.decisions.ArbitraryCardsSelectionDecision;
+import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
+import com.gempukku.lotro.logic.timing.AbstractEffect;
+import com.gempukku.lotro.logic.timing.results.RevealCardFromHandResult;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+public class RevealHandEffect extends AbstractEffect {
+    private PhysicalCard _source;
+    private String _actingPlayer;
+    private String _handPlayerId;
+
+    public RevealHandEffect(PhysicalCard source, String actingPlayer, String handPlayerId) {
+        _source = source;
+        _actingPlayer = actingPlayer;
+        _handPlayerId = handPlayerId;
+    }
+
+    @Override
+    public String getText(LotroGame game) {
+        return "Reveal cards from hand";
+    }
+
+    @Override
+    public Type getType() {
+        return null;
+    }
+
+    @Override
+    public boolean isPlayableInFull(LotroGame game) {
+        return game.getModifiersQuerying().canLookOrRevealCardsInHand(game.getGameState(), _handPlayerId, _actingPlayer);
+    }
+
+    @Override
+    protected FullEffectResult playEffectReturningResult(LotroGame game) {
+        final List hand = game.getGameState().getHand(_handPlayerId);
+        game.getGameState().sendMessage(GameUtils.getCardLink(_source) + " revealed " + _handPlayerId + " cards in hand - " + getAppendedNames(hand));
+
+        final PlayOrder playerOrder = game.getGameState().getPlayerOrder().getCounterClockwisePlayOrder(_handPlayerId, false);
+        // Skip hand owner
+        playerOrder.getNextPlayer();
+
+        String nextPlayer;
+        while ((nextPlayer = playerOrder.getNextPlayer()) != null) {
+            game.getUserFeedback().sendAwaitingDecision(nextPlayer,
+                    new ArbitraryCardsSelectionDecision(1, "Hand of " + _handPlayerId, hand, Collections.emptySet(), 0, 0) {
+                        @Override
+                        public void decisionMade(String result) throws DecisionResultInvalidException {
+                        }
+                    });
+        }
+
+        cardsRevealed(hand);
+
+        for (PhysicalCard card : hand) {
+            game.getActionsEnvironment().emitEffectResult(new RevealCardFromHandResult(_source, _handPlayerId, card));
+        }
+
+        return new FullEffectResult(true);
+    }
+
+    protected void cardsRevealed(Collection cards) {
+
+    }
+}
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/FPPlayerCantLookAtShadowPlayersHandModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/FPPlayerCantLookAtShadowPlayersHandModifier.java
new file mode 100644
index 000000000..1929f0fc2
--- /dev/null
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/FPPlayerCantLookAtShadowPlayersHandModifier.java
@@ -0,0 +1,21 @@
+package com.gempukku.lotro.cards.modifiers;
+
+import com.gempukku.lotro.game.PhysicalCard;
+import com.gempukku.lotro.game.state.GameState;
+import com.gempukku.lotro.logic.modifiers.AbstractModifier;
+import com.gempukku.lotro.logic.modifiers.ModifierEffect;
+import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
+
+public class FPPlayerCantLookAtShadowPlayersHandModifier extends AbstractModifier {
+    public FPPlayerCantLookAtShadowPlayersHandModifier(PhysicalCard source) {
+        super(source, "The Free Peoples player may not look at or reveal cards in any Shadow player's hand", null, ModifierEffect.LOOK_OR_REVEAL_MODIFIER);
+    }
+
+    @Override
+    public boolean canLookOrRevealCardsInHand(GameState gameState, ModifiersQuerying modifiersQuerying, String revealingPlayerId, String actingPlayerId) {
+        if (actingPlayerId.equals(gameState.getCurrentPlayerId())
+                && !revealingPlayerId.equals(gameState.getCurrentPlayerId()))
+            return false;
+        return true;
+    }
+}
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/OpponentsCantLookOrRevealCardsFromHand.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/OpponentsCantLookOrRevealCardsFromHand.java
deleted file mode 100644
index 65684f326..000000000
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/OpponentsCantLookOrRevealCardsFromHand.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.gempukku.lotro.cards.modifiers;
-
-import com.gempukku.lotro.game.PhysicalCard;
-import com.gempukku.lotro.game.state.GameState;
-import com.gempukku.lotro.logic.modifiers.AbstractModifier;
-import com.gempukku.lotro.logic.modifiers.ModifierEffect;
-import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
-
-public class OpponentsCantLookOrRevealCardsFromHand extends AbstractModifier {
-    private String _revealingPlayerId;
-    private String _actingPlayerId;
-
-    public OpponentsCantLookOrRevealCardsFromHand(PhysicalCard source, String revealingPlayerId) {
-        super(source, "Opponents can't look or reveal cards from hand", null, ModifierEffect.LOOK_OR_REVEAL_MODIFIER);
-        _revealingPlayerId = revealingPlayerId;
-    }
-
-    public OpponentsCantLookOrRevealCardsFromHand(PhysicalCard source, String revealingPlayerId, String actingPlayerId) {
-        this(source, revealingPlayerId);
-        _actingPlayerId = actingPlayerId;
-    }
-
-    @Override
-    public boolean canLookOrRevealCardsInHand(GameState gameState, ModifiersQuerying modifiersQuerying, String revealingPlayerId, String actingPlayerId) {
-        if (_revealingPlayerId != null && _revealingPlayerId.equals(revealingPlayerId))
-            return false;
-        if (_actingPlayerId != null && _actingPlayerId.equals(actingPlayerId))
-            return false;
-        return true;
-    }
-}
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/ShadowPlayersCantLookAtYourHandModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/ShadowPlayersCantLookAtYourHandModifier.java
new file mode 100644
index 000000000..196756924
--- /dev/null
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/ShadowPlayersCantLookAtYourHandModifier.java
@@ -0,0 +1,24 @@
+package com.gempukku.lotro.cards.modifiers;
+
+import com.gempukku.lotro.game.PhysicalCard;
+import com.gempukku.lotro.game.state.GameState;
+import com.gempukku.lotro.logic.modifiers.AbstractModifier;
+import com.gempukku.lotro.logic.modifiers.ModifierEffect;
+import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
+
+public class ShadowPlayersCantLookAtYourHandModifier extends AbstractModifier {
+    private String _revealingPlayerId;
+
+    public ShadowPlayersCantLookAtYourHandModifier(PhysicalCard source, String revealingPlayerId) {
+        super(source, "Shadow players may not look at or reveal cards in your hand", null, ModifierEffect.LOOK_OR_REVEAL_MODIFIER);
+        _revealingPlayerId = revealingPlayerId;
+    }
+
+    @Override
+    public boolean canLookOrRevealCardsInHand(GameState gameState, ModifiersQuerying modifiersQuerying, String revealingPlayerId, String actingPlayerId) {
+        if (_revealingPlayerId != null && _revealingPlayerId.equals(revealingPlayerId)
+                && actingPlayerId != null && !actingPlayerId.equals(gameState.getCurrentPlayerId()))
+            return false;
+        return true;
+    }
+}
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_036.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_036.java
index aa531338b..09b917772 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_036.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_036.java
@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set1.elven;
 import com.gempukku.lotro.cards.AbstractOldEvent;
 import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.actions.PlayEventAction;
-import com.gempukku.lotro.cards.effects.RevealAndChooseCardsFromOpponentHandEffect;
+import com.gempukku.lotro.cards.effects.RevealHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseOpponentEffect;
 import com.gempukku.lotro.common.Culture;
@@ -15,7 +15,7 @@ import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.LotroGame;
 import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect;
 
-import java.util.List;
+import java.util.Collection;
 
 /**
  * Set: The Fellowship of the Ring
@@ -51,14 +51,16 @@ public class Card1_036 extends AbstractOldEvent {
                 new ChooseOpponentEffect(playerId) {
                     @Override
                     protected void opponentChosen(final String opponentId) {
-                        List hand = game.getGameState().getHand(opponentId);
-                        final int orcsCount = Filters.filter(hand, game.getGameState(), game.getModifiersQuerying(), Race.ORC).size();
-                        action.appendEffect(new RevealAndChooseCardsFromOpponentHandEffect(action, playerId, opponentId, self, "Opponent's hand", Filters.none, 0, 0) {
-                            @Override
-                            protected void cardsSelected(List selectedCards) {
-                                action.appendEffect(new ChooseAndDiscardCardsFromHandEffect(action, opponentId, true, orcsCount));
-                            }
-                        });
+                        action.appendEffect(
+                                new RevealHandEffect(self, playerId, opponentId) {
+                                    @Override
+                                    protected void cardsRevealed(Collection cards) {
+                                        final int orcsCount = Filters.filter(cards, game.getGameState(), game.getModifiersQuerying(), Race.ORC).size();
+
+                                        action.appendEffect(
+                                                new ChooseAndDiscardCardsFromHandEffect(action, opponentId, true, orcsCount));
+                                    }
+                                });
                     }
                 });
         return action;
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_054.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_054.java
index ca1936dd1..87feea3f6 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_054.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_054.java
@@ -3,8 +3,12 @@ package com.gempukku.lotro.cards.set1.elven;
 import com.gempukku.lotro.cards.AbstractPermanent;
 import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.effects.PutCardFromHandOnBottomOfDeckEffect;
-import com.gempukku.lotro.cards.effects.RevealCardEffect;
-import com.gempukku.lotro.common.*;
+import com.gempukku.lotro.cards.effects.RevealCardsFromYourHandEffect;
+import com.gempukku.lotro.common.CardType;
+import com.gempukku.lotro.common.Culture;
+import com.gempukku.lotro.common.Phase;
+import com.gempukku.lotro.common.Side;
+import com.gempukku.lotro.common.Zone;
 import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.LotroGame;
 import com.gempukku.lotro.logic.actions.ActivateCardAction;
@@ -30,7 +34,7 @@ public class Card1_054 extends AbstractPermanent {
     }
 
     @Override
-    public List getExtraPhaseActions(String playerId, LotroGame game, final PhysicalCard self) {
+    public List getExtraPhaseActions(final String playerId, LotroGame game, final PhysicalCard self) {
         if (PlayConditions.canUseFPCardDuringPhase(game, Phase.FELLOWSHIP, self)) {
             final ActivateCardAction action = new ActivateCardAction(self);
             action.appendEffect(
@@ -38,7 +42,7 @@ public class Card1_054 extends AbstractPermanent {
                         @Override
                         protected void cardsSelected(LotroGame game, Collection selectedCards) {
                             for (PhysicalCard selectedCard : selectedCards) {
-                                action.appendEffect(new RevealCardEffect(self, selectedCard));
+                                action.appendEffect(new RevealCardsFromYourHandEffect(self, playerId, selectedCard));
                                 action.appendEffect(new PutCardFromHandOnBottomOfDeckEffect(selectedCard));
                             }
                         }
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_075.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_075.java
index a92dcc543..8859abb44 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_075.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_075.java
@@ -4,9 +4,13 @@ import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
 import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.effects.ExertCharactersEffect;
 import com.gempukku.lotro.cards.effects.RemoveTwilightEffect;
-import com.gempukku.lotro.cards.effects.RevealAndChooseCardsFromOpponentHandEffect;
+import com.gempukku.lotro.cards.effects.RevealHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseOpponentEffect;
-import com.gempukku.lotro.common.*;
+import com.gempukku.lotro.common.Culture;
+import com.gempukku.lotro.common.Keyword;
+import com.gempukku.lotro.common.Phase;
+import com.gempukku.lotro.common.PossessionClass;
+import com.gempukku.lotro.common.Race;
 import com.gempukku.lotro.filters.Filter;
 import com.gempukku.lotro.filters.Filters;
 import com.gempukku.lotro.game.PhysicalCard;
@@ -57,10 +61,11 @@ public class Card1_075 extends AbstractAttachableFPPossession {
                         @Override
                         protected void opponentChosen(final String opponentId) {
                             action.appendEffect(
-                                    new RevealAndChooseCardsFromOpponentHandEffect(action, playerId, opponentId, self, "Opponent's hand", Filters.none, 0, 0) {
+                                    new RevealHandEffect(self, playerId, opponentId) {
                                         @Override
-                                        protected void cardsSelected(List selectedCards) {
+                                        protected void cardsRevealed(Collection cards) {
                                             Collection orcs = Filters.filter(game.getGameState().getHand(opponentId), game.getGameState(), game.getModifiersQuerying(), Race.ORC);
+
                                             action.appendEffect(new RemoveTwilightEffect(orcs.size()));
                                         }
                                     });
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_086.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_086.java
index a258e8909..b851726b1 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_086.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_086.java
@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set1.gandalf;
 
 import com.gempukku.lotro.cards.AbstractOldEvent;
 import com.gempukku.lotro.cards.actions.PlayEventAction;
-import com.gempukku.lotro.cards.effects.RevealAndChooseCardsFromOpponentHandEffect;
+import com.gempukku.lotro.cards.effects.RevealHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseOpponentEffect;
 import com.gempukku.lotro.common.Culture;
 import com.gempukku.lotro.common.Keyword;
@@ -12,8 +12,6 @@ import com.gempukku.lotro.filters.Filters;
 import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.LotroGame;
 
-import java.util.List;
-
 /**
  * Set: The Fellowship of the Ring
  * Side: Free
@@ -42,12 +40,7 @@ public class Card1_086 extends AbstractOldEvent {
                     @Override
                     protected void opponentChosen(String opponentId) {
                         action.appendEffect(
-                                new RevealAndChooseCardsFromOpponentHandEffect(action, playerId, opponentId, self, "Opponent's hand", Filters.none, 0, 0) {
-                                    @Override
-                                    protected void cardsSelected(List selectedCards) {
-                                        // Do nothing, just revealing
-                                    }
-                                });
+                                new RevealHandEffect(self, playerId, opponentId));
                     }
                 });
         return action;
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_313.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_313.java
index e87e85a93..b5f36a75f 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_313.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_313.java
@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
 import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.effects.ExertCharactersEffect;
 import com.gempukku.lotro.cards.effects.RemoveTwilightEffect;
-import com.gempukku.lotro.cards.effects.RevealAndChooseCardsFromOpponentHandEffect;
+import com.gempukku.lotro.cards.effects.RevealHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseOpponentEffect;
 import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
 import com.gempukku.lotro.common.Culture;
@@ -55,9 +55,9 @@ public class Card1_313 extends AbstractAttachableFPPossession {
                         @Override
                         protected void opponentChosen(final String opponentId) {
                             action.appendEffect(
-                                    new RevealAndChooseCardsFromOpponentHandEffect(action, playerId, opponentId, self, "Opponent's hand", Filters.none, 0, 0) {
+                                    new RevealHandEffect(self, playerId, opponentId) {
                                         @Override
-                                        protected void cardsSelected(List selectedCards) {
+                                        protected void cardsRevealed(Collection cards) {
                                             Collection orcs = Filters.filter(game.getGameState().getHand(opponentId), game.getGameState(), game.getModifiersQuerying(), Race.ORC);
                                             int toRemove = Math.min(orcs.size(), game.getGameState().getTwilightPool());
                                             action.appendEffect(
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/gandalf/Card11_036.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/gandalf/Card11_036.java
index 89e2e9b14..e2903aa09 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/gandalf/Card11_036.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/gandalf/Card11_036.java
@@ -3,14 +3,19 @@ package com.gempukku.lotro.cards.set11.gandalf;
 import com.gempukku.lotro.cards.AbstractEvent;
 import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.actions.PlayEventAction;
-import com.gempukku.lotro.cards.effects.RevealCardsFromHandEffect;
+import com.gempukku.lotro.cards.effects.RevealHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
-import com.gempukku.lotro.common.*;
+import com.gempukku.lotro.common.CardType;
+import com.gempukku.lotro.common.Culture;
+import com.gempukku.lotro.common.Keyword;
+import com.gempukku.lotro.common.Phase;
+import com.gempukku.lotro.common.Race;
+import com.gempukku.lotro.common.Side;
 import com.gempukku.lotro.filters.Filters;
 import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.LotroGame;
 
-import java.util.HashSet;
+import java.util.Collection;
 
 /**
  * Set: Shadows
@@ -33,14 +38,18 @@ public class Card11_036 extends AbstractEvent {
     }
 
     @Override
-    public PlayEventAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
-        PlayEventAction action = new PlayEventAction(self);
+    public PlayEventAction getPlayCardAction(final String playerId, final LotroGame game, final PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
+        final PlayEventAction action = new PlayEventAction(self);
         action.appendEffect(
-                new RevealCardsFromHandEffect(self, playerId, new HashSet(game.getGameState().getHand(playerId))));
-        int companionCount = Filters.filter(game.getGameState().getHand(playerId), game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION).size();
-        int penalty = companionCount * (PlayConditions.location(game, Keyword.BATTLEGROUND) ? -4 : -3);
-        action.appendEffect(
-                new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, penalty, CardType.MINION));
+                new RevealHandEffect(self, playerId, playerId) {
+                    @Override
+                    protected void cardsRevealed(Collection cards) {
+                        int companionCount = Filters.filter(cards, game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION).size();
+                        int penalty = companionCount * (PlayConditions.location(game, Keyword.BATTLEGROUND) ? -4 : -3);
+                        action.appendEffect(
+                                new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, penalty, CardType.MINION));
+                    }
+                });
         return action;
     }
 }
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/orc/Card11_110.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/orc/Card11_110.java
index b01d73713..84ffb80cd 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/orc/Card11_110.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/orc/Card11_110.java
@@ -5,17 +5,17 @@ import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.actions.PlayEventAction;
 import com.gempukku.lotro.cards.effects.AddBurdenEffect;
 import com.gempukku.lotro.cards.effects.ChoiceEffect;
-import com.gempukku.lotro.cards.effects.RevealAndChooseCardsFromOpponentHandEffect;
+import com.gempukku.lotro.cards.effects.RevealHandEffect;
 import com.gempukku.lotro.common.CardType;
 import com.gempukku.lotro.common.Culture;
 import com.gempukku.lotro.common.Phase;
 import com.gempukku.lotro.common.Side;
-import com.gempukku.lotro.filters.Filters;
 import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.LotroGame;
 import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect;
 import com.gempukku.lotro.logic.timing.Effect;
 
+import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -44,9 +44,9 @@ public class Card11_110 extends AbstractEvent {
         final PlayEventAction action = new PlayEventAction(self);
         final String fpPlayer = game.getGameState().getCurrentPlayerId();
         action.appendEffect(
-                new RevealAndChooseCardsFromOpponentHandEffect(action, playerId, fpPlayer, self, "Opponent's hand", Filters.none, 0, 0) {
+                new RevealHandEffect(self, playerId, fpPlayer) {
                     @Override
-                    protected void cardsSelected(List selectedCards) {
+                    protected void cardsRevealed(Collection cards) {
                         List possibleEffects = new LinkedList();
                         possibleEffects.add(
                                 new ChooseAndDiscardCardsFromHandEffect(action, fpPlayer, false, 1, Side.FREE_PEOPLE, CardType.EVENT) {
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/orc/Card11_135.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/orc/Card11_135.java
index c91ad81cb..89b16f826 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/orc/Card11_135.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/orc/Card11_135.java
@@ -5,9 +5,13 @@ import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.TriggerConditions;
 import com.gempukku.lotro.cards.effects.AddBurdenEffect;
 import com.gempukku.lotro.cards.effects.PreventableEffect;
-import com.gempukku.lotro.cards.effects.RevealCardsFromHandEffect;
+import com.gempukku.lotro.cards.effects.RevealCardsFromYourHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseCardsFromHandEffect;
-import com.gempukku.lotro.common.*;
+import com.gempukku.lotro.common.CardType;
+import com.gempukku.lotro.common.Culture;
+import com.gempukku.lotro.common.Keyword;
+import com.gempukku.lotro.common.Race;
+import com.gempukku.lotro.common.Side;
 import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.LotroGame;
 import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
@@ -63,7 +67,7 @@ public class Card11_135 extends AbstractMinion {
                                         @Override
                                         protected void cardsSelected(LotroGame game, Collection selectedCards) {
                                             subAction.insertEffect(
-                                                    new RevealCardsFromHandEffect(self, playerId, selectedCards));
+                                                    new RevealCardsFromYourHandEffect(self, playerId, selectedCards));
                                         }
                                     };
                                 }
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/wraith/Card11_213.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/wraith/Card11_213.java
index a11180402..57b09fce8 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/wraith/Card11_213.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/wraith/Card11_213.java
@@ -3,9 +3,14 @@ package com.gempukku.lotro.cards.set11.wraith;
 import com.gempukku.lotro.cards.AbstractPermanent;
 import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.effects.PutCardsFromHandBeneathDrawDeckEffect;
-import com.gempukku.lotro.cards.effects.RevealCardsFromHandEffect;
+import com.gempukku.lotro.cards.effects.RevealCardsFromYourHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseCardsFromHandEffect;
-import com.gempukku.lotro.common.*;
+import com.gempukku.lotro.common.CardType;
+import com.gempukku.lotro.common.Culture;
+import com.gempukku.lotro.common.Phase;
+import com.gempukku.lotro.common.Race;
+import com.gempukku.lotro.common.Side;
+import com.gempukku.lotro.common.Zone;
 import com.gempukku.lotro.filters.Filters;
 import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.LotroGame;
@@ -42,7 +47,7 @@ public class Card11_213 extends AbstractPermanent {
                         @Override
                         protected void cardsSelected(LotroGame game, Collection selectedCards) {
                             action.appendCost(
-                                    new RevealCardsFromHandEffect(self, playerId, selectedCards));
+                                    new RevealCardsFromYourHandEffect(self, playerId, selectedCards));
                             for (PhysicalCard selectedCard : selectedCards) {
                                 action.appendCost(
                                         new PutCardsFromHandBeneathDrawDeckEffect(action, playerId, selectedCard));
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/wraith/Card11_215.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/wraith/Card11_215.java
index c222cb3df..355d7a07a 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/wraith/Card11_215.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/wraith/Card11_215.java
@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set11.wraith;
 
 import com.gempukku.lotro.cards.AbstractEvent;
 import com.gempukku.lotro.cards.actions.PlayEventAction;
-import com.gempukku.lotro.cards.effects.RevealCardsFromHandEffect;
+import com.gempukku.lotro.cards.effects.RevealHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
 import com.gempukku.lotro.common.CardType;
 import com.gempukku.lotro.common.Culture;
@@ -15,7 +15,7 @@ import com.gempukku.lotro.game.state.LotroGame;
 import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
 import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
 
-import java.util.HashSet;
+import java.util.Collection;
 
 /**
  * Set: Shadows
@@ -31,18 +31,21 @@ public class Card11_215 extends AbstractEvent {
     }
 
     @Override
-    public PlayEventAction getPlayCardAction(final String playerId, final LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
-        PlayEventAction action = new PlayEventAction(self);
+    public PlayEventAction getPlayCardAction(final String playerId, final LotroGame game, final PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
+        final PlayEventAction action = new PlayEventAction(self);
         action.appendCost(
-                new RevealCardsFromHandEffect(self, playerId, new HashSet(game.getGameState().getHand(playerId))));
-        action.appendEffect(
-                new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId,
-                        new Evaluator() {
-                            @Override
-                            public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard cardAffected) {
-                                return Filters.filter(gameState.getHand(playerId), game.getGameState(), game.getModifiersQuerying(), Culture.WRAITH, CardType.MINION).size();
-                            }
-                        }, Culture.WRAITH, CardType.MINION));
+                new RevealHandEffect(self, playerId, playerId) {
+                    @Override
+                    protected void cardsRevealed(final Collection cards) {
+                        new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId,
+                                new Evaluator() {
+                                    @Override
+                                    public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard cardAffected) {
+                                        return Filters.filter(cards, game.getGameState(), game.getModifiersQuerying(), Culture.WRAITH, CardType.MINION).size();
+                                    }
+                                }, Culture.WRAITH, CardType.MINION);
+                    }
+                });
         return action;
     }
 }
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/moria/Card12_080.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/moria/Card12_080.java
index 3e0182ff5..4a522f00d 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/moria/Card12_080.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/moria/Card12_080.java
@@ -2,8 +2,13 @@ package com.gempukku.lotro.cards.set12.moria;
 
 import com.gempukku.lotro.cards.AbstractAttachable;
 import com.gempukku.lotro.cards.TriggerConditions;
-import com.gempukku.lotro.cards.effects.RevealAndChooseCardsFromOpponentHandEffect;
-import com.gempukku.lotro.common.*;
+import com.gempukku.lotro.cards.effects.RevealHandEffect;
+import com.gempukku.lotro.common.CardType;
+import com.gempukku.lotro.common.Culture;
+import com.gempukku.lotro.common.Filterable;
+import com.gempukku.lotro.common.Keyword;
+import com.gempukku.lotro.common.PossessionClass;
+import com.gempukku.lotro.common.Side;
 import com.gempukku.lotro.filters.Filters;
 import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.LotroGame;
@@ -54,9 +59,9 @@ public class Card12_080 extends AbstractAttachable {
         if (TriggerConditions.played(game, effectResult, self)) {
             final RequiredTriggerAction action = new RequiredTriggerAction(self);
             action.appendEffect(
-                    new RevealAndChooseCardsFromOpponentHandEffect(action, self.getOwner(), game.getGameState().getCurrentPlayerId(), self, "Free Peoples player hand", Filters.none, 0, 0) {
+                    new RevealHandEffect(self, self.getOwner(), game.getGameState().getCurrentPlayerId()) {
                         @Override
-                        protected void cardsSelected(List selectedCards) {
+                        protected void cardsRevealed(Collection cards) {
                             final Collection cardsToDiscard = Filters.filter(game.getGameState().getHand(game.getGameState().getCurrentPlayerId()), game.getGameState(), game.getModifiersQuerying(), Side.FREE_PEOPLE, Filters.or(Filters.printedTwilightCost(1), Filters.printedTwilightCost(0)));
                             action.appendEffect(
                                     new DiscardCardsFromHandEffect(self, game.getGameState().getCurrentPlayerId(), cardsToDiscard, true));
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/orc/Card12_105.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/orc/Card12_105.java
index 0d17c8a0a..932f8bbcc 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/orc/Card12_105.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/orc/Card12_105.java
@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set12.orc;
 
 import com.gempukku.lotro.cards.AbstractMinion;
 import com.gempukku.lotro.cards.PlayConditions;
-import com.gempukku.lotro.cards.effects.RevealCardsFromHandEffect;
+import com.gempukku.lotro.cards.effects.RevealHandEffect;
 import com.gempukku.lotro.cards.effects.SelfExertEffect;
 import com.gempukku.lotro.common.Culture;
 import com.gempukku.lotro.common.Keyword;
@@ -15,8 +15,8 @@ import com.gempukku.lotro.logic.actions.ActivateCardAction;
 import com.gempukku.lotro.logic.effects.AddTwilightEffect;
 import com.gempukku.lotro.logic.timing.Action;
 
+import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
 
 /**
@@ -38,17 +38,21 @@ public class Card12_105 extends AbstractMinion {
     }
 
     @Override
-    protected List getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
+    protected List getExtraPhaseActions(final String playerId, final LotroGame game, final PhysicalCard self) {
         if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)
                 && PlayConditions.canSelfExert(self, game)) {
-            ActivateCardAction action = new ActivateCardAction(self);
+            final ActivateCardAction action = new ActivateCardAction(self);
             action.appendCost(
                     new SelfExertEffect(action, self));
             action.appendCost(
-                    new RevealCardsFromHandEffect(self, playerId, new HashSet(game.getGameState().getHand(playerId))));
-            int count = Filters.filter(game.getGameState().getHand(playerId), game.getGameState(), game.getModifiersQuerying(), Culture.ORC, Race.TROLL).size();
-            action.appendEffect(
-                    new AddTwilightEffect(self, count));
+                    new RevealHandEffect(self, playerId, playerId) {
+                        @Override
+                        protected void cardsRevealed(Collection cards) {
+                            int count = Filters.filter(game.getGameState().getHand(playerId), game.getGameState(), game.getModifiersQuerying(), Culture.ORC, Race.TROLL).size();
+                            action.appendEffect(
+                                    new AddTwilightEffect(self, count));
+                        }
+                    });
             return Collections.singletonList(action);
         }
         return null;
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/wraith/Card12_183.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/wraith/Card12_183.java
index dd2378891..8b3f1a190 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/wraith/Card12_183.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/wraith/Card12_183.java
@@ -2,9 +2,13 @@ package com.gempukku.lotro.cards.set12.wraith;
 
 import com.gempukku.lotro.cards.AbstractMinion;
 import com.gempukku.lotro.cards.TriggerConditions;
-import com.gempukku.lotro.cards.effects.RevealCardEffect;
+import com.gempukku.lotro.cards.effects.RevealCardsFromYourHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
-import com.gempukku.lotro.common.*;
+import com.gempukku.lotro.common.CardType;
+import com.gempukku.lotro.common.Culture;
+import com.gempukku.lotro.common.Keyword;
+import com.gempukku.lotro.common.Names;
+import com.gempukku.lotro.common.Race;
 import com.gempukku.lotro.filters.Filters;
 import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.GameState;
@@ -45,7 +49,7 @@ public class Card12_183 extends AbstractMinion {
                 && !playerId.equals(game.getGameState().getCurrentPlayerId())) {
             OptionalTriggerAction action = new OptionalTriggerAction(self);
             action.appendCost(
-                    new RevealCardEffect(self, self));
+                    new RevealCardsFromYourHandEffect(self, playerId, self));
             action.appendEffect(
                     new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Filters.ringBearer));
             return Collections.singletonList(action);
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/gandalf/Card13_036.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/gandalf/Card13_036.java
index 1b2a47e46..f2bf87208 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/gandalf/Card13_036.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/gandalf/Card13_036.java
@@ -5,11 +5,15 @@ import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.TriggerConditions;
 import com.gempukku.lotro.cards.actions.AttachPermanentAction;
 import com.gempukku.lotro.cards.effects.AddBurdenEffect;
-import com.gempukku.lotro.cards.effects.RevealAndChooseCardsFromOpponentHandEffect;
+import com.gempukku.lotro.cards.effects.RevealHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseOpponentEffect;
 import com.gempukku.lotro.cards.modifiers.ResistanceModifier;
-import com.gempukku.lotro.common.*;
+import com.gempukku.lotro.common.CardType;
+import com.gempukku.lotro.common.Culture;
+import com.gempukku.lotro.common.Filterable;
+import com.gempukku.lotro.common.Phase;
+import com.gempukku.lotro.common.PossessionClass;
 import com.gempukku.lotro.filters.Filters;
 import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.LotroGame;
@@ -18,6 +22,7 @@ import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect;
 import com.gempukku.lotro.logic.modifiers.Modifier;
 import com.gempukku.lotro.logic.timing.EffectResult;
 
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
@@ -73,9 +78,9 @@ public class Card13_036 extends AbstractAttachableFPPossession {
                         @Override
                         protected void opponentChosen(final String opponentId) {
                             action.appendEffect(
-                                    new RevealAndChooseCardsFromOpponentHandEffect(action, playerId, opponentId, self, "Opponent's hand", Filters.none, 0, 0) {
+                                    new RevealHandEffect(self, playerId, opponentId) {
                                         @Override
-                                        protected void cardsSelected(List selectedCards) {
+                                        protected void cardsRevealed(Collection cards) {
                                             action.appendEffect(
                                                     new ChooseAndDiscardCardsFromHandEffect(action, opponentId, true, 1, CardType.MINION));
                                         }
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/men/Card13_084.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/men/Card13_084.java
index c2df2552b..50378bfaa 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/men/Card13_084.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/men/Card13_084.java
@@ -3,10 +3,14 @@ package com.gempukku.lotro.cards.set13.men;
 import com.gempukku.lotro.cards.AbstractMinion;
 import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.TriggerConditions;
-import com.gempukku.lotro.cards.effects.RevealCardEffect;
+import com.gempukku.lotro.cards.effects.RevealCardsFromYourHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
 import com.gempukku.lotro.cards.modifiers.conditions.NotCondition;
-import com.gempukku.lotro.common.*;
+import com.gempukku.lotro.common.CardType;
+import com.gempukku.lotro.common.Culture;
+import com.gempukku.lotro.common.Keyword;
+import com.gempukku.lotro.common.Race;
+import com.gempukku.lotro.common.Side;
 import com.gempukku.lotro.filters.Filters;
 import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.LotroGame;
@@ -48,7 +52,7 @@ public class Card13_084 extends AbstractMinion {
                 && !playerId.equals(game.getGameState().getCurrentPlayerId())) {
             OptionalTriggerAction action = new OptionalTriggerAction(self);
             action.appendCost(
-                    new RevealCardEffect(self, self));
+                    new RevealCardsFromYourHandEffect(self, playerId, self));
             action.appendEffect(
                     new ChooseAndExertCharactersEffect(action, game.getGameState().getCurrentPlayerId(), 1, 1, CardType.COMPANION));
             return Collections.singletonList(action);
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/orc/Card13_112.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/orc/Card13_112.java
index 302a10ecc..362364c25 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/orc/Card13_112.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/orc/Card13_112.java
@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractMinion;
 import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.TriggerConditions;
 import com.gempukku.lotro.cards.effects.AddBurdenEffect;
-import com.gempukku.lotro.cards.effects.RevealCardEffect;
+import com.gempukku.lotro.cards.effects.RevealCardsFromYourHandEffect;
 import com.gempukku.lotro.common.CardType;
 import com.gempukku.lotro.common.Culture;
 import com.gempukku.lotro.common.Keyword;
@@ -56,7 +56,7 @@ public class Card13_112 extends AbstractMinion {
                 && !playerId.equals(game.getGameState().getCurrentPlayerId())) {
             OptionalTriggerAction action = new OptionalTriggerAction(self);
             action.appendCost(
-                    new RevealCardEffect(self, self));
+                    new RevealCardsFromYourHandEffect(self, playerId, self));
             action.appendEffect(
                     new AddBurdenEffect(self.getOwner(), self, 1));
             return Collections.singletonList(action);
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/orc/Card17_069.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/orc/Card17_069.java
index 1bb77bfa4..e51c94ce9 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/orc/Card17_069.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/orc/Card17_069.java
@@ -2,17 +2,22 @@ package com.gempukku.lotro.cards.set17.orc;
 
 import com.gempukku.lotro.cards.AbstractPermanent;
 import com.gempukku.lotro.cards.TriggerConditions;
-import com.gempukku.lotro.cards.effects.RevealCardsFromHandEffect;
+import com.gempukku.lotro.cards.effects.RevealHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseAndPutCardsFromHandBeneathDrawDeckEffect;
-import com.gempukku.lotro.common.*;
+import com.gempukku.lotro.common.CardType;
+import com.gempukku.lotro.common.Culture;
+import com.gempukku.lotro.common.Race;
+import com.gempukku.lotro.common.Side;
+import com.gempukku.lotro.common.Zone;
 import com.gempukku.lotro.filters.Filters;
 import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.LotroGame;
+import com.gempukku.lotro.logic.GameUtils;
 import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
 import com.gempukku.lotro.logic.timing.EffectResult;
 
+import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
 
 /**
@@ -30,13 +35,17 @@ public class Card17_069 extends AbstractPermanent {
     }
 
     @Override
-    public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
+    public List getRequiredAfterTriggers(final LotroGame game, EffectResult effectResult, PhysicalCard self) {
         if (TriggerConditions.winsSkirmish(game, effectResult, Culture.ORC, Race.ORC, Filters.mounted)) {
-            RequiredTriggerAction action = new RequiredTriggerAction(self);
+            final RequiredTriggerAction action = new RequiredTriggerAction(self);
             action.appendEffect(
-                    new RevealCardsFromHandEffect(self, game.getGameState().getCurrentPlayerId(), new HashSet(game.getGameState().getHand(game.getGameState().getCurrentPlayerId()))));
-            action.appendEffect(
-                    new ChooseAndPutCardsFromHandBeneathDrawDeckEffect(action, game.getGameState().getCurrentPlayerId(), 2, Side.FREE_PEOPLE));
+                    new RevealHandEffect(self, self.getOwner(), GameUtils.getFreePeoplePlayer(game)) {
+                        @Override
+                        protected void cardsRevealed(Collection cards) {
+                            action.appendEffect(
+                                    new ChooseAndPutCardsFromHandBeneathDrawDeckEffect(action, game.getGameState().getCurrentPlayerId(), 2, Filters.in(cards), Side.FREE_PEOPLE));
+                        }
+                    });
             return Collections.singletonList(action);
         }
         return null;
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/orc/Card17_079.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/orc/Card17_079.java
index 118a3982c..51ab67a34 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/orc/Card17_079.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/orc/Card17_079.java
@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set17.orc;
 import com.gempukku.lotro.cards.AbstractMinion;
 import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.TriggerConditions;
-import com.gempukku.lotro.cards.effects.RevealCardEffect;
+import com.gempukku.lotro.cards.effects.RevealCardsFromYourHandEffect;
 import com.gempukku.lotro.cards.effects.SelfDiscardEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseCardsFromHandEffect;
 import com.gempukku.lotro.common.CardType;
@@ -39,7 +39,7 @@ public class Card17_079 extends AbstractMinion {
     }
 
     @Override
-    public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) {
+    public List getOptionalAfterTriggers(final String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) {
         if (TriggerConditions.startOfPhase(game, effectResult, Phase.SKIRMISH)
                 && PlayConditions.canSpot(game, self, Filters.inSkirmish)
                 && Filters.filter(game.getGameState().getHand(playerId), game.getGameState(), game.getModifiersQuerying(), Culture.ORC, CardType.CONDITION).size() > 0) {
@@ -50,7 +50,7 @@ public class Card17_079 extends AbstractMinion {
                         protected void cardsSelected(LotroGame game, Collection selectedCards) {
                             for (PhysicalCard selectedCard : selectedCards) {
                                 action.appendCost(
-                                        new RevealCardEffect(self, selectedCard));
+                                        new RevealCardsFromYourHandEffect(self, playerId, selectedCard));
                             }
                         }
                     });
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gandalf/Card2_021.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gandalf/Card2_021.java
index 7a8167c36..3cb4eb620 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gandalf/Card2_021.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gandalf/Card2_021.java
@@ -1,7 +1,7 @@
 package com.gempukku.lotro.cards.set2.gandalf;
 
 import com.gempukku.lotro.cards.AbstractAlly;
-import com.gempukku.lotro.cards.modifiers.OpponentsCantLookOrRevealCardsFromHand;
+import com.gempukku.lotro.cards.modifiers.ShadowPlayersCantLookAtYourHandModifier;
 import com.gempukku.lotro.common.Block;
 import com.gempukku.lotro.common.Culture;
 import com.gempukku.lotro.common.Race;
@@ -34,6 +34,6 @@ public class Card2_021 extends AbstractAlly {
 
     @Override
     public Modifier getAlwaysOnModifier(LotroGame game, PhysicalCard self) {
-        return new OpponentsCantLookOrRevealCardsFromHand(self, self.getOwner());
+        return new ShadowPlayersCantLookAtYourHandModifier(self, self.getOwner());
     }
 }
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_044.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_044.java
index a4783cbb0..df587c764 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_044.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_044.java
@@ -1,7 +1,7 @@
 package com.gempukku.lotro.cards.set2.isengard;
 
 import com.gempukku.lotro.cards.AbstractPermanent;
-import com.gempukku.lotro.cards.modifiers.OpponentsCantLookOrRevealCardsFromHand;
+import com.gempukku.lotro.cards.modifiers.FPPlayerCantLookAtShadowPlayersHandModifier;
 import com.gempukku.lotro.common.CardType;
 import com.gempukku.lotro.common.Culture;
 import com.gempukku.lotro.common.Side;
@@ -36,6 +36,6 @@ public class Card2_044 extends AbstractPermanent {
 
     @Override
     public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
-        return Collections.singletonList(new OpponentsCantLookOrRevealCardsFromHand(self, null, game.getGameState().getCurrentPlayerId()));
+        return Collections.singletonList(new FPPlayerCantLookAtShadowPlayersHandModifier(self));
     }
 }
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/moria/Card2_070.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/moria/Card2_070.java
index 6f97ad75d..3b25b3d68 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/moria/Card2_070.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/moria/Card2_070.java
@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set2.moria;
 
 import com.gempukku.lotro.cards.AbstractOldEvent;
 import com.gempukku.lotro.cards.actions.PlayEventAction;
-import com.gempukku.lotro.cards.effects.RevealCardEffect;
+import com.gempukku.lotro.cards.effects.RevealCardsFromYourHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseCardsFromHandEffect;
 import com.gempukku.lotro.common.Culture;
@@ -49,7 +49,7 @@ public class Card2_070 extends AbstractOldEvent {
                     @Override
                     protected void cardsSelected(LotroGame game, Collection selectedCards) {
                         action.appendEffect(
-                                new RevealCardEffect(self, selectedCards));
+                                new RevealCardsFromYourHandEffect(self, playerId, selectedCards));
                         int cardsRevealed = selectedCards.size();
                         action.appendEffect(
                                 new ChooseAndPlayCardFromHandEffect(playerId, game, -2 * cardsRevealed, Filters.balrog));
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/moria/Card20_278.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/moria/Card20_278.java
index e23a963c0..8441a3064 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/moria/Card20_278.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/moria/Card20_278.java
@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set20.moria;
 
 import com.gempukku.lotro.cards.AbstractEvent;
 import com.gempukku.lotro.cards.actions.PlayEventAction;
-import com.gempukku.lotro.cards.effects.RevealCardEffect;
+import com.gempukku.lotro.cards.effects.RevealCardsFromYourHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseCardsFromHandEffect;
 import com.gempukku.lotro.common.Culture;
@@ -42,7 +42,7 @@ public class Card20_278 extends AbstractEvent {
                     @Override
                     protected void cardsSelected(LotroGame game, Collection selectedCards) {
                         action.appendEffect(
-                                new RevealCardEffect(self, selectedCards));
+                                new RevealCardsFromYourHandEffect(self, playerId, selectedCards));
                         int cardsRevealed = selectedCards.size();
                         action.appendEffect(
                                 new ChooseAndPlayCardFromHandEffect(playerId, game, -2 * cardsRevealed, Filters.balrog));
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/sauron/Card20_360.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/sauron/Card20_360.java
index 8f7814428..f5db77229 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/sauron/Card20_360.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/sauron/Card20_360.java
@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractMinion;
 import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.TriggerConditions;
 import com.gempukku.lotro.cards.effects.AddBurdenEffect;
-import com.gempukku.lotro.cards.effects.RevealCardEffect;
+import com.gempukku.lotro.cards.effects.RevealCardsFromYourHandEffect;
 import com.gempukku.lotro.cards.effects.SelfExertEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
 import com.gempukku.lotro.cards.modifiers.evaluator.CountActiveEvaluator;
@@ -47,7 +47,7 @@ public class Card20_360 extends AbstractMinion {
                 && !playerId.equals(game.getGameState().getCurrentPlayerId())) {
             OptionalTriggerAction action = new OptionalTriggerAction(self);
             action.appendCost(
-                    new RevealCardEffect(self, self));
+                    new RevealCardsFromYourHandEffect(self, playerId, self));
             action.appendEffect(
                     new AddBurdenEffect(playerId, self, 1));
             return Collections.singletonList(action);
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_162.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_162.java
index 5355e9f21..55555ae62 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_162.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_162.java
@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractOldEvent;
 import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.actions.PlayEventAction;
 import com.gempukku.lotro.cards.effects.PutCardFromDiscardIntoHandEffect;
-import com.gempukku.lotro.cards.effects.RevealCardEffect;
+import com.gempukku.lotro.cards.effects.RevealHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseCardsFromDiscardEffect;
 import com.gempukku.lotro.common.Culture;
 import com.gempukku.lotro.common.Phase;
@@ -38,12 +38,16 @@ public class Card4_162 extends AbstractOldEvent {
     }
 
     @Override
-    public PlayEventAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
+    public PlayEventAction getPlayCardAction(final String playerId, final LotroGame game, final PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
         final PlayEventAction action = new PlayEventAction(self);
         action.appendCost(
-                new RevealCardEffect(self, Filters.filter(game.getGameState().getHand(playerId), game.getGameState(), game.getModifiersQuerying(), Filters.not(self))));
-        action.appendCost(
-                new DiscardCardsFromHandEffect(self, playerId, Filters.filter(game.getGameState().getHand(playerId), game.getGameState(), game.getModifiersQuerying(), Side.FREE_PEOPLE), false));
+                new RevealHandEffect(self, playerId, playerId) {
+                    @Override
+                    protected void cardsRevealed(Collection cards) {
+                        action.appendCost(
+                                new DiscardCardsFromHandEffect(self, playerId, Filters.filter(cards, game.getGameState(), game.getModifiersQuerying(), Side.FREE_PEOPLE), false));
+                    }
+                });
         action.appendEffect(
                 new ChooseCardsFromDiscardEffect(playerId, 1, 1, Culture.ISENGARD) {
                     @Override
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/shire/Card6_110.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/shire/Card6_110.java
index 923735a47..5867c0460 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/shire/Card6_110.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/shire/Card6_110.java
@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set6.shire;
 import com.gempukku.lotro.cards.AbstractEvent;
 import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.actions.PlayEventAction;
-import com.gempukku.lotro.cards.effects.RevealAndChooseCardsFromOpponentHandEffect;
+import com.gempukku.lotro.cards.effects.RevealHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseOpponentEffect;
 import com.gempukku.lotro.common.CardType;
 import com.gempukku.lotro.common.Culture;
@@ -14,8 +14,8 @@ import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.LotroGame;
 import com.gempukku.lotro.logic.effects.ChooseAndWoundCharactersEffect;
 
+import java.util.Collection;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
 
 /**
@@ -47,11 +47,11 @@ public class Card6_110 extends AbstractEvent {
                     @Override
                     protected void opponentChosen(final String opponentId) {
                         action.insertEffect(
-                                new RevealAndChooseCardsFromOpponentHandEffect(action, playerId, opponentId, self, "Opponent's hand", Filters.none, 0, 0) {
+                                new RevealHandEffect(self, playerId, opponentId) {
                                     @Override
-                                    protected void cardsSelected(List selectedCards) {
+                                    protected void cardsRevealed(Collection cards) {
                                         Set cultures = new HashSet();
-                                        for (PhysicalCard cardInHand : game.getGameState().getHand(opponentId))
+                                        for (PhysicalCard cardInHand : cards)
                                             cultures.add(cardInHand.getBlueprint().getCulture());
 
                                         action.appendEffect(
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gollum/Card7_066.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gollum/Card7_066.java
index 31e8501a7..7befb0d79 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gollum/Card7_066.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gollum/Card7_066.java
@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set7.gollum;
 import com.gempukku.lotro.cards.AbstractEvent;
 import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.actions.PlayEventAction;
-import com.gempukku.lotro.cards.effects.RevealAndChooseCardsFromOpponentHandEffect;
+import com.gempukku.lotro.cards.effects.RevealHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseOpponentEffect;
 import com.gempukku.lotro.common.Culture;
@@ -14,8 +14,8 @@ import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.LotroGame;
 import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect;
 
+import java.util.Collection;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
 
 /**
@@ -48,11 +48,11 @@ public class Card7_066 extends AbstractEvent {
                     @Override
                     protected void opponentChosen(final String opponentId) {
                         action.insertEffect(
-                                new RevealAndChooseCardsFromOpponentHandEffect(action, playerId, opponentId, self, "Opponent's hand", Filters.none, 0, 0) {
+                                new RevealHandEffect(self, playerId, opponentId) {
                                     @Override
-                                    protected void cardsSelected(List selectedCards) {
+                                    protected void cardsRevealed(Collection cards) {
                                         Set cultures = new HashSet();
-                                        for (PhysicalCard physicalCard : game.getGameState().getHand(opponentId))
+                                        for (PhysicalCard physicalCard : cards)
                                             cultures.add(physicalCard.getBlueprint().getCulture());
 
                                         int cultureCount = cultures.size();
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/shire/Card8_109.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/shire/Card8_109.java
index 8a60b0dc8..bc583fff1 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/shire/Card8_109.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/shire/Card8_109.java
@@ -4,9 +4,14 @@ import com.gempukku.lotro.cards.AbstractPermanent;
 import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.effects.AddBurdenEffect;
 import com.gempukku.lotro.cards.effects.PutCardsFromHandBeneathDrawDeckEffect;
-import com.gempukku.lotro.cards.effects.RevealCardsFromHandEffect;
+import com.gempukku.lotro.cards.effects.RevealCardsFromYourHandEffect;
 import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
-import com.gempukku.lotro.common.*;
+import com.gempukku.lotro.common.CardType;
+import com.gempukku.lotro.common.Culture;
+import com.gempukku.lotro.common.Phase;
+import com.gempukku.lotro.common.Race;
+import com.gempukku.lotro.common.Side;
+import com.gempukku.lotro.common.Zone;
 import com.gempukku.lotro.filters.Filters;
 import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.LotroGame;
@@ -14,7 +19,6 @@ import com.gempukku.lotro.logic.actions.ActivateCardAction;
 import com.gempukku.lotro.logic.timing.Action;
 
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
 
 /**
@@ -41,7 +45,7 @@ public class Card8_109 extends AbstractPermanent {
             action.appendCost(
                     new AddBurdenEffect(self.getOwner(), self, 1));
             action.appendEffect(
-                    new RevealCardsFromHandEffect(self, playerId, new HashSet(game.getGameState().getHand(playerId))));
+                    new RevealCardsFromYourHandEffect(self, playerId, game.getGameState().getHand(playerId)));
             action.appendEffect(
                     new PutCardsFromHandBeneathDrawDeckEffect(action, playerId, Side.FREE_PEOPLE));
             return Collections.singletonList(action);
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set9/gollum/Card9_029.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set9/gollum/Card9_029.java
index d31bfb26f..1773e9ff2 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set9/gollum/Card9_029.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set9/gollum/Card9_029.java
@@ -3,10 +3,15 @@ package com.gempukku.lotro.cards.set9.gollum;
 import com.gempukku.lotro.cards.AbstractPermanent;
 import com.gempukku.lotro.cards.PlayConditions;
 import com.gempukku.lotro.cards.effects.PutCardsFromHandBeneathDrawDeckEffect;
-import com.gempukku.lotro.cards.effects.RevealCardsFromHandEffect;
+import com.gempukku.lotro.cards.effects.RevealCardsFromYourHandEffect;
 import com.gempukku.lotro.cards.effects.SelfDiscardEffect;
 import com.gempukku.lotro.cards.modifiers.conditions.LocationCondition;
-import com.gempukku.lotro.common.*;
+import com.gempukku.lotro.common.CardType;
+import com.gempukku.lotro.common.Culture;
+import com.gempukku.lotro.common.Keyword;
+import com.gempukku.lotro.common.Phase;
+import com.gempukku.lotro.common.Side;
+import com.gempukku.lotro.common.Zone;
 import com.gempukku.lotro.filters.Filters;
 import com.gempukku.lotro.game.PhysicalCard;
 import com.gempukku.lotro.game.state.LotroGame;
@@ -45,7 +50,7 @@ public class Card9_029 extends AbstractPermanent {
                 && PlayConditions.canSpot(game, Filters.gollum)) {
             ActivateCardAction action = new ActivateCardAction(self);
             action.appendEffect(
-                    new RevealCardsFromHandEffect(self, playerId, new LinkedList(game.getGameState().getHand(playerId))));
+                    new RevealCardsFromYourHandEffect(self, playerId, new LinkedList(game.getGameState().getHand(playerId))));
             action.appendEffect(
                     new PutCardsFromHandBeneathDrawDeckEffect(action, playerId, Side.SHADOW));
             action.appendEffect(
diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java
index 76164d16d..5a9c9fa81 100644
--- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java
+++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java
@@ -1,6 +1,17 @@
 package com.gempukku.lotro.filters;
 
-import com.gempukku.lotro.common.*;
+import com.gempukku.lotro.common.Block;
+import com.gempukku.lotro.common.CardType;
+import com.gempukku.lotro.common.Culture;
+import com.gempukku.lotro.common.Filterable;
+import com.gempukku.lotro.common.Keyword;
+import com.gempukku.lotro.common.Names;
+import com.gempukku.lotro.common.PossessionClass;
+import com.gempukku.lotro.common.Race;
+import com.gempukku.lotro.common.Side;
+import com.gempukku.lotro.common.Signet;
+import com.gempukku.lotro.common.Token;
+import com.gempukku.lotro.common.Zone;
 import com.gempukku.lotro.game.CompletePhysicalCardVisitor;
 import com.gempukku.lotro.game.LotroCardBlueprint;
 import com.gempukku.lotro.game.PhysicalCard;
@@ -14,7 +25,14 @@ import com.gempukku.lotro.logic.modifiers.Condition;
 import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
 import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
 
-import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 public class Filters {
     private static final Map _typeFilterMap = new HashMap();
@@ -754,7 +772,7 @@ public class Filters {
         };
     }
 
-    public static Filter in(final Collection cards) {
+    public static Filter in(final Collection cards) {
         final Set cardIds = new HashSet();
         for (PhysicalCard card : cards)
             cardIds.add(card.getCardId());
diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/GameUtils.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/GameUtils.java
index 2551fcd36..f433a8f40 100644
--- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/GameUtils.java
+++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/GameUtils.java
@@ -131,7 +131,7 @@ public class GameUtils {
             return sb.substring(0, sb.length() - 2);
     }
 
-    public static String getAppendedNames(Collection cards) {
+    public static String getAppendedNames(Collection cards) {
         StringBuilder sb = new StringBuilder();
         for (PhysicalCard card : cards)
             sb.append(GameUtils.getCardLink(card) + ", ");
diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/decisions/ArbitraryCardsSelectionDecision.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/decisions/ArbitraryCardsSelectionDecision.java
index 618422d7b..a6c70c538 100644
--- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/decisions/ArbitraryCardsSelectionDecision.java
+++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/decisions/ArbitraryCardsSelectionDecision.java
@@ -7,20 +7,20 @@ import java.util.LinkedList;
 import java.util.List;
 
 public abstract class ArbitraryCardsSelectionDecision extends AbstractAwaitingDecision {
-    private Collection _physicalCards;
-    private Collection _selectable;
+    private Collection _physicalCards;
+    private Collection _selectable;
     private int _minimum;
     private int _maximum;
 
-    public ArbitraryCardsSelectionDecision(int id, String text, Collection physicalCard) {
+    public ArbitraryCardsSelectionDecision(int id, String text, Collection physicalCard) {
         this(id, text, physicalCard, 0, physicalCard.size());
     }
 
-    public ArbitraryCardsSelectionDecision(int id, String text, Collection physicalCards, int minimum, int maximum) {
+    public ArbitraryCardsSelectionDecision(int id, String text, Collection physicalCards, int minimum, int maximum) {
         this(id, text, physicalCards, physicalCards, minimum, maximum);
     }
 
-    public ArbitraryCardsSelectionDecision(int id, String text, Collection physicalCards, Collection selectable, int minimum, int maximum) {
+    public ArbitraryCardsSelectionDecision(int id, String text, Collection physicalCards, Collection selectable, int minimum, int maximum) {
         super(id, text, AwaitingDecisionType.ARBITRARY_CARDS);
         _physicalCards = physicalCards;
         _selectable = selectable;
@@ -33,7 +33,7 @@ public abstract class ArbitraryCardsSelectionDecision extends AbstractAwaitingDe
         setParam("selectable", getSelectable(physicalCards, selectable));
     }
 
-    private String[] getSelectable(Collection physicalCards, Collection selectable) {
+    private String[] getSelectable(Collection physicalCards, Collection selectable) {
         String[] result = new String[physicalCards.size()];
         int index = 0;
         for (PhysicalCard physicalCard : physicalCards) {
@@ -43,14 +43,14 @@ public abstract class ArbitraryCardsSelectionDecision extends AbstractAwaitingDe
         return result;
     }
 
-    private String[] getCardIds(Collection physicalCards) {
+    private String[] getCardIds(Collection physicalCards) {
         String[] result = new String[physicalCards.size()];
         for (int i = 0; i < physicalCards.size(); i++)
             result[i] = "temp" + i;
         return result;
     }
 
-    private String[] getBlueprintIds(Collection physicalCards) {
+    private String[] getBlueprintIds(Collection physicalCards) {
         String[] result = new String[physicalCards.size()];
         int index = 0;
         for (PhysicalCard physicalCard : physicalCards) {
diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/AbstractEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/AbstractEffect.java
index 80eafa56e..3c66daf13 100644
--- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/AbstractEffect.java
+++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/AbstractEffect.java
@@ -29,7 +29,7 @@ public abstract class AbstractEffect implements Effect {
         return GameUtils.getAppendedTextNames(cards);
     }
 
-    protected final String getAppendedNames(Collection cards) {
+    protected final String getAppendedNames(Collection cards) {
         return GameUtils.getAppendedNames(cards);
     }