 						: RTPlayerDefaultStateNames.MOVE_FORWARD;
 				}
 				
-				_playerX = _playerX - (dx * _speedPercent * segment.curve * _centrifugal);
+				_playerX = _playerX - (dx * _playerSpeedPercent * segment.curve * _centrifugal);
 				
 				/* Update acceleration & decceleration. */
 				if (_isAccelerating)
 				{
 					_idleAfterCollision = false;
-					_speed = accel(_speed, _acceleration);
+					_playerSpeed = accel(_playerSpeed, _acceleration);
 				}
 				else if (_isBraking)
 				{
-					_speed = accel(_speed, _braking);
+					_playerSpeed = accel(_playerSpeed, _braking);
 				}
 				else
 				{
-					_speed = accel(_speed, _deceleration);
-				}
-			}
-			
-			if (_speed <= 0 || _idleAfterCollision)
+					_playerSpeed = accel(_playerSpeed, _deceleration);
+				}
+			}
+			
+			if (_playerSpeed <= 0 || _idleAfterCollision)
 			{
 				playerStateID = RTPlayerDefaultStateNames.IDLE;
 			}

				segment = _segments[(carSegment.index + i) % _segments.length];

				/* Car drive-around player AI */
				if ((segment === playerSegment) && (car.speed > _speed) && (overlap(_playerX, playerW, car.offset, carW, 1.2)))
				{
					if (_playerX > 0.5) dir = -1;
					else if (_playerX < -0.5) dir = 1;
					else dir = (car.offset > _playerX) ? 1 : -1;
					// The closer the cars (smaller i) and the greater the speed ratio,
					// the larger the offset.
					return dir * 1 / i * (car.speed - _speed) / _maxSpeed;
				}

				/* Car drive-around other car AI */

			}
			
			/* Slow down if player drives onto off-road area. */
			if ((_playerX < -1 || _playerX > 1) && _playerSpeed > _offRoadLimit)
			{
				_playerSpeed = accel(_playerSpeed, _offRoadDecel);
			}
			
			/* Check player collision with other cars. */
			for (i = 0; i < playerSegment.cars.length; i++)
			{
				var car:RTCar = playerSegment.cars[i];
				if (_playerSpeed > car.speed)
				{
					var carWidth:Number = car.entity.width * (_objectScale * car.entity.scale);
					if (overlap(_playerX, _playerWidth, car.offset, carWidth, 0.8))
					{
						_playerSpeed = car.speed * (car.speed / _playerSpeed);
						_position = increase(car.z, -_playerZ, _trackLength);
						break;
					}
