diff --git a/src/lib/FlightTasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.cpp b/src/lib/FlightTasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.cpp
index 7099aff6268236bf65a838691b24a4b361e54660..6fd8245e33cd8b585515d9c8013a9e214736017e 100644
--- a/src/lib/FlightTasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.cpp
+++ b/src/lib/FlightTasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.cpp
@@ -49,6 +49,7 @@ bool FlightTaskAutoLineSmoothVel::activate()
 		_trajectory[i].reset(0.f, _velocity(i), _position(i));
 	}
 
+	_yaw_sp_prev = _yaw;
 	_updateTrajConstraints();
 
 	return ret;
@@ -71,21 +72,37 @@ void FlightTaskAutoLineSmoothVel::_setDefaultConstraints()
 
 void FlightTaskAutoLineSmoothVel::_generateSetpoints()
 {
+	_prepareSetpoints();
+	_generateTrajectory();
+
 	if (!PX4_ISFINITE(_yaw_setpoint)) {
-		// no valid heading -> set heading along track
-		// TODO: Generate heading along trajectory velocity vector
-		_generateHeadingAlongTrack();
+		// no valid heading -> generate heading in this flight task
+		_generateHeading();
 	}
+}
 
-	_prepareSetpoints();
-	_generateTrajectory();
+void FlightTaskAutoLineSmoothVel::_generateHeading()
+{
+	// Generate heading along trajectory if possible, otherwise hold the previous yaw setpoint
+	if (!_generateHeadingAlongTraj()) {
+		_yaw_setpoint = _yaw_sp_prev;
+	}
+
+	_yaw_sp_prev = _yaw_setpoint;
 }
 
-void FlightTaskAutoLineSmoothVel::_generateHeadingAlongTrack()
+bool FlightTaskAutoLineSmoothVel::_generateHeadingAlongTraj()
 {
-	Vector2f prev_to_dest(_target - _prev_wp);
-	_compute_heading_from_2D_vector(_yaw_setpoint, prev_to_dest);
+	bool res = false;
+	Vector2f vel_sp_xy(_velocity_setpoint);
+
+	if (vel_sp_xy.length() > .01f) {
+		// Generate heading from velocity vector, only if it is long enough
+		_compute_heading_from_2D_vector(_yaw_setpoint, vel_sp_xy);
+		res = true;
+	}
 
+	return res;
 }
 
 /* Constrain some value vith a constrain depending on the sign of the constrain
diff --git a/src/lib/FlightTasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.hpp b/src/lib/FlightTasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.hpp
index aaa4e1f05d37b809d640770ac7926ad1f328c732..d5cd55c836f6812c7ca119bbdc6335c8f6f039bb 100644
--- a/src/lib/FlightTasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.hpp
+++ b/src/lib/FlightTasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.hpp
@@ -69,9 +69,11 @@ protected:
 	void _setDefaultConstraints() override;
 
 	inline float constrain_one_side(float val, float constrain);
-	void _generateHeadingAlongTrack(); /**< Generates heading along track. */
+	void _generateHeading();
+	bool _generateHeadingAlongTraj(); /**< Generates heading along trajectory. */
 	void _updateTrajConstraints();
 	void _prepareSetpoints(); /**< Generate velocity target points for the trajectory generator. */
 	void _generateTrajectory();
 	VelocitySmoothing _trajectory[3]; ///< Trajectories in x, y and z directions
+	float _yaw_sp_prev;
 };