diff --git a/changelog b/changelog
index 4aaf408..df5f255 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+20090825 tpd src/axiom-website/patches.html 20090826.02.tpd.patch
+20090825 tpd src/interp/Makefile move serror.boot to serror.lisp
+20090825 tpd src/interp/serror.lisp added, rewritten from serror.boot
+20090825 tpd src/interp/serror.boot removed, rewritten to serror.lisp
 20090825 tpd src/axiom-website/patches.html 20090826.01.tpd.patch
 20090825 tpd src/interp/Makefile move scan.boot to scan.lisp
 20090825 tpd src/interp/scan.lisp added, rewritten from scan.boot
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index a7d12a1..e6d2760 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1898,5 +1898,7 @@ record.lisp rewrite from boot to lisp<br/>
 rulesets.lisp rewrite from boot to lisp<br/>
 <a href="patches/20090826.01.tpd.patch">20090826.01.tpd.patch</a>
 scan.lisp rewrite from boot to lisp<br/>
+<a href="patches/20090826.02.tpd.patch">20090826.02.tpd.patch</a>
+serror.lisp rewrite from boot to lisp<br/>
  </body>
 </html>
diff --git a/src/interp/Makefile.pamphlet b/src/interp/Makefile.pamphlet
index f6e8b51..d47ab38 100644
--- a/src/interp/Makefile.pamphlet
+++ b/src/interp/Makefile.pamphlet
@@ -4753,44 +4753,26 @@ ${MID}/msg.lisp: ${IN}/msg.lisp.pamphlet
 
 @
 
-\subsection{serror.boot}
+\subsection{serror.lisp}
 <<serror.o (OUT from MID)>>=
-${OUT}/serror.${O}: ${MID}/serror.clisp 
-	@ echo 537 making ${OUT}/serror.${O} from ${MID}/serror.clisp
-	@ if [ -z "${NOISE}" ] ; then \
-	   echo '(progn (compile-file "${MID}/serror.clisp"' \
+${OUT}/serror.${O}: ${MID}/serror.lisp
+	@ echo 136 making ${OUT}/serror.${O} from ${MID}/serror.lisp
+	@ ( cd ${MID} ; \
+	  if [ -z "${NOISE}" ] ; then \
+	   echo '(progn  (compile-file "${MID}/serror.lisp"' \
              ':output-file "${OUT}/serror.${O}") (${BYE}))' | ${DEPSYS} ; \
 	  else \
-	   echo '(progn (compile-file "${MID}/serror.clisp"' \
+	   echo '(progn  (compile-file "${MID}/serror.lisp"' \
              ':output-file "${OUT}/serror.${O}") (${BYE}))' | ${DEPSYS} \
              >${TMP}/trace ; \
-	  fi
+	  fi )
 
 @
-<<serror.clisp (MID from IN)>>=
-${MID}/serror.clisp: ${IN}/serror.boot.pamphlet
-	@ echo 538 making ${MID}/serror.clisp from ${IN}/serror.boot.pamphlet
+<<serror.lisp (MID from IN)>>=
+${MID}/serror.lisp: ${IN}/serror.lisp.pamphlet
+	@ echo 137 making ${MID}/serror.lisp from ${IN}/serror.lisp.pamphlet
 	@ (cd ${MID} ; \
-	  ${TANGLE} ${IN}/serror.boot.pamphlet >serror.boot ; \
-	  if [ -z "${NOISE}" ] ; then \
-	   echo '(progn (boottran::boottocl "${MID}/serror.boot") (${BYE}))' \
-                | ${BOOTSYS}  ; \
-	  else \
-	   echo '(progn (boottran::boottocl "${MID}/serror.boot") (${BYE}))' \
-                | ${BOOTSYS} >${TMP}/trace ; \
-	  fi ; \
-	  rm serror.boot )
-
-@
-<<serror.boot.dvi (DOC from IN)>>=
-${DOC}/serror.boot.dvi: ${IN}/serror.boot.pamphlet 
-	@echo 539 making ${DOC}/serror.boot.dvi from ${IN}/serror.boot.pamphlet
-	@(cd ${DOC} ; \
-	cp ${IN}/serror.boot.pamphlet ${DOC} ; \
-	${DOCUMENT} ${NOISE} serror.boot ; \
-	rm -f ${DOC}/serror.boot.pamphlet ; \
-	rm -f ${DOC}/serror.boot.tex ; \
-	rm -f ${DOC}/serror.boot )
+	   ${TANGLE} ${IN}/serror.lisp.pamphlet >serror.lisp )
 
 @
 
@@ -6100,8 +6082,7 @@ clean:
 <<scan.lisp (MID from IN)>>
 
 <<serror.o (OUT from MID)>>
-<<serror.clisp (MID from IN)>>
-<<serror.boot.dvi (DOC from IN)>>
+<<serror.lisp (MID from IN)>>
 
 <<server.o (OUT from MID)>>
 <<server.clisp (MID from IN)>>
diff --git a/src/interp/serror.boot.pamphlet b/src/interp/serror.boot.pamphlet
deleted file mode 100644
index 753655e..0000000
--- a/src/interp/serror.boot.pamphlet
+++ /dev/null
@@ -1,164 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-\begin{document}
-\title{\$SPAD/src/interp serror.boot}
-\author{The Axiom Team}
-\maketitle
-\begin{abstract}
-\end{abstract}
-\eject
-\tableofcontents
-\eject
-\section{License}
-<<license>>=
--- Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
--- All rights reserved.
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions are
--- met:
---
---     - Redistributions of source code must retain the above copyright
---       notice, this list of conditions and the following disclaimer.
---
---     - Redistributions in binary form must reproduce the above copyright
---       notice, this list of conditions and the following disclaimer in
---       the documentation and/or other materials provided with the
---       distribution.
---
---     - Neither the name of The Numerical ALgorithms Group Ltd. nor the
---       names of its contributors may be used to endorse or promote products
---       derived from this software without specific prior written permission.
---
--- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
--- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
--- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
--- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
--- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
--- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
--- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
--- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
--- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
--- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-@
-<<*>>=
-<<license>>
-
---% Functions to handle specific errors (mostly syntax)
- 
-)package "BOOT"
-
-syGeneralErrorHere() ==
-   sySpecificErrorHere('S2CY0002, [])
- 
-sySpecificErrorHere(key, args) ==
-   sySpecificErrorAtToken($stok, key, args)
- 
-sySpecificErrorAtToken(tok, key, args) ==
-   pos := tokPosn tok
-   ncSoftError(pos, key, args)
- 
-syIgnoredFromTo(pos1, pos2) ==
-  if pfGlobalLinePosn pos1 = pfGlobalLinePosn pos2 then
-      ncSoftError(FromTo(pos1,pos2), 'S2CY0005, [])
-  else
-      ncSoftError(From pos1, 'S2CY0003, [])
-      ncSoftError(To   pos2, 'S2CY0004, [])
- 
-npMissingMate(close,open)==
-   ncSoftError(tokPosn open, 'S2CY0008, [])
-   npMissing close
- 
-npMissing s==
-   ncSoftError(tokPosn $stok,'S2CY0007, [PNAME s])
-   THROW("TRAPPOINT","TRAPPED")
- 
-npCompMissing s == npEqKey s or npMissing s
- 
-pfSourceStok x==
-       if pfLeaf? x
-       then x
-       else if null pfParts x
-            then 'NoToken
-            else pfSourceStok pfFirst x
- 
-npTrapForm(x)==
-   a:=pfSourceStok x
-   EQ(a,'NoToken)=>
-         syGeneralErrorHere()
-         THROW("TRAPPOINT","TRAPPED")
-   ncSoftError(tokPosn a, 'S2CY0002, [])
-   THROW("TRAPPOINT","TRAPPED")
- 
-npTrap()==
-   ncSoftError(tokPosn $stok,'S2CY0002,[])
-   THROW("TRAPPOINT","TRAPPED")
- 
-npRecoverTrap()==
-  npFirstTok()
-  pos1 := tokPosn $stok
-  npMoveTo 0
-  pos2 := tokPosn $stok
-  syIgnoredFromTo(pos1, pos2)
-  npPush [pfWrong(pfDocument ['"pile syntax error"],pfListOf [])]
- 
- 
-npListAndRecover(f)==
-   a:=$stack
-   b:=nil
-   $stack:=nil
-   done:=false
-   c:=$inputStream
-   while not done repeat
-     found:=CATCH("TRAPPOINT",APPLY(f,nil))
-     if found="TRAPPED"
-     then
-        $inputStream:=c
-        npRecoverTrap()
-     else if not found
-          then
-            $inputStream:=c
-            syGeneralErrorHere()
-            npRecoverTrap()
-     if npEqKey "BACKSET"
-     then
-        c:=$inputStream
-     else if npEqPeek "BACKTAB"
-          then
-             done:=true
-          else
-            $inputStream:=c
-            syGeneralErrorHere()
-            npRecoverTrap()
-            if npEqPeek "BACKTAB"
-            then done:=true
-            else
-                npNext()
-                c:=$inputStream
-     b:=cons(npPop1(),b)
-   $stack:=a
-   npPush NREVERSE b
- 
-npMoveTo n==
-      if null $inputStream
-      then true
-      else
-           if npEqPeek "BACKTAB"
-           then if n=0
-                then true
-                else (npNext();npMoveTo(n-1))
-           else if npEqPeek "BACKSET"
-                then if n=0
-                     then true
-                     else (npNext();npMoveTo n)
-                 else if npEqKey "SETTAB"
-                      then npMoveTo(n+1)
-                      else (npNext();npMoveTo n)
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}
diff --git a/src/interp/serror.lisp.pamphlet b/src/interp/serror.lisp.pamphlet
new file mode 100644
index 0000000..8fc6ea2
--- /dev/null
+++ b/src/interp/serror.lisp.pamphlet
@@ -0,0 +1,263 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/interp serror.lisp}
+\author{The Axiom Team}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+<<*>>=
+
+(IN-PACKAGE "BOOT")
+
+;--% Functions to handle specific errors (mostly syntax)
+
+;syGeneralErrorHere() ==
+;   sySpecificErrorHere('S2CY0002, [])
+ 
+(DEFUN |syGeneralErrorHere| ()
+  (PROG () (RETURN (|sySpecificErrorHere| 'S2CY0002 NIL))))
+
+;sySpecificErrorHere(key, args) ==
+;   sySpecificErrorAtToken($stok, key, args)
+ 
+(DEFUN |sySpecificErrorHere| (|key| |args|)
+  (PROG ()
+    (DECLARE (SPECIAL |$stok|))
+    (RETURN (|sySpecificErrorAtToken| |$stok| |key| |args|))))
+
+;sySpecificErrorAtToken(tok, key, args) ==
+;   pos := tokPosn tok
+;   ncSoftError(pos, key, args)
+ 
+(DEFUN |sySpecificErrorAtToken| (|tok| |key| |args|)
+  (PROG (|pos|)
+    (RETURN
+      (PROGN
+        (SETQ |pos| (|tokPosn| |tok|))
+        (|ncSoftError| |pos| |key| |args|)))))
+
+;syIgnoredFromTo(pos1, pos2) ==
+;  if pfGlobalLinePosn pos1 = pfGlobalLinePosn pos2 then
+;      ncSoftError(FromTo(pos1,pos2), 'S2CY0005, [])
+;  else
+;      ncSoftError(From pos1, 'S2CY0003, [])
+;      ncSoftError(To   pos2, 'S2CY0004, [])
+ 
+(DEFUN |syIgnoredFromTo| (|pos1| |pos2|)
+  (PROG ()
+    (RETURN
+      (COND
+        ((EQUAL (|pfGlobalLinePosn| |pos1|)
+                (|pfGlobalLinePosn| |pos2|))
+         (|ncSoftError| (|FromTo| |pos1| |pos2|) 'S2CY0005 NIL))
+        ('T (|ncSoftError| (|From| |pos1|) 'S2CY0003 NIL)
+         (|ncSoftError| (|To| |pos2|) 'S2CY0004 NIL))))))
+
+;npMissingMate(close,open)==
+;   ncSoftError(tokPosn open, 'S2CY0008, [])
+;   npMissing close
+ 
+(DEFUN |npMissingMate| (|close| |open|)
+  (PROG ()
+    (RETURN
+      (PROGN
+        (|ncSoftError| (|tokPosn| |open|) 'S2CY0008 NIL)
+        (|npMissing| |close|)))))
+
+;npMissing s==
+;   ncSoftError(tokPosn $stok,'S2CY0007, [PNAME s])
+;   THROW("TRAPPOINT","TRAPPED")
+ 
+(DEFUN |npMissing| (|s|)
+  (PROG ()
+    (DECLARE (SPECIAL |$stok|))
+    (RETURN
+      (PROGN
+        (|ncSoftError| (|tokPosn| |$stok|) 'S2CY0007
+            (LIST (PNAME |s|)))
+        (THROW 'TRAPPOINT 'TRAPPED)))))
+
+;npCompMissing s == npEqKey s or npMissing s
+ 
+(DEFUN |npCompMissing| (|s|)
+  (PROG () (RETURN (OR (|npEqKey| |s|) (|npMissing| |s|)))))
+
+;pfSourceStok x==
+;       if pfLeaf? x
+;       then x
+;       else if null pfParts x
+;            then 'NoToken
+;            else pfSourceStok pfFirst x
+ 
+(DEFUN |pfSourceStok| (|x|)
+  (PROG ()
+    (RETURN
+      (COND
+        ((|pfLeaf?| |x|) |x|)
+        ((NULL (|pfParts| |x|)) '|NoToken|)
+        ('T (|pfSourceStok| (|pfFirst| |x|)))))))
+
+;npTrapForm(x)==
+;   a:=pfSourceStok x
+;   EQ(a,'NoToken)=>
+;         syGeneralErrorHere()
+;         THROW("TRAPPOINT","TRAPPED")
+;   ncSoftError(tokPosn a, 'S2CY0002, [])
+;   THROW("TRAPPOINT","TRAPPED")
+ 
+(DEFUN |npTrapForm| (|x|)
+  (PROG (|a|)
+    (RETURN
+      (PROGN
+        (SETQ |a| (|pfSourceStok| |x|))
+        (COND
+          ((EQ |a| '|NoToken|)
+           (PROGN (|syGeneralErrorHere|) (THROW 'TRAPPOINT 'TRAPPED)))
+          ('T
+           (PROGN
+             (|ncSoftError| (|tokPosn| |a|) 'S2CY0002 NIL)
+             (THROW 'TRAPPOINT 'TRAPPED))))))))
+
+;npTrap()==
+;   ncSoftError(tokPosn $stok,'S2CY0002,[])
+;   THROW("TRAPPOINT","TRAPPED")
+ 
+(DEFUN |npTrap| ()
+  (PROG ()
+    (DECLARE (SPECIAL |$stok|))
+    (RETURN
+      (PROGN
+        (|ncSoftError| (|tokPosn| |$stok|) 'S2CY0002 NIL)
+        (THROW 'TRAPPOINT 'TRAPPED)))))
+
+;npRecoverTrap()==
+;  npFirstTok()
+;  pos1 := tokPosn $stok
+;  npMoveTo 0
+;  pos2 := tokPosn $stok
+;  syIgnoredFromTo(pos1, pos2)
+;  npPush [pfWrong(pfDocument ['"pile syntax error"],pfListOf [])]
+ 
+(DEFUN |npRecoverTrap| ()
+  (PROG (|pos2| |pos1|)
+    (DECLARE (SPECIAL |$stok|))
+    (RETURN
+      (PROGN
+        (|npFirstTok|)
+        (SETQ |pos1| (|tokPosn| |$stok|))
+        (|npMoveTo| 0)
+        (SETQ |pos2| (|tokPosn| |$stok|))
+        (|syIgnoredFromTo| |pos1| |pos2|)
+        (|npPush|
+            (LIST (|pfWrong| (|pfDocument| (LIST "pile syntax error"))
+                      (|pfListOf| NIL))))))))
+
+;npListAndRecover(f)==
+;   a:=$stack
+;   b:=nil
+;   $stack:=nil
+;   done:=false
+;   c:=$inputStream
+;   while not done repeat
+;     found:=CATCH("TRAPPOINT",APPLY(f,nil))
+;     if found="TRAPPED"
+;     then
+;        $inputStream:=c
+;        npRecoverTrap()
+;     else if not found
+;          then
+;            $inputStream:=c
+;            syGeneralErrorHere()
+;            npRecoverTrap()
+;     if npEqKey "BACKSET"
+;     then
+;        c:=$inputStream
+;     else if npEqPeek "BACKTAB"
+;          then
+;             done:=true
+;          else
+;            $inputStream:=c
+;            syGeneralErrorHere()
+;            npRecoverTrap()
+;            if npEqPeek "BACKTAB"
+;            then done:=true
+;            else
+;                npNext()
+;                c:=$inputStream
+;     b:=cons(npPop1(),b)
+;   $stack:=a
+;   npPush NREVERSE b
+ 
+(DEFUN |npListAndRecover| (|f|)
+  (PROG (|found| |c| |done| |b| |a|)
+    (DECLARE (SPECIAL |$inputStream| |$stack|))
+    (RETURN
+      (PROGN
+        (SETQ |a| |$stack|)
+        (SETQ |b| NIL)
+        (SETQ |$stack| NIL)
+        (SETQ |done| NIL)
+        (SETQ |c| |$inputStream|)
+        ((LAMBDA ()
+           (LOOP
+             (COND
+               (|done| (RETURN NIL))
+               ('T
+                (PROGN
+                  (SETQ |found| (CATCH 'TRAPPOINT (APPLY |f| NIL)))
+                  (COND
+                    ((EQ |found| 'TRAPPED) (SETQ |$inputStream| |c|)
+                     (|npRecoverTrap|))
+                    ((NULL |found|) (SETQ |$inputStream| |c|)
+                     (|syGeneralErrorHere|) (|npRecoverTrap|)))
+                  (COND
+                    ((|npEqKey| 'BACKSET) (SETQ |c| |$inputStream|))
+                    ((|npEqPeek| 'BACKTAB) (SETQ |done| T))
+                    ('T (SETQ |$inputStream| |c|)
+                     (|syGeneralErrorHere|) (|npRecoverTrap|)
+                     (COND
+                       ((|npEqPeek| 'BACKTAB) (SETQ |done| T))
+                       ('T (|npNext|) (SETQ |c| |$inputStream|)))))
+                  (SETQ |b| (CONS (|npPop1|) |b|))))))))
+        (SETQ |$stack| |a|)
+        (|npPush| (NREVERSE |b|))))))
+
+;npMoveTo n==
+;      if null $inputStream
+;      then true
+;      else
+;           if npEqPeek "BACKTAB"
+;           then if n=0
+;                then true
+;                else (npNext();npMoveTo(n-1))
+;           else if npEqPeek "BACKSET"
+;                then if n=0
+;                     then true
+;                     else (npNext();npMoveTo n)
+;                 else if npEqKey "SETTAB"
+;                      then npMoveTo(n+1)
+;                      else (npNext();npMoveTo n)
+
+(DEFUN |npMoveTo| (|n|)
+  (PROG ()
+    (DECLARE (SPECIAL |$inputStream|))
+    (RETURN
+      (COND
+        ((NULL |$inputStream|) T)
+        ((|npEqPeek| 'BACKTAB)
+         (COND ((EQL |n| 0) T) ('T (|npNext|) (|npMoveTo| (- |n| 1)))))
+        ((|npEqPeek| 'BACKSET)
+         (COND ((EQL |n| 0) T) ('T (|npNext|) (|npMoveTo| |n|))))
+        ((|npEqKey| 'SETTAB) (|npMoveTo| (+ |n| 1)))
+        ('T (|npNext|) (|npMoveTo| |n|))))))
+
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}
