diff --git a/books/bookvol10.2.pamphlet b/books/bookvol10.2.pamphlet
index 0cdf86d..2680966 100644
--- a/books/bookvol10.2.pamphlet
+++ b/books/bookvol10.2.pamphlet
@@ -48081,6 +48081,7 @@ digraph pic {
 
 --S 1 of 1
 )show PseudoAlgebraicClosureOfPerfectFieldCategory
+--R 
 --R PseudoAlgebraicClosureOfPerfectFieldCategory  is a category constructor
 --R Abbreviation for PseudoAlgebraicClosureOfPerfectFieldCategory is PACPERC 
 --R This constructor is exposed in this frame.
@@ -48098,18 +48099,15 @@ digraph pic {
 --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 extDegree : % -> PositiveInteger      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 lcm : (%,%) -> %                      maxTower : List % -> %
+--R one? : % -> Boolean                   previousTower : % -> %
+--R prime? : % -> Boolean                 ?quo? : (%,%) -> %
+--R recip : % -> Union(%,"failed")        ?rem? : (%,%) -> %
 --R sample : () -> %                      setTower! : % -> Void
 --R sizeLess? : (%,%) -> Boolean          squareFree : % -> Factored %
 --R squareFreePart : % -> %               unit? : % -> Boolean
@@ -48119,6 +48117,8 @@ digraph pic {
 --R ?**? : (%,NonNegativeInteger) -> %
 --R ?^? : (%,NonNegativeInteger) -> %
 --R characteristic : () -> NonNegativeInteger
+--R definingPolynomial : % -> SparseUnivariatePolynomial %
+--R definingPolynomial : () -> SparseUnivariatePolynomial %
 --R distinguishedRootsOf : (SparseUnivariatePolynomial %,%) -> List %
 --R divide : (%,%) -> Record(quotient: %,remainder: %)
 --R euclideanSize : % -> NonNegativeInteger
@@ -48127,9 +48127,13 @@ digraph pic {
 --R extendedEuclidean : (%,%,%) -> Union(Record(coef1: %,coef2: %),"failed")
 --R extendedEuclidean : (%,%) -> Record(coef1: %,coef2: %,generator: %)
 --R gcdPolynomial : (SparseUnivariatePolynomial %,SparseUnivariatePolynomial %) -> SparseUnivariatePolynomial %
+--R lift : (%,%) -> SparseUnivariatePolynomial %
+--R lift : % -> SparseUnivariatePolynomial %
 --R multiEuclidean : (List %,%) -> Union(List %,"failed")
---R newElement : (SUP %,%,Symbol) -> %
+--R newElement : (SparseUnivariatePolynomial %,Symbol) -> %
+--R newElement : (SparseUnivariatePolynomial %,%,Symbol) -> %
 --R principalIdeal : List % -> Record(coef: List %,generator: %)
+--R reduce : SparseUnivariatePolynomial % -> %
 --R subtractIfCan : (%,%) -> Union(%,"failed")
 --R unitNormal : % -> Record(unit: %,canonical: %,associate: %)
 --R
@@ -48348,7 +48352,17 @@ These exports come from \refto{DivisionRing}():
 ++ 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 
+PseudoAlgebraicClosureOfPerfectFieldCategory() : Category == PUB where
+
+ INT      ==> Integer
+ K        ==> Fraction Integer
+ NNI      ==> NonNegativeInteger
+ SUP      ==> SparseUnivariatePolynomial
+ BOOLEAN  ==> Boolean
+ PI       ==> PositiveInteger
+ FFFACTSE ==> FiniteFieldFactorizationWithSizeParseBySideEffect
+
+ PUB ==> Field with 
 
   definingPolynomial: () -> SUP(%)
   definingPolynomial: % -> SUP %
@@ -55563,6 +55577,7 @@ digraph pic {
 
 --S 1 of 1
 )show PseudoAlgebraicClosureOfFiniteFieldCategory
+--R 
 --R PseudoAlgebraicClosureOfFiniteFieldCategory  is a category constructor
 --R Abbreviation for PseudoAlgebraicClosureOfFiniteFieldCategory is PACFFC 
 --R This constructor is exposed in this frame.
@@ -55582,22 +55597,19 @@ digraph pic {
 --R coerce : Fraction Integer -> %        coerce : % -> %
 --R coerce : Integer -> %                 coerce : % -> OutputForm
 --R conjugate : % -> %                    createPrimitiveElement : () -> %
---R definingPolynomial : () -> SUP %      definingPolynomial : % -> SUP %
---R differentiate : % -> %                extDegree : % -> PI
+--R differentiate : % -> %                extDegree : % -> PositiveInteger
 --R factor : % -> Factored %              fullOutput : % -> OutputForm
 --R gcd : List % -> %                     gcd : (%,%) -> %
 --R ground? : % -> Boolean                hash : % -> SingleInteger
 --R index : PositiveInteger -> %          init : () -> %
 --R inv : % -> %                          latex : % -> String
 --R lcm : List % -> %                     lcm : (%,%) -> %
---R lift : % -> SUP %                     lift : (%,%) -> SUP %
 --R lookup : % -> PositiveInteger         maxTower : List % -> %
---R newElement : (SUP %,Symbol) -> %      one? : % -> Boolean
---R order : % -> PositiveInteger          previousTower : % -> %
---R prime? : % -> Boolean                 primeFrobenius : % -> %
---R primitive? : % -> Boolean             primitiveElement : () -> %
---R ?quo? : (%,%) -> %                    random : () -> %
---R recip : % -> Union(%,"failed")        reduce : SUP % -> %
+--R one? : % -> Boolean                   order : % -> PositiveInteger
+--R previousTower : % -> %                prime? : % -> Boolean
+--R primeFrobenius : % -> %               primitive? : % -> Boolean
+--R primitiveElement : () -> %            ?quo? : (%,%) -> %
+--R random : () -> %                      recip : % -> Union(%,"failed")
 --R ?rem? : (%,%) -> %                    sample : () -> %
 --R setTower! : % -> Void                 size : () -> NonNegativeInteger
 --R sizeLess? : (%,%) -> Boolean          squareFree : % -> Factored %
@@ -55610,6 +55622,8 @@ digraph pic {
 --R characteristic : () -> NonNegativeInteger
 --R charthRoot : % -> Union(%,"failed")
 --R conditionP : Matrix % -> Union(Vector %,"failed")
+--R definingPolynomial : () -> SparseUnivariatePolynomial %
+--R definingPolynomial : % -> SparseUnivariatePolynomial %
 --R differentiate : (%,NonNegativeInteger) -> %
 --R discreteLog : % -> NonNegativeInteger
 --R discreteLog : (%,%) -> Union(NonNegativeInteger,"failed")
@@ -55622,12 +55636,16 @@ digraph pic {
 --R extendedEuclidean : (%,%) -> Record(coef1: %,coef2: %,generator: %)
 --R factorsOfCyclicGroupSize : () -> List Record(factor: Integer,exponent: Integer)
 --R gcdPolynomial : (SparseUnivariatePolynomial %,SparseUnivariatePolynomial %) -> SparseUnivariatePolynomial %
+--R lift : % -> SparseUnivariatePolynomial %
+--R lift : (%,%) -> SparseUnivariatePolynomial %
 --R multiEuclidean : (List %,%) -> Union(List %,"failed")
---R newElement : (SUP %,%,Symbol) -> %
+--R newElement : (SparseUnivariatePolynomial %,%,Symbol) -> %
+--R newElement : (SparseUnivariatePolynomial %,Symbol) -> %
 --R nextItem : % -> Union(%,"failed")
 --R order : % -> OnePointCompletion PositiveInteger
 --R primeFrobenius : (%,NonNegativeInteger) -> %
 --R principalIdeal : List % -> Record(coef: List %,generator: %)
+--R reduce : SparseUnivariatePolynomial % -> %
 --R representationType : () -> Union("prime",polynomial,normal,cyclic)
 --R subtractIfCan : (%,%) -> Union(%,"failed")
 --R tableForDiscreteLogarithm : Integer -> Table(PositiveInteger,NonNegativeInteger)
@@ -58193,6 +58211,7 @@ digraph pic {
 
 --S 1 of 1
 )show PseudoAlgebraicClosureOfRationalNumberCategory
+--R 
 --R PseudoAlgebraicClosureOfRationalNumberCategory  is a category constructor
 --R Abbreviation for PseudoAlgebraicClosureOfRationalNumberCategory is PACRATC 
 --R This constructor is exposed in this frame.
@@ -58213,19 +58232,16 @@ digraph pic {
 --R coerce : Fraction Integer -> %        coerce : Integer -> %
 --R coerce : Fraction Integer -> %        coerce : % -> %
 --R coerce : Integer -> %                 coerce : % -> OutputForm
---R conjugate : % -> %                    definingPolynomial : % -> SUP %
---R definingPolynomial : () -> SUP %      dimension : () -> CardinalNumber
---R extDegree : % -> PI                   factor : % -> Factored %
+--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 lift : (%,%) -> SUP %                 lift : % -> SUP %
---R maxTower : List % -> %                newElement : (SUP %,Symbol) -> %
---R one? : % -> Boolean                   previousTower : % -> %
---R prime? : % -> Boolean                 ?quo? : (%,%) -> %
---R recip : % -> Union(%,"failed")        reduce : SUP % -> %
+--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
@@ -58241,6 +58257,8 @@ digraph pic {
 --R ?^? : (%,NonNegativeInteger) -> %
 --R characteristic : () -> NonNegativeInteger
 --R charthRoot : % -> Union(%,"failed") if Fraction Integer has CHARNZ or Fraction Integer has FINITE
+--R definingPolynomial : % -> SparseUnivariatePolynomial %
+--R definingPolynomial : () -> SparseUnivariatePolynomial %
 --R degree : % -> OnePointCompletion PositiveInteger
 --R discreteLog : (%,%) -> Union(NonNegativeInteger,"failed") if Fraction Integer has CHARNZ or Fraction Integer has FINITE
 --R distinguishedRootsOf : (SparseUnivariatePolynomial %,%) -> List %
@@ -58252,12 +58270,16 @@ digraph pic {
 --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 : (SUP %,%,Symbol) -> %
+--R newElement : (SparseUnivariatePolynomial %,Symbol) -> %
+--R newElement : (SparseUnivariatePolynomial %,%,Symbol) -> %
 --R order : % -> OnePointCompletion PositiveInteger if Fraction Integer has CHARNZ or Fraction Integer has FINITE
 --R primeFrobenius : % -> % if Fraction Integer has CHARNZ or Fraction Integer has FINITE
 --R primeFrobenius : (%,NonNegativeInteger) -> % if Fraction Integer has CHARNZ or Fraction Integer has FINITE
 --R principalIdeal : List % -> Record(coef: List %,generator: %)
+--R reduce : SparseUnivariatePolynomial % -> %
 --R retractIfCan : % -> Union(Fraction Integer,"failed")
 --R retractIfCan : % -> Union(Fraction Integer,"failed")
 --R retractIfCan : % -> Union(Integer,"failed")
diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index 1e25963..e61c52c 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -24686,6 +24686,187 @@ FactoringUtilities(E,OV,R,P) : C == T where
 "FACUTIL" -> "PFECAT"
 
 @
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{package FACTRN FactorisationOverPseudoAlgebraicClosureOfRationalNumber}
+<<FactorisationOverPseudoAlgebraicClosureOfRationalNumber.input>>=
+)set break resume
+)sys rm -f FactorisationOverPseudoAlgebraicClosureOfRationalNumber.output
+)spool FactorisationOverPseudoAlgebraicClosureOfRationalNumber.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show FactorisationOverPseudoAlgebraicClosureOfRationalNumber
+--R 
+--R FactorisationOverPseudoAlgebraicClosureOfRationalNumber K: PseudoAlgebraicClosureOfRationalNumberCategory  is a package constructor
+--R Abbreviation for FactorisationOverPseudoAlgebraicClosureOfRationalNumber is FACTRN 
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.4.pamphlet to see algebra source code for FACTRN 
+--R
+--R------------------------------- Operations --------------------------------
+--R factor : (SparseUnivariatePolynomial K,K) -> Factored SparseUnivariatePolynomial K
+--R factorSqFree : (SparseUnivariatePolynomial K,K) -> Factored SparseUnivariatePolynomial K
+--R
+--E 1
+
+)spool
+)lisp (bye)
+@
+<<FactorisationOverPseudoAlgebraicClosureOfRationalNumber.help>>=
+====================================================================
+FactorisationOverPseudoAlgebraicClosureOfRationalNumber examples
+====================================================================
+
+See Also:
+o )show FactorisationOverPseudoAlgebraicClosureOfRationalNumber
+
+@
+\pagehead{FactorisationOverPseudoAlgebraicClosureOfRationalNumber}{FACTRN}
+\pagepic{ps/v104factorisationoverpseudoalgebraicclosureofrationalnumber.ps}{FACTRN}{1.00}
+
+{\bf Exports:}\\
+\begin{tabular}{ll}
+\cross{FACTRN}{factor} &
+\cross{FACTRN}{factorSqFree}
+\end{tabular}
+
+<<package FACTRN FactorisationOverPseudoAlgebraicClosureOfRationalNumber>>=
+)abbrev package FACTRN FactorisationOverPseudoAlgebraicClosureOfRationalNumber
+++ Author: Gaetan Hache
+++ Date Created: September 1996
+++ Date Last Updated: May, 2010, by Tim Daly
+++ Description:
+++ Part of the Package for Algebraic Function Fields in one variable PAFF
+FactorisationOverPseudoAlgebraicClosureOfRationalNumber(K):Exports ==
+ Implementation where
+  K:PseudoAlgebraicClosureOfRationalNumberCategory
+  SUP ==> SparseUnivariatePolynomial
+  Q   ==> Fraction Integer
+  NNI ==> NonNegativeInteger
+  UP ==> SUP(K)
+  UPUP ==> SUP(SUP(K))
+
+  Exports ==> with
+    factor: (UP,K) -> Factored UP
+    factorSqFree: (UP,K) -> Factored UP
+
+  Implementation ==> add
+    up2Rat: UP -> SUP(Q)
+    rat2up: SUP(Q) -> UP
+
+    factRat: UP -> Factored UP
+    liftPoly: (UP, K) -> UPUP
+
+    liftDefPoly:  UP -> UPUP
+
+    norm: (UP, K) -> UP
+
+    factParPert: ( UP,K,K) -> Factored UP
+
+    trans: (UP, K) -> UP
+
+    swapCoefWithVar: ( UP , NNI) -> UPUP
+
+    frRat2frUP: Factored SUP(Q) -> Factored UP
+
+    factor(pol,a)==
+      polSF:= squareFree pol
+      reduce("*" , _
+       [ factorSqFree(fr.fctr,a)**(fr.xpnt pretend NNI) _
+           for fr in factorList polSF] , 1)
+
+    factorSqFree(pol,a)==
+      ratPol:SUP(Q)
+      ground? a => 
+        ratPol:= up2Rat pol 
+        frRat2frUP factor( ratPol )$RationalFactorize( SUP(Q) ) :: Factored UP 
+      nPol:= norm(pol,a)
+      ta:=previousTower a
+      factN := factor( nPol , ta )
+      lfactnPol:= factorList factN 
+      G:UP:=1
+      L: Factored UP:= 1
+      for fr in lfactnPol repeat
+        G:= gcd( [ pol , fr.fctr ] )
+        pol:= pol quo$UP G
+        if one? fr.xpnt then 
+          L := L *  flagFactor( G, 1 ,"prime")$Factored(UP) 
+        else
+          L := L *   factParPert( G, a, a ) 
+      L
+      
+    factParPert(pol, a, b)==
+      polt:=trans(pol,b)
+      frpol:= factorList  factor(polt,a) 
+      sl:= [ fr.fctr for fr in frpol ]
+      slt:= [ trans(p , -b) for p in sl ]
+      nfrpol:= [ flagFactor( p, fr.xpnt , fr.flg )$Factored(UP) _
+                   for p in slt for fr in frpol ]
+      reduce("*" , nfrpol)
+
+    frRat2frUP(fr)==
+      frpol:= factorList fr
+      sl:= [ fr.fctr for fr in frpol ]
+      slt:= [ rat2up p  for p in sl ]
+      nfrpol:= [ flagFactor( p, fr.xpnt , fr.flg )$Factored(UP) _
+                   for p in slt for fr in frpol ]
+      reduce("*" , nfrpol)
+
+    up2Rat(pol)== 
+      zero?(pol) => 0
+      d:=degree pol
+      a:Q:= retract(leadingCoefficient pol)@Q
+      monomial(a,d)$SUP(Q) + up2Rat(reductum pol)
+
+    rat2up(pol)==
+      zero?(pol) => 0
+      d:=degree pol
+      a:K:=(leadingCoefficient pol) :: K
+      monomial(a,d)$UP + rat2up(reductum pol)
+      
+    trans(pol,a)==
+      zero? pol => 0
+      lc:=leadingCoefficient pol
+      d:=degree pol
+
+      lc*( monomial(1,1)$UP + monomial(-a,0)$UP )**d + trans(reductum pol , a) 
+ 
+    liftDefPoly(pol)==
+      zero?(pol) => 0
+      lc:= leadingCoefficient pol
+      d:= degree pol
+      monomial( monomial(lc,0)$UP , d )$UPUP + liftDefPoly reductum pol
+
+    norm(pol,a)==
+      lpol:=liftPoly(pol,a)
+      defPol:=definingPolynomial a
+      ldefPol:=liftDefPoly defPol
+      resultant(ldefPol,lpol)
+      
+    swapCoefWithVar(coef,n)==
+      ground? coef => 
+        monomial( monomial( retract coef , n)$SUP(K) , 0)$UPUP
+      lcoef:=leadingCoefficient(coef)
+      d:=degree(coef)
+      monomial( monomial(lcoef,  n )$SUP(K) , d)$UPUP + _
+                 swapCoefWithVar( reductum coef, n )
+
+    liftPoly(pol,a)==
+      zero? pol => 0
+      lcoef:=leadingCoefficient pol
+      n:=degree pol
+      liftCoef:= lift(lcoef,a)$K
+      swapCoefWithVar(liftCoef , n) + liftPoly( reductum pol , a )
+
+@
+<<FACTRN.dotabb>>=
+"FACTRN" [color="#FF4488",href="bookvol10.4.pdf#nameddest=FACTRN"]
+"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"]
+"FACTRN" -> "PFECAT"
+
+@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{package FGLMICPK FGLMIfCanPackage}
 \pagehead{FGLMIfCanPackage}{FGLMICPK}
@@ -154393,6 +154574,7 @@ ZeroDimensionalSolvePackage(R,ls,ls2): Exports == Implementation where
 <<package FR2 FactoredFunctions2>>
 <<package FRUTIL FactoredFunctionUtilities>>
 <<package FACUTIL FactoringUtilities>>
+<<package FACTRN FactorisationOverPseudoAlgebraicClosureOfRationalNumber>>
 <<package FGLMICPK FGLMIfCanPackage>>
 <<package FORDER FindOrderFinite>>
 <<package FAMR2 FiniteAbelianMonoidRingFunctions2>>
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index fb70a81..94b8a73 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -23908,6 +23908,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
    (|ExpressionToUnivariatePowerSeries| . EXPR2UPS)
    (|Factored| . FR)
    (|FactoredFunctions2| . FR2)
+   (|FactorisationOverPseudoAlgebraicClosureOfRationalNumber| . FACTRN)
    (|File| . FILE)
    (|FileName| . FNAME)
    (|FiniteAbelianMonoidRingFunctions2| . FAMR2)
diff --git a/books/ps/v104factorisationoverpseudoalgebraicclosureofrationalnumber.ps b/books/ps/v104factorisationoverpseudoalgebraicclosureofrationalnumber.ps
new file mode 100644
index 0000000..c536b77
--- /dev/null
+++ b/books/ps/v104factorisationoverpseudoalgebraicclosureofrationalnumber.ps
@@ -0,0 +1,268 @@
+%!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 116 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 80 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% FACTRN
+gsave
+[ /Rect [ 0 72 72 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=FACTRN) >>
+  /Subtype /Link
+/ANN pdfmark
+0.939 0.733 1.000 nodecolor
+newpath 72 108 moveto
+0 108 lineto
+0 72 lineto
+72 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.939 0.733 1.000 nodecolor
+newpath 72 108 moveto
+0 108 lineto
+0 72 lineto
+72 72 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+8 85.9 moveto 56 (FACTRN) alignedtext
+grestore
+% PFECAT
+gsave
+[ /Rect [ 1 0 71 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >>
+  /Subtype /Link
+/ANN pdfmark
+0.606 0.733 1.000 nodecolor
+newpath 71 36 moveto
+1 36 lineto
+1 0 lineto
+71 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.606 0.733 1.000 nodecolor
+newpath 71 36 moveto
+1 36 lineto
+1 0 lineto
+71 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+9 13.9 moveto 54 (PFECAT) alignedtext
+grestore
+% FACTRN->PFECAT
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 36 72 moveto
+36 64 36 55 36 46 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 39.5 46 moveto
+36 36 lineto
+32.5 46 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 39.5 46 moveto
+36 36 lineto
+32.5 46 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 116 152
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index 2e69382..c0c102e 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,9 @@
+20100508 tpd src/axiom-website/patches.html 20100508.01.tpd.patch
+20100508 tpd v104factorisationoverpseudoalgebraicclosureofrationalnumber.ps add
+20100508 tpd src/algebra/Makefile add FACTRN test and help
+20100508 tpd books/bookvol5 add FACTRN
+20100508 tpd books/bookvol10.4 add FACTRN
+20100508 tpd books/bookvol10.2 fix PseudoAlgebraicClosureOfPerfectFieldCategory
 20100507 tpd src/axiom-website/patches.html 20100507.01.tpd.patch
 20100507 tpd src/algebra/Makefile document and test Interval
 20100507 tpd books/bookvol10.3 document and test Interval
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 27138dd..3207f8e 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -8732,13 +8732,13 @@ LAYER11=\
 
 @
 \subsection{Layer12}
-Depends on: DIOPS DPOLCAT FINRALG FRAC RMATCAT RRCC UPXSCAT FFSQFR\\
+Depends on: DIOPS DPOLCAT FINRALG FRAC RMATCAT RRCC UPXSCAT FFSQFR PACRATC\\
 Used by next layer: DIAGG FRAMALG MDAGG SMATCAT UPXSCCA
 <<layer12>>=
 
 LAYER12=\
   ${OUT}/DIAGG.o   ${OUT}/DIAGG-.o   ${OUT}/DSMP.o     ${OUT}/EXPUPXS.o \
-  ${OUT}/FFFACTSE.o \
+  ${OUT}/FACTRN.o  ${OUT}/FFFACTSE.o \
   ${OUT}/FRAMALG.o ${OUT}/FRAMALG-.o ${OUT}/MDAGG.o    ${OUT}/ODPOL.o   \
   ${OUT}/PLOT.o    ${OUT}/RMCAT2.o   ${OUT}/ROIRC.o    ${OUT}/SDPOL.o   \
   ${OUT}/SMATCAT.o ${OUT}/SMATCAT-.o ${OUT}/TUBETOOL.o ${OUT}/UPXSCCA.o \
@@ -8809,6 +8809,24 @@ LAYER12=\
 /*"EXPUPXS" -> {"EVALAB"; "IEVALAB"; "DIFEXT"; "FLINEXP"; "PATAB"; "FPATMAB"}*/
 /*"EXPUPXS" -> {"TYPE"; "PFECAT"}*/
 
+"FACTRN" [color="#FF4488",href="bookvol10.4.pdf#nameddest=FACTRN"]
+"FACTRN" -> "PACRATC"
+/*"FACTRN" -> {"PACPERC"; "FIELD"; "EUCDOM"; "PID"; "GCDDOM"}*/
+/*"FACTRN" -> {"INTDOM"; "COMRING"; "RING"; "RNG"; "ABELGRP"; "CABMON"}*/
+/*"FACTRN" -> {"ABELMON"; "ABELSG"; "SETCAT"; "BASTYPE"; "KOERCE"; "SGROUP"}*/
+/*"FACTRN" -> {"MONOID"; "LMODULE"; "BMODULE"; "RMODULE"; "ALGEBRA"}*/
+/*"FACTRN" -> {"MODULE"; "ENTIRER"; "UFD"; "DIVRING"; "CHARZ"; "RETRACT"}*/
+/*"FACTRN" -> {"XF"; "VSPACE"; "FPC"; "CHARNZ"; "FINITE"; "UPOLYC"}*/
+/*"FACTRN" -> {"POLYCAT"; "PDRING"; "FAMR"; "AMR"; "FRETRCT"; "EVALAB"}*/
+/*"FACTRN" -> {"IEVALAB"; "FLINEXP"; "LINEXP"; "ORDSET"; "KONVERT"; "PATMAB"}*/
+/*"FACTRN" -> {"PFECAT"}*/
+/*"FACTRN" -> {"ELTAB"; "DIFRING"; "DIFEXT"; "STEP"; "LSAGG"; "STAGG"}*/
+/*"FACTRN" -> {"URAGG" "RCAGG"; "HOAGG"; "AGG"; "TYPE"; "LNAGG"; "IXAGG"}*/
+/*"FACTRN" -> {"ELTAGG" "CLAGG"; "FLAGG"; "ELAGG"; "OM"; "INT"; "LIST"} */
+/*"FACTRN" -> {"ILIST" "LSAGG-"; "INS"; "OINTDOM"; "ORDRING"; "OAGROUP"}*/
+/*"FACTRN" -> {"OCAMON" "OAMON"; "OASGP"; "CFCAT"; "REAL"; "QFCAT"}*/
+/*"FACTRN" -> {"FEVALAB""PATAB"; "FPATMAB"}*/
+
 "FFFACTSE" [color="#FF4488",href="bookvol10.4.pdf#nameddest=FFFACTSE"]
 /*"FFFACTSE" -> {"FFIELDC"; "FPC"; "FIELD"; "EUCDOM"; "PID"}*/
 /*"FFFACTSE" -> {"GCDDOM"; "INTDOM"; "COMRING"; "RING"; "RNG"}*/
@@ -15891,6 +15909,21 @@ ${MID}/PACRATC.nrlib/code.o: ${MID}/PACRATC.spad
 	      | ${INTERPSYS} >${TMP}/trace ; \
 	   fi )
 @
+<<newcode>>=
+
+FACTRNDEPS = PACPERC PACRATC
+
+${MID}/FACTRN.nrlib/code.o: ${MID}/FACTRN.spad
+	@echo P3 making ${MID}/FACTRN.nrlib/code.o from ${MID}/FACTRN.spad
+	@ (cd ${MID} ; \
+	   if [ -z "${NOISE}" ] ; then \
+	    echo -e ")lib ${FACTRNDEPS} \n )co FACTRN.spad" \
+              | ${INTERPSYS} ; \
+           else \
+	    echo -e ")lib ${FACTRNDEPS} \n )co FACTRN.spad" \
+	      | ${INTERPSYS} >${TMP}/trace ; \
+	   fi )
+@
 
 \section{Broken Files}
 These files are Aldor files
@@ -16627,6 +16660,7 @@ SPADHELP=\
  ${HELP}/EuclideanGroebnerBasisPackage.help \
  ${HELP}/Factored.help \
  ${HELP}/FactoredFunctions2.help \
+ ${HELP}/FactorisationOverPseudoAlgebraicClosureOfRationalNumber.help \
  ${HELP}/File.help \
  ${HELP}/FileName.help \
  ${HELP}/FiniteFieldFactorizationWithSizeParseBySideEffect.help \
@@ -16790,6 +16824,7 @@ REGRESS= \
  EuclideanGroebnerBasisPackage.regress \
  Factored.regress \
  FactoredFunctions2.regress \
+ FactorisationOverPseudoAlgebraicClosureOfRationalNumber.regress \
  File.regress \
  FileName.regress \
  FiniteFieldFactorizationWithSizeParseBySideEffect.regress \
@@ -17236,6 +17271,26 @@ ${HELP}/FactoredFunctions2.help: ${BOOKS}/bookvol10.4.pamphlet
             >${INPUT}/FactoredFunctions2.input
 	@echo "FactoredFunctions2 (FR2)" >>${HELPFILE}
 
+${HELP}/FactorisationOverPseudoAlgebraicClosureOfRationalNumber.help: \
+         ${BOOKS}/bookvol10.4.pamphlet
+	@echo 7285 create \
+            FactorisationOverPseudoAlgebraicClosureOfRationalNumber.help from \
+            ${BOOKS}/bookvol10.4.pamphlet
+	@${TANGLE} \
+            -R"FactorisationOverPseudoAlgebraicClosureOfRationalNumber.help" \
+            ${BOOKS}/bookvol10.4.pamphlet \
+          >${HELP}/FactorisationOverPseudoAlgebraicClosureOfRationalNumber.help
+	@cp \
+         ${HELP}/FactorisationOverPseudoAlgebraicClosureOfRationalNumber.help \
+         ${HELP}/FACTRN.help
+	@${TANGLE} \
+         -R"FactorisationOverPseudoAlgebraicClosureOfRationalNumber.input" \
+         ${BOOKS}/bookvol10.4.pamphlet \
+        >${INPUT}/FactorisationOverPseudoAlgebraicClosureOfRationalNumber.input
+	@echo \
+          "FactorisationOverPseudoAlgebraicClosureOfRationalNumber (FACTRN)" \
+           >>${HELPFILE}
+
 ${HELP}/File.help: ${BOOKS}/bookvol10.3.pamphlet
 	@echo 7290 create File.help from ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"File.help" ${BOOKS}/bookvol10.3.pamphlet \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index ead9def..6e39d03 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2673,5 +2673,7 @@ books/bookvol10.2 PseudoAlgebraicClosureOfRationalNumberCategory added<br/>
 src/axiom-website/documentation.html quote Bill Hart on LP<br/>
 <a href="patches/20100507.01.tpd.patch">20100507.01.tpd.patch</a>
 books/bookvol10.3 document and test Interval<br/>
+<a href="patches/20100508.01.tpd.patch">20100508.01.tpd.patch</a>
+books/bookvol10.2 fix PseudoAlgebraicClosureOfPerfectFieldCategory<br/>
  </body>
 </html>
