diff --git a/nat-optics.cabal b/nat-optics.cabal
--- a/nat-optics.cabal
+++ b/nat-optics.cabal
@@ -1,7 +1,7 @@
 cabal-version: 3.0
 
 name: nat-optics
-version: 1.0.0.4
+version: 1.0.1.0
 category: Numeric, Optics
 
 synopsis:
diff --git a/src/NatOptics/Positive/Math.hs b/src/NatOptics/Positive/Math.hs
--- a/src/NatOptics/Positive/Math.hs
+++ b/src/NatOptics/Positive/Math.hs
@@ -4,30 +4,30 @@
   (
     minus,
     plus,
+    absoluteDifference,
   )
   where
 
-import Data.Maybe          ( Maybe (..) )
-import Data.Ord            ( Ord, (<) )
-import Optics.Core         ( preview, review )
-import Prelude             ( Num, abs, (+), (-) )
+import Data.Ord            ( Ord, (<), compare, Ordering (..) )
+import Prelude             ( Num, (+), (-) )
 
 import NatOptics.Positive.Unsafe ( Positive (..) )
-import qualified NatOptics.Positive as Positive
 
 import NatOptics.Signed ( Signed )
 import qualified NatOptics.Signed as Signed
 
+import NatOptics.NonNegative.Unsafe ( NonNegative (..) )
+
 plus :: Num n => Positive n -> Positive n -> Positive n
 plus (PositiveUnsafe a) (PositiveUnsafe b) = PositiveUnsafe (a + b)
 
 minus :: (Num n, Ord n) => Positive n -> Positive n -> Signed n
-minus a b =
-    let
-        a' = review Positive.refine a
-        b' = review Positive.refine b
-        diff = a' - b'
-    in
-        case preview Positive.refine (abs diff) of
-            Nothing -> Signed.Zero
-            Just diff' -> if diff < 0 then Signed.Minus diff' else Signed.Plus diff'
+minus (PositiveUnsafe a) (PositiveUnsafe b) =
+    case compare a b of
+        EQ -> Signed.Zero
+        GT -> Signed.Plus (PositiveUnsafe (a - b))
+        LT -> Signed.Minus (PositiveUnsafe (b - a))
+
+absoluteDifference :: (Num n, Ord n) => Positive n -> Positive n -> NonNegative n
+absoluteDifference (PositiveUnsafe a) (PositiveUnsafe b) =
+    NonNegativeUnsafe (if a < b then b - a else a - b)
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -5,6 +5,7 @@
 
 import Data.Int (Int16, Int32)
 import Data.Maybe (isNothing)
+import Numeric.Natural (Natural)
 import Optics.Core (preview, review, view)
 
 import qualified NatOptics.Positive as Pos
@@ -75,6 +76,6 @@
     describe "plus" $ do
         specify "10 + 5" $ Pos.Math.plus (Pos.PositiveUnsafe 10) (Pos.PositiveUnsafe 5) `shouldBe` Pos.PositiveUnsafe @Int32 15
     describe "minus" $ do
-        specify "3 - 3" $ Pos.Math.minus (Pos.PositiveUnsafe 3) (Pos.PositiveUnsafe 3) `shouldBe` S.Zero @Int32
-        specify "3 - 5" $ Pos.Math.minus (Pos.PositiveUnsafe 3) (Pos.PositiveUnsafe 5) `shouldBe` S.Minus @Int32 (Pos.PositiveUnsafe 2)
-        specify "9 - 5" $ Pos.Math.minus (Pos.PositiveUnsafe 9) (Pos.PositiveUnsafe 5) `shouldBe` S.Plus @Int32 (Pos.PositiveUnsafe 4)
+        specify "3 - 3" $ Pos.Math.minus (Pos.PositiveUnsafe 3) (Pos.PositiveUnsafe 3) `shouldBe` S.Zero @Natural
+        specify "3 - 5" $ Pos.Math.minus (Pos.PositiveUnsafe 3) (Pos.PositiveUnsafe 5) `shouldBe` S.Minus @Natural (Pos.PositiveUnsafe 2)
+        specify "9 - 5" $ Pos.Math.minus (Pos.PositiveUnsafe 9) (Pos.PositiveUnsafe 5) `shouldBe` S.Plus @Natural (Pos.PositiveUnsafe 4)
