diff --git a/changelog b/changelog
index e602155..6ff3d2d 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+20090812 tpd src/axiom-website/patches.html 20090812.02.tpd.patch
+20090812 tpd src/interp/Makefile move cformat.boot to cformat.lisp
+20090812 tpd src/interp/debugsys.lisp change astr.clisp to cformat.lisp
+20090812 tpd src/interp/cformat.lisp added, rewritten from cformat.boot
+20090812 tpd src/interp/cformat.boot removed, rewritten to cformat.lisp
 20090812 tpd src/axiom-website/patches.html 20090812.01.tpd.patch
 20090812 tpd src/interp/Makefile move cattable.boot to cattable.lisp
 20090812 tpd src/interp/debugsys.lisp change astr.clisp to cattable.lisp
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index a151390..d01dc62 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1776,6 +1776,8 @@ buildom.lisp rewrite from boot to lisp<br/>
 dq.lisp rewrite from boot to lisp<br/>
 <a href="patches/20090812.01.tpd.patch">20090812.01.tpd.patch</a>
 cattable.lisp rewrite from boot to lisp<br/>
+<a href="patches/20090812.02.tpd.patch">20090812.02.tpd.patch</a>
+cformat.lisp rewrite from boot to lisp<br/>
 
  </body>
 </html>
diff --git a/src/interp/Makefile.pamphlet b/src/interp/Makefile.pamphlet
index 521c6f8..c82c99b 100644
--- a/src/interp/Makefile.pamphlet
+++ b/src/interp/Makefile.pamphlet
@@ -415,7 +415,7 @@ DOCFILES=${DOC}/as.boot.dvi \
 	 ${DOC}/bc-matrix.boot.dvi \
 	 ${DOC}/br-con.boot.dvi \
 	 ${DOC}/category.boot.dvi \
-	 ${DOC}/c-doc.boot.dvi ${DOC}/cformat.boot.dvi \
+	 ${DOC}/c-doc.boot.dvi \
 	 ${DOC}/cfuns.lisp.dvi ${DOC}/clam.boot.dvi \
 	 ${DOC}/clammed.boot.dvi ${DOC}/compat.boot.dvi \
 	 ${DOC}/compiler.boot.dvi \
@@ -5877,45 +5877,26 @@ ${DOC}/posit.boot.dvi: ${IN}/posit.boot.pamphlet
 
 @
 
-\subsection{cformat.boot}
+\subsection{cformat.lisp}
 <<cformat.o (OUT from MID)>>=
-${OUT}/cformat.${O}: ${MID}/cformat.clisp 
-	@ echo 543 making ${OUT}/cformat.${O} from ${MID}/cformat.clisp
-	@ if [ -z "${NOISE}" ] ; then \
-	   echo '(progn (compile-file "${MID}/cformat.clisp"' \
+${OUT}/cformat.${O}: ${MID}/cformat.lisp
+	@ echo 136 making ${OUT}/cformat.${O} from ${MID}/cformat.lisp
+	@ ( cd ${MID} ; \
+	  if [ -z "${NOISE}" ] ; then \
+	   echo '(progn  (compile-file "${MID}/cformat.lisp"' \
              ':output-file "${OUT}/cformat.${O}") (${BYE}))' | ${DEPSYS} ; \
 	  else \
-	   echo '(progn (compile-file "${MID}/cformat.clisp"' \
+	   echo '(progn  (compile-file "${MID}/cformat.lisp"' \
              ':output-file "${OUT}/cformat.${O}") (${BYE}))' | ${DEPSYS} \
              >${TMP}/trace ; \
-	  fi
+	  fi )
 
 @
-<<cformat.clisp (MID from IN)>>=
-${MID}/cformat.clisp: ${IN}/cformat.boot.pamphlet
-	@ echo 544 making ${MID}/cformat.clisp from ${IN}/cformat.boot.pamphlet
+<<cformat.lisp (MID from IN)>>=
+${MID}/cformat.lisp: ${IN}/cformat.lisp.pamphlet
+	@ echo 137 making ${MID}/cformat.lisp from ${IN}/cformat.lisp.pamphlet
 	@ (cd ${MID} ; \
-	 ${TANGLE} ${IN}/cformat.boot.pamphlet >cformat.boot ; \
-	  if [ -z "${NOISE}" ] ; then \
-	   echo '(progn (boottran::boottocl "${MID}/cformat.boot") (${BYE}))' \
-                | ${BOOTSYS}  ; \
-	  else \
-	   echo '(progn (boottran::boottocl "${MID}/cformat.boot") (${BYE}))' \
-                | ${BOOTSYS} >${TMP}/trace ; \
-	  fi ; \
-	  rm cformat.boot )
-
-@
-<<cformat.boot.dvi (DOC from IN)>>=
-${DOC}/cformat.boot.dvi: ${IN}/cformat.boot.pamphlet 
-	@echo 545 making ${DOC}/cformat.boot.dvi \
-                  from ${IN}/cformat.boot.pamphlet
-	@(cd ${DOC} ; \
-	cp ${IN}/cformat.boot.pamphlet ${DOC} ; \
-	${DOCUMENT} ${NOISE} cformat.boot ; \
-	rm -f ${DOC}/cformat.boot.pamphlet ; \
-	rm -f ${DOC}/cformat.boot.tex ; \
-	rm -f ${DOC}/cformat.boot )
+	   ${TANGLE} ${IN}/cformat.lisp.pamphlet >cformat.lisp )
 
 @
 
@@ -6851,8 +6832,7 @@ clean:
 <<c-doc.boot.dvi (DOC from IN)>>
 
 <<cformat.o (OUT from MID)>>
-<<cformat.clisp (MID from IN)>>
-<<cformat.boot.dvi (DOC from IN)>>
+<<cformat.lisp (MID from IN)>>
 
 <<cfuns.o (OUT from MID)>>
 <<cfuns.lisp (MID from IN)>>
diff --git a/src/interp/cformat.boot.pamphlet b/src/interp/cformat.boot.pamphlet
deleted file mode 100644
index a5fb233..0000000
--- a/src/interp/cformat.boot.pamphlet
+++ /dev/null
@@ -1,108 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-\begin{document}
-\title{\$SPAD/src/interp cformat.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>>
-
-)package "BOOT"
-
---% Formatting functions for various compiler data objects.
---  These are used as [%origin o, %id n] for %1f %2f... style arguments
---  in a keyed message.
---  SMW, SG June 88
- 
-%id a     == [IDENTITY, a]
- 
--- Union(FileName,"strings","console")
-%origin x ==
-    [function porigin, x]
-porigin x ==
-    (STRINGP x => x; pfname x)
- 
-%fname x ==
-    [function pfname, x]
-pfname x ==
-    PathnameString x
- 
-
-%pos p == [function ppos, p]
-ppos p ==
-    pfNoPosition? p => ['"no position"]
-    pfImmediate? p  => ['"console"]
-    cpos := pfCharPosn p
-    lpos := pfLinePosn p
-    org  := porigin pfFileName p
-    [org,'" ",'"line",'" ",lpos]
- 
-%key keyStuff == [function pkey, keyStuff]
---keyStuff ::= keynumber | [ one or more keySeqs ]
---keySeq   ::= keynumber optargList optdbn
---optARgL  ::= [ 0 or more arguments ] | nothing at all
---optDbn   ::= ['dbN , databaseName ] | nothing at all
------------ (override in format.boot.pamphlet)
-pkey keyStuff ==
-    if not PAIRP keyStuff then keyStuff := [keyStuff]
-    allMsgs := []
-    while not null keyStuff repeat
-        dbN := NIL
-        argL := NIL
-        key := first keyStuff
-        keyStuff := IFCDR keyStuff
-        next := IFCAR keyStuff
-        while PAIRP next repeat
-            if CAR next = 'dbN then dbN := CADR next
-            else argL := next
-            keyStuff  := IFCDR keyStuff
-            next      := IFCAR keyStuff
-        oneMsg  := returnStLFromKey(key,argL,dbN)
-        allMsgs := NCONC (oneMsg,allMsgs)
-    allMsgs
- 
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}
diff --git a/src/interp/cformat.lisp.pamphlet b/src/interp/cformat.lisp.pamphlet
new file mode 100644
index 0000000..d13b267
--- /dev/null
+++ b/src/interp/cformat.lisp.pamphlet
@@ -0,0 +1,143 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/interp cformat.lisp}
+\author{The Axiom Team}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+<<*>>=
+
+(IN-PACKAGE "BOOT")
+
+;--% Formatting functions for various compiler data objects.
+;--  These are used as [%origin o, %id n] for %1f %2f... style arguments
+;--  in a keyed message.
+;--  SMW, SG June 88
+ 
+;%id a     == [IDENTITY, a]
+
+(DEFUN |%id| (|a|) (PROG NIL (RETURN (LIST IDENTITY |a|))))
+
+;-- Union(FileName,"strings","console")
+;%origin x ==
+;    [function porigin, x]
+
+(DEFUN |%origin| (|x|)
+ (PROG NIL (RETURN (LIST (FUNCTION |porigin|) |x|))))
+
+;porigin x ==
+;    (STRINGP x => x; pfname x)
+
+(DEFUN |porigin| (|x|)
+ (PROG () 
+  (RETURN
+   (COND
+    ((STRINGP |x|) |x|)
+    ((QUOTE T) (|pfname| |x|))))))
+
+ 
+;%fname x ==
+;    [function pfname, x]
+
+(DEFUN |%fname| (|x|) (PROG NIL (RETURN (LIST (FUNCTION |pfname|) |x|))))
+
+;pfname x ==
+;    PathnameString x
+ 
+(DEFUN |pfname| (|x|) (PROG NIL (RETURN (|PathnameString| |x|))))
+
+;%pos p == [function ppos, p]
+
+(DEFUN |%pos| (|p|) (PROG NIL (RETURN (LIST (FUNCTION |ppos|) |p|))))
+
+;ppos p ==
+;    pfNoPosition? p => ['"no position"]
+;    pfImmediate? p  => ['"console"]
+;    cpos := pfCharPosn p
+;    lpos := pfLinePosn p
+;    org  := porigin pfFileName p
+;    [org,'" ",'"line",'" ",lpos]
+
+(DEFUN |ppos| (|p|)
+ (PROG (|org| |lpos| |cpos|)
+  (RETURN
+   (COND
+    ((|pfNoPosition?| |p|) (LIST "no position"))
+    ((|pfImmediate?| |p|) (LIST "console"))
+    ((QUOTE T)
+     (PROGN
+      (SETQ |cpos| (|pfCharPosn| |p|))
+      (SETQ |lpos| (|pfLinePosn| |p|))
+      (SETQ |org| (|porigin| (|pfFileName| |p|)))
+      (LIST |org| " " "line" " " |lpos|)))))))
+ 
+;%key keyStuff == [function pkey, keyStuff]
+
+(DEFUN |%key| (|keyStuff|)
+ (PROG NIL (RETURN (LIST (FUNCTION |pkey|) |keyStuff|))))
+
+;--keyStuff ::= keynumber | [ one or more keySeqs ]
+;--keySeq   ::= keynumber optargList optdbn
+;--optARgL  ::= [ 0 or more arguments ] | nothing at all
+;--optDbn   ::= ['dbN , databaseName ] | nothing at all
+;----------- (override in format.boot.pamphlet)
+;pkey keyStuff ==
+;    if not PAIRP keyStuff then keyStuff := [keyStuff]
+;    allMsgs := []
+;    while not null keyStuff repeat
+;        dbN := NIL
+;        argL := NIL
+;        key := first keyStuff
+;        keyStuff := IFCDR keyStuff
+;        next := IFCAR keyStuff
+;        while PAIRP next repeat
+;            if CAR next = 'dbN then dbN := CADR next
+;            else argL := next
+;            keyStuff  := IFCDR keyStuff
+;            next      := IFCAR keyStuff
+;        oneMsg  := returnStLFromKey(key,argL,dbN)
+;        allMsgs := NCONC (oneMsg,allMsgs)
+;    allMsgs
+ 
+(DEFUN |pkey| (|keyStuff|)
+ (PROG (|oneMsg| |next| |key| |argL| |dbN| |allMsgs|)
+  (RETURN
+   (PROGN
+    (COND ((NULL (CONSP |keyStuff|)) (SETQ |keyStuff| (LIST |keyStuff|))))
+    (SETQ |allMsgs| NIL)
+    ((LAMBDA () 
+      (LOOP
+       (COND
+        ((NULL |keyStuff|) (RETURN NIL))
+        (#0=(QUOTE T)
+         (PROGN
+          (SETQ |dbN| NIL)
+          (SETQ |argL| NIL)
+          (SETQ |key| (CAR |keyStuff|))
+          (SETQ |keyStuff| (IFCDR |keyStuff|))
+          (SETQ |next| (IFCAR |keyStuff|))
+          ((LAMBDA () 
+           (LOOP
+            (COND
+             ((NOT (CONSP |next|)) (RETURN NIL))
+             (#0#
+              (PROGN
+               (COND
+                ((EQ (CAR |next|) (QUOTE |dbN|)) (SETQ |dbN| (CADR |next|)))
+                ((QUOTE T) (SETQ |argL| |next|)))
+               (SETQ |keyStuff| (IFCDR |keyStuff|))
+               (SETQ |next| (IFCAR |keyStuff|))))))))
+          (SETQ |oneMsg| (|returnStLFromKey| |key| |argL| |dbN|))
+          (SETQ |allMsgs| (NCONC |oneMsg| |allMsgs|))))))))
+    |allMsgs|))))
+ 
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}
diff --git a/src/interp/debugsys.lisp.pamphlet b/src/interp/debugsys.lisp.pamphlet
index 3d0226b..063c847 100644
--- a/src/interp/debugsys.lisp.pamphlet
+++ b/src/interp/debugsys.lisp.pamphlet
@@ -89,7 +89,7 @@ loaded by hand we need to establish a value.
       (thesymb "/int/interp/alql.lisp")
       (thesymb "/int/interp/buildom.lisp")
       (thesymb "/int/interp/cattable.lisp")
-      (thesymb "/int/interp/cformat.clisp")
+      (thesymb "/int/interp/cformat.lisp")
       (thesymb (concatenate 'string "/obj/" *sys* "/interp/cfuns.o"))
       (thesymb "/int/interp/clam.clisp")
       (thesymb "/int/interp/clammed.clisp")
