internal override Selection Transition(object input)
        {
            Controller control = Controller.DefaultInstance;

            if (input == null && _state == -1)
                return States[++_state];

            Exception ex = TryValidateInput(input);
            if (ex != null)
                throw ex;

            switch (_state)
            {
                case 0:
                    _player = (Player)input;
                    if (_player != null)
                        control.TileSet = _player.Hand.ToList();
                    return States[++_state];
                case 1:
                    _tile = input as Tile;
                    _player.RemoveFromHand(_tile);
                    _player.AddToHand(control.Deck.Pop());

                    return States[++_state];
                case 2:
                    var space = input as Space;
                    control.PlaceTile(_tile, space, Authority);
                    ++_state;
                    return Controller.DefaultInstance.Activate(_tile);
            }
            throw new UnknownTransitionException("Thieves Guild");
        }