internal void player_GainInn(Player player, ref Players.CardGainEventArgs e)
		{
			CardCollection actionCards = player.DiscardPile.LookThrough(c => (c.Category & Cards.Category.Action) == Cards.Category.Action);
			Choice choice = new Choice("Choose cards to reveal and shuffle into your deck", this, actionCards, player, false, 0, actionCards.Count);
			ChoiceResult result = player.MakeChoice(choice);

			// We lose track of Inn if we put it on top of the deck and shuffle
			if (result.Cards.Contains(this))
				e.IsLostTrackOf = true;

			player.AddCardsInto(DeckLocation.Revealed, player.DiscardPile.Retrieve(player, c => result.Cards.Contains(c)));
			player.AddCardsToDeck(player.Revealed.Retrieve(player, c => result.Cards.Contains(c)), DeckPosition.Top);
			player.ShuffleDrawPile();

			e.HandledBy.Add(TypeClass.Inn);

			// Clear out the Event Triggers -- this only happens when its Gained, so we don't care any more
			foreach (Player playerLoop in _CardGainedHandlers.Keys)
				playerLoop.CardGained -= _CardGainedHandlers[playerLoop];
			_CardGainedHandlers.Clear();
		}