diff --git a/changelog b/changelog
index 052df92..76aa928 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,6 @@
+20120402 tpd src/axiom-website/patches.html 20120402.02.tpd.patch
+20120402 tpd src/input/Makefile add example of spad code
+20120402 tpd src/input/clements.input add example of spad code
 20120402 tpd src/axiom-website/patches.html 20120402.01.tpd.patch
 20120402 tpd src/axiom-website/download.html add ubuntu
 20120331 tpd src/axiom-website/patches.html 20120331.01.tpd.patch
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 82db525..2a325f4 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -3864,5 +3864,7 @@ src/algebra/Makefile fix clique1, clique2<br/>
 In process, not yet released<br/><br/>
 <a href="patches/20120402.01.tpd.patch">20120402.01.tpd.patch</a>
 src/axiom-website/download.html add ubuntu<br/>
+<a href="patches/20120402.02.tpd.patch">20120402.02.tpd.patch</a>
+src/input/clements.input add example of spad code<br/>
  </body>
 </html>
diff --git a/src/input/Makefile.pamphlet b/src/input/Makefile.pamphlet
index bbda020..5cf6fad 100644
--- a/src/input/Makefile.pamphlet
+++ b/src/input/Makefile.pamphlet
@@ -299,7 +299,7 @@ REGRESSTESTS= ackermann.regress \
     cachedf.regress   calcprob.regress  \
     calculus2.regress calculus.regress cardinal.regress card.regress \
     carten.regress    cclass.regress   char.regress     ch.regress \
-    chtheorem.regress classtalk.regress \
+    chtheorem.regress classtalk.regress clements.regress \
     clifford.regress  clif.regress     cmds.regress \
     coercels.regress  collect.regress \
     complex.regress   complexfactor.regress conformal.regress \
@@ -646,7 +646,8 @@ FILES= ${OUT}/ackermann.input \
        ${OUT}/cardinal.input ${OUT}/card.input       ${OUT}/carten.input \
        ${OUT}/cclass.input   ${OUT}/cdraw.input      ${OUT}/char.input \
        ${OUT}/ch.input       ${OUT}/chtheorem.input  ${OUT}/classtalk.input \
-       ${OUT}/clifford.input ${OUT}/clif.input       ${OUT}/cmds.input \
+       ${OUT}/clifford.input ${OUT}/clements.input \
+       ${OUT}/clif.input       ${OUT}/cmds.input \
        ${OUT}/coercels.input ${OUT}/collect.input    ${OUT}/color.input \
        ${OUT}/complex.input  ${OUT}/complexfactor.input \
        ${OUT}/cone.input       ${OUT}/conformal.input \
@@ -933,8 +934,8 @@ DOCFILES= \
   ${DOC}/cclass.input.dvi      ${DOC}/cdraw.input.dvi      \
   ${DOC}/char.input.dvi        ${DOC}/ch.input.dvi         \
   ${DOC}/chtheorem.input.dvi   ${DOC}/classtalk.input.dvi  \
-  ${DOC}/clifford.input.dvi    ${DOC}/clif.input.dvi       \
-  ${DOC}/cmds.input.dvi       \
+  ${DOC}/clifford.input.dvi    ${DOC}/clements.input.dvi   \
+  ${DOC}/clif.input.dvi        ${DOC}/cmds.input.dvi       \
   ${DOC}/coercels.input.dvi    ${DOC}/collect.input.dvi    \
   ${DOC}/color.input.dvi       ${DOC}/complex.input.dvi    \
   ${DOC}/complexfactor.input.dvi \
diff --git a/src/input/clements.input.pamphlet b/src/input/clements.input.pamphlet
new file mode 100644
index 0000000..7f1a9ae
--- /dev/null
+++ b/src/input/clements.input.pamphlet
@@ -0,0 +1,148 @@
+\documentclass{article}
+\usepackage{axiom}
+\setlength{\textwidth}{400pt}
+\begin{document}
+\title{\$SPAD/src/input cachedf.input}
+\author{Mark Clements}
+\maketitle
+\begin{abstract}
+This was posted by Mark Clements.
+\end{abstract}
+\eject
+\begin{chunk}{clements.spad}
+)abbrev domain ORDKE OrderedKeyEntry
+OrderedKeyEntry(Key:OrderedSet,Entry:SetCategory):
+  Exports == Implementation where
+    Exports == OrderedSet with
+      construct: (Key,Entry) -> %
+      elt: (%,"key") -> Key
+      elt: (%,"entry") -> Entry
+    Implementation == add
+      Rep := Record(k:Key,e:Entry)
+      x,y: %
+      construct(a,b) == construct(a,b)$Rep @ %
+      elt(x,"key"):Key == (x @ Rep).k
+      elt(x,"entry"):Entry == (x @ Rep).e
+      x < y == x.key < y.key
+      x = y == x.key = y.key
+      hash x == hash(x.key)
+      if Entry has CoercibleTo OutputForm then
+        coerce(x):OutputForm ==
+          bracket [(x.key)::OutputForm,(x.entry)::OutputForm]
+\end{chunk}
+\begin{chunk}{*}
+)set break resume
+)sys rm -f clements.output
+)spool clements.output
+)set message test on
+)set message auto off
+)clear all
+)sys cp $AXIOM/../../src/input/clements.input.pamphlet .
+)lisp (tangle "clements.input.pamphlet" "clements.spad" "clements.spad")
+
+--S 1 of 6
+)co clements
+--R 
+--R   Compiling AXIOM source code from file 
+--I      /root/axiom/int/input/clements.spad using old system compiler.
+--R   ORDKE abbreviates domain OrderedKeyEntry 
+--R------------------------------------------------------------------------
+--R   initializing nrlib ORDKE for OrderedKeyEntry 
+--R   compiling into nrlib ORDKE 
+--R   compiling exported construct : (Key,Entry) -> $
+--R      ORDKE;construct;KeyEntry$;1 is replaced by CONS 
+--ITime: 0 SEC.
+--R
+--R   compiling exported elt : ($,key) -> Key
+--R      ORDKE;elt;$keyKey;2 is replaced by QCARx 
+--ITime: 0 SEC.
+--R
+--R   compiling exported elt : ($,entry) -> Entry
+--R      ORDKE;elt;$entryEntry;3 is replaced by QCDRx 
+--ITime: 0 SEC.
+--R
+--R   compiling exported < : ($,$) -> Boolean
+--ITime: 0 SEC.
+--R
+--R   compiling exported = : ($,$) -> Boolean
+--ITime: 0 SEC.
+--R
+--R   compiling exported hash : $ -> SingleInteger
+--ITime: 0 SEC.
+--R
+--R   compiling exported coerce : $ -> OutputForm
+--ITime: 0.01 SEC.
+--R
+--I(time taken in buildFunctor:  0 . NIL)
+--R
+--R;;;     ***       |OrderedKeyEntry| REDEFINED
+--R
+--R;;;     ***       |OrderedKeyEntry| REDEFINED
+--ITime: 0.01 SEC.
+--R
+--R
+--R   Cumulative Statistics for Constructor OrderedKeyEntry
+--I      Time: 0.02 seconds
+--R 
+--R   finalizing nrlib ORDKE 
+--R   Processing OrderedKeyEntry for Browser database:
+--R--->-->OrderedKeyEntry((construct (% Key Entry))): Not documented!!!!
+--R--->-->OrderedKeyEntry((elt (Key % key))): Not documented!!!!
+--R--->-->OrderedKeyEntry((elt (Entry % entry))): Not documented!!!!
+--R--->-->OrderedKeyEntry(constructor): Not documented!!!!
+--R--->-->OrderedKeyEntry(): Missing Description
+--R------------------------------------------------------------------------
+--I   OrderedKeyEntry is now explicitly exposed in frame frame0 
+--R   OrderedKeyEntry will be automatically loaded when needed from 
+--I      /root/axiom/int/input/ORDKE.nrlib/code
+--R
+--E 1
+
+--S 2 of 6
+KE := OrderedKeyEntry(Integer,String)
+--R 
+--R
+--R   (1)  OrderedKeyEntry(Integer,String)
+--R                                                                 Type: Domain
+--E 2
+
+--S 3 of 6
+test1 := [1,"name1"]$KE
+--R 
+--R
+--R   (2)  [1,"name1"]
+--R                                        Type: OrderedKeyEntry(Integer,String)
+--E 3
+
+--S 4 of 6
+test2 := [2,"name2"]$KE
+--R 
+--R
+--R   (3)  [2,"name2"]
+--R                                        Type: OrderedKeyEntry(Integer,String)
+--E 4
+
+--S 5 of 6
+min(test1,test2)
+--R 
+--R
+--R   (4)  [1,"name1"]
+--R                                        Type: OrderedKeyEntry(Integer,String)
+--E 5
+
+--S 6 of 6
+max(test1,test2)
+--R 
+--R
+--R   (5)  [2,"name2"]
+--R                                        Type: OrderedKeyEntry(Integer,String)
+--E 6
+)spool
+)lisp (bye)
+
+\end{chunk}
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}
