public void checkTimers() {
		// TODO can I genericize this list to TimerTask?
		
		// Effect Timers (when they expire, effects are removed)
		final List<EffectTimer> expired_timers = new LinkedList<EffectTimer>();

		// each player has their own list of effect timers
		for(final Player player : effectTimers.keySet()) {
			final List<EffectTimer> etl = effectTimers.get(player);

			// add the timers that are expired to the expired list
			for (final EffectTimer etimer : etl) {
				if (etimer.getTimeRemaining() <= 0) {
					expired_timers.add(etimer);
				}
			}

			// remove each timer in eff from the player's list of effect timers
			for (final EffectTimer etimer : expired_timers) {
				String effectName = etimer.getEffect().getName();

				//player.removeEffect(effectName);
				removeEffect(player, effectName);

				send(etimer.getEffect().getName() + " effect removed.", player.getClient());

				etl.remove(etimer);
			}

			expired_timers.clear();
		}
		
		// TODO auction timers -- see below
		// perhaps a global spin through and decrement task of an internal count on Auctions would
		// be more practical?
		List<AuctionTimer> auc_timers = new LinkedList<AuctionTimer>();
		
		for(final Player player : auctionTimers.keySet()) {
			final List<AuctionTimer> atl = auctionTimers.get(player);

			for (final AuctionTimer atimer : atl) {
				if (atimer.getTimeRemaining() <= 0) {
					auc_timers.add(atimer);
				}
			}

			for (final AuctionTimer atimer : auc_timers) {
				// remove completed auction? marked it ended?
				send("Your auction of " + atimer.getAuction().getItem().getName() + " ended!", player.getClient());

				atl.remove(atimer);
			}

			auc_timers.clear();
		}
	}