diff --git a/LPFP.cabal b/LPFP.cabal
--- a/LPFP.cabal
+++ b/LPFP.cabal
@@ -1,7 +1,5 @@
-cabal-version: 1.12
-
 name:           LPFP
-version:        1.1
+version:        1.1.1
 synopsis:       Code for the book Learn Physics with Functional Programming
 description:    Haskell code to help the user learn mechanics of one particle,
                 mechanics of multiple interacting particles, and electromagnetic theory.
@@ -13,6 +11,7 @@
 license-file:   LICENSE
 build-type:     Simple
 category:       Physics
+cabal-version: 1.12
 
 library
   exposed-modules:
@@ -35,8 +34,15 @@
       LPFP.Maxwell
   hs-source-dirs: src
   build-depends:
-      base >=4.7 && <5, gnuplot, spatial-math, gloss, not-gloss, diagrams-lib
-    , diagrams-cairo, containers
+      base >= 4.7 && < 5,
+      SpatialMath >= 0.2.7 && < 0.3,
+      containers >= 0.6.7 && < 0.7,
+      linear >= 1.22 && < 1.23,
+      Vis >= 0.7.7 && < 0.8,
+      diagrams-cairo >= 1.4.2 && < 1.5,
+      diagrams-lib >= 1.4.6 && < 1.5,
+      gloss >= 1.13.2 && < 1.14,
+      gnuplot >= 0.5.7 && < 0.6
   default-language: Haskell2010
 
 executable LPFP-hello
@@ -46,7 +52,7 @@
   ghc-options: -threaded -rtsopts -with-rtsopts=-N
   build-depends:
       LPFP
-    , base >=4.7 && <5
+    , base >= 4.7 && < 5
   default-language: Haskell2010
 
 executable LPFP-MakeTrajectoryGraph
@@ -56,8 +62,8 @@
   ghc-options: -threaded -rtsopts -with-rtsopts=-N
   build-depends:
       LPFP
-    , base >=4.7 && <5
-    , gnuplot
+    , base >= 4.7 && < 5
+    , gnuplot >= 0.5.7 && < 0.6
   default-language: Haskell2010
 
 executable LPFP-GlossDisplay
@@ -68,7 +74,7 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , gloss
+    , gloss >= 1.13.2 && < 1.14
   default-language: Haskell2010
 
 executable LPFP-GlossDisplay2
@@ -79,7 +85,7 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , gloss
+    , gloss >= 1.13.2 && < 1.14
   default-language: Haskell2010
 
 executable LPFP-GlossAnimate
@@ -90,7 +96,7 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , gloss
+    , gloss >= 1.13.2 && < 1.14
   default-language: Haskell2010
 
 executable LPFP-GlossSimulate
@@ -101,7 +107,7 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , gloss
+    , gloss >= 1.13.2 && < 1.14
   default-language: Haskell2010
 
 executable LPFP-GlossSimulate2
@@ -112,7 +118,7 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , gloss
+    , gloss >= 1.13.2 && < 1.14
   default-language: Haskell2010
 
 executable LPFP-VisDisplay
@@ -123,7 +129,7 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , not-gloss
+    , Vis >= 0.7.7 && < 0.8
   default-language: Haskell2010
 
 executable LPFP-VisDisplay2
@@ -134,8 +140,8 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , not-gloss
-    , linear
+    , Vis >= 0.7.7 && < 0.8
+    , linear >= 1.22 && < 1.23
   default-language: Haskell2010
 
 executable LPFP-VisDisplay3
@@ -146,9 +152,9 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , not-gloss
-    , linear
-    , spatial-math
+    , Vis >= 0.7.7 && < 0.8
+    , linear >= 1.22 && < 1.23
+    , SpatialMath >= 0.2.7 && < 0.3
   default-language: Haskell2010
 
 executable LPFP-VisAnimate
@@ -159,8 +165,8 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , not-gloss
-    , spatial-math
+    , Vis >= 0.7.7 && < 0.8
+    , SpatialMath >= 0.2.7 && < 0.3
   default-language: Haskell2010
 
 executable LPFP-VisSimulate
@@ -171,7 +177,7 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , not-gloss
+    , Vis >= 0.7.7 && < 0.8
   default-language: Haskell2010
 
 executable LPFP-GlossHalley
@@ -182,7 +188,7 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , gloss
+    , gloss >= 1.13.2 && < 1.14
   default-language: Haskell2010
 
 executable LPFP-GlossProjectile
@@ -193,7 +199,7 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , gloss
+    , gloss >= 1.13.2 && < 1.14
   default-language: Haskell2010
 
 executable LPFP-VisProjectile
@@ -204,7 +210,7 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , not-gloss
+    , Vis >= 0.7.7 && < 0.8
   default-language: Haskell2010
 
 executable LPFP-Mech3Proton
@@ -215,7 +221,7 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , gloss
+    , gloss >= 1.13.2 && < 1.14
   default-language: Haskell2010
 
 executable LPFP-GlossProton
@@ -226,13 +232,13 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , gloss
+    , gloss >= 1.13.2 && < 1.14
   default-language: Haskell2010
 
 executable LPFP-VisTwoSprings
   main-is: VisTwoSprings.hs
   hs-source-dirs: app
-  build-depends: LPFP, base >=4.7 && <5, not-gloss
+  build-depends: LPFP, base >=4.7 && <5, Vis >= 0.7.7 && < 0.8
   default-language: Haskell2010
 
 executable LPFP-GlossBilliard
@@ -243,13 +249,13 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , gloss
+    , gloss >= 1.13.2 && < 1.14
   default-language: Haskell2010
 
 executable LPFP-GlossWave
   main-is: GlossWave.hs
   hs-source-dirs: app
-  build-depends: LPFP, base >=4.7 && <5, gloss
+  build-depends: LPFP, base >=4.7 && <5, gloss >= 1.13.2 && < 1.14
   default-language: Haskell2010
 
 executable LPFP-GnuplotWave
@@ -260,7 +266,7 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , gnuplot
+    , gnuplot >= 0.5.7 && < 0.6
   default-language: Haskell2010
 
 executable LPFP-GlossBilliardAnimate
@@ -281,7 +287,7 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , not-gloss
+    , Vis >= 0.7.7 && < 0.8
   default-language: Haskell2010
 
 executable LPFP-Hydrogen
@@ -292,7 +298,7 @@
   build-depends:
       LPFP
     , base >=4.7 && <5
-    , not-gloss
+    , Vis >= 0.7.7 && < 0.8
   default-language: Haskell2010
 
 executable LPFP-ElectricWave
