 				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 ((segment === playerSegment) && (car.speed > _playerSpeed) && (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;
+					return dir * 1 / i * (car.speed - _playerSpeed) / _maxSpeed;
 				}
 
 				/* Car drive-around other car AI */

		private var _startPosition:Number;
		private var _position:Number;			// current camera Z position (add playerZ to get player's absolute Z position)
		private var _prevPosition:Number;
		private var _speed:Number;				// current speed
		private var _speedPercent:Number;
		
		private var _progress:int;
		private var _progressTotal:int;

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