@Override
	public boolean okMessage(final Environmental myHost, final CMMsg msg)
	{
		// In this case, we use the instance of an event to trigger
		// the initial filling of the deck with cards, since, once
		// this object is capable of handling events, it must already
		// be "in the world" and ready to receive cards.
		if((!alreadyFilled)&&(owner()!=null))
			fillInTheDeck();

		// This handler also checks to see if anyone is saying "shuffle"
		// directly to the deck item.  If so, we cancel the message by
		// returning false (since it would make them look silly to be
		// talking to a deck of cards), and instead
		// display a message showing the owner of this deck shuffling it.
		if((msg.amITarget(this))
		&&(msg.targetMinor()==CMMsg.TYP_SPEAK)
		&&(msg.targetMessage()!=null)
		&&(msg.targetMessage().toUpperCase().indexOf("SHUFFLE")>0))
		{
			if(!shuffleDeck())
				msg.source().tell(L("There are no cards left in the deck"));
			else
			{
				final Room R=CMLib.map().roomLocation(this);
				if(R!=null)
					R.show(msg.source(),null,this,CMMsg.MASK_ALWAYS|CMMsg.MSG_QUIETMOVEMENT,
							L("<S-NAME> <S-HAS-HAVE> thoroughly shuffled <O-NAMESELF>."));
			}
			return false;
		}
		return super.okMessage(myHost,msg);
	}