diff --git a/fast-fourier-transforms/backward.lisp b/fast-fourier-transforms/backward.lisp
index 1fa4c79b330a3eaf988356f7b8a27aea8b885bf0..9f9ce626a600836f45ed262cb051860b89736782 100644
--- a/fast-fourier-transforms/backward.lisp
+++ b/fast-fourier-transforms/backward.lisp
@@ -15,9 +15,9 @@
 
 ;;; Backward transformations where the size is a power of 2
 (defmfun backward-fourier-transform-radix2
-  ((vector vector) &key (stride 1) (n (expt 2 (floor (log (size vector) 2)))))
+  ((vector vector) &key (stride 1))
   ("gsl_fft" :type "_radix2_backward")
-  (((c-pointer vector) :pointer) (stride sizet) (n sizet))
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet))
   :definition :generic
   :element-types :complex
   :inputs (vector)
@@ -29,11 +29,11 @@
   "Backward FFT on a vector for which (floor length stride) is a power of 2.")
 
 (defmfun backward-fourier-transform-nonradix2
-    ((vector vector) &key (stride 1) (n (size vector))
-     (wavetable (make-fft-wavetable element-type (size vector)))
-     (workspace (make-fft-workspace element-type (size vector))))
+    ((vector vector) &key (stride 1)
+     (wavetable (make-fft-wavetable element-type (floor (size vector) stride)))
+     (workspace (make-fft-workspace element-type (floor (size vector) stride))))
   ("gsl_fft" :type "_backward")
-  (((c-pointer vector) :pointer) (stride sizet) (n sizet)
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet)
    ((mpointer wavetable) :pointer) ((mpointer workspace) :pointer))
   :definition :generic
   :element-types :complex
@@ -51,9 +51,9 @@
 ;;;;****************************************************************************
 
 (defmfun backward-fourier-transform-halfcomplex-radix2
-    ((vector vector) &key (stride 1) (n (expt 2 (floor (log (size vector) 2)))))
+    ((vector vector) &key (stride 1))
   ("gsl_fft_halfcomplex" :type "_radix2_backward")
-  (((c-pointer vector) :pointer) (stride sizet) (n sizet))
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet))
   :definition :generic
   :element-types :float
   :inputs (vector)
@@ -66,11 +66,11 @@
    in half complex form.")
 
 (defmfun backward-fourier-transform-halfcomplex-nonradix2
-    ((vector vector) &key (stride 1) (n (size vector))
-     (wavetable (make-fft-wavetable element-type (size vector) t))
-     (workspace (make-fft-workspace element-type (size vector))))
+    ((vector vector) &key (stride 1)
+     (wavetable (make-fft-wavetable element-type (floor (size vector) stride) t))
+     (workspace (make-fft-workspace element-type (floor (size vector) stride))))
   ("gsl_fft_halfcomplex" :type "_backward")
-  (((c-pointer vector) :pointer) (stride sizet) (n sizet)
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet)
    ((mpointer wavetable) :pointer) ((mpointer workspace) :pointer))
   :definition :generic
   :element-types :float
@@ -88,9 +88,9 @@
 ;;;;****************************************************************************
 
 (defmfun backward-fourier-transform-dif-radix2
-  ((vector vector) &key (stride 1) (n (expt 2 (floor (log (size vector) 2)))))
+  ((vector vector) &key (stride 1))
   ("gsl_fft" :type "_radix2_dif_backward")
-  (((c-pointer vector) :pointer) (stride sizet) (n sizet))
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet))
   :definition :generic
   :element-types :complex
   :inputs (vector)
diff --git a/fast-fourier-transforms/discrete.lisp b/fast-fourier-transforms/discrete.lisp
index 6e1fc10dca5ea7088d156706abb4d209e2dce79b..f03d0115271009cbb5305dbff1e7dcf69d9536b8 100644
--- a/fast-fourier-transforms/discrete.lisp
+++ b/fast-fourier-transforms/discrete.lisp
@@ -15,7 +15,7 @@
      &key (stride 1)
      (result (make-marray element-type :dimensions (dimensions vector))))
   ("gsl_dft" :type "_forward")
-  (((c-pointer vector) :pointer) (stride sizet) ((size vector) sizet)
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet)
    ((c-pointer result) :pointer))
   :definition :generic
   :element-types :complex
@@ -31,7 +31,7 @@
      &key (stride 1)
      (result (make-marray element-type :dimensions (dimensions vector))))
   ("gsl_dft" :type "_backward")
-  (((c-pointer vector) :pointer) (stride sizet) ((size vector) sizet)
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet)
    ((c-pointer result) :pointer))
   :definition :generic
   :element-types :complex
@@ -47,7 +47,7 @@
      &key (stride 1)
      (result (make-marray element-type :dimensions (dimensions vector))))
   ("gsl_dft" :type "_inverse")
-  (((c-pointer vector) :pointer) (stride sizet) ((size vector) sizet)
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet)
    ((c-pointer result) :pointer))
   :definition :generic
   :element-types :complex
@@ -63,7 +63,7 @@
      &key (stride 1)
      (result (make-marray element-type :dimensions (dimensions vector))))
   ("gsl_dft" :type "_transform")
-  (((c-pointer vector) :pointer) (stride sizet) ((size vector) sizet)
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet)
    ((c-pointer result) :pointer))
   :definition :generic
   :element-types :complex
diff --git a/fast-fourier-transforms/forward.lisp b/fast-fourier-transforms/forward.lisp
index 7dcddc348aca093777430bf40834dac1e966415d..1e5c571f719455cab6dbbd3c8ef3a36bf8df89a2 100644
--- a/fast-fourier-transforms/forward.lisp
+++ b/fast-fourier-transforms/forward.lisp
@@ -21,7 +21,7 @@
    single-float "gsl_fft_real_float_radix2_transform"
    complex-double-float "gsl_fft_complex_radix2_forward"
    complex-single-float "gsl_fft_complex_float_radix2_forward")
-  (((c-pointer vector) :pointer) (stride sizet) ((size vector) sizet))
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet))
   :definition :generic
   :element-types :float-complex
   :inputs (vector)
@@ -34,13 +34,13 @@
 
 (defmfun forward-fourier-transform-nonradix2
     ((vector vector) &key (stride 1)
-     (wavetable (make-fft-wavetable element-type (size vector)))
-     (workspace (make-fft-workspace element-type (size vector))))
+     (wavetable (make-fft-wavetable element-type (floor (size vector) stride)))
+     (workspace (make-fft-workspace element-type (floor (size vector) stride))))
   (double-float "gsl_fft_real_transform"
 		single-float "gsl_fft_real_float_transform"
 		complex-double-float "gsl_fft_complex_forward"
 		complex-single-float "gsl_fft_complex_float_forward")
-  (((c-pointer vector) :pointer) (stride sizet) ((size vector) sizet)
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet)
    ((mpointer wavetable) :pointer) ((mpointer workspace) :pointer))
   :definition :generic
   :element-types :float-complex
@@ -59,7 +59,7 @@
 (defmfun forward-fourier-transform-halfcomplex-radix2
     ((vector vector) &key (stride 1))
   ("gsl_fft_halfcomplex" :type "_radix2_transform")
-  (((c-pointer vector) :pointer) (stride sizet) ((size vector) sizet))
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet))
   :definition :generic
   :element-types :float
   :inputs (vector)
@@ -73,10 +73,10 @@
 
 (defmfun forward-fourier-transform-halfcomplex-nonradix2
     ((vector vector) &key (stride 1)
-     (wavetable (make-fft-wavetable element-type (size vector) t))
-     (workspace (make-fft-workspace element-type (size vector))))
+     (wavetable (make-fft-wavetable element-type (floor (size vector) stride) t))
+     (workspace (make-fft-workspace element-type (floor (size vector) stride))))
   ("gsl_fft_halfcomplex" :type "_transform")
-  (((c-pointer vector) :pointer) (stride sizet) ((size vector) sizet)
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet)
    ((mpointer wavetable) :pointer) ((mpointer workspace) :pointer))
   :definition :generic
   :element-types :float
@@ -95,7 +95,7 @@
 
 (defmfun forward-fourier-transform-dif-radix2 ((vector vector) &key (stride 1))
   ("gsl_fft" :type "_radix2_dif_forward")
-  (((c-pointer vector) :pointer) (stride sizet) ((size vector) sizet))
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet))
   :definition :generic
   :element-types :complex
   :inputs (vector)
diff --git a/fast-fourier-transforms/inverse.lisp b/fast-fourier-transforms/inverse.lisp
index 7c48f65788ad3c68eb71ecdfdcf7951014bbed2c..4956779d86f71c268759edf154d7f0c618c73b2e 100644
--- a/fast-fourier-transforms/inverse.lisp
+++ b/fast-fourier-transforms/inverse.lisp
@@ -15,9 +15,9 @@
 
 ;;; Inverse transformations where the size is a power of 2
 (defmfun inverse-fourier-transform-radix2
-  ((vector vector) &key (stride 1) (n (expt 2 (floor (log (size vector) 2)))))
+  ((vector vector) &key (stride 1))
   ("gsl_fft" :type "_radix2_inverse")
-  (((c-pointer vector) :pointer) (stride sizet) (n sizet))
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet))
   :definition :generic
   :element-types :complex
   :inputs (vector)
@@ -29,11 +29,11 @@
   "Inverse FFT on a vector for which (floor length stride) is a power of 2.")
 
 (defmfun inverse-fourier-transform-nonradix2
-    ((vector vector) &key (stride 1) (n (size vector))
-     (wavetable (make-fft-wavetable element-type (size vector)))
-     (workspace (make-fft-workspace element-type (size vector))))
+    ((vector vector) &key (stride 1)
+     (wavetable (make-fft-wavetable element-type (floor (size vector) stride)))
+     (workspace (make-fft-workspace element-type (floor (size vector) stride))))
   ("gsl_fft" :type "_inverse")
-  (((c-pointer vector) :pointer) (stride sizet) (n sizet)
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet)
    ((mpointer wavetable) :pointer) ((mpointer workspace) :pointer))
   :definition :generic
   :element-types :complex
@@ -51,9 +51,9 @@
 ;;;;****************************************************************************
 
 (defmfun inverse-fourier-transform-halfcomplex-radix2
-    ((vector vector) &key (stride 1) (n (expt 2 (floor (log (size vector) 2)))))
+    ((vector vector) &key (stride 1))
   ("gsl_fft_halfcomplex" :type "_radix2_inverse")
-  (((c-pointer vector) :pointer) (stride sizet) (n sizet))
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet))
   :definition :generic
   :element-types :float
   :inputs (vector)
@@ -66,11 +66,11 @@
    in half complex form.")
 
 (defmfun inverse-fourier-transform-halfcomplex-nonradix2
-    ((vector vector) &key (stride 1) (n (size vector))
-     (wavetable (make-fft-wavetable element-type (size vector) t))
-     (workspace (make-fft-workspace element-type (size vector))))
+    ((vector vector) &key (stride 1)
+     (wavetable (make-fft-wavetable element-type (floor (size vector) stride) t))
+     (workspace (make-fft-workspace element-type (floor (size vector) stride))))
   ("gsl_fft_halfcomplex" :type "_inverse")
-  (((c-pointer vector) :pointer) (stride sizet) (n sizet)
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet)
    ((mpointer wavetable) :pointer) ((mpointer workspace) :pointer))
   :definition :generic
   :element-types :float
@@ -88,9 +88,9 @@
 ;;;;****************************************************************************
 
 (defmfun inverse-fourier-transform-dif-radix2
-  ((vector vector) &key (stride 1) (n (expt 2 (floor (log (size vector) 2)))))
+  ((vector vector) &key (stride 1))
   ("gsl_fft" :type "_radix2_dif_inverse")
-  (((c-pointer vector) :pointer) (stride sizet) (n sizet))
+  (((c-pointer vector) :pointer) (stride sizet) ((floor (size vector) stride) sizet))
   :definition :generic
   :element-types :complex
   :inputs (vector)