diff --git a/addons/missileguidance/functions/fnc_attackProfile_JDAM.sqf b/addons/missileguidance/functions/fnc_attackProfile_JDAM.sqf
index e29fee05a5..c6affc83ff 100644
--- a/addons/missileguidance/functions/fnc_attackProfile_JDAM.sqf
+++ b/addons/missileguidance/functions/fnc_attackProfile_JDAM.sqf
@@ -2,7 +2,7 @@
 /*
  * Author: Brandon (TCVM)
  * Attack profile: JDAM
- * Glides until attack angle, and then dives in
+ * Uses LINE navigation type to guide projectile onto target
  *
  * Arguments:
  * 0: Seeker Target PosASL <ARRAY>
@@ -26,54 +26,34 @@ _targetData params ["_directionToTarget", "", "_distanceToTarget"];
 _flightParams params ["_pitchRate", "_yawRate"];
 
 if (_impactAngle <= 0) then {
-    _impactAngle = 360; // immediate pitch over to attack
+    _impactAngle = 45; // immediate pitch over to attack
 };
 
 if (_attackDirection < 0) then {
     _attackDirection = direction _projectile;
+    _gpsData set [2, _attackDirection];
 };
 
 private _projectilePos = getPosASLVisual _projectile;
-private _projectilePitch = ((vectorDir _projectile) call CBA_fnc_vect2polar) select 2;
-private _targetDir = _projectilePos vectorFromTo _seekerTargetPos;
+private _lineDir = [1, 180 + _attackDirection, _impactAngle] call CBA_fnc_polar2vect;
 
-private _targetPos = _seekerTargetPos;
-if !(_terminal) then {
-    _targetPos = [
-        _targetPos#0,
-        _targetPos#1,
-        (_seekerTargetPos select 2) + 500
-    ];
-    
-    private _lineDir = [1, 180 + _attackDirection, _impactAngle] call CBA_fnc_polar2vect;
+private _leadDistance = linearConversion [0, 1000, _projectilePos vectorDistance _seekerTargetPos, 5, 500, true];
 
-    private _v = _projectilePos vectorDiff _seekerTargetPos;
-    private _d = _v vectorDotProduct _lineDir;
-    private _closestPoint = _seekerTargetPos vectorAdd (_lineDir vectorMultiply _d);
-
-    private _timeToGo = (_projectilePos distance _closestPoint) / vectorMagnitude velocity _projectile;
-
-    private _projectileAngleFromTarget = acos ((vectorDir _projectile) vectorCos _targetDir);
-    private _availablePitch = _pitchRate * _timeToGo;
-
-    private _neededPitch = _impactAngle + _projectilePitch;
-
-    private _atMinRotationAngle = _availablePitch <= _neededPitch;
-    _attackProfileStateParams set [2, (_atMinRotationAngle || (_neededPitch <= _projectileAngleFromTarget))];
-
-    if (GVAR(debug_drawGuidanceInfo)) then {
-        _attackProfileName = format ["JDAM [Pitch Available - %1 Needed Pitch - %2 TTP - %3]", _availablePitch, _neededPitch, (_availablePitch - _neededPitch) / _pitchRate];
-        drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], ASLtoAGL _closestPoint, 0.75, 0.75, 0, "P", 1, 0.025, "TahomaB"];
-    };
-} else {
-    _attackProfileName = format ["JDAM [Pitch - %1  Impact Pitch - %2]", _projectilePitch, _impactAngle];
+private _missilePosProjected = _seekerTargetPos vectorAdd (_lineDir vectorMultiply ((_projectilePos vectorDistance _seekerTargetPos) - _leadDistance));
+// don't climb
+if (_missilePosProjected#2 > _projectilePos#2) then {
+    _missilePosProjected set [2, _projectilePos#2];  
 };
+_targetData set [2, (_projectilePos vectorDistance _missilePosProjected)];
 
 if (GVAR(debug_drawGuidanceInfo)) then {
-    private _desiredAngle = [5000, 180 + _attackDirection, _impactAngle] call CBA_fnc_polar2vect;
+    private _projectilePitch = ((vectorDir _projectile) call CBA_fnc_vect2polar) select 2;
+    _attackProfileName = format ["JDAM [Pitch - %1  Impact Pitch - %2]", _projectilePitch, _impactAngle];
+    drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], ASLtoAGL _missilePosProjected, 0.75, 0.75, 0, "P", 1, 0.025, "TahomaB"];
+    private _desiredAngle = _lineDir vectorMultiply 5000;
     private _targetPosAGL = ASLtoAGL _seekerTargetPos;
     drawLine3D [_targetPosAGL, _targetPosAGL vectorAdd _desiredAngle, [1, 1, 1, 1]];
 };
 
-_targetPos;
+_missilePosProjected
 
diff --git a/addons/missileguidance/functions/fnc_navigationType_line.sqf b/addons/missileguidance/functions/fnc_navigationType_line.sqf
index eb809d27ab..c9f68ab9bb 100644
--- a/addons/missileguidance/functions/fnc_navigationType_line.sqf
+++ b/addons/missileguidance/functions/fnc_navigationType_line.sqf
@@ -21,10 +21,9 @@ _flightParams params ["_pitchRate", "_yawRate"];
 
 _navigationParams params ["_proportionalGain", "", "_derivativeGain", "_lastErrorX", "_lastErrorY", "_correctionDistance"];
 private _targetDistance = _projectile vectorWorldToModelVisual (_targetDir vectorMultiply _distance);
-private _relativeDirection = _projectile vectorWorldToModelVisual _targetDir;
 
-private _errorX = -1 max (1 min (_targetDistance#0 / _correctionDistance));
-private _errorY = -1 max (1 min (_targetDistance#2 / _correctionDistance));
+private _errorX = _targetDistance#0 / _correctionDistance;
+private _errorY = _targetDistance#2 / _correctionDistance;
 
 private _pX = _proportionalGain * _errorX;
 private _dX = if (_timestep != 0) then {
diff --git a/addons/sdb/CfgAmmo.hpp b/addons/sdb/CfgAmmo.hpp
index 4bf8c383a5..2550f29fd2 100644
--- a/addons/sdb/CfgAmmo.hpp
+++ b/addons/sdb/CfgAmmo.hpp
@@ -7,7 +7,7 @@ class CfgAmmo {
             enabled = 1;
 
             pitchRate = 15;
-            yawRate = 5;
+            yawRate = 20;
 
             canVanillaLock = 0;          // Can this default vanilla lock? Only applicable to non-cadet mode
 
@@ -18,8 +18,11 @@ class CfgAmmo {
             defaultSeekerLockMode = "LOBL";
             seekerLockModes[] = { "LOBL" };
 
-            defaultNavigationType = "ZeroEffortMiss";
-            navigationTypes[] = { "ZeroEffortMiss" };
+            defaultNavigationType = "LINE";
+            navigationTypes[] = { "LINE" };
+
+            lineGainP = 50;
+            lineGainD = 1;
 
             seekLastTargetPos = 0;      // seek last target position [if seeker loses LOS of target, continue to last known pos]
             seekerAngle = 60;           // Angle from the shooter's view that can track the missile