@Override
	public boolean tick(Tickable ticking, int tickID)
	{
		super.tick(ticking,tickID);

		if(!(ticking instanceof Area))
			return true;
		if(tickID!=Tickable.TICKID_AREA)
			return true;
		final Area myArea=(Area)ticking;

		if(!theLawIsEnabled())
			return true;

		final Law laws=getLaws(myArea,false);
		if(!laws.lawIsActivated())
		{
			laws.warrants().clear();
			laws.oldWarrants().clear();
			return true;
		}
		final boolean debugging=CMSecurity.isDebugging(CMSecurity.DbgFlag.ARREST);

		laws.propertyTaxTick(myArea,debugging);

		final HashSet<String> handled=new HashSet<String>();
		for(final LegalWarrant W : laws.warrants())
		{
			if((W.criminal()==null)||(W.criminal().location()==null))
			{
				if(debugging)
					Log.debugOut("Arrest","("+lastAreaName+"): Tick: "+W.crime()+": Criminal or Location is null. Skipping.");
				continue;
			}

			if(!isStillACrime(W,debugging))
			{
				if(getWarrantsOf(myArea,W.criminal()).size()== 0)
				{
					unCuff(W.criminal());
					if(W.arrestingOfficer()!=null)
					{
						dismissOfficer(W.arrestingOfficer());
					}
					W.setArrestingOfficer(myArea,null);
				}
				W.setOffenses(W.offenses()+1);
				laws.oldWarrants().add(W);
				laws.warrants().remove(W);
				if(debugging)
					Log.debugOut("Arrest","("+lastAreaName+"): Tick: "+W.crime()+": No longer a crime.");
				continue;
			}

			if(!CMath.bset(W.punishment(),Law.PUNISHMENTMASK_SEPARATE))
			{
				if(handled.contains(W.criminal().Name()))
					continue;
				handled.add(W.criminal().Name());
			}
			else
			{
				if(handled.contains(W.criminal().Name()+"/"+W.crime()))
					continue;
				handled.add(W.criminal().Name()+"/"+W.crime());
			}
			if(debugging)
				Log.debugOut("Arrest","("+lastAreaName+"): Tick: Handling "+W.crime()+" for "+W.criminal().Name()+": State "+W.state());

			if(System.currentTimeMillis() < W.getIgnoreUntilTime())
			{
				if(debugging)
					Log.debugOut("Arrest","("+lastAreaName+"): Tick: Ignoring "+W.crime()+" for "+W.criminal().Name()+": State "+W.state());
				continue;
			}
			
			processWarrant(myArea, laws, W, debugging);
		}
		return true;
	}