 			}
 			else
 			{
-				if ((previousTime > nextLabelTime && nextLabelTime >= newTime) || newTime == nextLabelTime)
+				if (_reverse && ((previousTime > nextLabelTime && nextLabelTime >= newTime) || newTime == nextLabelTime))
+					trigger = true;
+				else if (!_reverse && ((previousTime < nextLabelTime && nextLabelTime <= newTime) || newTime == nextLabelTime))
 					trigger = true;
 			}
 			if (trigger)

		
		protected function checkLabelHit(previousTime : int, newTime : int) : void
		{
			if (reverse)
				return checkLabelHitReverse(previousTime, newTime);
			if (!_isPlaying || !_nextLabelIds || !_nextLabelIds.length || !_labelHit.numCallbacks)
				return;
			
			var nextLabelTime	: Number	= _labelTimes[_nextLabelIds[0]];
			var trigger			: Boolean	= false;
			
			if (newTime < previousTime)
			{
				if (previousTime < nextLabelTime && nextLabelTime <= loopEndTime)
					trigger = true;
				else if (loopBeginTime <= nextLabelTime && nextLabelTime <= newTime)
					trigger = true;
			}
			else
			{
				if ((previousTime < nextLabelTime && nextLabelTime <= newTime) || newTime == nextLabelTime)
					trigger = true;
			}
			if (trigger)
			{
				for each(var i : int in _nextLabelIds)
				triggerLabelHit(_labelNames[i], _labelTimes[i]);
				
				updateNextLabel((newTime + 1) % loopEndTime);
			}
		}
		
		protected function checkLabelHitReverse(previousTime : int, newTime : int) : void
		{
			if (!_isPlaying || !_nextLabelIds || !_nextLabelIds.length || !_labelHit.numCallbacks)
				return;
			
			var nextLabelTime	: Number	= _labelTimes[_nextLabelIds[0]];
			var trigger			: Boolean	= false;
			
			if (newTime > previousTime)
			{
				if (previousTime > nextLabelTime && nextLabelTime >= loopEndTime)
					trigger = true;

				for each(var i : int in _nextLabelIds)
				triggerLabelHit(_labelNames[i], _labelTimes[i]);
				
				if (_reverse)
					newTime--;
				else
					newTime++;
				
				updateNextLabel(newTime % _loopEndTime);
			}
		}
		
