diff --git a/gjk2d.cabal b/gjk2d.cabal
--- a/gjk2d.cabal
+++ b/gjk2d.cabal
@@ -1,5 +1,5 @@
 name:                gjk2d
-version:             0.1.0.2
+version:             0.1.0.3
 -- synopsis:
 description:         Yet another 2D GJK collision dection algorithm with Linear
 homepage:            https://github.com/suzumiyasmith/gjk2d#readme
@@ -17,7 +17,7 @@
   hs-source-dirs:      src
   exposed-modules:     GJK
   build-depends:       base >= 4.7 && < 5
-                     , linear >= 1.20 && < 2
+                     , linear >= 1.21 && < 2
   ghc-options:         -Wall
   default-language:    Haskell2010
 
diff --git a/src/GJK.hs b/src/GJK.hs
--- a/src/GJK.hs
+++ b/src/GJK.hs
@@ -5,7 +5,7 @@
   )
 where
 
-import Linear
+import Linear (Epsilon (nearZero), Metric (dot), V2, crossZ, unangle)
 
 -- | Convex is represented by its supprot function
 newtype Convex = Convex { support :: Double -> V2 Double }
@@ -14,14 +14,6 @@
 minkowskiDifference :: Convex -> Convex -> Convex
 minkowskiDifference a b = Convex $ (-) <$> support a <*> (support b . (+ pi))
 
--- | Compute angle of a vector
-unAngle :: V2 Double -> Double
-unAngle a@(V2 ax ay) =
-  let alpha = asin $ ay / norm a
-  in if ax < 0
-       then pi - alpha
-       else alpha
-
 -- | Core Logic: Detect if origin point is contained inside a Convex
 originInside :: Convex -> Bool
 originInside s =
@@ -30,7 +22,7 @@
     else doSimplex (support s) a b
   where
     a = support s 0
-    b = support s $ unAngle (-a)
+    b = support s $ unangle (-a)
 
 -- | Simplex addition till nearZero
 doSimplex :: (Double -> V2 Double) -> V2 Double -> V2 Double -> Bool
@@ -42,7 +34,7 @@
              then doSimplex s a c
              else True))
   where
-    c = s $ unAngle (b - a) + (if axb > 0 then pi / 2 else -pi / 2)
+    c = s $ unangle (b - a) + (if axb > 0 then pi / 2 else -pi / 2)
     axb = crossZ a b
     axc = crossZ a c
     bxc = crossZ b c
