diff --git a/src/pymap3d/lox.py b/src/pymap3d/lox.py
index 4b205ee..26b220d 100644
--- a/src/pymap3d/lox.py
+++ b/src/pymap3d/lox.py
@@ -118,7 +118,7 @@ def loxodrome_inverse(
     -------
 
     lox_s : float
-        distance along loxodrome
+        distance along loxodrome (meters)
     az12 : float
         azimuth of loxodrome (degrees/radians)
 
@@ -287,7 +287,7 @@ def departure(lon1, lon2, lat, ell: Ellipsoid = None, deg: bool = True) -> float
     if deg:
         lon1, lon2, lat = radians(lon1), radians(lon2), radians(lat)
 
-    return rcurve.parallel(lat, ell=ell, deg=False) * ((lon2 - lon1) % pi)
+    return rcurve.parallel(lat, ell=ell, deg=False) * (abs(lon2 - lon1) % pi)
 
 
 def meanm(lat, lon, ell: Ellipsoid = None, deg: bool = True) -> tuple:

diff --git a/src/pymap3d/tests/test_rhumb.py b/src/pymap3d/tests/test_rhumb.py
index b63fa4b..d206a06 100755
--- a/src/pymap3d/tests/test_rhumb.py
+++ b/src/pymap3d/tests/test_rhumb.py
@@ -45,10 +45,10 @@ def test_departure(lon1, lon2, lat, dist):
     "lat1,lon1,lat2,lon2,arclen,az",
     [
         (40, -80, 65, -148, 5248666.20853187, 302.0056736),
-        (0, 0, 0, 90, 10018754.17, 90),
-        (0, 0, 0, -90, 10018754.17, 270),
-        (0, 90, 0, 0, 10018754.17, 270),
-        (0, -90, 0, 0, 10018754.17, 90),
+        (0, 0, 0, 1, 111319.49, 90),
+        (0, 0, 0, -1, 111319.49, 270),
+        (0, 1, 0, 0, 111319.49, 270),
+        (0, -1, 0, 0, 111319.49, 90),
         (1, 0, 0, 0, 110574.4, 180),
         (-1, 0, 0, 0, 110574.4, 0),
     ],

loxodrome_inverse returns (circumference / 2 - actual distance) when lat1 == lat2 and lon1< lon2
`loxodrome_inverse()` returns (circumference / 2 - actual distance) when lat1 == lat2 and lon1< lon2.
It is clear from the following calculation results:

```python console
>>> from pymap3d.lox import loxodrome_inverse
>>> loxodrome_inverse(0,0, 0, 1.0, deg=True)
(19926188.85199597, 90.0)
>>> loxodrome_inverse(0,0, 0, 10.0, deg=True)
(18924313.434856508, 90.0)
>>> loxodrome_inverse(0,0, 0, 170.0, deg=True)
(1113194.9079327343, 90.0)
>>> loxodrome_inverse(0,0, 0, 180.0, deg=True)
(0.0, 90.0)
>>> loxodrome_inverse(0, 1.0, 0, 0, deg=True)
(111319.49079327357, 270.0)
>>> loxodrome_inverse(0, 170.0, 0, 0, deg=True)
(18924313.434856508, 270.0)
```

At first I thought it was an instability issue around the singularity, but it appears to be a logic error in the singularity-specific processing.
I have made a correction and will send you a PR after this.
src/pymap3d/tests/test_rhumb.py::test_loxodrome_inverse[0-0-0-1-111319.49-90] src/pymap3d/tests/test_rhumb.py::test_loxodrome_inverse[0--1-0-0-111319.49-90]
src/pymap3d/tests/test_rhumb.py::test_meridian_dist[0-0] src/pymap3d/tests/test_rhumb.py::test_meridian_dist[90-10001965.729] src/pymap3d/tests/test_rhumb.py::test_meridian_arc[0-0-0] src/pymap3d/tests/test_rhumb.py::test_meridian_arc[0-90-10001965.729] src/pymap3d/tests/test_rhumb.py::test_meridian_arc[0--90-10001965.729] src/pymap3d/tests/test_rhumb.py::test_meridian_arc[0-40-4429529.03035058] src/pymap3d/tests/test_rhumb.py::test_meridian_arc[40-80-4455610.84159] src/pymap3d/tests/test_rhumb.py::test_departure[0-0-0-0] src/pymap3d/tests/test_rhumb.py::test_departure[0-90-0-10018754.1714] src/pymap3d/tests/test_rhumb.py::test_departure[0--90-0-10018754.1714] src/pymap3d/tests/test_rhumb.py::test_departure[90-0-0-10018754.1714] src/pymap3d/tests/test_rhumb.py::test_departure[-90-0-0-10018754.1714] src/pymap3d/tests/test_rhumb.py::test_loxodrome_inverse[40--80-65--148-5248666.20853187-302.0056736] src/pymap3d/tests/test_rhumb.py::test_loxodrome_inverse[0-0-0--1-111319.49-270] src/pymap3d/tests/test_rhumb.py::test_loxodrome_inverse[0-1-0-0-111319.49-270] src/pymap3d/tests/test_rhumb.py::test_loxodrome_inverse[1-0-0-0-110574.4-180] src/pymap3d/tests/test_rhumb.py::test_loxodrome_inverse[-1-0-0-0-110574.4-0] src/pymap3d/tests/test_rhumb.py::test_loxodrome_direct[40--80-10000-30-40.0000779959676--79.9999414477481] src/pymap3d/tests/test_rhumb.py::test_loxodrome_direct[35-140-50000-90-35-140.548934481815] src/pymap3d/tests/test_rhumb.py::test_loxodrome_direct[35-140-50000--270-35-140.548934481815] src/pymap3d/tests/test_rhumb.py::test_loxodrome_direct[35-140-50000-270-35-139.451065518185] src/pymap3d/tests/test_rhumb.py::test_loxodrome_direct[35-140-50000--90-35-139.451065518185] src/pymap3d/tests/test_rhumb.py::test_loxodrome_direct[0-0-0-0-0-0] src/pymap3d/tests/test_rhumb.py::test_loxodrome_direct[0-0-10018754.17-90-0-90] src/pymap3d/tests/test_rhumb.py::test_loxodrome_direct[0-0-10018754.17--90-0--90] src/pymap3d/tests/test_rhumb.py::test_loxodrome_direct[0-0-110574.4-180--1-0] src/pymap3d/tests/test_rhumb.py::test_loxodrome_direct[-1-0-110574.4-0-0-0]