diff --git a/books/bookvol10.2.pamphlet b/books/bookvol10.2.pamphlet
index 2680966..3f0b4fd 100644
--- a/books/bookvol10.2.pamphlet
+++ b/books/bookvol10.2.pamphlet
@@ -58302,6 +58302,9 @@ o )show PseudoAlgebraicClosureOfRationalNumberCategory
 
 @
 
+{\bf See:}
+
+\pageto{PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory}{PACEXTC}
 \pagefrom{ExtensionField}{XF}
 
 {\bf Exports:}\\
@@ -60495,6 +60498,443 @@ digraph pic {
 }
 
 @
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory}{PACEXTC}
+\pagepic{ps/v102pseudoalgebraicclosureofalgextofrationalnumbercategory.ps}{PACEXTC}{0.50}
+<<PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.input>>=
+)set break resume
+)sys rm -f PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.output
+)spool PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory
+--R PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory  is a category constructor
+--R Abbreviation for PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory is PACEXTC 
+--R This constructor is not exposed in this frame.
+--R Issue )edit bookvol10.2.pamphlet to see algebra source code for PACEXTC 
+--R
+--R------------------------------- Operations --------------------------------
+--R ?*? : (%,Fraction Integer) -> %       ?*? : (Fraction Integer,%) -> %
+--R ?*? : (Fraction Integer,%) -> %       ?*? : (%,Fraction Integer) -> %
+--R ?*? : (%,%) -> %                      ?*? : (Integer,%) -> %
+--R ?*? : (PositiveInteger,%) -> %        ?**? : (%,Integer) -> %
+--R ?**? : (%,PositiveInteger) -> %       ?+? : (%,%) -> %
+--R ?-? : (%,%) -> %                      -? : % -> %
+--R ?/? : (%,Fraction Integer) -> %       ?/? : (%,%) -> %
+--R ?=? : (%,%) -> Boolean                1 : () -> %
+--R 0 : () -> %                           ?^? : (%,Integer) -> %
+--R ?^? : (%,PositiveInteger) -> %        algebraic? : % -> Boolean
+--R associates? : (%,%) -> Boolean        coerce : Fraction Integer -> %
+--R coerce : Fraction Integer -> %        coerce : Integer -> %
+--R coerce : Fraction Integer -> %        coerce : % -> %
+--R coerce : Integer -> %                 coerce : % -> OutputForm
+--R conjugate : % -> %                    dimension : () -> CardinalNumber
+--R extDegree : % -> PositiveInteger      factor : % -> Factored %
+--R fullOutput : % -> OutputForm          gcd : List % -> %
+--R gcd : (%,%) -> %                      ground? : % -> Boolean
+--R hash : % -> SingleInteger             inGroundField? : % -> Boolean
+--R inv : % -> %                          latex : % -> String
+--R lcm : List % -> %                     lcm : (%,%) -> %
+--R maxTower : List % -> %                one? : % -> Boolean
+--R previousTower : % -> %                prime? : % -> Boolean
+--R ?quo? : (%,%) -> %                    recip : % -> Union(%,"failed")
+--R ?rem? : (%,%) -> %                    retract : % -> Fraction Integer
+--R retract : % -> Fraction Integer       retract : % -> Integer
+--R sample : () -> %                      setTower! : % -> Void
+--R sizeLess? : (%,%) -> Boolean          squareFree : % -> Factored %
+--R squareFreePart : % -> %               transcendent? : % -> Boolean
+--R unit? : % -> Boolean                  unitCanonical : % -> %
+--R vectorise : (%,%) -> Vector %         zero? : % -> Boolean
+--R ?~=? : (%,%) -> Boolean              
+--R ?*? : (%,PseudoAlgebraicClosureOfRationalNumber) -> %
+--R ?*? : (PseudoAlgebraicClosureOfRationalNumber,%) -> %
+--R ?*? : (NonNegativeInteger,%) -> %
+--R ?**? : (%,NonNegativeInteger) -> %
+--R ?/? : (%,PseudoAlgebraicClosureOfRationalNumber) -> %
+--R Frobenius : % -> % if PseudoAlgebraicClosureOfRationalNumber has FINITE or Fraction Integer has FINITE
+--R Frobenius : (%,NonNegativeInteger) -> % if PseudoAlgebraicClosureOfRationalNumber has FINITE or Fraction Integer has FINITE
+--R ?^? : (%,NonNegativeInteger) -> %
+--R characteristic : () -> NonNegativeInteger
+--R charthRoot : % -> Union(%,"failed") if PseudoAlgebraicClosureOfRationalNumber has CHARNZ or PseudoAlgebraicClosureOfRationalNumber has FINITE or Fraction Integer has CHARNZ or Fraction Integer has FINITE
+--R coerce : PseudoAlgebraicClosureOfRationalNumber -> %
+--R coerce : PseudoAlgebraicClosureOfRationalNumber -> %
+--R definingPolynomial : % -> SparseUnivariatePolynomial %
+--R definingPolynomial : () -> SparseUnivariatePolynomial %
+--R degree : % -> OnePointCompletion PositiveInteger
+--R discreteLog : (%,%) -> Union(NonNegativeInteger,"failed") if PseudoAlgebraicClosureOfRationalNumber has CHARNZ or PseudoAlgebraicClosureOfRationalNumber has FINITE or Fraction Integer has CHARNZ or Fraction Integer has FINITE
+--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 extensionDegree : () -> OnePointCompletion PositiveInteger
+--R gcdPolynomial : (SparseUnivariatePolynomial %,SparseUnivariatePolynomial %) -> SparseUnivariatePolynomial %
+--R lift : (%,%) -> SparseUnivariatePolynomial %
+--R lift : % -> SparseUnivariatePolynomial %
+--R multiEuclidean : (List %,%) -> Union(List %,"failed")
+--R newElement : (SparseUnivariatePolynomial %,Symbol) -> %
+--R newElement : (SparseUnivariatePolynomial %,%,Symbol) -> %
+--R order : % -> OnePointCompletion PositiveInteger if PseudoAlgebraicClosureOfRationalNumber has CHARNZ or PseudoAlgebraicClosureOfRationalNumber has FINITE or Fraction Integer has CHARNZ or Fraction Integer has FINITE
+--R primeFrobenius : % -> % if PseudoAlgebraicClosureOfRationalNumber has CHARNZ or PseudoAlgebraicClosureOfRationalNumber has FINITE or Fraction Integer has CHARNZ or Fraction Integer has FINITE
+--R primeFrobenius : (%,NonNegativeInteger) -> % if PseudoAlgebraicClosureOfRationalNumber has CHARNZ or PseudoAlgebraicClosureOfRationalNumber has FINITE or Fraction Integer has CHARNZ or Fraction Integer has FINITE
+--R principalIdeal : List % -> Record(coef: List %,generator: %)
+--R reduce : SparseUnivariatePolynomial % -> %
+--R retract : % -> PseudoAlgebraicClosureOfRationalNumber
+--R retract : % -> PseudoAlgebraicClosureOfRationalNumber
+--R retractIfCan : % -> Union(PseudoAlgebraicClosureOfRationalNumber,"failed")
+--R retractIfCan : % -> Union(PseudoAlgebraicClosureOfRationalNumber,"failed")
+--R retractIfCan : % -> Union(Fraction Integer,"failed")
+--R retractIfCan : % -> Union(Fraction Integer,"failed")
+--R retractIfCan : % -> Union(Integer,"failed")
+--R subtractIfCan : (%,%) -> Union(%,"failed")
+--R transcendenceDegree : () -> NonNegativeInteger
+--R unitNormal : % -> Record(unit: %,canonical: %,associate: %)
+--R
+--E 1
+
+)spool
+)lisp (bye)
+@
+<<PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.help>>=
+====================================================================
+PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory examples
+====================================================================
+
+See Also:
+o )show PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory
+
+@
+
+{\bf See:}
+
+\pagefrom{PseudoAlgebraicClosureOfRationalNumberCategory}{PACRATC}
+
+{\bf Exports:}\\
+
+\begin{tabular}{llll}
+\cross{PACEXTC}{0} &
+\cross{PACEXTC}{1} &
+\cross{PACEXTC}{-?} &
+\cross{PACEXTC}{?**?} \\
+\cross{PACEXTC}{?*?} &
+\cross{PACEXTC}{?+?} &
+\cross{PACEXTC}{?-?} &
+\cross{PACEXTC}{?/?} \\
+\cross{PACEXTC}{?=?} &
+\cross{PACEXTC}{?\^{}?} &
+\cross{PACEXTC}{?\~{}=?} &
+\cross{PACEXTC}{?quo?} \\
+\cross{PACEXTC}{?rem?} &
+\cross{PACEXTC}{algebraic?} &
+\cross{PACEXTC}{associates?} &
+\cross{PACEXTC}{characteristic} \\
+\cross{PACEXTC}{charthRoot} &
+\cross{PACEXTC}{coerce} &
+\cross{PACEXTC}{conjugate} &
+\cross{PACEXTC}{definingPolynomial} \\
+\cross{PACEXTC}{degree} &
+\cross{PACEXTC}{dimension} &
+\cross{PACEXTC}{discreteLog} &
+\cross{PACEXTC}{distinguishedRootsOf} \\
+\cross{PACEXTC}{divide} &
+\cross{PACEXTC}{euclideanSize} &
+\cross{PACEXTC}{expressIdealMember} &
+\cross{PACEXTC}{exquo} \\
+\cross{PACEXTC}{extDegree} &
+\cross{PACEXTC}{extendedEuclidean} &
+\cross{PACEXTC}{extensionDegree} &
+\cross{PACEXTC}{factor} \\
+\cross{PACEXTC}{Frobenius} &
+\cross{PACEXTC}{fullOutput} &
+\cross{PACEXTC}{gcd} &
+\cross{PACEXTC}{gcdPolynomial} \\
+\cross{PACEXTC}{ground?} &
+\cross{PACEXTC}{hash} &
+\cross{PACEXTC}{inGroundField?} &
+\cross{PACEXTC}{inv} \\
+\cross{PACEXTC}{latex} &
+\cross{PACEXTC}{lcm} &
+\cross{PACEXTC}{lift} &
+\cross{PACEXTC}{maxTower} \\
+\cross{PACEXTC}{multiEuclidean} &
+\cross{PACEXTC}{newElement} &
+\cross{PACEXTC}{one?} &
+\cross{PACEXTC}{order} \\
+\cross{PACEXTC}{previousTower} &
+\cross{PACEXTC}{prime?} &
+\cross{PACEXTC}{primeFrobenius} &
+\cross{PACEXTC}{principalIdeal} \\
+\cross{PACEXTC}{recip} &
+\cross{PACEXTC}{reduce} &
+\cross{PACEXTC}{retract} &
+\cross{PACEXTC}{retractIfCan} \\
+\cross{PACEXTC}{sample} &
+\cross{PACEXTC}{setTower!} &
+\cross{PACEXTC}{sizeLess?} &
+\cross{PACEXTC}{squareFree} \\
+\cross{PACEXTC}{squareFreePart} &
+\cross{PACEXTC}{subtractIfCan} &
+\cross{PACEXTC}{transcendenceDegree} &
+\cross{PACEXTC}{transcendent?} \\
+\cross{PACEXTC}{unit?} &
+\cross{PACEXTC}{unitCanonical} &
+\cross{PACEXTC}{unitNormal} &
+\cross{PACEXTC}{vectorise} \\
+\cross{PACEXTC}{zero?} &&&
+\end{tabular}
+
+{\bf Attributes Exported:}
+\begin{itemize}
+\item {\bf \cross{PACEXTC}{commutative(``*'')}}
+is true if it has an operation $"*": (D,D) -> D$
+which is commutative.
+\item {\bf \cross{PACEXTC}{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{PACEXTC}{leftUnitary}}
+is true if $1 * x = x$ for all x.
+\item {\bf \cross{PACEXTC}{rightUnitary}}
+is true if $x * 1 = x$ for all x.
+\item {\bf \cross{PACEXTC}{noZeroDivisors}}
+is true if $x * y \ne 0$ implies both x and y are non-zero.
+\item {\bf \cross{PACEXTC}{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{ATTREG}{canonicalsClosed}}
+is true if\hfill\\
+{\tt unitCanonical(a)*unitCanonical(b) = unitCanonical(a*b)}.
+\end{itemize}
+
+These exports come from \refto{PseudoAlgebraicClosureOfRationalNumberCategory}
+\begin{verbatim}
+ -? : % -> %
+ 0 : () -> %                          
+ 1 : () -> %
+ ?**? : (%,Integer) -> %
+ ?**? : (%,NonNegativeInteger) -> %
+ ?**? : (%,PositiveInteger) -> %      
+ ?*? : (%,%) -> %                     
+ ?*? : (%,Fraction Integer) -> %
+ ?*? : (%,Fraction Integer) -> %      
+ ?*? : (Fraction Integer,%) -> %
+ ?*? : (Fraction Integer,%) -> %      
+ ?*? : (Integer,%) -> %
+ ?*? : (NonNegativeInteger,%) -> %
+ ?*? : (PositiveInteger,%) -> %       
+ ?+? : (%,%) -> %
+ ?-? : (%,%) -> %                     
+ ?/? : (%,%) -> %
+ ?/? : (%,Fraction Integer) -> %      
+ ?=? : (%,%) -> Boolean               
+ ?^? : (%,Integer) -> %
+ ?^? : (%,NonNegativeInteger) -> %
+ ?^? : (%,PositiveInteger) -> %       
+ ?quo? : (%,%) -> %                   
+ ?rem? : (%,%) -> %                   
+ ?~=? : (%,%) -> Boolean              
+ Frobenius : % -> % if Fraction Integer has FINITE
+ Frobenius : (%,NonNegativeInteger) -> % if Fraction Integer has FINITE
+ algebraic? : % -> Boolean
+ associates? : (%,%) -> Boolean       
+ characteristic : () -> NonNegativeInteger
+ charthRoot : % -> Union(%,"failed") 
+    if Fraction Integer has CHARNZ or Fraction Integer has FINITE
+ coerce : % -> %
+ coerce : % -> OutputForm
+ coerce : Fraction Integer -> %
+ coerce : Fraction Integer -> %       
+ coerce : Fraction Integer -> %       
+ coerce : Integer -> %
+ coerce : Integer -> %                
+ conjugate : % -> %                   
+ definingPolynomial : % -> SparseUnivariatePolynomial %
+ definingPolynomial : () -> SparseUnivariatePolynomial %
+ degree : % -> OnePointCompletion PositiveInteger
+ dimension : () -> CardinalNumber
+ discreteLog : (%,%) -> Union(NonNegativeInteger,"failed") 
+    if Fraction Integer has CHARNZ or Fraction Integer has FINITE
+ distinguishedRootsOf : (SparseUnivariatePolynomial %,%) -> List %
+ divide : (%,%) -> Record(quotient: %,remainder: %)
+ euclideanSize : % -> NonNegativeInteger
+ expressIdealMember : (List %,%) -> Union(List %,"failed")
+ exquo : (%,%) -> Union(%,"failed")
+ extDegree : % -> PositiveInteger     
+ extendedEuclidean : (%,%) -> Record(coef1: %,coef2: %,generator: %)
+ extendedEuclidean : (%,%,%) -> Union(Record(coef1: %,coef2: %),"failed")
+ extensionDegree : () -> OnePointCompletion PositiveInteger
+ factor : % -> Factored %
+ fullOutput : % -> OutputForm         
+ gcd : (%,%) -> %                     
+ gcd : List % -> %
+ gcdPolynomial : (SparseUnivariatePolynomial %,
+              SparseUnivariatePolynomial %) -> SparseUnivariatePolynomial %
+ ground? : % -> Boolean
+ hash : % -> SingleInteger            
+ inGroundField? : % -> Boolean
+ inv : % -> %                         
+ latex : % -> String
+ lcm : (%,%) -> %
+ lcm : List % -> %                    
+ lift : % -> SparseUnivariatePolynomial %
+ lift : (%,%) -> SparseUnivariatePolynomial %
+ maxTower : List % -> %               
+ multiEuclidean : (List %,%) -> Union(List %,"failed")
+ newElement : (SparseUnivariatePolynomial %,%,Symbol) -> %
+ newElement : (SparseUnivariatePolynomial %,Symbol) -> %
+ one? : % -> Boolean
+ order : % -> OnePointCompletion PositiveInteger 
+    if Fraction Integer has CHARNZ or Fraction Integer has FINITE
+ previousTower : % -> %               
+ prime? : % -> Boolean
+ primeFrobenius : % -> % 
+    if Fraction Integer has CHARNZ or Fraction Integer has FINITE
+ primeFrobenius : (%,NonNegativeInteger) -> % 
+    if Fraction Integer has CHARNZ or Fraction Integer has FINITE
+ principalIdeal : List % -> Record(coef: List %,generator: %)
+ recip : % -> Union(%,"failed")
+ reduce : SparseUnivariatePolynomial % -> %
+ retract : % -> Fraction Integer
+ retract : % -> Fraction Integer      
+ retract : % -> Integer
+ retractIfCan : % -> Union(Fraction Integer,"failed")
+ retractIfCan : % -> Union(Fraction Integer,"failed")
+ retractIfCan : % -> Union(Integer,"failed")
+ sample : () -> %                     
+ setTower! : % -> Void
+ sizeLess? : (%,%) -> Boolean         
+ squareFree : % -> Factored %
+ squareFreePart : % -> %              
+ subtractIfCan : (%,%) -> Union(%,"failed")
+ transcendenceDegree : () -> NonNegativeInteger
+ transcendent? : % -> Boolean
+ unit? : % -> Boolean                 
+ unitCanonical : % -> %
+ unitNormal : % -> Record(unit: %,canonical: %,associate: %)
+ vectorise : (%,%) -> Vector %        
+ zero? : % -> Boolean
+
+These exports come from \refto{RetractableTo}
+\begin{verbatim}
+ coerce : PseudoAlgebraicClosureOfRationalNumber -> %
+ coerce : PseudoAlgebraicClosureOfRationalNumber -> %
+ retract : % -> PseudoAlgebraicClosureOfRationalNumber
+ retract : % -> PseudoAlgebraicClosureOfRationalNumber
+ retractIfCan : % -> Union(PseudoAlgebraicClosureOfRationalNumber,"failed")
+ retractIfCan : % -> Union(PseudoAlgebraicClosureOfRationalNumber,"failed")
+\end{verbatim}
+
+These exports come from \refto{ExtensionField}
+\begin{verbatim}
+ ?*? : (%,PseudoAlgebraicClosureOfRationalNumber) -> %
+ ?*? : (PseudoAlgebraicClosureOfRationalNumber,%) -> %
+ ?/? : (%,PseudoAlgebraicClosureOfRationalNumber) -> %
+ charthRoot : % -> Union(%,"failed") if PseudoAlgebraicClosureOfRationalNumber has CHARNZ or PseudoAlgebraicClosureOfRationalNumber has FINITE or Fraction Integer has CHARNZ or Fraction Integer has FINITE
+ discreteLog : (%,%) -> Union(NonNegativeInteger,"failed") if PseudoAlgebraicClosureOfRationalNumber has CHARNZ or PseudoAlgebraicClosureOfRationalNumber has FINITE or Fraction Integer has CHARNZ or Fraction Integer has FINITE
+ Frobenius : % -> % if PseudoAlgebraicClosureOfRationalNumber has FINITE or Fraction Integer has FINITE
+ Frobenius : (%,NonNegativeInteger) -> % if PseudoAlgebraicClosureOfRationalNumber has FINITE or Fraction Integer has FINITE
+ order : % -> OnePointCompletion PositiveInteger if PseudoAlgebraicClosureOfRationalNumber has CHARNZ or PseudoAlgebraicClosureOfRationalNumber has FINITE or Fraction Integer has CHARNZ or Fraction Integer has FINITE
+ primeFrobenius : % -> % if PseudoAlgebraicClosureOfRationalNumber has CHARNZ or PseudoAlgebraicClosureOfRationalNumber has FINITE or Fraction Integer has CHARNZ or Fraction Integer has FINITE
+ primeFrobenius : (%,NonNegativeInteger) -> % if PseudoAlgebraicClosureOfRationalNumber has CHARNZ or PseudoAlgebraicClosureOfRationalNumber has FINITE or Fraction Integer has CHARNZ or Fraction Integer has FINITE
+\end{verbatim}
+
+<<category PACEXTC PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory>>=
+)abbrev category PACEXTC PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory
+++ Authors: Gaetan Hache
+++ Date Created: jan 1998
+++ Date Last Updated: May 2010 by Tim Daly
+++ Description: 
+++ This category exports the function for the domain 
+++ PseudoAlgebraicClosureOfAlgExtOfRationalNumber 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. 
+PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory:Category == Impl where
+  Q    ==> PseudoAlgebraicClosureOfRationalNumber
+  Impl ==>
+    Join(PseudoAlgebraicClosureOfRationalNumberCategory,_
+         RetractableTo(Q),ExtensionField(Q))
+@
+<<PACEXTC.dotabb>>=
+"PACEXTC" [color=lightblue,href="bookvol10.2.pdf#nameddest=PACEXTC"];
+"PACEXTC" -> "PACRATC"
+"PACEXTC" -> "RETRACT"
+"PACEXTC" -> "XF"
+
+@
+<<PACEXTC.dotfull>>=
+"PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=PACEXTC"];
+   -> "PseudoAlgebraicClosureOfRationalNumberCategory"
+"PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory"
+   -> "RetractableTo(PseudoAlgebraicClosureOfRationalNumber)"
+"PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory"
+   -> "ExtensionField(PseudoAlgebraicClosureOfRationalNumber)"
+
+"PseudoAlgebraicClosureOfRationalNumberCategory" 
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=PACRATC"];
+
+"RetractableTo(PseudoAlgebraicClosureOfRationalNumber)" 
+  [color=lightblue,href="bookvol10.2.pdf#nameddest=RETRACT"];
+ ->  "RetractableTo(a:Type)" 
+
+"RetractableTo(a:Type)" 
+  [color=lightblue,href="bookvol10.2.pdf#nameddest=RETRACT"];
+
+"ExtensionField(PseudoAlgebraicClosureOfRationalNumber)"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=XF"];
+"ExtensionField(PseudoAlgebraicClosureOfRationalNumber)" ->
+ ->  "ExtensionField(a:Field)" 
+
+"ExtensionField(a:Field)"
+  [color=lightblue,href="bookvol10.2.pdf#nameddest=XF"];
+
+@
+<<PACEXTC.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=PACEXTC"];
+   -> "PseudoAlgebraicClosureOfRationalNumberCategory"
+"PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory"
+   -> "RetractableTo(PseudoAlgebraicClosureOfRationalNumber)"
+"PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory"
+   -> "ExtensionField(PseudoAlgebraicClosureOfRationalNumber)"
+
+"RetractableTo(PseudoAlgebraicClosureOfRationalNumber)" 
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=RETRACT"];
+"RetractableTo(PseudoAlgebraicClosureOfRationalNumber)" 
+  -> "RETRACT..."
+
+"ExtensionField(PseudoAlgebraicClosureOfRationalNumber)"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=XF"];
+"ExtensionField(PseudoAlgebraicClosureOfRationalNumber)" ->
+ ->  "XF..."
+
+"XF..." [color=lightblue];
+"RETRACT..." [color=lightblue];
+
+}
+
+@
 
 \chapter{The bootstrap code}
 \section{ABELGRP.lsp BOOTSTRAP} 
@@ -74996,6 +75436,7 @@ Note that this code is not included in the generated catdef.spad file.
 <<category PRIMCAT PrimitiveFunctionCategory>>
 <<category PID PrincipalIdealDomain>>
 <<category PRQAGG PriorityQueueAggregate>>
+<<category PACEXTC PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory>>
 <<category PACFFC PseudoAlgebraicClosureOfFiniteFieldCategory>>
 <<category PACPERC PseudoAlgebraicClosureOfPerfectFieldCategory>>
 <<category PACRATC PseudoAlgebraicClosureOfRationalNumberCategory>>
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 77487bc..8afa8d1 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -24470,6 +24470,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
    (|PrimitiveFunctionCategory| . PRIMCAT)
    (|PrincipalIdealDomain| . PID)
    (|PriorityQueueAggregate| . PRQAGG)
+   (|PseudoAlgebraicClosureofAlgExtOfRationalNumberCategory| . PACEXTC)
    (|PseudoAlgebraicClosureOfFiniteField| . PACOFF)
    (|PseudoAlgebraicClosureOfFiniteFieldCategory| . PACFFC)
    (|PseudoAlgebraicClosureOfPerfectFieldCategory| . PACPERC)
diff --git a/books/ps/v102pseudoalgebraicclosureofalgextofrationalnumbercategory.ps b/books/ps/v102pseudoalgebraicclosureofalgextofrationalnumbercategory.ps
new file mode 100644
index 0000000..4cc087e
--- /dev/null
+++ b/books/ps/v102pseudoalgebraicclosureofalgextofrationalnumbercategory.ps
@@ -0,0 +1,343 @@
+%!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 294 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 258 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% PACEXTC
+gsave
+[ /Rect [ 98 72 178 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PACEXTC) >>
+  /Subtype /Link
+/ANN pdfmark
+0.537 0.247 0.902 nodecolor
+newpath 178 108 moveto
+98 108 lineto
+98 72 lineto
+178 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 178 108 moveto
+98 108 lineto
+98 72 lineto
+178 72 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+105.5 85.9 moveto 65 (PACEXTC) alignedtext
+grestore
+% PACRATC
+gsave
+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
+8 13.9 moveto 64 (PACRATC) alignedtext
+grestore
+% PACEXTC->PACRATC
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 113 72 moveto
+101 63 86 52 72 42 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 74.1 39.2 moveto
+64 36 lineto
+69.9 44.8 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 74.1 39.2 moveto
+64 36 lineto
+69.9 44.8 lineto
+closepath stroke
+grestore
+% RETRACT
+gsave
+0.537 0.247 0.902 nodecolor
+newpath 178 36 moveto
+98 36 lineto
+98 0 lineto
+178 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 178 36 moveto
+98 36 lineto
+98 0 lineto
+178 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+105.5 13.9 moveto 65 (RETRACT) alignedtext
+grestore
+% PACEXTC->RETRACT
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 138 72 moveto
+138 64 138 55 138 46 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 141.5 46 moveto
+138 36 lineto
+134.5 46 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 141.5 46 moveto
+138 36 lineto
+134.5 46 lineto
+closepath stroke
+grestore
+% XF
+gsave
+0.537 0.247 0.902 nodecolor
+newpath 250 36 moveto
+196 36 lineto
+196 0 lineto
+250 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 250 36 moveto
+196 36 lineto
+196 0 lineto
+250 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+213.5 13.9 moveto 19 (XF) alignedtext
+grestore
+% PACEXTC->XF
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 159 72 moveto
+170 63 183 52 194 42 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 196.1 44.8 moveto
+202 36 lineto
+191.9 39.2 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 196.1 44.8 moveto
+202 36 lineto
+191.9 39.2 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 294 152
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index b17de15..a07a887 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+20100510 tpd src/axiom-website/patches.html 20100510.01.tpd.patch
+20100510 tpd src/algebra/Makefile help and test files for PACEXTC
+20100510 tpd books/bookvol5 expose PACEXTC
+20100510 tpd books/bookvol10.2 add PACEXTC
+20100510 tpd v102pseudoalgebraicclosureofalgextofrationalnumbercategory.ps add
 20100509 tpd src/axiom-website/patches.html 20100509.02.tpd.patch
 20100509 tpd src/algebra/Makefile test and document PACOFF
 20100509 tpd books/bookvol5 expose PseudoAlgebraicClosureOfFiniteField
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 2eb7dcd..11e8c88 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -11896,7 +11896,8 @@ LAYER17=\
   ${MID}/clique1.spad \
   ${OUT}/NAGF01.o   ${OUT}/NAGF02.o   ${OUT}/NAGF04.o   ${OUT}/NCEP.o     \
   ${OUT}/NLINSOL.o  ${OUT}/NSMP.o     ${OUT}/NUMERIC.o  ${OUT}/OCT.o      \
-  ${OUT}/OCTCT2.o   ${OUT}/ODEPAL.o   ${OUT}/ODERTRIC.o ${OUT}/PADE.o     \
+  ${OUT}/OCTCT2.o   ${OUT}/ODEPAL.o   ${OUT}/ODERTRIC.o ${OUT}/PACEXTC.o  \
+  ${OUT}/PADE.o     \
   ${OUT}/PAN2EXPR.o ${OUT}/PFO.o      ${OUT}/PFOQ.o     ${OUT}/PICOERCE.o \
   ${OUT}/PMASSFS.o  ${OUT}/PMFS.o     ${OUT}/PMPREDFS.o ${OUT}/PSETPK.o   \
   ${OUT}/QUAT.o     ${OUT}/QUATCT2.o  ${OUT}/RADFF.o    ${OUT}/RDEEF.o    \
@@ -13794,6 +13795,16 @@ LAYER17=\
 "ODERTRIC" -> "ACF"
 /*"ODERTRIC" -> {"LSAGG-"; "STAGG-"}*/
 
+"PACEXTC" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PACEXTC"]
+"PACEXTC" -> "PACRAT"
+/*"PACEXTC" -> {"PACRATC"; "PACPERC"; "FIELD"; "EUCDOM"; "PID"; "GCDDOM"}*/
+/*"PACEXTC" -> {"INTDOM"; "COMRING"; "RING"; "RNG"; "ABELGRP"}*/
+/*"PACEXTC" -> {"CABMON"; "ABELMON"; "ABELSG"; "SETCAT"; "BASTYPE"}*/
+/*"PACEXTC" -> {"KOERCE"; "SGROUP"; "MONOID"; "LMODULE"; "BMODULE"}*/
+/*"PACEXTC" -> {"RMODULE"; "ALGEBRA"; "MODULE"; "ENTIRER"; "UFD"}*/
+/*"PACEXTC" -> {"DIVRING"; "CHARZ"; "RETRACT"; "XF"; "VSPACE";}*/
+/*"PACEXTC" -> {"FPC"; "CHARNZ"; "FINITE"}*/
+
 "PADE" [color="#FF4488",href="bookvol10.4.pdf#nameddest=PADE"]
 /*"PADE" -> {"FIELD"; "EUCDOM"; "PID"; "GCDDOM"; "INTDOM"; "COMRING"}*/
 /*"PADE" -> {"RING"; "RNG"; "ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"}*/
@@ -16000,6 +16011,21 @@ ${MID}/PACOFF.nrlib/code.o: ${MID}/PACOFF.spad
 	      | ${INTERPSYS} >${TMP}/trace ; \
 	   fi )
 @
+<<newcode>>=
+
+PACEXTCDEPS = PACPERC PACRATC PACRAT
+
+${MID}/PACEXTC.nrlib/code.o: ${MID}/PACEXTC.spad
+	@echo P3 making ${MID}/PACEXTC.nrlib/code.o from ${MID}/PACEXTC.spad
+	@ (cd ${MID} ; \
+	   if [ -z "${NOISE}" ] ; then \
+	    echo -e ")lib ${PACEXTCDEPS} \n )co PACEXTC.spad" \
+              | ${INTERPSYS} ; \
+           else \
+	    echo -e ")lib ${PACEXTCDEPS} \n )co PACEXTC.spad" \
+	      | ${INTERPSYS} >${TMP}/trace ; \
+	   fi )
+@
 
 \section{Broken Files}
 These files are Aldor files
@@ -16811,6 +16837,7 @@ SPADHELP=\
  ${HELP}/Permutation.help \
  ${HELP}/Polynomial.help \
  ${HELP}/Product.help \
+ ${HELP}/PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.help \
  ${HELP}/PseudoAlgebraicClosureOfFiniteField.help \
  ${HELP}/PseudoAlgebraicClosureOfFiniteFieldCategory.help \
  ${HELP}/PseudoAlgebraicClosureOfPerfectFieldCategory.help \
@@ -16962,6 +16989,7 @@ REGRESS= \
  Plot.regress \
  Polynomial.regress \
  Product.regress \
+ PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.regress \
  PseudoAlgebraicClosureOfFiniteField.regress \
  PseudoAlgebraicClosureOfFiniteFieldCategory.regress \
  PseudoAlgebraicClosureOfPerfectFieldCategory.regress \
@@ -18137,6 +18165,26 @@ ${HELP}/Product.help: ${BOOKS}/bookvol10.3.pamphlet
             >${INPUT}/Product.input
 	@echo "Product (PRODUCT)" >>${HELPFILE}
 
+${HELP}/PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.help: \
+            ${BOOKS}/bookvol10.2.pamphlet
+	@echo 7000 create \
+            PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.help from \
+            ${BOOKS}/bookvol10.2.pamphlet
+	@${TANGLE} \
+           -R"PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.help" \
+           ${BOOKS}/bookvol10.2.pamphlet \
+           >${HELP}/PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.help
+	@cp \
+          ${HELP}/PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.help \
+           ${HELP}/PACEXTC.help
+	@${TANGLE} \
+         -R"PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.input" \
+         ${BOOKS}/bookvol10.2.pamphlet \
+         >${INPUT}/PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.input
+	@echo \
+           "PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory (PACEXTC)" \
+           >>${HELPFILE}
+
 ${HELP}/PseudoAlgebraicClosureOfFiniteFieldCategory.help: \
            ${BOOKS}/bookvol10.2.pamphlet
 	@echo 7936 create PseudoAlgebraicClosureOfFiniteFieldCategory.help \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 26f0d32..9c0abf6 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2679,5 +2679,7 @@ books/bookvol10.2 fix PseudoAlgebraicClosureOfPerfectFieldCategory<br/>
 books/bookvol10.3 add PseudoAlgebraicClosureOfRationalNumber<br/>
 <a href="patches/20100509.02.tpd.patch">20100509.02.tpd.patch</a>
 books/bookvol10.3 add PseudoAlgebraicClosureOfFiniteField<br/>
+<a href="patches/20100510.01.tpd.patch">20100510.01.tpd.patch</a>
+books/bookvol10.2 PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory<br/>
  </body>
 </html>
