 			// quit if a frame hasn't passed
 			if (_delta < _rate) return;
 			
-			// update the game
+			// update timer
+			_gameTime = _time;
+			FP._flashTime = _time - _flashTime;
+			
+			// update console
+			if (FP._console) FP._console.update();
+			
+			// update loop
 			if (_delta > _skip) _delta = _skip;
 			while (_delta > _rate)
 			{
 				// update timer
+				_updateTime = _time;
 				_delta -= _rate;
-				_time = getTimer();
 				FP.elapsed = (_time - _prev) / 1000;
+				if (FP.elapsed > MAX_ELAPSED) FP.elapsed = MAX_ELAPSED;
+				FP.elapsed *= FP.rate;
 				_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();
+				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 = getTimer();
+				FP._updateTime = _time - _updateTime;
+			}
+			
+			// update timer
+			_renderTime = _time;
 			
 			// 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 Switch Worlds if they've changed. */
-		private function switchWorld():void
+		private function checkWorld():void
 		{
 			if (!FP._goto) return;
 			FP._world.end();

		 */
		public function render():void
		{
			FP.screen.refresh();
			if (FP._world.visible) FP._world.render();
		}
		
		/**

		private function onEnterFrame(e:Event):void
		{
			// update timer
			_time = _gameTime = getTimer();
			FP._flashTime = _time - _flashTime;
			_updateTime = _time;
			FP.elapsed = (_time - _last) / 1000;
			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
			if (!paused) update();
			
			// update input
			Input.update();
			
			// update timer
			_time = _renderTime = getTimer();
			FP._updateTime = _time - _updateTime;
			
			// render loop
			if (!paused) render();
			
			// update timer
			_time = _flashTime = getTimer();
			FP._renderTime = _time - _renderTime;
			FP._gameTime = _time - _gameTime;
		}
		
		/** @private Fixed framerate game loop. */
