 		private function onEnterFrame(e:Event):void
 		{
 			// update timer
-			_time = getTimer();
+			_time = _gameTime = getTimer();
+			FP._flashTime = _time - _flashTime;
+			_updateTime = _time;
 			FP.elapsed = (_time - _last) / 1000;
-			_last = _time;
-			
-			// apply timescale
 			if (FP.elapsed > MAX_ELAPSED) FP.elapsed = MAX_ELAPSED;
 			FP.elapsed *= FP.rate;
+			_last = _time;
+			
+			// update console
+			if (FP._console) FP._console.update();
 			
 			// update loop
-			update();
-			
-			// update entity lists
-			FP._world.updateLists();
+			if (!paused) update();
 			
 			// update input
 			Input.update();
 			
-			// switch worlds
-			if (FP._goto) switchWorld();
-			
-			// swap buffers
-			FP.screen.swap();
-			
-			// reset drawing target
-			Draw.resetTarget();
+			// update timer
+			_time = _renderTime = getTimer();
+			FP._updateTime = _time - _updateTime;
 			
 			// render loop
-			render();
-			
-			// redraw buffers
-			FP.screen.redraw();
+			if (!paused) render();
+			
+			// update timer
+			_time = _flashTime = getTimer();
+			FP._renderTime = _time - _renderTime;
+			FP._gameTime = _time - _gameTime;
 		}
 		
 		/** @private Fixed framerate game loop. */

			// quit if a frame hasn't passed
			if (_delta < _rate) return;
			
			// update the game
			if (_delta > _skip) _delta = _skip;
			while (_delta > _rate)
			{
				// update timer
				_delta -= _rate;
				_time = getTimer();
				FP.elapsed = (_time - _prev) / 1000;
				_prev = _time;
				
				// apply timescale
				if (FP.elapsed > MAX_ELAPSED) FP.elapsed = MAX_ELAPSED;
				FP.elapsed *= FP.rate;
				
				// update loop
				update();
				
				// update entity lists
				FP._world.updateLists();
				
				// update input
				Input.update();
				
				// switch worlds
				if (FP._goto) switchWorld();
			}
			
			// swap buffers
			FP.screen.swap();
			
			// reset drawing target
			Draw.resetTarget();
			
			// render loop
			render();
			
			// redraw buffers
			FP.screen.redraw();
		}
		
		/** @private Switch Worlds if they've changed. */
		private function switchWorld():void
		{
			if (!FP._goto) return;
			FP._world.end();

		/** @private */ private var	_skip:Number;
		/** @private */ private var _prev:Number;
		
		// Debug timing information.
		/** @private */ private var _updateTime:uint;
		/** @private */ private var _renderTime:uint;
		/** @private */ private var _gameTime:uint;
		/** @private */ private var _flashTime:uint;
		
		// Game constants.
		/** @private */ private const MAX_ELAPSED:Number = 0.0333;
		/** @private */ private const MAX_FRAMESKIP:Number = 5;
		/** @private */ private const TICK_RATE:uint = 4;
		
		// FrameRate tracking.
		/** @private */ private var _frameLast:uint = 0;
		/** @private */ private var _frameListSum:uint = 0;
		/** @private */ private var _frameList:Vector.<uint> = new Vector.<uint>;
	}
}