 			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();
-			
-			// update loop
-			update();
-			
-			// update entity lists
-			FP._world.updateLists();
-			
-			// update input
-			Input.update();
-			
-			// switch worlds
-			if (FP._goto) switchWorld();
 			
 			// reset drawing target
 			Draw.resetTarget();

			
			// quit if a frame hasn't passed
			if (_delta < _rate) return;
			
			// swap buffers
			FP.screen.swap();
			
			// update the game
			if (_delta > _skip) _delta = _skip;

				// switch worlds
				if (FP._goto) switchWorld();
			}
			
			// swap buffers
			FP.screen.swap();
			
			// reset drawing target
			Draw.resetTarget();
