diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,8 @@
+1.16.2
+----
+* Added `NFData` instances for the various vector types.
+* Added `!!/` operator for matrix division by scalar.
+
 1.16.1
 ----
 * Added `Trace` instance for `V1`.
diff --git a/linear.cabal b/linear.cabal
--- a/linear.cabal
+++ b/linear.cabal
@@ -1,6 +1,6 @@
 name:          linear
 category:      Math, Algebra
-version:       1.16.1
+version:       1.16.2
 license:       BSD3
 cabal-version: >= 1.8
 license-file:  LICENSE
@@ -34,6 +34,7 @@
     base                 >= 4.5   && < 5,
     binary               >= 0.5   && < 0.8,
     containers           >= 0.4   && < 0.6,
+    deepseq              >= 1.1   && < 1.5,
     distributive         >= 0.2.2 && < 1,
     ghc-prim,
     hashable             >= 1.1   && < 1.3,
diff --git a/src/Linear/Matrix.hs b/src/Linear/Matrix.hs
--- a/src/Linear/Matrix.hs
+++ b/src/Linear/Matrix.hs
@@ -17,7 +17,7 @@
 -- Simple matrix operation for low-dimensional primitives.
 ---------------------------------------------------------------------------
 module Linear.Matrix
-  ( (!*!), (!+!), (!-!), (!*) , (*!), (!!*), (*!!)
+  ( (!*!), (!+!), (!-!), (!*), (*!), (!!*), (*!!), (!!/)
   , column
   , adjoint
   , M22, M23, M24, M32, M33, M34, M42, M43, M44
@@ -140,6 +140,12 @@
 (!!*) :: (Functor m, Functor r, Num a) => m (r a) -> a -> m (r a)
 (!!*) = flip (*!!)
 {-# INLINE (!!*) #-}
+
+infixl 7 !!/
+-- | Matrix-scalar division
+(!!/) :: (Functor m, Functor r, Fractional a) => m (r a) -> a -> m (r a)
+m !!/ s = fmap (^/ s) m
+{-# INLINE (!!/) #-}
 
 -- | Hermitian conjugate or conjugate transpose
 --
diff --git a/src/Linear/Plucker.hs b/src/Linear/Plucker.hs
--- a/src/Linear/Plucker.hs
+++ b/src/Linear/Plucker.hs
@@ -46,6 +46,7 @@
   ) where
 
 import Control.Applicative
+import Control.DeepSeq (NFData(rnf))
 import Control.Monad (liftM)
 import Control.Monad.Fix
 import Control.Monad.Zip
@@ -519,3 +520,7 @@
                    (let Plucker _ _ _ a _ _ = f a in a)
                    (let Plucker _ _ _ _ a _ = f a in a)
                    (let Plucker _ _ _ _ _ a = f a in a)
+
+instance NFData a => NFData (Plucker a) where
+  rnf (Plucker a b c d e f) = rnf a `seq` rnf b `seq` rnf c
+                        `seq` rnf d `seq` rnf e `seq` rnf f
diff --git a/src/Linear/Quaternion.hs b/src/Linear/Quaternion.hs
--- a/src/Linear/Quaternion.hs
+++ b/src/Linear/Quaternion.hs
@@ -39,6 +39,7 @@
   ) where
 
 import Control.Applicative
+import Control.DeepSeq (NFData(rnf))
 import Control.Monad (liftM)
 import Control.Monad.Fix
 import Control.Monad.Zip
@@ -550,3 +551,6 @@
                       (V3 (let Quaternion _ (V3 a _ _) = f a in a)
                           (let Quaternion _ (V3 _ a _) = f a in a)
                           (let Quaternion _ (V3 _ _ a) = f a in a))
+
+instance NFData a => NFData (Quaternion a) where
+  rnf (Quaternion a b) = rnf a `seq` rnf b
diff --git a/src/Linear/V.hs b/src/Linear/V.hs
--- a/src/Linear/V.hs
+++ b/src/Linear/V.hs
@@ -43,6 +43,7 @@
   ) where
 
 import Control.Applicative
+import Control.DeepSeq (NFData)
 import Control.Monad.Fix
 import Control.Monad.Zip
 import Control.Lens as Lens
@@ -86,7 +87,7 @@
 type role V nominal representational
 #endif
 
-newtype V n a = V { toVector :: V.Vector a } deriving (Eq,Ord,Show,Read,Typeable
+newtype V n a = V { toVector :: V.Vector a } deriving (Eq,Ord,Show,Read,Typeable,NFData
                                                       , Generic
 -- GHC bug: https://ghc.haskell.org/trac/ghc/ticket/8468
 #if __GLASGOW_HASKELL__ >= 707
diff --git a/src/Linear/V0.hs b/src/Linear/V0.hs
--- a/src/Linear/V0.hs
+++ b/src/Linear/V0.hs
@@ -28,6 +28,7 @@
   ) where
 
 import Control.Applicative
+import Control.DeepSeq (NFData(rnf))
 import Control.Lens
 import Control.Monad.Fix
 import Control.Monad.Zip
@@ -232,3 +233,6 @@
   {-# INLINE minBound #-}
   maxBound = V0
   {-# INLINE maxBound #-}
+
+instance NFData (V0 a) where
+  rnf V0 = ()
diff --git a/src/Linear/V1.hs b/src/Linear/V1.hs
--- a/src/Linear/V1.hs
+++ b/src/Linear/V1.hs
@@ -35,6 +35,7 @@
   ) where
 
 import Control.Applicative
+import Control.DeepSeq (NFData)
 import Control.Monad (liftM)
 import Control.Monad.Fix
 import Control.Monad.Zip
@@ -89,7 +90,7 @@
 newtype V1 a = V1 a
   deriving (Eq,Ord,Show,Read,Data,Typeable,
             Functor,Foldable,Traversable,
-            Epsilon,Storable
+            Epsilon,Storable,NFData
 #if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
            ,Generic
 #endif
diff --git a/src/Linear/V2.hs b/src/Linear/V2.hs
--- a/src/Linear/V2.hs
+++ b/src/Linear/V2.hs
@@ -32,6 +32,7 @@
   ) where
 
 import Control.Applicative
+import Control.DeepSeq (NFData(rnf))
 import Control.Monad (liftM)
 import Control.Monad.Fix
 import Control.Monad.Zip
@@ -328,3 +329,6 @@
   {-# INLINE minBound #-}
   maxBound = pure maxBound
   {-# INLINE maxBound #-}
+
+instance NFData a => NFData (V2 a) where
+  rnf (V2 a b) = rnf a `seq` rnf b
diff --git a/src/Linear/V3.hs b/src/Linear/V3.hs
--- a/src/Linear/V3.hs
+++ b/src/Linear/V3.hs
@@ -33,6 +33,7 @@
   ) where
 
 import Control.Applicative
+import Control.DeepSeq (NFData(rnf))
 import Control.Monad (liftM)
 import Control.Monad.Fix
 import Control.Monad.Zip
@@ -351,3 +352,6 @@
   {-# INLINE minBound #-}
   maxBound = pure maxBound
   {-# INLINE maxBound #-}
+
+instance NFData a => NFData (V3 a) where
+  rnf (V3 a b c) = rnf a `seq` rnf b `seq` rnf c
diff --git a/src/Linear/V4.hs b/src/Linear/V4.hs
--- a/src/Linear/V4.hs
+++ b/src/Linear/V4.hs
@@ -40,6 +40,7 @@
   ) where
 
 import Control.Applicative
+import Control.DeepSeq (NFData(rnf))
 import Control.Monad (liftM)
 import Control.Monad.Fix
 import Control.Monad.Zip
@@ -498,3 +499,6 @@
   {-# INLINE minBound #-}
   maxBound = pure maxBound
   {-# INLINE maxBound #-}
+
+instance NFData a => NFData (V4 a) where
+  rnf (V4 a b c d) = rnf a `seq` rnf b `seq` rnf c `seq` rnf d
