@Override
	public boolean execute(final MOB mob, List<String> commands, int metaFlags)
		throws java.io.IOException
	{
		if(mob.soulMate()!=null)
			dispossess(mob,CMParms.combine(commands).endsWith("!"));
		else
		if(!mob.isMonster())
		{
			final Session session=mob.session();
			if(session!=null)
			{
				if((session.getLastPKFight()>0)
				&&((System.currentTimeMillis()-session.getLastPKFight())<(5*60*1000))
				&&(!CMSecurity.isASysOp(mob)))
				{
					mob.tell(L("You must wait a few more minutes before you are allowed to quit."));
					return false;
				}
				session.prompt(new InputCallback(InputCallback.Type.CONFIRM, "N", 30000)
				{
					@Override
					public void showPrompt()
					{
						session.promptPrint(L("\n\rQuit -- are you sure (y/N)?"));
					}
					@Override public void timedOut() {}
					@Override
					public void callBack()
					{
						if(this.confirmed)
						{
							final CMMsg msg=CMClass.getMsg(mob,null,CMMsg.MSG_QUIT,null);
							final Room R=mob.location();
							if((R!=null)&&(R.okMessage(mob,msg)))
							{
								CMLib.map().sendGlobalMessage(mob,CMMsg.TYP_QUIT, msg);
								session.stopSession(false,false, false); // this should call prelogout and later loginlogoutthread to cause msg SEND
								CMLib.commands().monitorGlobalMessage(R, msg);
							}
						}
					}
				});
			}
		}
		return false;
	}