diff --git a/Makefile b/Makefile
index 24b5a70..55d5c79 100644
--- a/Makefile
+++ b/Makefile
@@ -16,7 +16,8 @@ LSP:=${SPD}/lsp
 #GCLVERSION=gcl-2.6.7
 #GCLVERSION=gcl-2.6.8pre
 #GCLVERSION=gcl-2.6.8pre2
-GCLVERSION=gcl-2.6.8pre3 
+#GCLVERSION=gcl-2.6.8pre3 
+GCLVERSION=gcl-2.6.8pre4
 AWK:=gawk
 GCLDIR:=${LSP}/${GCLVERSION}
 SRC:=${SPD}/src
diff --git a/Makefile.pamphlet b/Makefile.pamphlet
index ba90072..65347d2 100644
--- a/Makefile.pamphlet
+++ b/Makefile.pamphlet
@@ -809,7 +809,8 @@ forget to erase the lsp/Makefile the wrong patches will be applied.
 #GCLVERSION=gcl-2.6.7
 #GCLVERSION=gcl-2.6.8pre
 #GCLVERSION=gcl-2.6.8pre2
-GCLVERSION=gcl-2.6.8pre3 
+#GCLVERSION=gcl-2.6.8pre3 
+GCLVERSION=gcl-2.6.8pre4
 @
 
 \subsubsection{The [[GCLOPTS]] configure variable}
diff --git a/changelog b/changelog
index e184168..864d216 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,12 @@
+20100420 tpd src/axiom-website/patches.html 20100420.01.tpd.patch
+20100420 tpd zips/gcl-2.6.8pre4.unixport.makefile.patch
+20100420 tpd zips/gcl-2.6.8pre4.unixport.init_gcl.lsp.in.patch
+20100420 tpd zips/gcl-2.6.8pre4.o.read.d.patch added
+20100420 tpd zips/gcl-2.6.8pre4.h.linux.defs.patch added
+20100420 tpd zips/gcl-2.6.8pre4.tgz added, fix for ubuntu 9.10
+20100420 tpd lsp/Makefile.pamphlet GCLVERSION gcl-2.6.8pre4 
+20100420 tpd Makefile.pamphlet GCLVERSION gcl-2.6.8pre4 
+20100420 tpd Makefile GCLVERSION gcl-2.6.8pre4 
 20100419 tpd src/axiom-website/patches.html 20100419.05.tpd.patch
 20100419 tpd books/bookvol4 document how to make graphs in algebra books
 20100419 tpd src/axiom-website/patches.html 20100419.04.tpd.patch
diff --git a/lsp/Makefile.pamphlet b/lsp/Makefile.pamphlet
index 2670c7f..7eaf543 100644
--- a/lsp/Makefile.pamphlet
+++ b/lsp/Makefile.pamphlet
@@ -217,6 +217,14 @@ but, since no initialization is needed, we simply create empty files.
 	  touch ${OBJ}/${SYS}/lib/cfuns-c.ini ; \
 	  touch ${OBJ}/${SYS}/lib/sockio-c.ini )
 @
+<<gcl-2.6.8pre4.socket.patch>>=
+	@(cd ${GCLVERSION}/h ; \
+	  echo 3 applying EXTRAS patch to h/linux.defs ; \
+	  ${PATCH} <${SPD}/zips/${GCLVERSION}.h.linux.defs.patch )
+	@(echo 4 setup ini files for EXTRAS patch ; \
+	  touch ${OBJ}/${SYS}/lib/cfuns-c.ini ; \
+	  touch ${OBJ}/${SYS}/lib/sockio-c.ini )
+@
 \subsubsection{read.d patch}
 The new read-char-no-hang change no longer returns EOF so we have
 no way to know when the browser is finished talking. This causes 
@@ -227,6 +235,11 @@ hangs waiting for a response.
 	  echo 100 applying read.d patch to o/read.d ; \
 	  ${PATCH} <${SPD}/zips/${GCLVERSION}.o.read.d.patch )
 @
+<<gcl-2.6.8pre4.read.patch>>=
+	@(cd ${GCLVERSION}/o ; \
+	  echo 100 applying read.d patch to o/read.d ; \
+	  ${PATCH} <${SPD}/zips/${GCLVERSION}.o.read.d.patch )
+@
 \subsubsection{fortran patch}
 Communication over sockets (basically to the NAG fortran library)
 requires us to have XDR enabled.
@@ -313,6 +326,11 @@ The for-loop change has been included in the sources.
 	  echo 6 applying libspad.a patch to unixport/makefile ; \
 	  ${PATCH} <${SPD}/zips/${GCLVERSION}.unixport.makefile.patch )
 @
+<<gcl-2.6.8pre4.libspad.patch>>=
+	@(cd ${GCLVERSION}/unixport ; \
+	  echo 6 applying libspad.a patch to unixport/makefile ; \
+	  ${PATCH} <${SPD}/zips/${GCLVERSION}.unixport.makefile.patch )
+@
 \subsubsection{toploop patch}
 This patch turns off the banner display every time GCL starts.
 We could use the -batch flag but that would be a pervasive change.
@@ -381,6 +399,11 @@ for the compiler will be. We eliminate this noise as well as the banner.
 	  echo 7 applying toploop patch to unixport/init_gcl.lsp ; \
 	  ${PATCH} <${SPD}/zips/${GCLVERSION}.unixport.init_gcl.lsp.in.patch )
 @
+<<gcl-2.6.8pre4.toploop.patch>>=
+	@(cd ${GCLVERSION}/unixport ; \
+	  echo 7 applying toploop patch to unixport/init_gcl.lsp ; \
+	  ${PATCH} <${SPD}/zips/${GCLVERSION}.unixport.init_gcl.lsp.in.patch )
+@
 \subsubsection{object to float patch}
 GCL 2.5.2 contains no reference to this function and it was removed.
 Axiom uses this function so we re-implement it here.
@@ -605,6 +628,14 @@ file contains the proclaims for GCL's function definitions.
 	  echo 27 copy sys-proclaim.lisp to ${OBJ}/${SYS}/lsp/sys-proclaim.lisp ; \
 	  cp sys-proclaim.lisp ${OBJ}/${SYS}/lsp/sys-proclaim.lisp )
 @
+<<gcl-2.6.8pre4.collectfn.fix>>=
+	@(cd ${GCLVERSION}/cmpnew ; \
+	  echo 26 copy gcl_collectfn.lsp to ${OBJ}/${SYS}/lsp/collectfn.lsp ; \
+	  cp gcl_collectfn.lsp ${OBJ}/${SYS}/lsp/collectfn.lsp )
+	@(cd ${GCLVERSION}/lsp ; \
+	  echo 27 copy sys-proclaim.lisp to ${OBJ}/${SYS}/lsp/sys-proclaim.lisp ; \
+	  cp sys-proclaim.lisp ${OBJ}/${SYS}/lsp/sys-proclaim.lisp )
+@
 \subsection{The GCL-2.5.2 stanza}
 \subsubsection{Configure and Make GCL}
 We enable several features of GCL. 
@@ -1277,6 +1308,48 @@ clean:
 	@( cd ccl ; ${ENV} ${MAKE} clean )
 
 @
+\subsection{The GCL-2.6.8pre4 stanza}
+This stanza will be written when the GCLVERSION variable is
+``gcl-2.6.8pre4''. It will overwrite the default version. See the 
+top level Makefile.pamphlet.
+<<gcl-2.6.8pre4>>=
+# gcl version 2.6.8pre4
+OUT=${OBJ}/${SYS}/bin
+
+all:
+	@echo 1 building ${LSP} ${GCLVERSION}
+
+gcldir: 
+	@echo 2 building ${GCLVERSION}
+	@tar -zxf ${ZIPS}/${GCLVERSION}.tgz
+<<gcl-2.6.8pre4.socket.patch>>
+<<gcl-2.6.8pre4.libspad.patch>>
+<<gcl-2.6.8pre4.toploop.patch>>
+<<gcl-2.6.8pre4.collectfn.fix>>
+<<gcl-2.6.8pre4.read.patch>>
+<<gclConfigureMake>>
+	@echo 13 finished system build on `date` | tee >gcldir
+
+ccldir: ${LSP}/ccl/Makefile
+	@echo 14 building CCL
+	@mkdir -p ${INT}/ccl
+	@mkdir -p ${OBJ}/${SYS}/ccl
+	@( cd ccl ; ${ENV} ${MAKE} )
+
+${LSP}/ccl/Makefile: ${LSP}/ccl/Makefile.pamphlet
+	@echo 15 making ${LSP}/ccl/Makefile from ${LSP}/ccl/Makefile.pamphlet
+	@( cd ccl ; ${DOCUMENT} ${NOISE} Makefile )
+
+document:
+	@echo 16 making docs in ${LSP}
+	@mkdir -p ${INT}/doc/lsp/ccl
+	@( cd ccl ; ${ENV} ${MAKE} document )
+
+clean:
+	@echo 17 cleaning ${LSP}/ccl
+	@( cd ccl ; ${ENV} ${MAKE} clean )
+
+@
 \section{Gnu Common Lisp 2.5}
 GCL 2.5 requires a different Makefile. In particular, GCL 2.5
 has a different method of building the lisp image. And, just to
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index d197cd1..26c6afd 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2647,5 +2647,7 @@ books/bookvol10.4 add FiniteFieldSquareFreeDecomposition<br/>
 books/bookvol10.3 improve UnivariateTaylorSeriesCZero docs<br/>
 <a href="patches/20100419.05.tpd.patch">20100419.05.tpd.patch</a>
 books/bookvol4 document how to make graphs in algebra books<br/>
+<a href="patches/20100420.01.tpd.patch">20100420.01.tpd.patch</a>
+zips/gcl-2.6.8pre4.tgz added, fix for ubuntu 9.10<br/>
  </body>
 </html>
diff --git a/zips/gcl-2.6.8pre4.h.linux.defs.patch b/zips/gcl-2.6.8pre4.h.linux.defs.patch
new file mode 100644
index 0000000..fdefaff
--- /dev/null
+++ b/zips/gcl-2.6.8pre4.h.linux.defs.patch
@@ -0,0 +1,13 @@
+--- linux.defs	Sun Jul 24 12:55:14 2005
++++ linux.defs.tpd	Sun Jul 24 13:55:26 2005
+@@ -8,6 +8,10 @@
+ 
+ # Machine dependent makefile definitions for intel 386,486 running linux
+ 
++# 20031022000 tpd link Axiom's code into the image
++EXTRAS = ${OBJ}/${SYS}/lib/cfuns-c.o ${OBJ}/${SYS}/lib/sockio-c.o
++OFLAG = -O
++
+ LBINDIR=/usr/local/bin
+ 
+ #OFLAG	=  -g -Wall
diff --git a/zips/gcl-2.6.8pre4.o.read.d.patch b/zips/gcl-2.6.8pre4.o.read.d.patch
new file mode 100644
index 0000000..2c14c82
--- /dev/null
+++ b/zips/gcl-2.6.8pre4.o.read.d.patch
@@ -0,0 +1,11 @@
+--- read.tpd	2009-02-20 00:02:00.000000000 -0500
++++ read.d	2009-02-20 00:02:52.000000000 -0500
+@@ -2272,7 +2272,7 @@
+ 	else if (strm == Ct)
+ 		strm = symbol_value(sLAterminal_ioA);
+ 	check_type_stream(&strm);
+-	if (stream_at_end(strm)) {
++	if (!listen_stream(strm)) {
+ 		if (eof_errorp == Cnil)
+ 			@(return eof_value)
+ 		else
diff --git a/zips/gcl-2.6.8pre4.tgz b/zips/gcl-2.6.8pre4.tgz
new file mode 100644
index 0000000..65a3820
Binary files /dev/null and b/zips/gcl-2.6.8pre4.tgz differ
diff --git a/zips/gcl-2.6.8pre4.unixport.init_gcl.lsp.in.patch b/zips/gcl-2.6.8pre4.unixport.init_gcl.lsp.in.patch
new file mode 100644
index 0000000..553d963
--- /dev/null
+++ b/zips/gcl-2.6.8pre4.unixport.init_gcl.lsp.in.patch
@@ -0,0 +1,13 @@
+--- init_gcl.lsp.in	2006-10-25 17:17:05.000000000 -0400
++++ init_gcl.lsp.in.tpd	2008-11-21 13:35:59.000000000 -0500
+@@ -85,8 +85,8 @@
+    (cond ((si::get-command-arg "-batch")
+ 	  (setq si::*top-level-hook* 'bye))
+ 	 ((si::get-command-arg "-f"))
+-	 (t (format t si::*system-banner*)
+-	    (format t "Temporary directory for compiler files set to ~a~%" *tmp-dir*)))
++	 (t (format nil si::*system-banner*)
++	    (format nil "Temporary directory for compiler files set to ~a~%" *tmp-dir*)))
+    (setq si::*ihs-top* 1)
+    (in-package 'system::user) (incf system::*ihs-top* 2)
+    (funcall system::*old-top-level*))
diff --git a/zips/gcl-2.6.8pre4.unixport.makefile.patch b/zips/gcl-2.6.8pre4.unixport.makefile.patch
new file mode 100644
index 0000000..4af04b1
--- /dev/null
+++ b/zips/gcl-2.6.8pre4.unixport.makefile.patch
@@ -0,0 +1,12 @@
+--- makefile	2006-08-23 14:14:22.000000000 -0400
++++ makefile.tpd	2008-11-21 13:31:06.000000000 -0500
+@@ -15,7 +15,8 @@
+ PORTDIR = $(shell pwd)
+ 
+ LD_LIBS_PRE=$(FIRST_FILE) $(addprefix -u ,$(PATCHED_SYMBOLS))
+-LD_LIBS_POST=$(LIBS) $(LIBC) -lgclp $(LAST_FILE)
++# 20031022000 tpd link axiom's C library code
++LD_LIBS_POST=$(LIBS) $(LIBC) -lgclp ${OBJ}/${SYS}/lib/libspad.a $(LAST_FILE)
+ 
+ ifeq ($(ARRS),)
+ ARRS:=ar rs
