 		
 		public function setPlaybackWindow(beginTime	: Object = null,
 										  endTime	: Object = null) : IAnimationController
-		{
+		{			
 			_loopBeginTime	= beginTime != null ? getAnimationTime(beginTime) : 0;
 			_loopEndTime	= endTime != null ? getAnimationTime(endTime) : _totalTime;
 			
+			if (_loopBeginTime > _loopEndTime)
+			{
+				var begin : int = _loopEndTime;
+				_loopEndTime	= _loopBeginTime;
+				_loopBeginTime	= begin;
+			}
+			
 			if (_currentTime < _loopBeginTime || _currentTime > _loopEndTime)
-				_currentTime = _loopBeginTime;
+				_currentTime = loopBeginTime;
 			
 			updateNextLabel();
 			

		
		protected function checkLabelHit(previousTime : int, newTime : int) : void
		{
			if (!_isPlaying || !_nextLabelIds || !_nextLabelIds.length || !_labelHit.numCallbacks)
				return;
			

			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;
				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);
			}
		}
		
