 			/* Handle player interaction. */
 			if (_allowControls)
 			{
-				if (_isJump)
-				{
-					if (_playerOffsetY <= _playerJumpHeight)
-					{
-						_isJump = false;
-						_isFall = true;
-					}
-					else
-					{
-						_playerOffsetY -= (1.1 - _speedPercent) * 0.36;
-					}
-				}
-				else if (_isFall)
-				{
-					if (_playerOffsetY < -1.0)
-					{
-						_playerOffsetY += (1.1 - _speedPercent) * 0.36;
-					}
-					else
-					{
-						_playerOffsetY = -1.0;
-						_isFall = false;
-					}
-				}
-				else
-				{
-					/* Update left/right steering. */
-					if (_isSteeringLeft) _playerX = _playerX - dx;
-					else if (_isSteeringRight) _playerX = _playerX + dx;
-					
-					_playerX = _playerX - (dx * _speedPercent * playerSegment.curve * _centrifugal);
-					
-					/* Update acceleration & decceleration. */
-					if (_isAccelerating) _speed = accel(_speed, _acceleration, _dt);
-					else if (_isBraking) _speed = accel(_speed, _braking, _dt);
-					else _speed = accel(_speed, _deceleration, _dt);
-				}
+				processPlayerControls(playerSegment);
 			}
 			
 			/* Check if the segment the player is on has any triggers. */

			if (car.offset < -0.9) return 0.1;
			else if (car.offset > 0.9) return -0.1;
			else return 0;
		}
		
		

			if (!_started) return;
			
			_speedPercent = _speed / _maxSpeed;
			var i:int, playerSegment:RTSegment = findSegment(_position + _playerZ);
			
			updateCars(_dt, playerSegment, _playerWidth);
			
