diff --git a/books/bookvol10.2.pamphlet b/books/bookvol10.2.pamphlet
index 606738e..281747b 100644
--- a/books/bookvol10.2.pamphlet
+++ b/books/bookvol10.2.pamphlet
@@ -48068,6 +48068,349 @@ digraph pic {
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{PseudoAlgebraicClosureOfPerfectFieldCategory}{PACPERC}
+\pagepic{ps/v102PseudoAlgebraicClosureOfPerfectFieldCategory.ps}{PACPERC}{0.50}
+<<PseudoAlgebraicClosureOfPerfectFieldCategory.input>>=
+)set break resume
+)sys rm -f PseudoAlgebraicClosureOfPerfectFieldCategory.output
+)spool PseudoAlgebraicClosureOfPerfectFieldCategory.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show PseudoAlgebraicClosureOfPerfectFieldCategory
+--R PseudoAlgebraicClosureOfPerfectFieldCategory  is a category constructor
+--R Abbreviation for PseudoAlgebraicClosureOfPerfectFieldCategory is PACPERC 
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.2.pamphlet to see algebra source code for PACPERC 
+--R
+--R------------------------------- Operations --------------------------------
+--R ?*? : (Fraction Integer,%) -> %       ?*? : (%,Fraction Integer) -> %
+--R ?*? : (%,%) -> %                      ?*? : (Integer,%) -> %
+--R ?*? : (PositiveInteger,%) -> %        ?**? : (%,Integer) -> %
+--R ?**? : (%,PositiveInteger) -> %       ?+? : (%,%) -> %
+--R ?-? : (%,%) -> %                      -? : % -> %
+--R ?/? : (%,%) -> %                      ?=? : (%,%) -> Boolean
+--R 1 : () -> %                           0 : () -> %
+--R ?^? : (%,Integer) -> %                ?^? : (%,PositiveInteger) -> %
+--R associates? : (%,%) -> Boolean        coerce : Fraction Integer -> %
+--R coerce : % -> %                       coerce : Integer -> %
+--R coerce : % -> OutputForm              conjugate : % -> %
+--R definingPolynomial : % -> SUP %       definingPolynomial : () -> SUP %
+--R extDegree : % -> PI                   factor : % -> Factored %
+--R fullOutput : % -> OutputForm          gcd : List % -> %
+--R gcd : (%,%) -> %                      ground? : % -> Boolean
+--R hash : % -> SingleInteger             inv : % -> %
+--R latex : % -> String                   lcm : List % -> %
+--R lcm : (%,%) -> %                      lift : (%,%) -> SUP %
+--R lift : % -> SUP %                     maxTower : List % -> %
+--R newElement : (SUP %,Symbol) -> %      one? : % -> Boolean
+--R previousTower : % -> %                prime? : % -> Boolean
+--R ?quo? : (%,%) -> %                    recip : % -> Union(%,"failed")
+--R reduce : SUP % -> %                   ?rem? : (%,%) -> %
+--R sample : () -> %                      setTower! : % -> Void
+--R sizeLess? : (%,%) -> Boolean          squareFree : % -> Factored %
+--R squareFreePart : % -> %               unit? : % -> Boolean
+--R unitCanonical : % -> %                vectorise : (%,%) -> Vector %
+--R zero? : % -> Boolean                  ?~=? : (%,%) -> Boolean
+--R ?*? : (NonNegativeInteger,%) -> %
+--R ?**? : (%,NonNegativeInteger) -> %
+--R ?^? : (%,NonNegativeInteger) -> %
+--R characteristic : () -> NonNegativeInteger
+--R distinguishedRootsOf : (SparseUnivariatePolynomial %,%) -> List %
+--R divide : (%,%) -> Record(quotient: %,remainder: %)
+--R euclideanSize : % -> NonNegativeInteger
+--R expressIdealMember : (List %,%) -> Union(List %,"failed")
+--R exquo : (%,%) -> Union(%,"failed")
+--R extendedEuclidean : (%,%,%) -> Union(Record(coef1: %,coef2: %),"failed")
+--R extendedEuclidean : (%,%) -> Record(coef1: %,coef2: %,generator: %)
+--R gcdPolynomial : (SparseUnivariatePolynomial %,SparseUnivariatePolynomial %) -> SparseUnivariatePolynomial %
+--R multiEuclidean : (List %,%) -> Union(List %,"failed")
+--R newElement : (SUP %,%,Symbol) -> %
+--R principalIdeal : List % -> Record(coef: List %,generator: %)
+--R subtractIfCan : (%,%) -> Union(%,"failed")
+--R unitNormal : % -> Record(unit: %,canonical: %,associate: %)
+--R
+--E 1
+
+)spool
+)lisp (bye)
+@
+<<PseudoAlgebraicClosureOfPerfectFieldCategory.help>>=
+====================================================================
+PseudoAlgebraicClosureOfPerfectFieldCategory examples
+====================================================================
+
+See Also:
+o )show PseudoAlgebraicClosureOfPerfectFieldCategory
+
+@
+
+\pagefrom{DivisionRing}{DIVRING}
+\pagefrom{Field}{FIELD}
+\pagefrom{EuclideanDomain}{EUCDOM}
+\pagefrom{UniqueFactorizationDomain}{UFD}
+
+{\bf Exports:}
+\begin{tabular}{llll}
+\cross{PACPERC}{0} &
+\cross{PACPERC}{1} &
+\cross{PACPERC}{associates?} &
+\cross{PACPERC}{characteristic} \\
+\cross{PACPERC}{coerce} &
+\cross{PACPERC}{conjugate} &
+\cross{PACPERC}{definingPolynomial} &
+\cross{PACPERC}{distinguishedRootsOf} \\
+\cross{PACPERC}{divide} &
+\cross{PACPERC}{euclideanSize} &
+\cross{PACPERC}{expressIdealMember} &
+\cross{PACPERC}{exquo} \\
+\cross{PACPERC}{extDegree} &
+\cross{PACPERC}{extendedEuclidean} &
+\cross{PACPERC}{factor} &
+\cross{PACPERC}{fullOutput} \\
+\cross{PACPERC}{gcd} &
+\cross{PACPERC}{gcdPolynomial} &
+\cross{PACPERC}{ground?} &
+\cross{PACPERC}{hash} \\
+\cross{PACPERC}{inv} &
+\cross{PACPERC}{latex} &
+\cross{PACPERC}{lcm} &
+\cross{PACPERC}{lift} \\
+\cross{PACPERC}{maxTower} &
+\cross{PACPERC}{multiEuclidean} &
+\cross{PACPERC}{newElement} &
+\cross{PACPERC}{one?} \\
+\cross{PACPERC}{previousTower} &
+\cross{PACPERC}{prime?} &
+\cross{PACPERC}{principalIdeal} &
+\cross{PACPERC}{?quo?} \\
+\cross{PACPERC}{recip} &
+\cross{PACPERC}{reduce} &
+\cross{PACPERC}{?rem?} &
+\cross{PACPERC}{sample} \\
+\cross{PACPERC}{setTower!} &
+\cross{PACPERC}{sizeLess?} &
+\cross{PACPERC}{squareFree} &
+\cross{PACPERC}{squareFreePart} \\
+\cross{PACPERC}{subtractIfCan} &
+\cross{PACPERC}{unit?} &
+\cross{PACPERC}{unitCanonical} &
+\cross{PACPERC}{unitNormal} \\
+\cross{PACPERC}{vectorise} &
+\cross{PACPERC}{zero?} &
+\cross{PACPERC}{?*?} &
+\cross{PACPERC}{?**?} \\
+\cross{PACPERC}{?+?} &
+\cross{PACPERC}{?-?} &
+\cross{PACPERC}{-?} &
+\cross{PACPERC}{?/?} \\
+\cross{PACPERC}{?=?} &
+\cross{PACPERC}{?\^{}?} &
+\cross{PACPERC}{?\~{}=?} &
+\end{tabular} 
+
+{\bf Attributes Exported:}
+\begin{itemize}
+\item {\bf \cross{PACPERC}{canonicalUnitNormal}}
+is true if we can choose a canonical representative for each class 
+of associate elements, that is {\tt associates?(a,b)} returns true 
+if and only if {\tt unitCanonical(a) = unitCanonical(b)}.
+\item {\bf \cross{PACPERC}{canonicalsClosed}}
+is true if\hfill\\
+{\tt unitCanonical(a)*unitCanonical(b) = unitCanonical(a*b)}.
+\item {\bf \cross{PACPERC}{noZeroDivisors}}
+is true if $x * y \ne 0$ implies both x and y are non-zero.
+\item {\bf \cross{PACPERC}{commutative(``*'')}}
+is true if it has an operation $"*": (D,D) -> D$
+which is commutative.
+\item {\bf \cross{PACPERC}{unitsKnown}}
+is true if a monoid (a multiplicative semigroup with a 1) has 
+unitsKnown means that  the operation {\tt recip} can only return 
+``failed'' if its argument is not a unit.
+\item {\bf \cross{PACPERC}{leftUnitary}}
+is true if $1 * x = x$ for all x.
+\item {\bf \cross{PACPERC}{rightUnitary}}
+is true if $x * 1 = x$ for all x.
+\end{itemize}
+
+These are directly exported but not implemented:
+\begin{verbatim}
+  conjugate: % -> %
+  definingPolynomial: () -> SUP(%)
+  definingPolynomial: % -> SUP %
+  distinguishedRootsOf: (SparseUnivariatePolynomial %,%) -> List %
+  extDegree: % -> PI
+  fullOutput: % -> OutputForm
+  ground_? : % -> Boolean
+  lift: % -> SUP(%)
+  lift: (%,%) -> SUP(%)
+  maxTower: List % -> %
+  newElement: (SUP(%), %, Symbol) -> %
+  newElement: (SUP(%), Symbol) -> %
+  previousTower: % -> %
+  reduce: SUP(%) -> %
+  setTower_!: % -> Void
+  vectorise: (%,%) -> Vector(%)
+\end{verbatim}
+
+These exports come from \refto{Field}():
+\begin{verbatim}
+ associates? : (%,%) -> Boolean       
+ divide : (%,%) -> Record(quotient: %,remainder: %)
+ euclideanSize : % -> NonNegativeInteger
+ exquo : (%,%) -> Union(%,"failed")
+ factor : % -> Factored %
+ gcd : (%,%) -> %                     
+ inv : % -> %
+ prime? : % -> Boolean
+ squareFree : % -> Factored %
+ unitCanonical : % -> %               
+ unitNormal : % -> Record(unit: %,canonical: %,associate: %)
+ ?/? : (%,%) -> %                     
+\end{verbatim}
+
+These exports come from \refto{EuclideanDomain}():
+\begin{verbatim}
+ 0 : () -> %
+ 1 : () -> %                          
+ characteristic : () -> NonNegativeInteger
+ coerce : % -> %                      
+ coerce : Integer -> %
+ coerce : % -> OutputForm             
+ expressIdealMember : (List %,%) -> Union(List %,"failed")
+ extendedEuclidean : (%,%,%) -> Union(Record(coef1: %,coef2: %),"failed")
+ extendedEuclidean : (%,%) -> Record(coef1: %,coef2: %,generator: %)
+ gcd : List % -> %
+ gcdPolynomial : (SparseUnivariatePolynomial %,
+                  SparseUnivariatePolynomial %) ->
+                    SparseUnivariatePolynomial %
+ hash : % -> SingleInteger            
+ latex : % -> String                  
+ lcm : List % -> %
+ lcm : (%,%) -> %                     
+ multiEuclidean : (List %,%) -> Union(List %,"failed")
+ one? : % -> Boolean
+ principalIdeal : List % -> Record(coef: List %,generator: %)
+ recip : % -> Union(%,"failed")
+ sample : () -> %                     
+ sizeLess? : (%,%) -> Boolean         
+ subtractIfCan : (%,%) -> Union(%,"failed")
+ unit? : % -> Boolean
+ zero? : % -> Boolean                 
+ ?+? : (%,%) -> %
+ ?=? : (%,%) -> Boolean
+ ?~=? : (%,%) -> Boolean
+ ?*? : (%,%) -> %                     
+ ?*? : (Integer,%) -> %
+ ?*? : (PositiveInteger,%) -> %       
+ ?*? : (NonNegativeInteger,%) -> %
+ ?-? : (%,%) -> %                     
+ -? : % -> %
+ ?**? : (%,PositiveInteger) -> %      
+ ?**? : (%,NonNegativeInteger) -> %
+ ?^? : (%,PositiveInteger) -> %
+ ?^? : (%,NonNegativeInteger) -> %
+ ?quo? : (%,%) -> %                   
+ ?rem? : (%,%) -> %
+\end{verbatim}
+
+These exports come from \refto{UniqueFactorizationDomain}():
+\begin{verbatim}
+ squareFreePart : % -> %
+\end{verbatim}
+
+
+These exports come from \refto{DivisionRing}():
+\begin{verbatim}
+ coerce : Fraction Integer -> %
+ ?*? : (Fraction Integer,%) -> %      
+ ?*? : (%,Fraction Integer) -> %
+ ?**? : (%,Integer) -> %
+ ?^? : (%,Integer) -> %               
+\end{verbatim}
+
+<<category PACPERC PseudoAlgebraicClosureOfPerfectFieldCategory>>=
+)abbrev category PACPERC PseudoAlgebraicClosureOfPerfectFieldCategory
+++ Authors: Gaetan Hache
+++ Date Created: may 1997 
+++ Date Last Updated: April 2010, by Tim Daly
+++ Description: This category exports the function for domains 
+++ which implement dynamic extension using the simple notion of tower 
+++ extensions. ++ A tower extension T  of the ground
+++ field K is any sequence of field extension 
+++ (T : K_0, K_1, ..., K_i...,K_n) where K_0 = K 
+++ and for i =1,2,...,n, K_i is an extension of K_{i-1} of degree > 1 
+++ and defined by an irreducible polynomial p(Z) in K_{i-1}.
+++ Two towers (T_1: K_01, K_11,...,K_i1,...,K_n1)  
+++ and (T_2: K_02, K_12,...,K_i2,...,K_n2)
+++ are said to be related if T_1 <= T_2 (or T_1 >= T_2), 
+++ that is if K_i1 = K_i2 for i=1,2,...,n1 (or i=1,2,...,n2). 
+++ Any algebraic operations defined for several elements 
+++ are only defined if all of the concerned elements are comming from 
+++ a set of related tour extensions. 
+PseudoAlgebraicClosureOfPerfectFieldCategory : Category == Field with 
+
+  definingPolynomial: () -> SUP(%)
+  definingPolynomial: % -> SUP %
+
+  lift: % -> SUP(%)
+  lift: (%,%) -> SUP(%)
+  reduce: SUP(%) -> %
+
+  distinguishedRootsOf: (SparseUnivariatePolynomial %,%) -> List %
+    ++ distinguishedRootsOf(p,a) returns a (distinguised) root for each
+    ++ irreducible factor of the polynomial p (factored over the field defined
+    ++ by the element a). 
+  
+  ground_? : % -> Boolean
+  maxTower: List % -> %
+    ++ maxTower(l) returns the tower in the list having the maximal extension 
+    ++ degree over the ground field. It has no meaning if the towers are 
+    ++ not related.
+  extDegree: % -> PI
+    ++ extDegree(a) returns the extension degree of the extension tower 
+    ++ over which the element is defined.
+  previousTower: % -> %
+    ++ previousTower(a) returns the previous tower extension over which
+    ++ the element a is defined.
+
+  vectorise: (%,%) -> Vector(%)
+
+  conjugate: % -> %
+  newElement: (SUP(%), %, Symbol) -> %
+  newElement: (SUP(%), Symbol) -> %
+  setTower_!: % -> Void
+  fullOutput: % -> OutputForm
+
+@
+<<PACPERC.dotabb>>=
+"PACPERC" [color=lightblue,href="bookvol10.2.pdf#nameddest=PACPERC"];
+"PACPERC" -> "FIELD"
+
+@
+<<PACPERC.dotfull>>=
+"PseudoAlgebraicClosureOfPerfectFieldCategory"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=PACPERC"];
+"PseudoAlgebraicClosureOfPerfectFieldCategory" -> "Field()"
+
+@
+<<PACPERC.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"PseudoAlgebraicClosureOfPerfectFieldCategory" [color=lightblue];
+"PseudoAlgebraicClosureOfPerfectFieldCategory" -> "FIELD..."
+
+"FIELD..." [color=lightblue];
+
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \pagehead{QuotientFieldCategory}{QFCAT}
 \pagepic{ps/v102quotientfieldcategory.ps}{QFCAT}{0.50}
 
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index d72e7b9..b86d067 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -24469,6 +24469,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
    (|PrimitiveFunctionCategory| . PRIMCAT)
    (|PrincipalIdealDomain| . PID)
    (|PriorityQueueAggregate| . PRQAGG)
+   (|PseudoAlgebraicClosureOfPerfectFieldCategory| . PACPERC)
    (|QuaternionCategory| . QUATCAT)
    (|QueueAggregate| . QUAGG)
    (|QuotientFieldCategory| . QFCAT)
diff --git a/books/ps/v102PseudoAlgebraicClosureOfPerfectFieldCategory.ps b/books/ps/v102PseudoAlgebraicClosureOfPerfectFieldCategory.ps
new file mode 100644
index 0000000..cb64c1f
--- /dev/null
+++ b/books/ps/v102PseudoAlgebraicClosureOfPerfectFieldCategory.ps
@@ -0,0 +1,258 @@
+%!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 382 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 346 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% PseudoAlgebraicClosureOfPerfectFieldCategory
+gsave
+0.537 0.247 0.902 nodecolor
+newpath 338 108 moveto
+0 108 lineto
+0 72 lineto
+338 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 338 108 moveto
+0 108 lineto
+0 72 lineto
+338 72 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+7.5 85.9 moveto 323 (PseudoAlgebraicClosureOfPerfectFieldCategory) alignedtext
+grestore
+% FIELD...
+gsave
+0.537 0.247 0.902 nodecolor
+newpath 204 36 moveto
+134 36 lineto
+134 0 lineto
+204 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 204 36 moveto
+134 36 lineto
+134 0 lineto
+204 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+141.5 13.9 moveto 55 (FIELD...) alignedtext
+grestore
+% PseudoAlgebraicClosureOfPerfectFieldCategory->FIELD...
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 169 72 moveto
+169 64 169 55 169 46 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 172.5 46 moveto
+169 36 lineto
+165.5 46 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 172.5 46 moveto
+169 36 lineto
+165.5 46 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 382 152
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index d354f1b..0e5772f 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+20100423 tpd src/axiom-website/patches.html 20100423.01.tpd.patch
+20100423 tpd src/algebra/Makefile add PACPERC help and regression
+20100423 tpd books/bookvol5 add PseudoAlgebraicClosureOfPerfectFieldCategory
+20100423 tpd books/ps/v102PseudoAlgebraicClosureOfPerfectFieldCategory.ps added
+20100423 tpd books/bookvol10.2 add PseudoAlgebraicClosureOfPerfectFieldCategory
 20100422 tpd src/axiom-website/patches.html 20100422.03.tpd.patch
 20100422 tpd books/bookvol4 document process to add new algebra
 20100422 tpd src/axiom-website/patches.html 20100422.02.tpd.patch
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index fb8be9b..a228636 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -1813,7 +1813,7 @@ LAYER6=\
 /*"FAMONOID" -> {"OCAMON"; "OAMON"; "OASGP"; "ORDSET"; "NNI"; "INT"}*/
 /*"FAMONOID" -> {"MONOID"; "SGROUP"}*/
 
-"FIELD"  [color="#4488FF",href="bookvol10.2.pdf#nameddest=FIELD"]
+"FIELD" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FIELD"]
 /*"FIELD" -> "EUCDOM"*/
 "FIELD" -> "PID"
 /*"FIELD" -> {"GCDDOM"; "INTDOM"; "COMRING"; "RING"; "RNG"; "ABELGRP"}*/
@@ -2234,6 +2234,7 @@ LAYER7=\
   ${OUT}/MRING.o    ${OUT}/MTHING.o   ${OUT}/NCNTFRAC.o ${OUT}/NCODIV.o   \
   ${OUT}/NUMTUBE.o  ${OUT}/ODR.o      ${OUT}/OFMONOID.o ${OUT}/ONECOMP.o  \
   ${OUT}/ORDCOMP.o  ${OUT}/OREPCAT.o  ${OUT}/OREPCAT-.o ${OUT}/OWP.o      \
+  ${OUT}/PACPERC.o  \
   ${OUT}/PADIC.o    ${OUT}/PATTERN2.o ${OUT}/PATLRES.o  ${OUT}/PARTPERM.o \
   ${OUT}/PBWLB.o    ${OUT}/PENDTREE.o ${OUT}/PGE.o      ${OUT}/PGROEB.o   \
   ${OUT}/PINTERP.o  ${OUT}/PLOTTOOL.o ${OUT}/PFR.o      ${OUT}/PMDOWN.o   \
@@ -3112,6 +3113,14 @@ LAYER7=\
 "OWP" -> "FIELD"
 /*"OWP" -> {"EUCDOM"; "PID"; "GCDDOM"; "INTDOM"; "ENTIRER"; "UFD"; "DIVRING"}*/
 
+"PACPERC" [color="#88FF44",href="bookvol10.2.pdf#nameddest=PACPERC"]
+"PACPERC" -> "FIELD"
+/*"PACPERC" -> {"EUCDOM"; "PID"; "GCDDOM"; "INTDOM"; "COMRING"}*/
+/*"PACPERC" -> {"RING"; "RNG"; "ABELGRP"; "CABMON"; "ABELMON"}*/
+/*"PACPERC" -> {"ABELSG"; "SETCAT"; "BASTYPE"; "KOERCE"}*/
+/*"PACPERC" -> {"SGROUP"; "MONOID"; "LMODULE"; "BMODULE" }*/
+/*"PACPERC" -> {"RMODULE"; "ALGEBRA"; "MODULE"; "ENTIRER"; "UFD"; "DIVRING"}*/
+
 "PADIC" [color="#88FF44",href="bookvol10.3.pdf#nameddest=PADIC"]
 /*"PADIC" -> "BOOLEAN"*/
 "PADIC" -> "PADICCT"
@@ -16633,6 +16642,7 @@ SPADHELP=\
  ${HELP}/Permutation.help \
  ${HELP}/Polynomial.help \
  ${HELP}/Product.help \
+ ${HELP}/PseudoAlgebraicClosureOfPerfectFieldCategory.help \
  ${HELP}/Quaternion.help \
  ${HELP}/QuaternionCategoryFunctions2.help \
  ${HELP}/Queue.help \
@@ -16775,8 +16785,9 @@ REGRESS= \
  Permutation.regress \
  PlaneAlgebraicCurvePlot.regress \
  Plot.regress \
- Product.regress \
  Polynomial.regress \
+ Product.regress \
+ PseudoAlgebraicClosureOfPerfectFieldCategory.regress \
  Quaternion.regress \
  QuaternionCategoryFunctions2.regress \
  Queue.regress \
@@ -17918,6 +17929,21 @@ ${HELP}/Product.help: ${BOOKS}/bookvol10.3.pamphlet
             >${INPUT}/Product.input
 	@echo "Product (PRODUCT)" >>${HELPFILE}
 
+${HELP}/PseudoAlgebraicClosureOfPerfectFieldCategory.help: \
+           ${BOOKS}/bookvol10.2.pamphlet
+	@echo 7937 create PseudoAlgebraicClosureOfPerfectFieldCategory.help \
+           from ${BOOKS}/bookvol10.2.pamphlet
+	@${TANGLE} -R"PseudoAlgebraicClosureOfPerfectFieldCategory.help" \
+           ${BOOKS}/bookvol10.2.pamphlet \
+           >${HELP}/PseudoAlgebraicClosureOfPerfectFieldCategory.help
+	@cp ${HELP}/PseudoAlgebraicClosureOfPerfectFieldCategory.help \
+           ${HELP}/PACPERC.help
+	@${TANGLE} -R"PseudoAlgebraicClosureOfPerfectFieldCategory.input" \
+            ${BOOKS}/bookvol10.2.pamphlet \
+            >${INPUT}/PseudoAlgebraicClosureOfPerfectFieldCategory.input
+	@echo "PseudoAlgebraicClosureOfPerfectFieldCategory (PACPERC)" \
+           >>${HELPFILE}
+
 ${HELP}/Quaternion.help: ${BOOKS}/bookvol10.3.pamphlet
 	@echo 7940 create Quaternion.help from ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"Quaternion.help" ${BOOKS}/bookvol10.3.pamphlet \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 45058d5..0cd51fb 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2657,5 +2657,7 @@ books/bookvol10.4 add InterfaceGroebnerPackage<br/>
 books/bookvol10.5 fix missing INTERGB package<br/>
 <a href="patches/20100422.03.tpd.patch">20100422.03.tpd.patch</a>
 books/bookvol4 document process to add new algebra<br/>
+<a href="patches/20100423.01.tpd.patch">20100423.01.tpd.patch</a>
+books/bookvol10.2 add PseudoAlgebraicClosureOfPerfectFieldCategory<br/>
  </body>
 </html>
