diff --git a/Mage.Server/src/main/java/mage/server/game/GameController.java b/Mage.Server/src/main/java/mage/server/game/GameController.java
index ac095166a8..6257c2ea34 100644
--- a/Mage.Server/src/main/java/mage/server/game/GameController.java
+++ b/Mage.Server/src/main/java/mage/server/game/GameController.java
@@ -138,23 +138,20 @@ public class GameController implements GameCallback {
                                 ChatManager.getInstance().broadcast(chatId, "", event.getMessage(), MessageColor.ORANGE, event.getWithTime());
                                 logger.debug(game.getId() + " " + event.getMessage());
                                 break;
-                            case REVEAL:
-                                revealCards(event.getMessage(), event.getCards());
-                                break;
                             case ERROR:
                                 error(event.getMessage(), event.getException());
                                 break;
                             case INIT_TIMER:
                                 final UUID initPlayerId = event.getPlayerId();
                                 if (initPlayerId == null) {
-                                    throw new IllegalStateException("INIT_TIMER: playerId can't be null");
+                                    throw new MageException("INIT_TIMER: playerId can't be null");
                                 }
                                 createPlayerTimer(event.getPlayerId(), game.getPriorityTime());
                                 break;
                             case RESUME_TIMER:
                                 playerId = event.getPlayerId();
                                 if (playerId == null) {
-                                    throw new IllegalStateException("RESUME_TIMER: playerId can't be null");
+                                    throw new MageException("RESUME_TIMER: playerId can't be null");
                                 }
                                 timer = timers.get(playerId);
                                 if (timer == null) {
@@ -162,7 +159,7 @@ public class GameController implements GameCallback {
                                     if (player != null) {
                                         timer = createPlayerTimer(event.getPlayerId(), player.getPriorityTimeLeft());
                                     } else {
-                                        throw new IllegalStateException("RESUME_TIMER: player can't be null");
+                                        throw new MageException("RESUME_TIMER: player can't be null");
                                     }
                                 }
                                 timer.resume();
@@ -170,11 +167,11 @@ public class GameController implements GameCallback {
                             case PAUSE_TIMER:
                                 playerId = event.getPlayerId();
                                 if (playerId == null) {
-                                    throw new IllegalStateException("PAUSE_TIMER: playerId can't be null");
+                                    throw new MageException("PAUSE_TIMER: playerId can't be null");
                                 }
                                 timer = timers.get(playerId);
                                 if (timer == null) {
-                                    throw new IllegalStateException("PAUSE_TIMER: couldn't find timer for player: " + playerId);
+                                    throw new MageException("PAUSE_TIMER: couldn't find timer for player: " + playerId);
                                 }
                                 timer.pause();
                                 break;
@@ -225,9 +222,6 @@ public class GameController implements GameCallback {
                             case AMOUNT:
                                 amount(event.getPlayerId(), event.getMessage(), event.getMin(), event.getMax());
                                 break;
-                            case LOOK:
-                                lookAtCards(event.getPlayerId(), event.getMessage(), event.getCards());
-                                break;
                             case PERSONAL_MESSAGE:
                                 informPersonal(event.getPlayerId(), event.getMessage());
                                 break;
@@ -592,21 +586,6 @@ public class GameController implements GameCallback {
         });
     }
 
-    private synchronized void revealCards(String name, Cards cards) throws MageException {
-        for (GameSession session: gameSessions.values()) {
-            session.revealCards(name, new CardsView(cards.getCards(game)));
-        }
-    }
-
-    private synchronized void lookAtCards(UUID playerId, final String name, final Cards cards) throws MageException {
-        perform(playerId, new Command() {
-            @Override
-            public void execute(UUID playerId) {
-                getGameSession(playerId).revealCards(name, new CardsView(cards.getCards(game)));
-            }
-        }, false);
-    }
-
     private void informOthers(UUID playerId) throws MageException {
         StringBuilder message = new StringBuilder();
         if (game.getStep() != null) {
diff --git a/Mage.Server/src/main/java/mage/server/game/GameSession.java b/Mage.Server/src/main/java/mage/server/game/GameSession.java
index 54a03de8d7..1eee2b538f 100644
--- a/Mage.Server/src/main/java/mage/server/game/GameSession.java
+++ b/Mage.Server/src/main/java/mage/server/game/GameSession.java
@@ -160,15 +160,6 @@ public class GameSession extends GameWatcher {
         }
     }
 
-    public void revealCards(final String name, final CardsView cardView) {
-        if (!killed) {
-            User user = UserManager.getInstance().getUser(userId);
-            if (user != null) {
-                user.fireCallback(new ClientCallback("gameReveal", game.getId(), new GameClientMessage(cardView, name)));
-            }
-        }
-    }
-
     private synchronized void setupTimeout() {
         if (!useTimeout) {
             return;
@@ -234,7 +225,7 @@ public class GameSession extends GameWatcher {
             list.add(new LookedAtView(entry.getKey(), entry.getValue(), game));
         }
         gameView.setLookedAt(list);
-        game.getState().clearLookedAt();
+        game.getState().clearLookedAt(playerId);
 
         return gameView;
     }
diff --git a/Mage/src/mage/game/Game.java b/Mage/src/mage/game/Game.java
index 0ce2366e99..3ef8fe1431 100644
--- a/Mage/src/mage/game/Game.java
+++ b/Mage/src/mage/game/Game.java
@@ -137,7 +137,6 @@ public interface Game extends MageItem, Serializable {
     void fireSelectTargetEvent(UUID playerId, String message, List<TriggeredAbility> abilities);
     void fireSelectTargetEvent(UUID playerId, String message, List<Permanent> perms, boolean required);
     void fireSelectEvent(UUID playerId, String message);
-    void fireLookAtCardsEvent(UUID playerId, String message, Cards cards);
     void firePriorityEvent(UUID playerId);
     void firePlayManaEvent(UUID playerId, String message);
     void firePlayXManaEvent(UUID playerId, String message);
diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java
index 2a5dd3974c..670a9f265b 100644
--- a/Mage/src/mage/game/GameImpl.java
+++ b/Mage/src/mage/game/GameImpl.java
@@ -1481,14 +1481,6 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
         playerQueryEventSource.target(playerId, message, perms, required);
     }
 
-    @Override
-    public void fireLookAtCardsEvent(UUID playerId, String message, Cards cards) {
-        if (simulation) {
-            return;
-        }
-        playerQueryEventSource.target(playerId, message, cards);
-    }
-
     @Override
     public void fireGetAmountEvent(UUID playerId, String message, int min, int max) {
         if (simulation) {
@@ -1518,7 +1510,6 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
         if (simulation) {
             return;
         }
-//        state.addMessage(message);
         fireInformEvent(message);
     }
 
diff --git a/Mage/src/mage/game/GameState.java b/Mage/src/mage/game/GameState.java
index 14e4ac659b..94046ad21a 100644
--- a/Mage/src/mage/game/GameState.java
+++ b/Mage/src/mage/game/GameState.java
@@ -29,21 +29,35 @@
 package mage.game;
 
 import java.io.Serializable;
-import java.util.*;
-import mage.constants.Zone;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
 import mage.MageObject;
-import mage.abilities.*;
+import mage.abilities.Abilities;
+import mage.abilities.AbilitiesImpl;
+import mage.abilities.Ability;
+import mage.abilities.ActivatedAbility;
+import mage.abilities.DelayedTriggeredAbilities;
+import mage.abilities.DelayedTriggeredAbility;
+import mage.abilities.Mode;
+import mage.abilities.SpecialActions;
+import mage.abilities.StaticAbility;
+import mage.abilities.TriggeredAbilities;
+import mage.abilities.TriggeredAbility;
 import mage.abilities.effects.ContinuousEffect;
 import mage.abilities.effects.ContinuousEffects;
 import mage.abilities.effects.Effect;
 import mage.cards.Card;
 import mage.cards.SplitCard;
 import mage.choices.Choice;
+import mage.constants.Zone;
 import mage.game.combat.Combat;
 import mage.game.combat.CombatGroup;
 import mage.game.command.Command;
 import mage.game.command.CommandObject;
-import mage.game.command.Emblem;
 import mage.game.events.GameEvent;
 import mage.game.permanent.Battlefield;
 import mage.game.permanent.Permanent;
@@ -59,7 +73,6 @@ import mage.util.Copyable;
 import mage.watchers.Watcher;
 import mage.watchers.Watchers;
 
-
 /**
 *
 * @author BetaSteward_at_googlemail.com
@@ -86,7 +99,6 @@ public class GameState implements Serializable, Copyable<GameState> {
     private int turnNum = 1;
     private boolean gameOver;
     private boolean paused;
-//    private List<String> messages = new ArrayList<String>();
     private ContinuousEffects effects;
     private TriggeredAbilities triggers;
     private List<TriggeredAbility> triggered = new ArrayList<TriggeredAbility>();
@@ -310,15 +322,15 @@ public class GameState implements Serializable, Copyable<GameState> {
 
     public LookedAt getLookedAt(UUID playerId) {
         if (lookedAt.get(playerId) == null) {
-            LookedAt l = new LookedAt();
-            lookedAt.put(playerId, l);
-            return l;
+            LookedAt lookedAtCards = new LookedAt();
+            lookedAt.put(playerId, lookedAtCards);
+            return lookedAtCards;
         }
         return lookedAt.get(playerId);
     }
 
-    public void clearLookedAt() {
-        lookedAt.clear();
+    public void clearLookedAt(UUID playerId) {
+        lookedAt.remove(playerId);
     }
 
     public Turn getTurn() {
diff --git a/Mage/src/mage/game/events/PlayerQueryEvent.java b/Mage/src/mage/game/events/PlayerQueryEvent.java
index c400e52c17..bb6afd44ba 100644
--- a/Mage/src/mage/game/events/PlayerQueryEvent.java
+++ b/Mage/src/mage/game/events/PlayerQueryEvent.java
@@ -28,6 +28,12 @@
 
 package mage.game.events;
 
+import java.io.Serializable;
+import java.util.EventObject;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
 import mage.abilities.Ability;
 import mage.abilities.ActivatedAbility;
 import mage.abilities.TriggeredAbility;
@@ -35,9 +41,6 @@ import mage.cards.Card;
 import mage.cards.Cards;
 import mage.game.permanent.Permanent;
 
-import java.io.Serializable;
-import java.util.*;
-
 /**
  *
  * @author BetaSteward_at_googlemail.com
@@ -45,7 +48,7 @@ import java.util.*;
 public class PlayerQueryEvent extends EventObject implements ExternalEvent, Serializable {
 
     public enum QueryType {
-        ASK, CHOOSE, CHOOSE_ABILITY, CHOOSE_MODE, PICK_TARGET, PICK_ABILITY, SELECT, PLAY_MANA, PLAY_X_MANA, AMOUNT, LOOK, PICK_CARD, CONSTRUCT, CHOOSE_PILE, PERSONAL_MESSAGE
+        ASK, CHOOSE, CHOOSE_ABILITY, CHOOSE_MODE, PICK_TARGET, PICK_ABILITY, SELECT, PLAY_MANA, PLAY_X_MANA, AMOUNT, PICK_CARD, CONSTRUCT, CHOOSE_PILE, PERSONAL_MESSAGE
     }
 
     private String message;
@@ -191,10 +194,6 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri
         return new PlayerQueryEvent(playerId, message, null, null, null, null, QueryType.AMOUNT, min, max, false);
     }
 
-    public static PlayerQueryEvent lookEvent(UUID playerId, String message, Cards cards) {
-        return new PlayerQueryEvent(playerId, message, null, null, null, cards, QueryType.LOOK, 0, 0, false);
-    }
-
     public static PlayerQueryEvent pickCard(UUID playerId, String message, List<Card> booster, int time) {
         return new PlayerQueryEvent(playerId, message, booster, QueryType.PICK_CARD, time);
     }
diff --git a/Mage/src/mage/game/events/PlayerQueryEventSource.java b/Mage/src/mage/game/events/PlayerQueryEventSource.java
index 57e07411a5..bfebc0d6f1 100644
--- a/Mage/src/mage/game/events/PlayerQueryEventSource.java
+++ b/Mage/src/mage/game/events/PlayerQueryEventSource.java
@@ -82,10 +82,6 @@ public class PlayerQueryEventSource implements EventSource<PlayerQueryEvent>, Se
         dispatcher.fireEvent(PlayerQueryEvent.targetEvent(playerId, message, cards, required, options));
     }
 
-    public void target(UUID playerId, String message, Cards cards) {
-        dispatcher.fireEvent(PlayerQueryEvent.lookEvent(playerId, message, cards));
-    }
-
     public void target(UUID playerId, String message, List<TriggeredAbility> abilities) {
         dispatcher.fireEvent(PlayerQueryEvent.targetEvent(playerId, message, abilities));
     }
diff --git a/Mage/src/mage/game/events/TableEvent.java b/Mage/src/mage/game/events/TableEvent.java
index 6d6637b422..a359155095 100644
--- a/Mage/src/mage/game/events/TableEvent.java
+++ b/Mage/src/mage/game/events/TableEvent.java
@@ -28,6 +28,9 @@
 
 package mage.game.events;
 
+import java.io.Serializable;
+import java.util.EventObject;
+import java.util.UUID;
 import mage.cards.Cards;
 import mage.cards.decks.Deck;
 import mage.game.Game;
@@ -35,10 +38,6 @@ import mage.game.draft.Draft;
 import mage.game.match.MatchOptions;
 import mage.game.tournament.TournamentPairing;
 
-import java.io.Serializable;
-import java.util.EventObject;
-import java.util.UUID;
-
 /**
  *
  * @author BetaSteward_at_googlemail.com
diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java
index 6413664e51..171a955f12 100644
--- a/Mage/src/mage/players/PlayerImpl.java
+++ b/Mage/src/mage/players/PlayerImpl.java
@@ -977,13 +977,12 @@ public abstract class PlayerImpl<T extends PlayerImpl<T>> implements Player, Ser
     @Override
     public void revealCards(String name, Cards cards, Game game) {
         game.getState().getRevealed().add(name, cards);
-//        game.fireRevealCardsEvent(this.name + " revealed", cards);
     }
 
     @Override
     public void lookAtCards(String name, Cards cards, Game game) {
         game.getState().getLookedAt(this.playerId).add(name, cards);
-        game.fireLookAtCardsEvent(playerId, this.name + " looking at", cards);
+        game.fireUpdatePlayersEvent();
     }
 
     @Override