 			else
 			{
 				var dx:Number = _dt * 2 * _speedPercent;
+				var playerStateID:String = "idle";
+				
 				/* Update left/right steering. */
-				if (_isSteeringLeft) _playerX = _playerX - dx;
-				else if (_isSteeringRight) _playerX = _playerX + dx;
+				if (_isSteeringLeft)
+				{
+					playerStateID = "moveLeft";
+					_playerX = _playerX - dx;
+				}
+				else if (_isSteeringRight)
+				{
+					playerStateID = "moveRight";
+					_playerX = _playerX + dx;
+				}
 				
 				_playerX = _playerX - (dx * _speedPercent * segment.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);
+				if (_isAccelerating)
+				{
+					_isIdleAfterCollision = false;
+					_speed = accel(_speed, _acceleration);
+				}
+				else if (_isBraking)
+				{
+					_speed = accel(_speed, _braking);
+				}
+				else
+				{
+					_speed = accel(_speed, _deceleration);
+				}
+				
+				if (!_isIdleAfterCollision && _speed > 0)
+				{
+					playerStateID = "moveForward";
+				}
+				
+				_racetrack.player.object.switchToState(playerStateID);
 			}
 		}
 		

					spriteScale = interpolate(seg.point1.screen.scale, seg.point2.screen.scale, op.percent);
					spriteX = interpolate(seg.point1.screen.x, seg.point2.screen.x, op.percent) + (spriteScale * op.offset * _roadWidth * _widthHalf);
					spriteY = interpolate(seg.point1.screen.y, seg.point2.screen.y, op.percent);
					renderEntity(op.entity, null, spriteScale, spriteX, spriteY, -0.5, -1, seg.clip, seg.haze);
				}

				/* Render other objects. */

							/* Determines how quick player can steer away from obstacle after being stopped. */
							_speed = _maxSpeed / 5;
							_position = increase(segment.point1.world.z, -_playerZ, _trackLength);
							_isIdleAfterCollision = true;
						}
						break;
					}
