private void waitForTimers( final long timeElapsed ) {
		nextSleepInterval = Long.MAX_VALUE;

		listeners.putAll( newListeners );

		for( final Iterator<Entry<TimerListener, Long>> iter = listeners.entrySet().iterator(); iter.hasNext(); ) {
			final Entry<TimerListener, Long> entry = iter.next();

			final TimerListener listener = entry.getKey();
			final long toWait = entry.getValue();

			long newTimeToWait;
			if( newListeners.containsKey( listener ) ) {
				newTimeToWait = toWait;
				newListeners.remove( listener );
			}
			else {
				newTimeToWait = toWait - timeElapsed;
			}

			if( newTimeToWait <= 0 ) {
				iter.remove();
				listener.onTimerFired();
			}
			else {
				entry.setValue( newTimeToWait );
				if( newTimeToWait < nextSleepInterval ) {
					nextSleepInterval = newTimeToWait;
				}
			}
		}
	}