diff --git a/data/array-tests.lisp b/data/array-tests.lisp
index 7e958f0a6fbb1eb629fdfa73a38b3b268fdfbb63..75d2343ee78e1f7814f9733338cc213b2ee3a7b1 100644
--- a/data/array-tests.lisp
+++ b/data/array-tests.lisp
@@ -1,6 +1,6 @@
 ;; Tests of array functions 
 ;; Liam Healy 2008-10-20 22:41:48EDT array-tests.lisp
-;; Time-stamp: <2009-04-29 22:23:37EDT array-tests.lisp>
+;; Time-stamp: <2009-05-03 11:18:04EDT array-tests.lisp>
 ;; $Id: $
 
 ;;; Generate each file with #'write-test-to-file, e.g.
@@ -15,11 +15,11 @@
 ;;;; Bulk operations
 ;;;;****************************************************************************
 
-(generate-all-array-tests vector-set-all t
+(generate-all-array-tests vector-set-all #+fsbv t #-fsbv :no-complex
  (let ((v1 (array-default 3 t)))
    (cl-array (set-all v1 (scalar-default)))))
 
-(generate-all-array-tests matrix-set-all t
+(generate-all-array-tests matrix-set-all #+fsbv t #-fsbv :no-complex
  (let ((m1 (array-default '(3 3) t)))
    (cl-array (set-all m1 (scalar-default)))))
 
diff --git a/data/both.lisp b/data/both.lisp
index f95bfbbcb35ad91cbf7fa506779e8a6329532a90..9bfbfac0fb693944c91c36a7a3561d8218f33117 100644
--- a/data/both.lisp
+++ b/data/both.lisp
@@ -1,6 +1,6 @@
 ;; Functions for both vectors and matrices.
 ;; Liam Healy 2008-04-26 20:48:44EDT both.lisp
-;; Time-stamp: <2009-04-26 22:29:34EDT both.lisp>
+;; Time-stamp: <2009-05-03 11:24:50EDT both.lisp>
 ;; $Id$
 
 (in-package :gsl)
@@ -39,6 +39,7 @@
   ("gsl_" :category :type "_set_all")
   (((mpointer object) :pointer) (value :element-c-type))
   :definition :generic
+  :element-types #+fsbv t #-fsbv :no-complex
   :inputs (object)
   :outputs (object)
   :c-return :void
@@ -90,6 +91,7 @@
   ("gsl_"  :category :type "_set")
   (((mpointer object) :pointer) (index sizet) (value :element-c-type))
   :definition :generic
+  :element-types #+fsbv t #-fsbv :no-complex
   :inputs (object)
   :outputs (object)
   :c-return :void
diff --git a/documentation/index.html b/documentation/index.html
index cacee1448a41be43b48634bce517a378855dce26..5581632153c423ed89ae7cd38acad535d3b80c3c 100644
--- a/documentation/index.html
+++ b/documentation/index.html
@@ -115,6 +115,8 @@ version 0.10.0 or newer; callbacks and <code>foreign-funcall</code> must be supp
 <li><a href="http://www.cliki.net/asdf">ASDF</a></li>
 <li><a href="http://repo.or.cz/w/lisp-unit.git">lisp-unit</a>, <i>(Optional)</i> necessary 
    to run <code>gsll-tests</code>
+<li><a href="http://repo.or.cz/w/fsbv.git">FSBV</a>, <i>(Optional)</i> necessary 
+   for functions using complex scalars
 </li>
 </ul>
 
@@ -135,7 +137,9 @@ version 0.10.0 or newer; callbacks and <code>foreign-funcall</code> must be supp
 <p>Download/update:
   <ul>
     <li><code>git clone git://repo.or.cz/gsll.git</code></li>
-    <li><code>git pull</code> in the <code>gsll</code> directory
+    <li><code>git clone git://repo.or.cz/fsbv.git</code></li>
+    <li><code>git pull</code> in the <code>gsll</code> and
+      <code>fsbv</code> directories
     afterwards to update</li> 
   </ul>
 <p>The <a href="http://repo.or.cz/w/gsll.git"> repository web page</a>
@@ -152,6 +156,7 @@ Then in Lisp, load the system:
  Add the following to <code>wnpp-projects</code>:
   <ul>
     <li><code>gsll get_git git://repo.or.cz/gsll.git</code></li>
+    <li><code>fsbv get_git git://repo.or.cz/fsbv.git</code></li>
     <li><code>trivial-garbage get_darcs http://common-lisp.net/~loliveira/darcs/trivial-garbage</code></li>
   </ul>
 <p>and add
@@ -166,11 +171,12 @@ from within the clbuild directory:
   </ul>
  <h3>With Debian or Ubuntu</h3>
   <ul>
-    <li><code>sudo aptitude install libgsl0-dev cl-cffi</code></li>
+    <li><code>sudo aptitude install libgsl0-dev cl-cffi libffi-dev</code></li>
     <li><code>git clone git://repo.or.cz/gsll.git</code></li>
     <li><code>darcs get http://common-lisp.net/~loliveira/darcs/trivial-garbage</code></li>
     <li><code>clc-register-user-package trivial-garbage/trivial-garbage.asd</code></li>
     <li><code>clc-register-user-package gsll/gsll.asd</code></li>
+    <li><code>clc-register-user-package gsll/fsbv.asd</code></li>
     <li><code>clc-register-user-package gsll/gsll-tests.asd</code></li>
   </ul>
 <p>
@@ -386,7 +392,7 @@ and arrays used internally or for function return.
 <!-- Created: Feb 25 2005 -->
 <!-- hhmts start -->
 <small>
-Time-stamp: <2009-04-04 18:01:52EDT index.html>
+Time-stamp: <2009-05-03 12:08:21EDT index.html>
 </small>
 <!-- hhmts end -->
  </div>
diff --git a/gsll-tests.asd b/gsll-tests.asd
index 74b001bfb54431c5a65d3f06020086e3c603d03e..d6c7312c53d86de8e00f50ab423707bfda58a5a1 100644
--- a/gsll-tests.asd
+++ b/gsll-tests.asd
@@ -1,6 +1,6 @@
 ;; Definition of GSLL system 
 ;; Liam Healy
-;; Time-stamp: <2009-04-29 22:25:14EDT gsll-tests.asd>
+;; Time-stamp: <2009-05-03 11:16:04EDT gsll-tests.asd>
 
 (asdf:defsystem "gsll-tests"
   :name "gsll-tests"
@@ -99,7 +99,7 @@
 	     (:file "matrix-sub")
 	     (:file "matrix-add")
 	     (:file "matrix-mult")
-	     (:file "matrix-product-hermitian")
+	     #+fsbv (:file "matrix-product-hermitian")
 	     (:file "matrix-product")
 	     (:file "matrix-product-nonsquare")
 	     (:file "matrix-product-symmetric")
diff --git a/gsll.asd b/gsll.asd
index f165964b31e0962ed7452dc37daf1f2074d25a8c..7c1b961822c86d4afbce26206b1c4f82b266ec2e 100644
--- a/gsll.asd
+++ b/gsll.asd
@@ -1,15 +1,18 @@
 ;; Definition of GSLL system 
 ;; Liam Healy
-;; Time-stamp: <2009-04-16 21:33:09EDT gsll.asd>
+;; Time-stamp: <2009-05-03 09:37:17EDT gsll.asd>
 ;; $Id$
 
+(when (asdf:find-system :fsbv nil)
+  (pushnew :fsbv *features*))
+
 (asdf:defsystem "gsll"
   :name "gsll"
   :description "GNU Scientific Library for Lisp."
   :version "0"
   :author "Liam M. Healy"
   :licence "LLGPL v3, FDL"
-  :depends-on (cffi trivial-garbage fsbv)
+  :depends-on (cffi trivial-garbage #+fsbv fsbv)
   :components
   ((:module init
 	    :components
@@ -44,6 +47,7 @@
 	    :depends-on (init)
 	    :components
 	    ((:file "mathematical")
+	     #+fsbv
 	     (:file "complex")))
    (:module data
 	    :depends-on (init)
diff --git a/init/body-expand.lisp b/init/body-expand.lisp
index d1b69cf78d1eaa3821edc5c6c7a722315609e593..ad4cbe9571df796bccd4b2e5a707e1163df02aa7 100644
--- a/init/body-expand.lisp
+++ b/init/body-expand.lisp
@@ -1,6 +1,6 @@
 ;; Expand the body of a defmfun
 ;; Liam Healy 2009-04-13 22:07:13EDT body-expand.lisp
-;; Time-stamp: <2009-05-02 21:43:36EDT body-expand.lisp>
+;; Time-stamp: <2009-05-03 10:03:03EDT body-expand.lisp>
 ;; $Id: $
 
 (in-package :gsl)
@@ -42,6 +42,17 @@
 	    :test 'st-symbol))
      finally (return answer)))
 
+;;; This function should never be called even when FSBV is absent,
+;;; because the potential callers should all have #-fsbv
+;;; conditionalization.  It is here just so that body-expand can
+;;; compile when FSBV is absent.
+#-fsbv
+(defmacro no-fsbv-error (function-name &rest args)
+  (declare (ignore args))
+  `(error
+    "System FSBV is not present, so function ~a cannot be used."
+    ,function-name))
+
 (defun body-expand (name arglist gsl-name c-arguments key-args)
   "Expand the body (computational part) of the defmfun."
   (with-defmfun-key-args key-args
@@ -86,7 +97,8 @@
 	      cbinfo callback-dynamic-variables callback-dynamic)
 	   (let ((,(st-symbol creturn-st)
 		  (,(if (some 'identity pbv)
-			'fsbv:foreign-funcall
+			#+fsbv 'fsbv:foreign-funcall
+			#-fsbv 'no-fsbv-error
 			'cffi:foreign-funcall)
 		    ,gsl-name
 		    ,@(mappend
diff --git a/init/complex-types.lisp b/init/complex-types.lisp
index e6211cb0fd7074cffa36c4bb3f666a4d2a96c73a..e48637e715fdf1215269f8c4ac00f3f37a2d76af 100644
--- a/init/complex-types.lisp
+++ b/init/complex-types.lisp
@@ -1,6 +1,6 @@
 ;; Complex number types
 ;; Liam Healy 2009-01-13 21:24:05EST complex-types.lisp
-;; Time-stamp: <2009-04-26 00:02:09EDT complex-types.lisp>
+;; Time-stamp: <2009-05-03 10:00:23EDT complex-types.lisp>
 ;; $Id: $
 
 (in-package :gsl)
@@ -27,14 +27,22 @@
 ;;; cannot use functions that call or return complex scalars.
 
 ;;; See /usr/include/gsl/gsl_complex.h
+#+fsbv
 (fsbv:defcstruct
     (complex-float-c :constructor complex :deconstructor (realpart imagpart))
   (dat :float :count 2))
 
+#-fsbv
+(cffi:defcstruct complex-float-c (dat :float :count 2))
+
+#+fsbv
 (fsbv:defcstruct
     (complex-double-c :constructor complex :deconstructor (realpart imagpart))
   (dat :double :count 2))
 
+#-fsbv
+(cffi:defcstruct complex-double-c (dat :double :count 2))
+
 #+long-double
 (cffi:defcstruct complex-long-double-c
   (dat :long-double :count 2))
diff --git a/init/types.lisp b/init/types.lisp
index ace075692793310817700c8bfac4a258b41d0730..969aba87d4ec95cd7ff80c0df307e51189628858 100644
--- a/init/types.lisp
+++ b/init/types.lisp
@@ -1,6 +1,6 @@
 ;; Number types used by GSL functions, and specification conversion
 ;; Liam Healy 2008-12-31 21:06:34EST types.lisp
-;; Time-stamp: <2009-04-29 22:48:31EDT types.lisp>
+;; Time-stamp: <2009-05-03 09:42:01EDT types.lisp>
 ;; $Id: $
 
 (in-package :gsl)
@@ -14,11 +14,11 @@
   (8
    (push :int64 *features*)
    (cffi:defctype sizet :uint64)
-   (fsbv:defsynonym sizet :uint64))
+   #+fsbv (fsbv:defsynonym sizet :uint64))
   (4
    (push :int32 *features*)
    (cffi:defctype sizet :uint32)
-   (fsbv:defsynonym sizet :uint64))
+   #+fsbv (fsbv:defsynonym sizet :uint32))
   (t (error "Size of :long unrecognized")))
 
 ;;;;****************************************************************************
diff --git a/linear-algebra/blas1.lisp b/linear-algebra/blas1.lisp
index e1f12db7b09bdc5943d2cd76226793db59dace1c..3d37e4a8d1e1dc5fe3d908fd995d149abb160e8b 100644
--- a/linear-algebra/blas1.lisp
+++ b/linear-algebra/blas1.lisp
@@ -1,6 +1,6 @@
 ;; BLAS level 1, Vector operations
 ;; Liam Healy, Wed Apr 26 2006 - 15:23
-;; Time-stamp: <2009-04-27 21:30:47EDT blas1.lisp>
+;; Time-stamp: <2009-05-03 11:28:12EDT blas1.lisp>
 ;; $Id$
 
 (in-package :gsl)
@@ -103,7 +103,7 @@
   ("gsl_blas_" :type "axpy")
   ((alpha  :element-c-type) ((mpointer x) :pointer) ((mpointer y) :pointer))
   :definition :generic
-  :element-types :float-complex
+  :element-types #+fsbv :float-complex #-fsbv :float
   :inputs (x y)
   :outputs (y)
   :documentation			; FDL
@@ -115,7 +115,7 @@
   ("gsl_blas_" :type "scal")
   ((alpha :element-c-type) ((mpointer x) :pointer))
   :definition :generic
-  :element-types :float-complex
+  :element-types #+fsbv :float-complex #-fsbv :float
   :c-return :void
   :inputs (x)
   :outputs (x)
@@ -194,12 +194,12 @@
 
 (generate-all-array-tests dot :float-complex
  (let ((v1 (array-default 8))
-	(v2 (array-default 8)))
+       (v2 (array-default 8)))
    (dot v1 v2)))
 
 (generate-all-array-tests cdot :complex
  (let ((v1 (array-default 8))
-	(v2 (array-default 8)))
+       (v2 (array-default 8)))
    (cdot v1 v2)))
 
 (generate-all-array-tests euclidean-norm :float-complex
@@ -232,7 +232,7 @@
 	(scalar (scalar-default)))
    (cl-array (axpy scalar v1 v2))))
 
-(generate-all-array-tests scale :float-complex
+(generate-all-array-tests scale #+fsbv :float-complex #-fsbv :float
  (let ((v1 (array-default 8))
 	(scalar (scalar-default)))
    (cl-array (scale scalar v1))))
diff --git a/linear-algebra/blas2.lisp b/linear-algebra/blas2.lisp
index e5d7b83ceb6eafcba385ef2ef06f2016fd0eb1ab..67124af35c71b67183f6a7de4c642a719c3ef426 100644
--- a/linear-algebra/blas2.lisp
+++ b/linear-algebra/blas2.lisp
@@ -1,6 +1,6 @@
 ;; BLAS level 2, Matrix-vector operations
 ;; Liam Healy, Wed Apr 26 2006 - 21:08
-;; Time-stamp: <2009-04-29 20:38:03EDT blas2.lisp>
+;; Time-stamp: <2009-05-03 11:31:55EDT blas2.lisp>
 ;; $Id$
 
 (in-package :gsl)
@@ -15,18 +15,21 @@
   "CBLAS_TRANSPOSE from /usr/include/gsl/gsl_cblas.h."
   (:notrans 111) :trans :conjtrans)
 
+#+fsbv
 (fsbv:defcenum-aux cblas-transpose)
 
 (cffi:defcenum cblas-uplo
   "/usr/include/gsl/gsl_cblas.h."
   (:upper 121) :lower)
 
+#+fsbv
 (fsbv:defcenum-aux cblas-uplo)
 
 (cffi:defcenum cblas-diag
   "/usr/include/gsl/gsl_cblas.h."
  (:nonunit 131) :unit)
 
+#+fsbv
 (fsbv:defcenum-aux cblas-diag)
 
 ;;;;****************************************************************************
@@ -39,7 +42,6 @@
 	    (second (dimensions b)))
       (first (dimensions a))))
 
-;;; To do: the y should be an optional argument, default to a zero vector.
 (defmfun matrix-product
     ((A matrix) (x vector)
      &optional
@@ -51,7 +53,7 @@
   ((transa cblas-transpose) (alpha :element-c-type) ((mpointer A) :pointer)
    ((mpointer x) :pointer) (beta :element-c-type) ((mpointer y) :pointer))
   :definition :generic
-  :element-types :float-complex
+  :element-types #+fsbv :float-complex #-fsbv :float
   :inputs (A x y)
   :outputs (y)
   :documentation			; FDL
@@ -78,7 +80,7 @@
   :outputs (x)
   :documentation			; FDL
   "If the second argument is a vector, compute
-   the matrix-vector product x =alpha op(A) x
+   the matrix-vector product x = op(A) x
    for the triangular matrix A, where op(A) = A, A^T, A^H for
    TransA = :NoTrans, :Trans, :ConjTrans. When Uplo
    is :Upper then the upper triangle of A is used, and when
@@ -88,7 +90,7 @@
    matrix A are taken as unity and are not referenced.
    If the second argument is a matrix, compute
    the matrix-matrix product B = alpha op(A) B
-   if Side is :Left and B = \alpha B op(A) if Side is
+   if Side is :Left and B = alpha B op(A) if Side is
    :Right. The matrix A is triangular and op(A) = A, A^T, A^H
    for TransA = :NoTrans, :Trans, :ConjTrans When Uplo
    is :Upper then the upper triangle of A is used, and when
@@ -157,14 +159,13 @@
   are used, and when Uplo is :Lower then the lower triangle
   and diagonal of A are used.")
 
+#+fsbv
 (defmfun matrix-product-hermitian
     ((A matrix) (x vector)
      &optional
      (y (make-marray element-type :dimensions (matrix-product-dimensions A x)
 		     :initial-element 0))
      (alpha 1) (beta 1) (uplo :upper) (side :left))
-  ;; This always signals an error because you can't pass a
-  ;; struct in CFFI yet.
   ("gsl_blas_" :type "hemv")
   ((uplo cblas-uplo) (alpha :element-c-type) ((mpointer A) :pointer)
    ((mpointer x) :pointer) (beta :element-c-type) ((mpointer y) :pointer))
@@ -194,7 +195,7 @@
   ((alpha :element-c-type) ((mpointer A) :pointer)
    ((mpointer x) :pointer) ((mpointer y) :pointer))
   :definition :generic
-  :element-types :float-complex
+  :element-types #+fsbv :float-complex #-fsbv :float
   :inputs (x y A)
   :outputs (A)
   :documentation			; FDL
@@ -205,7 +206,7 @@
   ((alpha :element-c-type) ((mpointer A) :pointer)
    ((mpointer x) :pointer) ((mpointer y) :pointer))
   :definition :generic
-  :element-types :complex
+  :element-types #+fsbv :float-complex #-fsbv :float
   :inputs (x y A)
   :outputs (A)
   :documentation			; FDL
@@ -236,6 +237,7 @@
   used, and when Uplo is CblasLower then the lower triangle and
   diagonal of C are used.")
 
+#+fsbv
 (defmfun hermitian-rank-1-update
     ((x vector) (A matrix)
      &optional (alpha 1) (beta 1) (uplo :upper) (trans :notrans))
@@ -289,6 +291,7 @@
   then the upper triangle and diagonal of C are used, and when Uplo is
   :lower then the lower triangle and diagonal of C are used.")
 
+#+fsbv
 (defmfun hermitian-rank-2-update
     ((x vector) (y vector) (A matrix)
      &optional (alpha 1) (beta 1) (uplo :upper) (trans :notrans))
@@ -321,7 +324,7 @@
 ;;;; Examples and unit test
 ;;;;****************************************************************************
 
-(generate-all-array-tests matrix-product :float-complex
+(generate-all-array-tests matrix-product #+fsbv :float-complex #-fsbv :float
  (let ((m1 (array-default '(3 3)))
        (v1 (array-default 3))
        (v2 (array-default 3))
@@ -329,13 +332,15 @@
        (s2 (scalar-default)))
    (cl-array (matrix-product m1 v1 v2 s1 s2))))
 
-(generate-all-array-tests matrix-product-triangular :float-complex
+(generate-all-array-tests matrix-product-triangular
+			  #+fsbv :float-complex #-fsbv :float
  (let ((m1 (array-default '(3 3)))
        (v1 (array-default 3))
        (s1 (scalar-default)))
    (cl-array (matrix-product-triangular m1 v1 s1))))
 
-(generate-all-array-tests inverse-matrix-product :float-complex
+(generate-all-array-tests inverse-matrix-product
+			  #+fsbv :float-complex #-fsbv :float
  (let ((m1 (array-default '(3 3)))
        (v1 (array-default 3))
        (s1 (scalar-default)))
@@ -349,6 +354,7 @@
 	(s2 (scalar-default)))
    (cl-array (matrix-product-symmetric m1 v1 v3 s1 s2))))
 
+#+fsbv
 (generate-all-array-tests matrix-product-hermitian :complex
  (let ((m1 (array-default '(3 3)))
        (v1 (array-default 3))
diff --git a/linear-algebra/blas3.lisp b/linear-algebra/blas3.lisp
index 5bba4439376d2a31cb32b4933877096ba480908d..95dcfd36dfc73b4147f01ae40aa696e8534bc74f 100644
--- a/linear-algebra/blas3.lisp
+++ b/linear-algebra/blas3.lisp
@@ -1,6 +1,6 @@
 ;; BLAS level 3, Matrix-matrix operations
 ;; Liam Healy, Wed Apr 26 2006 - 21:08
-;; Time-stamp: <2009-04-29 20:36:48EDT blas3.lisp>
+;; Time-stamp: <2009-05-03 11:18:02EDT blas3.lisp>
 ;; $Id$
 
 (in-package :gsl)
@@ -15,6 +15,7 @@
   "/usr/include/gsl/gsl_cblas.h."
   (:left 141) :right)
 
+#+fsbv
 (fsbv:defcenum-aux cblas-side)
 
 ;;;;****************************************************************************
@@ -33,7 +34,7 @@
    (alpha :element-c-type) ((mpointer A) :pointer)
    ((mpointer B) :pointer) (beta :element-c-type) ((mpointer C) :pointer))
   :definition :methods
-  :element-types :float-complex
+  :element-types #+fsbv :float-complex #-fsbv :float
   :inputs (A B C)
   :outputs (C))
 
@@ -48,10 +49,11 @@
    ((mpointer A) :pointer) ((mpointer B) :pointer)
    (beta :element-c-type) ((mpointer C) :pointer)) 
   :definition :methods
-  :element-types :float-complex
+  :element-types #+fsbv :float-complex #-fsbv :float
   :inputs (A B C)
   :outputs (C))
 
+#+fsbv
 (defmfun matrix-product-hermitian
     ((A matrix) (B matrix)
      &optional
@@ -78,7 +80,7 @@
    (diag cblas-diag)
    (alpha :element-c-type) ((mpointer A) :pointer) ((mpointer B) :pointer))
   :definition :methods
-  :element-types :float-complex
+  :element-types #+fsbv :float-complex #-fsbv :float
   :inputs (A B)
   :outputs (B))
 
@@ -93,7 +95,7 @@
    (TransA cblas-transpose) (diag cblas-diag)
    (alpha :element-c-type) ((mpointer A) :pointer) ((mpointer B) :pointer))
   :definition :methods
-  :element-types :float-complex
+  :element-types #+fsbv :float-complex #-fsbv :float
   :inputs (A B)
   :outputs (B))
 
@@ -105,10 +107,11 @@
    (alpha :element-c-type) ((mpointer A) :pointer)
    (beta :element-c-type) ((mpointer C) :pointer))
   :definition :methods
-  :element-types :float-complex
+  :element-types #+fsbv :float-complex #-fsbv :float
   :inputs (A C)
   :outputs (C))
 
+#+fsbv
 (defmfun hermitian-rank-1-update
     ((A matrix) (C matrix)
      &optional (alpha 1) (beta 1) (uplo :upper) (trans :notrans))
@@ -134,6 +137,7 @@
   :inputs (A B C)
   :outputs (C))
 
+#+fsbv
 (defmfun hermitian-rank-2-update
     ((A matrix) (B matrix) (C matrix)
      &optional (alpha 1) (beta 1) (uplo :upper) (trans :notrans))
@@ -151,7 +155,7 @@
 ;;;; Examples and unit test
 ;;;;****************************************************************************
 
-(generate-all-array-tests matrix-product :float-complex
+(generate-all-array-tests matrix-product #+fsbv :float-complex #-fsbv :float
  (let ((m1 (array-default '(3 3)))
        (m2 (array-default '(3 3)))
        (m3 (array-default '(3 3)))
@@ -164,13 +168,15 @@
        (m2 (array-default '(3 2))))
    (cl-array (matrix-product m1 m2))))
 
-(generate-all-array-tests matrix-product-triangular :float-complex
+(generate-all-array-tests matrix-product-triangular
+			  #+fsbv :float-complex #-fsbv :float
  (let ((m1 (array-default '(3 3)))
        (m2 (array-default '(3 3)))
        (s1 (scalar-default)))
    (cl-array (matrix-product-triangular m1 m2 s1))))
 
-(generate-all-array-tests inverse-matrix-product :float-complex
+(generate-all-array-tests inverse-matrix-product 
+			  #+fsbv :float-complex #-fsbv :float
  (let ((m1 (array-default '(3 3)))
        (m2 (array-default '(3 3)))
        (s1 (scalar-default)))
@@ -184,6 +190,7 @@
        (s2 (scalar-default)))
    (cl-array (matrix-product-symmetric m1 m2 m3 s1 s2))))
 
+#+fsbv
 (generate-all-array-tests matrix-product-hermitian :complex
  (let ((m1 (array-default '(3 3)))
        (m2 (array-default '(3 3)))
diff --git a/polynomial.lisp b/polynomial.lisp
index 8adc4df59308e4595a39d89fb288f86ffd337f41..c4e4d5afb73244cf003fcdc4dca8fe393da6610d 100644
--- a/polynomial.lisp
+++ b/polynomial.lisp
@@ -1,6 +1,6 @@
 ;; Polynomials
 ;; Liam Healy, Tue Mar 21 2006 - 18:33
-;; Time-stamp: <2009-04-30 22:57:18EDT polynomial.lisp>
+;; Time-stamp: <2009-05-03 09:37:35EDT polynomial.lisp>
 ;; $Id$
 
 (in-package :gsl)
@@ -26,6 +26,7 @@
   :documentation			; FDL
   "Evaluate the polyonomial with coefficients at the point x.")
 
+#+fsbv
 (defmfun evaluate
     ((coefficients vector-double-float) (x complex)
      &key)
@@ -39,6 +40,7 @@
   :documentation			; FDL
   "Evaluate the polyonomial with coefficients at the complex value x.")
 
+#+fsbv
 (defmfun evaluate
     ((coefficients vector-complex-double-float) (x complex)
      &key)
diff --git a/tests/axpy.lisp b/tests/axpy.lisp
index be0969284d2e83e23d6efb56f5bdec50b419a7ea..86db499bdbbf7e1cd11a4d6968cb2191ad757dbe 100644
--- a/tests/axpy.lisp
+++ b/tests/axpy.lisp
@@ -36,6 +36,7 @@
                                                -49.08d0)))
                                (SCALAR -39.66d0))
                            (CL-ARRAY (AXPY SCALAR V1 V2)))))
+			#+fsbv
                        (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #(#C(1808.3204 1422.3015) #C(-589.3992 234.75043)
@@ -59,6 +60,7 @@
                                                31.67)))
                                (SCALAR #C(-39.66 -49.46)))
                            (CL-ARRAY (AXPY SCALAR V1 V2)))))
+		       #+fsbv
                        (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #(#C(1808.3204d0 1422.3016000000002d0)
diff --git a/tests/inverse-matrix-product.lisp b/tests/inverse-matrix-product.lisp
index bfac7c9df004a9c65a198af63c72415d10e5ecff..d84e0ba58975247a13a2f50614b697bf443ee2e9 100644
--- a/tests/inverse-matrix-product.lisp
+++ b/tests/inverse-matrix-product.lisp
@@ -42,6 +42,7 @@
                                                (-49.08d0 -39.66d0 -49.46d0))))
                                (S1 19.68d0))
                            (CL-ARRAY (INVERSE-MATRIX-PRODUCT M1 M2 S1)))))
+		       #+fsbv
                        (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #2A((#C(-28.191956 35.052914) #C(-13.378113 28.736774)
@@ -71,6 +72,7 @@
                                                 -5.55 -8.82))))
                                (S1 #C(19.68 -5.55)))
                            (CL-ARRAY (INVERSE-MATRIX-PRODUCT M1 M2 S1)))))
+		       #+fsbv
                        (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #2A((#C(-28.191956546692666d0 35.052909000810466d0)
diff --git a/tests/matrix-product-nonsquare.lisp b/tests/matrix-product-nonsquare.lisp
index 14ee6e713b52b2ffb36e536b7313358ced229567..1b580601a9abaac0f98ef497798eb744670d42cd 100644
--- a/tests/matrix-product-nonsquare.lisp
+++ b/tests/matrix-product-nonsquare.lisp
@@ -30,6 +30,7 @@
                                                (32.5d0 42.73d0)
                                                (-17.24d0 43.31d0)))))
                            (CL-ARRAY (MATRIX-PRODUCT M1 M2)))))
+		       #+fsbv
                        (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #2A((#C(-1422.0259 2305.5098)
@@ -51,6 +52,7 @@
                                                (32.5 42.73 -17.24 43.31)
                                                (-17.24 43.31 -16.12 -8.25)))))
                            (CL-ARRAY (MATRIX-PRODUCT M1 M2)))))
+		       #+fsbv
                        (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #2A((#C(-1422.0258d0 2305.5097000000005d0)
diff --git a/tests/matrix-product-triangular.lisp b/tests/matrix-product-triangular.lisp
index 5f98794b2411cea6d364d16c8c736f7904762fd3..4f5dc56eae337a932575694994ce61acddd11194 100644
--- a/tests/matrix-product-triangular.lisp
+++ b/tests/matrix-product-triangular.lisp
@@ -42,6 +42,7 @@
                                                (-49.08d0 -39.66d0 -49.46d0))))
                                (S1 19.68d0))
                            (CL-ARRAY (MATRIX-PRODUCT-TRIANGULAR M1 M2 S1)))))
+		       #+fsbv
                        (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #2A((#C(-66397.9 18986.908) #C(-56335.145 48514.305)
@@ -72,6 +73,7 @@
                                                 -5.55 -8.82))))
                                (S1 #C(19.68 -5.55)))
                            (CL-ARRAY (MATRIX-PRODUCT-TRIANGULAR M1 M2 S1)))))
+		       #+fsbv
                        (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #2A((#C(-66397.89753899998d0 18986.908142999997d0)
@@ -130,6 +132,7 @@
                                              '(42.73d0 -17.24d0 43.31d0)))
                                (S1 -16.12d0))
                            (CL-ARRAY (MATRIX-PRODUCT-TRIANGULAR M1 V1 S1)))))
+		       #+fsbv
                        (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #(#C(-1483.223 1289.3523) #C(-57.63159 1675.6711)
@@ -151,6 +154,7 @@
                                                21.44)))
                                (S1 #C(-16.12 -8.25)))
                            (CL-ARRAY (MATRIX-PRODUCT-TRIANGULAR M1 V1 S1)))))
+		       #+fsbv
                        (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #(#C(-1483.2230999999997d0 1289.3523999999998d0)
diff --git a/tests/matrix-product.lisp b/tests/matrix-product.lisp
index 7389dc1c6bbb8645399ede4377979270b85762cc..de5af1a036c54e3f2b672cc154ec5fe72d6093df 100644
--- a/tests/matrix-product.lisp
+++ b/tests/matrix-product.lisp
@@ -54,6 +54,7 @@
                                (S1 -41.67d0)
                                (S2 42.0d0))
                            (CL-ARRAY (MATRIX-PRODUCT M1 M2 M3 S1 S2)))))
+		       #+fsbv
                        (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #2A((#C(140927.64 -143005.16) #C(72986.305 -201162.86)
@@ -93,6 +94,7 @@
                                (S1 #C(-41.67 42.0))
                                (S2 #C(42.0 -20.81)))
                            (CL-ARRAY (MATRIX-PRODUCT M1 M2 M3 S1 S2)))))
+		       #+fsbv
                        (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #2A((#C(140927.638311d0 -143005.14965699997d0)
@@ -171,6 +173,7 @@
                                (S1 -49.08d0)
                                (S2 -39.66d0))
                            (CL-ARRAY (MATRIX-PRODUCT M1 V1 V2 S1 S2)))))
+		       #+fsbv
                        (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #(#C(124163.57 -3332.2988) #C(119793.48 -166378.0)
@@ -198,6 +201,7 @@
                                (S1 #C(-49.08 -39.66))
                                (S2 #C(-39.66 -49.46)))
                            (CL-ARRAY (MATRIX-PRODUCT M1 V1 V2 S1 S2)))))
+		       #+fsbv
                        (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #(#C(124163.58013199999d0 -3332.2974459999896d0)
diff --git a/tests/matrix-set-all.lisp b/tests/matrix-set-all.lisp
index 44cb017b5d321badc60ed12080d704ee69bbce90..ce5782110a14e54efed2e9c3e48018f779e781ff 100644
--- a/tests/matrix-set-all.lisp
+++ b/tests/matrix-set-all.lisp
@@ -21,6 +21,7 @@
                          (LET ((M1
                                 (MAKE-MARRAY 'DOUBLE-FLOAT :DIMENSIONS '(3 3))))
                            (CL-ARRAY (SET-ALL M1 -34.5d0)))))
+		       #+fsbv
                        (LISP-UNIT:ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #2A((#C(-34.5 8.24) #C(-34.5 8.24) #C(-34.5 8.24))
@@ -31,6 +32,7 @@
                                 (MAKE-MARRAY '(COMPLEX SINGLE-FLOAT)
                                              :DIMENSIONS '(3 3))))
                            (CL-ARRAY (SET-ALL M1 #C(-34.5 8.24))))))
+		       #+fsbv
                        (LISP-UNIT:ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #2A((#C(-34.5d0 8.24d0) #C(-34.5d0 8.24d0)
diff --git a/tests/scale.lisp b/tests/scale.lisp
index e40fe7c5f7107fde2ec6715695bad719ed56681d..50e49f0f4665d5c85dd8b5412094ccc4170a29d9 100644
--- a/tests/scale.lisp
+++ b/tests/scale.lisp
@@ -62,6 +62,7 @@
                                                -13.49d0)))
                                (SCALAR 32.5d0))
                            (CL-ARRAY (SCALE SCALAR V1)))))
+		       #+fsbv
                        (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #(#C(-1473.3452 -1206.385) #C(488.5039 -149.64331)
@@ -78,6 +79,7 @@
                                                -49.08)))
                                (SCALAR #C(32.5 42.73)))
                            (CL-ARRAY (SCALE SCALAR V1)))))
+		       #+fsbv
                        (LISP-UNIT::ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #(#C(-1473.3452d0 -1206.385d0)
diff --git a/tests/vector-set-all.lisp b/tests/vector-set-all.lisp
index 826390747289e973b2aa22ed2a138d0f0a4b6813..331e3dfee42d7eaa14b348d5611e58ff14c88162 100644
--- a/tests/vector-set-all.lisp
+++ b/tests/vector-set-all.lisp
@@ -13,6 +13,7 @@
                         (MULTIPLE-VALUE-LIST
                          (LET ((V1 (MAKE-MARRAY 'DOUBLE-FLOAT :DIMENSIONS '3)))
                            (CL-ARRAY (SET-ALL V1 -34.5d0)))))
+		       #+fsbv
                        (LISP-UNIT:ASSERT-NUMERICAL-EQUAL
                         (LIST #(#C(-34.5 8.24) #C(-34.5 8.24) #C(-34.5 8.24)))
                         (MULTIPLE-VALUE-LIST
@@ -20,6 +21,7 @@
                                 (MAKE-MARRAY '(COMPLEX SINGLE-FLOAT)
                                              :DIMENSIONS '3)))
                            (CL-ARRAY (SET-ALL V1 #C(-34.5 8.24))))))
+		       #+fsbv
                        (LISP-UNIT:ASSERT-NUMERICAL-EQUAL
                         (LIST
                          #(#C(-34.5d0 8.24d0) #C(-34.5d0 8.24d0)