diff --git a/gsll.asd b/gsll.asd
index 01c0eab49ea3f69674ed446c5cc497199bc555d4..409bcd63c19dc5881d36397cadc6c69131453a1d 100644
--- a/gsll.asd
+++ b/gsll.asd
@@ -3,7 +3,7 @@
 ; description: Definition of GSLL system 
 ; date:        
 ; author:      Liam Healy
-; modified:    Fri Jul 14 2006 - 17:46
+; modified:    Fri Jul 14 2006 - 21:51
 ;********************************************************
 ;;; $Id: $
 
@@ -91,5 +91,4 @@
    (:module random
 	    :depends-on (init)
 	    :components
-	    (:file "rng-types"))
-   ))
+	    ((:file "rng-types")))))
diff --git a/random/rng-types.lisp b/random/rng-types.lisp
index 1e6218b9ebf4fc36f188074165c5539499caada4..ebab611b348bd51ca9f9d66a0410746fb13e6b3e 100644
--- a/random/rng-types.lisp
+++ b/random/rng-types.lisp
@@ -3,7 +3,7 @@
 ; description: Random number generation                  
 ; date:        Tue Jul 11 2006 - 23:39                   
 ; author:      Liam M. Healy                             
-; modified:    Fri Jul 14 2006 - 10:14
+; modified:    Fri Jul 14 2006 - 22:34
 ;********************************************************
 ;;; $Id: $
 
@@ -34,6 +34,8 @@
 ;;;; Auxiliary functions
 ;;;;****************************************************************************
 
+(export '(random-number-generator-state all-random-number-generators))
+
 (defun-gsl rng-name (rng)
   "gsl_rng_name" ((rng :pointer))
   :c-return :string
@@ -63,22 +65,34 @@
   :c-return :size
   :documentation "The size of the generator.")
 
+(defun random-number-generator-state (rng)
+  "The complete state of a given random number generator, specified
+   as a vector of bytes."
+  (let ((ans (make-array (rng-size rng) :element-type '(unsigned-byte 8))))
+    (loop for i from 0 below (length ans)
+	  do
+	  (setf (aref ans i)
+		(mem-aref (rng-state rng) :uint8 i)))
+    ans))
+
 (defun-gsl rng-types-setup ()
   "gsl_rng_types_setup" ()
   :c-return :pointer
+  :export nil
   :documentation
   "A pointer to an array of all the available generator types,
    terminated by a null pointer. The function should be
-   called once at the start of the program, if needed.")
+   called once at the start of the program, if needed.
+   Users should call all-random-number-generators.")
 
-;;; Probably only works for 64 bit hardware; need to generalize
-(defun all-rngs ()
+(defun all-random-number-generators ()
   "A list of all random number generators."
   (let ((start (rng-types-setup)))
     (loop for i from 0
-	  for ptr = (inc-pointer start (* 8 i))	;  (mem-aref ptr :pointer i)
-	  until (null-pointer-p (mem-ref ptr :pointer))
-	  collect (rng-name (mem-aref ptr 'random-number-generator-type 0)))))
+	  for ptr
+	  = (cffi:inc-pointer start (* (cffi:foreign-type-size :pointer) i))
+	  until (cffi:null-pointer-p (cffi:mem-ref ptr :pointer))
+	  collect (cffi:mem-ref ptr 'random-number-generator-type))))
 
 ;;;;****************************************************************************
 ;;;; Defining RNGs and default