diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,18 @@
 Changelog
 =========
 
+Version 0.1.2.0
+---------------
+
+*Mar 30, 2018*
+
+<https://github.com/mstksg/hmatrix-backprop/releases/tag/v0.1.2.0>
+
+*   `zipWithVector` family rewritten in the same way as `dvmap`/`dvmap` were
+    for version 0.1.1.0, which is a breaking API change.  However, again, it is
+    unlikely that any code using the previous versions compiled at all, so in
+    practicality, no actual code that previously worked is now breaking.
+
 Version 0.1.1.0
 ---------------
 
diff --git a/hmatrix-backprop.cabal b/hmatrix-backprop.cabal
--- a/hmatrix-backprop.cabal
+++ b/hmatrix-backprop.cabal
@@ -1,11 +1,11 @@
--- This file has been generated from package.yaml by hpack version 0.20.0.
+-- This file has been generated from package.yaml by hpack version 0.21.2.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 7bd7d72297fd6caf75a31bbc3856f764f21999255f99a4f6bcad71e4739acf2a
+-- hash: 11c33ad908b833f31f1c4bbe92635523c13c44f590d50114a5e0a4992e1c47a1
 
 name:           hmatrix-backprop
-version:        0.1.1.0
+version:        0.1.2.0
 synopsis:       hmatrix operations lifted for backprop
 description:    hmatrix operations lifted for backprop.
                 .
diff --git a/src/Numeric/LinearAlgebra/Static/Backprop.hs b/src/Numeric/LinearAlgebra/Static/Backprop.hs
--- a/src/Numeric/LinearAlgebra/Static/Backprop.hs
+++ b/src/Numeric/LinearAlgebra/Static/Backprop.hs
@@ -157,6 +157,7 @@
   , outer
   , zipWithVector
   , zipWithVector'
+  , dzipWithVector
   , det
   , invlndet
   , lndet
@@ -793,7 +794,7 @@
     :: ( Reifies s W
        , KnownNat n
        )
-    => (BVar s Double -> BVar s Double)
+    => (BVar s H.ℝ -> BVar s H.ℝ)
     -> BVar s (H.R n)
     -> BVar s (H.R n)
 vmap f = isoVar (H.vecR . SVG.convert @V.Vector) (SVG.convert . H.rVec)
@@ -846,7 +847,7 @@
        , KnownNat n
        , KnownNat m
        )
-    => (BVar s Double -> BVar s Double)
+    => (BVar s H.ℝ -> BVar s H.ℝ)
     -> BVar s (H.L n m)
     -> BVar s (H.L n m)
 mmap f = isoVar (H.vecL . SVG.convert @V.Vector) (SVG.convert . H.lVec)
@@ -917,31 +918,44 @@
     )
 {-# INLINE outer #-}
 
+-- | Note: if possible, use the potentially much more performant
+-- 'zipWithVector''.
 zipWithVector
+    :: ( Reifies s W, KnownNat n )
+    => (BVar s H.ℝ -> BVar s H.ℝ -> BVar s H.ℝ)
+    -> BVar s (H.R n)
+    -> BVar s (H.R n)
+    -> BVar s (H.R n)
+zipWithVector f x y = isoVar (H.vecR . SVG.convert) (SVG.convert . H.rVec)
+                    $ B.liftA2 @(SV.Vector _) f (iv x) (iv y)
+  where
+    iv = isoVar (SVG.convert . H.rVec) (H.vecR . SVG.convert)
+{-# INLINE zipWithVector #-}
+
+zipWithVector'
     :: ( Reifies s W
        , Num (vec n)
        , Storable field
-       , Storable (field, field, field)
        , H.Sized field (vec n) HU.Vector
        )
     => (forall s'. Reifies s' W => BVar s' field -> BVar s' field -> BVar s' field)
     -> BVar s (vec n)
     -> BVar s (vec n)
     -> BVar s (vec n)
-zipWithVector f = liftOp2 . op2 $ \(H.extract->x) (H.extract->y) ->
-    let (z,dx,dy) = VG.unzip3
-                  $ VG.zipWith (\x' y' ->
-                      let (z', (dx', dy')) = backprop2 f x' y'
-                      in  (z', dx', dy')
-                    ) x y
-    in  ( fromJust (H.create z)
-        , \d -> (d * fromJust (H.create dx), d * fromJust (H.create dy))
+zipWithVector' f = liftOp2 . op2 $ \(VG.convert.H.extract->x) (VG.convert.H.extract->y) ->
+    let (z, dx, dy) = V.unzip3 $ V.zipWith (\x' -> retup . backprop2 f x') x y
+    in  ( fromJust (H.create (VG.convert z))
+        , \d -> ( d * fromJust (H.create (VG.convert dx))
+                , d * fromJust (H.create (VG.convert dy))
+                )
         )
-{-# INLINE zipWithVector #-}
+  where
+    retup (x, (y, z)) = (x, y, z)
+{-# INLINE zipWithVector' #-}
 
--- | A version of 'zipWithVector' that is less performant but is based on
--- 'H.zipWithVector' from 'H.Domain'.
-zipWithVector'
+-- | A version of 'zipWithVector'' that is potentially less performant but
+-- is based on 'H.zipWithVector' from 'H.Domain'.
+dzipWithVector
     :: ( Reifies s W
        , KnownNat n
        , H.Domain field vec mat
@@ -952,13 +966,13 @@
     -> BVar s (vec n)
     -> BVar s (vec n)
     -> BVar s (vec n)
-zipWithVector' f = liftOp2 . op2 $ \x y ->
+dzipWithVector f = liftOp2 . op2 $ \x y ->
     ( H.zipWithVector (evalBP2 f) x y
     , \d -> let dx = H.zipWithVector (\x' -> fst . gradBP2 f x') x y
                 dy = H.zipWithVector (\x' -> snd . gradBP2 f x') x y
             in  (d * dx, d * dy)
     )
-{-# INLINE zipWithVector' #-}
+{-# INLINE dzipWithVector #-}
 
 det :: ( Reifies s W
        , KnownNat n
