diff --git a/books/bookvol10.3.pamphlet b/books/bookvol10.3.pamphlet
index 5366e0d..a1d04e8 100644
--- a/books/bookvol10.3.pamphlet
+++ b/books/bookvol10.3.pamphlet
@@ -310,6 +310,187 @@ in the bootstrap set. Thus,
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \chapter{Chapter A}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{domain AFFSP AffineSpace}
+<<AffineSpace.input>>=
+)set break resume
+)sys rm -f AffineSpace.output
+)spool AffineSpace.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show AffineSpace
+--R AffineSpace(dim: NonNegativeInteger,K: Field)  is a domain constructor
+--R Abbreviation for AffineSpace is AFFSP 
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.3.pamphlet to see algebra source code for AFFSP 
+--R
+--R------------------------------- Operations --------------------------------
+--R ?=? : (%,%) -> Boolean                affinePoint : List K -> %
+--R coerce : List K -> %                  coerce : % -> List K
+--R coerce : % -> OutputForm              conjugate : % -> %
+--R definingField : % -> K                degree : % -> PositiveInteger
+--R ?.? : (%,Integer) -> K                hash : % -> SingleInteger
+--R latex : % -> String                   list : % -> List K
+--R orbit : % -> List %                   origin : () -> %
+--R pointValue : % -> List K              rational? : % -> Boolean
+--R setelt : (%,Integer,K) -> K           ?~=? : (%,%) -> Boolean
+--R conjugate : (%,NonNegativeInteger) -> %
+--R orbit : (%,NonNegativeInteger) -> List %
+--R rational? : (%,NonNegativeInteger) -> Boolean
+--R removeConjugate : List % -> List %
+--R removeConjugate : (List %,NonNegativeInteger) -> List %
+--R
+--E 1
+
+)spool
+)lisp (bye)
+@
+<<AffineSpace.help>>=
+====================================================================
+AffineSpace examples
+====================================================================
+
+See Also:
+o )show AffineSpace
+
+@
+\pagehead{AffineSpace}{AFFSP}
+\pagepic{ps/v103affinespace.ps}{AFFSP}{1.00}
+
+{\bf Exports:}\\
+\begin{tabular}{lllll}
+\cross{AFFSP}{?.?} &
+\cross{AFFSP}{?=?} &
+\cross{AFFSP}{?\~{}=?} &
+\cross{AFFSP}{affinePoint} &
+\cross{AFFSP}{coerce} \\
+\cross{AFFSP}{conjugate} &
+\cross{AFFSP}{definingField} &
+\cross{AFFSP}{degree} &
+\cross{AFFSP}{hash} &
+\cross{AFFSP}{latex} \\
+\cross{AFFSP}{list} &
+\cross{AFFSP}{orbit} &
+\cross{AFFSP}{origin} &
+\cross{AFFSP}{pointValue} &
+\cross{AFFSP}{rational?} \\
+\cross{AFFSP}{removeConjugate} &
+\cross{AFFSP}{setelt} &&&
+\end{tabular}
+
+<<domain AFFSP AffineSpace>>=
+)abbrev domain AFFSP AffineSpace
+++ Author: Gaetan Hache
+++ Date Created: 17 nov 1992
+++ Date Last Updated: May 2010 by Tim Daly
+++ Description:  
+++ The following is all the categories and domains related to projective
+++ space and part of the PAFF package
+AffineSpace(dim,K):Exports == Implementation where
+  dim:NonNegativeInteger
+  K:Field
+
+  LIST ==> List
+  NNI  ==> NonNegativeInteger
+
+  Exports ==> AffineSpaceCategory(K)
+
+  Implementation ==> List(K)  add
+
+    Rep:= List(K)
+
+    origin== new(dim,0$K)$List(K)
+
+    coerce(pt:%):OutputForm == 
+      dd:OutputForm:= ":" :: OutputForm
+      llout:List(OutputForm):=[ hconcat(dd, a::OutputForm) for a in rest pt]
+      lout:= cons( (first pt)::OutputForm , llout)
+      out:= hconcat lout
+      oo:=paren(out)
+      ee:OutputForm:= degree(pt) :: OutputForm
+      oo**ee
+
+    definingField(pt)==
+      K has PseudoAlgebraicClosureOfPerfectFieldCategory => _
+        maxTower(pt pretend Rep)
+      1$K
+    
+    degree(pt)==
+      K has PseudoAlgebraicClosureOfPerfectFieldCategory => _
+        extDegree definingField pt
+      1
+      
+    coerce(pt:%):List(K) == pt pretend Rep   
+      
+    affinePoint(pt:LIST(K))==
+        pt :: %
+
+    list(ptt)==
+      ptt pretend Rep
+
+    pointValue(ptt)==
+      ptt pretend Rep
+
+    conjugate(p,e)==
+      lp:Rep:=p
+      pc:List(K):=[c**e for c in lp]
+      affinePoint(pc)
+
+    rational?(p,n)== p=conjugate(p,n)
+
+    rational?(p)==rational?(p,characteristic()$K)
+
+    removeConjugate(l)==removeConjugate(l,characteristic()$K)
+
+    removeConjugate(l:LIST(%),n:NNI):LIST(%)==
+      if K has FiniteFieldCategory then
+        allconj:LIST(%):=empty()
+        conjrem:LIST(%):=empty()
+        for p in l repeat
+          if ^member?(p,allconj) then
+            conjrem:=cons(p,conjrem)
+            allconj:=concat(allconj,orbit(p,n))
+        conjrem
+      else
+        error "The field is not finite"
+
+    conjugate(p)==conjugate(p,characteristic()$K)
+
+    orbit(p)==orbit(p,characteristic()$K)
+
+    orbit(p,e)==
+      if K has FiniteFieldCategory then
+        l:LIST(%):=[p]
+        np:%:=conjugate(p,e)
+        flag:=^(np=p)::Boolean
+        while flag repeat
+          l:=concat(np,l)
+          np:=conjugate(np,e)
+          flag:=not (np=p)::Boolean
+        l
+      else
+        error "Cannot compute the conjugate"
+
+    aa:% = bb:% ==
+      aa =$Rep bb
+
+    coerce(pt:LIST(K))==
+        ^(dim=#pt) => error "Le point n'a pas la bonne dimension"
+        ptt:%:= pt
+	ptt
+    
+@
+<<AFFSP.dotabb>>=
+"AFFSP" [color="#88FF44",href="bookvol10.3.pdf#nameddest=AFFSP"];
+"PACPERC" [color=lightblue,href="bookvol10.2.pdf#nameddest=PACPERC"];
+"FPC" [color=lightblue,href="bookvol10.2.pdf#nameddest=FPC"];
+"AFFSP" -> "FPC"
+"AFFSP" -> "PACPERC"
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{domain ALGSC AlgebraGivenByStructuralConstants}
 \pagehead{AlgebraGivenByStructuralConstants}{ALGSC}
 \pagepic{ps/v103algebragivenbystructuralconstants.ps}{ALGSC}{1.00}
@@ -64841,7 +65022,7 @@ o )show NeitherSparseOrDensePowerSeries
 \begin{tabular}{lll}
 \cross{NSDPS}{0} &
 \cross{NSDPS}{1} &
-\cross{NSDPS}{#?} \\
+\cross{NSDPS}{\#{}?} \\
 \cross{NSDPS}{-?} &
 \cross{NSDPS}{?**?} &
 \cross{NSDPS}{?*?} \\
@@ -124811,6 +124992,7 @@ Note that this code is not included in the generated catdef.spad file.
 \chapter{Chunk collections}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 <<algebra>>=
+<<domain AFFSP AffineSpace>>
 <<domain ALGSC AlgebraGivenByStructuralConstants>>
 <<domain ALGFF AlgebraicFunctionField>>
 <<domain AN AlgebraicNumber>>
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index ebd30f9..49fa596 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -23829,6 +23829,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
  '(
  ;;define the groups |basic| |naglink| |anna| |categories| |Hidden| |defaults|
   (|basic| 
+   (|AffineSpace| . AFFSP)
    (|AlgebraicManipulations| . ALGMANIP)
    (|AlgebraicNumber| . AN)
    (|AlgFactor| . ALGFACT)
diff --git a/books/ps/v103affinespace.ps b/books/ps/v103affinespace.ps
new file mode 100644
index 0000000..b801a01
--- /dev/null
+++ b/books/ps/v103affinespace.ps
@@ -0,0 +1,313 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Graphviz version 2.20.2 (Mon Mar 30 10:09:11 UTC 2009)
+%%For: (root) root
+%%Title: pic
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 196 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 160 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% AFFSP
+gsave
+[ /Rect [ 52 72 112 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=AFFSP) >>
+  /Subtype /Link
+/ANN pdfmark
+0.273 0.733 1.000 nodecolor
+newpath 112 108 moveto
+52 108 lineto
+52 72 lineto
+112 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.273 0.733 1.000 nodecolor
+newpath 112 108 moveto
+52 108 lineto
+52 72 lineto
+112 72 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+60 85.9 moveto 44 (AFFSP) alignedtext
+grestore
+% PACPERC
+gsave
+[ /Rect [ 0 0 80 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PACPERC) >>
+  /Subtype /Link
+/ANN pdfmark
+0.537 0.247 0.902 nodecolor
+newpath 80 36 moveto
+0 36 lineto
+0 0 lineto
+80 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 80 36 moveto
+0 36 lineto
+0 0 lineto
+80 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+7.5 13.9 moveto 65 (PACPERC) alignedtext
+grestore
+% AFFSP->PACPERC
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 71 72 moveto
+66 64 61 54 55 45 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 57.92 43.04 moveto
+50 36 lineto
+51.8 46.44 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 57.92 43.04 moveto
+50 36 lineto
+51.8 46.44 lineto
+closepath stroke
+grestore
+% FPC
+gsave
+[ /Rect [ 98 0 152 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FPC) >>
+  /Subtype /Link
+/ANN pdfmark
+0.537 0.247 0.902 nodecolor
+newpath 152 36 moveto
+98 36 lineto
+98 0 lineto
+152 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 152 36 moveto
+98 36 lineto
+98 0 lineto
+152 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+111.5 13.9 moveto 27 (FPC) alignedtext
+grestore
+% AFFSP->FPC
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 93 72 moveto
+98 64 104 54 109 45 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 112.2 46.44 moveto
+114 36 lineto
+106.08 43.04 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 112.2 46.44 moveto
+114 36 lineto
+106.08 43.04 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 196 152
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index 18f9f30..ed918d7 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+20100516 tpd src/axiom-website/patches.html 20100516.03.tpd.patch
+20100516 tpd src/algebra/Makefile help and test AFFSP
+20100516 tpd books/bookvol5 expose AffineSpace
+20100516 tpd books/bookvol10.3 add AffineSpace
+20100516 tpd books/ps/v103affinespace.ps added
 20100516 tpd src/axiom-website/patches.html 20100516.02.tpd.patch
 20100516 tpd books/bookvol10.2 fix NNI and export list typos
 20100516 tpd src/axiom-website/patches.html 20100516.01.tpd.patch
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index a0a69b6..ccb04b3 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -3649,11 +3649,12 @@ LAYER7=\
 @
 \subsection{Layer8}
 Depends on: A1AGG A1AGG- ARR2CAT FAMR FPC LIECAT LZSTAGG OREPCAT PSCAT 
-TRANFUN VSPACE XPOLYC\\
+TRANFUN VSPACE XPOLYC PACPERC\\
 Used by next layer: BTAGG FLALG MATCAT SRAGG VECTCAT 
 <<layer8>>=
 
 LAYER8=\
+  ${OUT}/AFFSP.o    \
   ${OUT}/APPLYORE.o ${OUT}/ARRAY1.o   ${OUT}/ARRAY12.o  ${OUT}/ARRAY2.o   \
   ${OUT}/ASTACK.o   ${OUT}/BTAGG.o    ${OUT}/BTAGG-.o   ${OUT}/COMBINAT.o \
   ${OUT}/CSTTOOLS.o ${OUT}/D01FCFA.o  ${OUT}/E04MBFA.o  ${OUT}/FAMR2.o    \
@@ -3676,7 +3677,24 @@ LAYER8=\
 <<layerpic>>=
 /* layer 8 */
 /* depends on: A1AGG A1AGG- ARR2CAT FAMR FPC LIECAT LZSTAGG OREPCAT PSCAT */
-/* TRANFUN VSPACE XPOLYC */
+/* TRANFUN VSPACE XPOLYC PACPREC */
+
+"AFFSP" [color="#88FF44",href="bookvol10.3.pdf#nameddest=AFFSP"]
+/*"AFFSP" -> {"AFSPCAT"; "SETCATD"; "SETCAT"; "BASTYPE"; "KOERCE"; "FIELD"}*/
+/*"AFFSP" -> {"EUCDOM"; "PID"; "GCDDOM"; "INTDOM"; "COMRING"; "RING"; "RNG"}*/
+/*"AFFSP" -> {"ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"; "SGROUP"; "MONOID"}*/
+/*"AFFSP" -> {"LMODULE"; "BMODULE"; "RMODULE"; "ALGEBRA"; "MODULE"}*/
+/*"AFFSP" -> {"ENTIRER"; "UFD"; "DIVRING"; "INT"; "LIST"; "ILIST"; "LSAGG-"}*/
+/*"AFFSP" -> {"PI"; "NNI"; "FFIELDC"}*/
+"AFFSP" -> "FPC"
+"AFFSP" -> "PACPERC"
+/*"AFFSP" -> {"CHARNZ"; "FINITE"; "STEP"; "DIFRING"; "STAGG-"; "ELAGG-"}*/
+/*"AFFSP" -> {"FLAGG-"; "URAGG-"; "LNAGG-"; "RCAGG-"; "IXAGG-"; "CLAGG-"}*/
+/*"AFFSP" -> {"HOAGG-"; "ORDSET-"; "AGG-"; "ELTAGG-"; "SETCAT-"; "BASTYPE-"}*/
+/*"AFFSP" -> {"LSAGG"; "STAGG"; "URAGG"; "RCAGG"; "HOAGG"; "AGG"; "TYPE"}*/
+/*"AFFSP" -> {"EVALAB"; "IEVALAB"; "LNAGG"; "IXAGG"; "ELTAGG"; "ELTAB"}*/
+/*"AFFSP" -> {"CLAGG"; "KONVERT"; "FLAGG"; "ORDSET"; "ELAGG"; "OM"}*/
+/*"AFFSP" -> {"BOOLEAN"}*/
 
 "APPLYORE" [color="#FF4488",href="bookvol10.4.pdf#nameddest=APPLYORE"]
 /*"APPLYORE" -> {"RING"; "RNG"; "ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"}*/
@@ -16373,6 +16391,21 @@ ${MID}/AFSPCAT.nrlib/code.o: ${MID}/AFSPCAT.spad
 	      | ${INTERPSYS} >${TMP}/trace ; \
 	   fi )
 @
+<<newcode>>=
+
+AFFSPDEPS = SETCATD AFSPCAT PACPERC
+
+${MID}/AFFSP.nrlib/code.o: ${MID}/AFFSP.spad
+	@echo P3 making ${MID}/AFFSP.nrlib/code.o from ${MID}/AFFSP.spad
+	@ (cd ${MID} ; \
+	   if [ -z "${NOISE}" ] ; then \
+	    echo -e ")lib ${AFFSPDEPS} \n )co AFFSP.spad" \
+              | ${INTERPSYS} ; \
+           else \
+	    echo -e ")lib ${AFFSPDEPS} \n )co AFFSP.spad" \
+	      | ${INTERPSYS} >${TMP}/trace ; \
+	   fi )
+@
 
 \section{Broken Files}
 These files are Aldor files
@@ -17077,6 +17110,7 @@ This keeps the regression test list in the algebra Makefile.
 HELPFILE=${HELP}/help.help
 
 SPADHELP=\
+ ${HELP}/AffineSpace.help \
  ${HELP}/AffineSpaceCategory.help \
  ${HELP}/AlgebraicallyClosedField.help \
  ${HELP}/Any.help \
@@ -17259,6 +17293,7 @@ is put into a int/Makefile.algebra and then executed by make.
 TESTSYS=  ${OBJ}/${SYS}/bin/interpsys
 
 REGRESS= \
+ AffineSpace.regress \
  AffineSpaceCategory.regress \
  AlgebraicallyClosedField.regress \
  Any.regress \
@@ -17440,8 +17475,20 @@ all: ${REGRESS}
 	@echo algebra test cases complete.
 @
 <<spadhelp>>=
+${HELP}/AffineSpace.help: ${BOOKS}/bookvol10.3.pamphlet
+	@echo 7000 create AffineSpace.help from \
+            ${BOOKS}/bookvol10.3.pamphlet
+	@${TANGLE} -R"AffineSpace.help" \
+            ${BOOKS}/bookvol10.3.pamphlet \
+            >${HELP}/AffineSpace.help
+	@cp ${HELP}/AffineSpace.help ${HELP}/AFFSP.help
+	@${TANGLE} -R"AffineSpace.input" \
+            ${BOOKS}/bookvol10.3.pamphlet \
+            >${INPUT}/AffineSpace.input
+	@echo "AffineSpace (AFFSP)" >>${HELPFILE}
+
 ${HELP}/AffineSpaceCategory.help: ${BOOKS}/bookvol10.2.pamphlet
-	@echo 7000 create AffineSpaceCategory.help from \
+	@echo 7001 create AffineSpaceCategory.help from \
             ${BOOKS}/bookvol10.2.pamphlet
 	@${TANGLE} -R"AffineSpaceCategory.help" \
             ${BOOKS}/bookvol10.2.pamphlet \
@@ -17453,7 +17500,7 @@ ${HELP}/AffineSpaceCategory.help: ${BOOKS}/bookvol10.2.pamphlet
 	@echo "AffineSpaceCategory (AFSPCAT)" >>${HELPFILE}
 
 ${HELP}/AlgebraicallyClosedField.help: ${BOOKS}/bookvol10.2.pamphlet
-	@echo 7001 create AlgebraicallyClosedField.help from \
+	@echo 7002 create AlgebraicallyClosedField.help from \
             ${BOOKS}/bookvol10.2.pamphlet
 	@${TANGLE} -R"AlgebraicallyClosedField.help" \
             ${BOOKS}/bookvol10.2.pamphlet \
@@ -17465,7 +17512,7 @@ ${HELP}/AlgebraicallyClosedField.help: ${BOOKS}/bookvol10.2.pamphlet
 	@echo "AlgebraicallyClosedField (ACF)" >>${HELPFILE}
 
 ${HELP}/Any.help: ${BOOKS}/bookvol10.3.pamphlet
-	@echo 7002 create Any.help from ${BOOKS}/bookvol10.3.pamphlet
+	@echo 7003 create Any.help from ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"Any.help" ${BOOKS}/bookvol10.3.pamphlet >${HELP}/Any.help
 	@cp ${HELP}/Any.help ${HELP}/ANY.help
 	@${TANGLE} -R"Any.input" ${BOOKS}/bookvol10.3.pamphlet \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 5b529dd..41c163d 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2729,5 +2729,7 @@ books/bookvol10.3 ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField<br/>
 books/bookvol10.2 add AffineSpaceCategory<br/>
 <a href="patches/20100516.02.tpd.patch">20100516.02.tpd.patch</a>
 books/bookvol10.2 fix NNI and export list typos<br/>
+<a href="patches/20100516.03.tpd.patch">20100516.03.tpd.patch</a>
+books/bookvol10.3 add AffineSpace<br/>
  </body>
 </html>
