@Override
	public boolean invoke(MOB mob, List<String> commands, Physical givenTarget, boolean auto, int asLevel)
	{
		if(super.checkStop(mob, commands))
			return true;
		verb=L("bonding");
		bonding=null;
		final String str=CMParms.combine(commands,0);
		MOB M=super.getTarget(mob, commands, givenTarget);
		if(M==null)
			return false;
		bonding=null;
		if(!CMLib.flags().canBeSeenBy(M,mob))
		{
			commonTell(mob,L("You don't see anyone called '@x1' here.",str));
			return false;
		}
		if((!M.isMonster())
		   ||(!M.isMonster())
		   ||(!CMLib.flags().isAnimalIntelligence(M)))
		{
			commonTell(mob,L("You can't bond with @x1.",M.name(mob)));
			return false;
		}
		if(M.amFollowing() != mob)
		{
			commonTell(mob,L("@x1 doesn't seem willing to cooperate.",M.name(mob)));
			return false;
		}
		bonding=M;

		if(!super.invoke(mob,commands,givenTarget,auto,asLevel))
			return false;
		messedUp=!proficiencyCheck(mob,-bonding.phyStats().level()+(2*getXLEVELLevel(mob)),auto);
		final int duration=getDuration(35,mob,bonding.phyStats().level(),10);
		verb=L("bonding with @x1",M.name());
		final CMMsg msg=CMClass.getMsg(mob,null,this,getActivityMessageType(),L("<S-NAME> start(s) bonding with @x1.",M.name()));
		if(mob.location().okMessage(mob,msg))
		{
			mob.location().send(mob,msg);
			beneficialAffect(mob,mob,asLevel,duration);
		}
		return true;
	}