diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -64,3 +64,8 @@
 0.1.3.4:
 		renamed unwrap to unwrap_double
 		added unwrap_float
+
+0.1.3.5:
+		renamed vector_deriv to vector_diff_double
+		added vector_diff_float
+
diff --git a/hsignal.cabal b/hsignal.cabal
--- a/hsignal.cabal
+++ b/hsignal.cabal
@@ -1,5 +1,5 @@
 Name:               hsignal
-Version:            0.1.3.4
+Version:            0.1.3.5
 License:            BSD3
 License-file:       LICENSE
 Copyright:          (c) A.V.H. McPhail 2010, 2011
diff --git a/lib/Numeric/Signal/Internal.hs b/lib/Numeric/Signal/Internal.hs
--- a/lib/Numeric/Signal/Internal.hs
+++ b/lib/Numeric/Signal/Internal.hs
@@ -304,19 +304,19 @@
 derivD :: Vector Double -> Vector Double
 derivD v = unsafePerformIO $ do
           r <- createVector (dim v - 1)
-          app2 (signal_deriv_double) vec v vec r "diff"
+          app2 (signal_diff_double) vec v vec r "diff"
           return r
 
-foreign import ccall "signal-aux.h vector_deriv_double" signal_deriv_double :: CInt -> PD -> CInt -> PD -> IO CInt
+foreign import ccall "signal-aux.h vector_diff_double" signal_diff_double :: CInt -> PD -> CInt -> PD -> IO CInt
 
 -- | the difference between consecutive elements of a vector
 derivF :: Vector Float -> Vector Float
 derivF v = unsafePerformIO $ do
           r <- createVector (dim v - 1)
-          app2 (signal_deriv_float) vec v vec r "diff"
+          app2 (signal_diff_float) vec v vec r "diff"
           return r
 
-foreign import ccall "signal-aux.h vector_deriv_float" signal_deriv_float :: CInt -> PF -> CInt -> PF -> IO CInt
+foreign import ccall "signal-aux.h vector_diff_float" signal_diff_float :: CInt -> PF -> CInt -> PF -> IO CInt
 
 -----------------------------------------------------------------------------
 
diff --git a/lib/Numeric/Signal/signal-aux.c b/lib/Numeric/Signal/signal-aux.c
--- a/lib/Numeric/Signal/signal-aux.c
+++ b/lib/Numeric/Signal/signal-aux.c
@@ -265,7 +265,19 @@
   return 0;
 }
 
-int vector_deriv(int xs, const double* x, int rs, double* r)
+int vector_diff_double(int xs, const double* x, int rs, double* r)
+{
+  if (rs != xs - 1) return 2000; // BAD_SIZE
+
+  int i;
+
+  for (i = 0; i < rs; i++)
+    r[i] = x[i+1] - x[i];
+
+  return 0;
+}
+
+int vector_diff_float(int xs, const float* x, int rs, float* r)
 {
   if (rs != xs - 1) return 2000; // BAD_SIZE
 
