diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index e61c52c..a6ec05e 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -24686,7 +24686,185 @@ FactoringUtilities(E,OV,R,P) : C == T where
 "FACUTIL" -> "PFECAT"
 
 @
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{package FACTEXT FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber}
+<<FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber.input>>=
+)set break resume
+)sys rm -f FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber.output
+)spool FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber
+--R FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber K: PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory  is a package constructor
+--R Abbreviation for FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber is FACTEXT 
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.4.pamphlet to see algebra source code for FACTEXT 
+--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)
+@
+<<FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber.help>>=
+====================================================================
+FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber examples
+====================================================================
+
+See Also:
+o )show FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber
+
+@
+\pagehead{FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber}{FACTEXT}
+\pagepic{ps/v104factorisationoverpseudoalgebraicclosureofalgextofrationalnumber.ps}{FACTEXT}{1.00}
+
+{\bf Exports:}\\
+\begin{tabular}{ll}
+\cross{FACTEXT}{factor} &
+\cross{FACTEXT}{factorSqFree}
+\end{tabular}
+
+<<package FACTEXT FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber>>=
+)abbrev package FACTEXT FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber
+++ 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
+FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber(K):Exports == Implementation where
+  K:PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory
+  SUP     ==> SparseUnivariatePolynomial
+  Q       ==> PseudoAlgebraicClosureOfRationalNumber
+  NNI     ==> NonNegativeInteger
+  UP      ==> SUP(K)
+  UPUP    ==> SUP(SUP(K))
+  FACTRNQ ==> FactorisationOverPseudoAlgebraicClosureOfRationalNumber(Q)
+
+  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)
+      aa:Q
+      ground? a => 
+        aa:= retract(a)@Q
+        ratPol:= up2Rat pol 
+        frRat2frUP factor(ratPol,aa)$FACTRNQ::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 )
+
+@
+<<FACTEXT.dotabb>>=
+"FACTEXT" [color="#FF4488",href="bookvol10.4.pdf#nameddest=FACTEXT"]
+"PACEXTC" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PACEXTC"]
+"FACTEXT" -> "PACEXTC"
+
+@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{package FACTRN FactorisationOverPseudoAlgebraicClosureOfRationalNumber}
 <<FactorisationOverPseudoAlgebraicClosureOfRationalNumber.input>>=
@@ -154574,6 +154752,7 @@ ZeroDimensionalSolvePackage(R,ls,ls2): Exports == Implementation where
 <<package FR2 FactoredFunctions2>>
 <<package FRUTIL FactoredFunctionUtilities>>
 <<package FACUTIL FactoringUtilities>>
+<<package FACTEXT FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber>>
 <<package FACTRN FactorisationOverPseudoAlgebraicClosureOfRationalNumber>>
 <<package FGLMICPK FGLMIfCanPackage>>
 <<package FORDER FindOrderFinite>>
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 8afa8d1..c3e35e8 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)
+  (|FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber| . FACTEXT)
    (|FactorisationOverPseudoAlgebraicClosureOfRationalNumber| . FACTRN)
    (|File| . FILE)
    (|FileName| . FNAME)
diff --git a/books/ps/v104factorisationoverpseudoalgebraicclosureofalgextofrationalnumber.ps b/books/ps/v104factorisationoverpseudoalgebraicclosureofalgextofrationalnumber.ps
new file mode 100644
index 0000000..0f783ee
--- /dev/null
+++ b/books/ps/v104factorisationoverpseudoalgebraicclosureofalgextofrationalnumber.ps
@@ -0,0 +1,18 @@
+.if !dPS .ds PS
+.if !dPE .ds PE
+.lf 1 -
+digraph pic {
+ fontsize=10;
+ bgcolor=yellow
+ node [shape=box, color=lightblue, style=filled];
+
+"FACTEXT" [color="#FF4488",href="bookvol10.4.pdf#nameddest=FACTEXT"]
+"PACEXTC" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PACEXTC"]
+"FACTEXT" -> "PACEXTC"
+
+}
+
+
+
+
+
diff --git a/changelog b/changelog
index a07a887..b3714d4 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+20100510 tpd src/axiom-website/patches.html 20100510.02.tpd.patch
+20100510 tpd src/algebra/Makefile add FACTEXT
+20100510 tpd books/bookvol5 expose FACTEXT
+20100510 tpd books/bookvol10.4 add FACTEXT	
+20100510 tpd v104factorisationoverpseudoalgebraicclosureofalgextofrationalnumber.ps
 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
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 11e8c88..0d641a3 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -14512,6 +14512,7 @@ Used in next layer: EXPRSOL SFRTCAT
 LAYER18=\
   ${OUT}/DEFINTEF.o ${OUT}/DEFINTRF.o ${OUT}/DFINTTLS.o ${OUT}/EFULS.o    \
   ${OUT}/ESCONT.o   ${OUT}/EXPR.o     ${OUT}/EXPRSOL.o  ${OUT}/EXPR2UPS.o \
+  ${OUT}/FACTEXT.o  \
   ${OUT}/FDIV.o     ${OUT}/FSCINT.o   ${OUT}/FSINT.o    ${OUT}/FS2EXPXP.o \
   ${OUT}/GSERIES.o  ${OUT}/HELLFDIV.o ${OUT}/INVLAPLA.o ${OUT}/IR2F.o     \
   ${OUT}/IRRF2F.o   ${OUT}/LAPLACE.o  ${OUT}/LIMITPS.o  ${OUT}/LODEEF.o   \
@@ -14685,6 +14686,21 @@ LAYER18=\
 /*"EXPR2UPS" -> {"CHAR"; "SINT"; "OUTFORM"; "LIST"; "INT"; "PRIMARR"}*/
 /*"EXPR2UPS" -> {"A1AGG-"; "ISTRING"; "NNI"; "ILIST"; "UPXSCCA"; "UPXSCAT"}*/
 
+"FACTEXT" [color="#FF4488",href="bookvol10.4.pdf#nameddest=FACTEXT"]
+"FACTEXT" -> "PACEXTC"
+/*"FACTEXT" -> {"PACRATC"; "PACPERC"; "FIELD"; "EUCDOM"; "PID"; "GCDDOM"}*/
+/*"FACTEXT" -> {"INTDOM"; "COMRING"; "RING"; "RNG"; "ABELGRP"; "CABMON"}*/
+/*"FACTEXT" -> {"ABELMON"; "ABELSG"; "SETCAT"; "BASTYPE"; "KOERCE"; "SGROUP"}*/
+/*"FACTEXT" -> {"MONOID"; "LMODULE"; "BMODULE"; "RMODULE"; "ALGEBRA"}*/
+/*"FACTEXT" -> {"MODULE"; "ENTIRER"; "UFD"; "DIVRING"; "CHARZ"; "RETRACT"}*/
+/*"FACTEXT" -> {"XF"; "VSPACE"; "FPC"; "CHARNZ"; "FINITE"; "UPOLYC"}*/
+/*"FACTEXT" -> {"POLYCAT"; "PDRING"; "FAMR"; "AMR"; "FRETRCT"; "EVALAB"}*/
+/*"FACTEXT" -> {"IEVALAB"; "FLINEXP"; "LINEXP"; "ORDSET"; "KONVERT"}*/
+/*"FACTEXT" -> {"PATMAB"; "PFECAT"; "ELTAB"; "DIFRING"; "DIFEXT"; "STEP"}*/
+/*"FACTEXT" -> {"LSAGG"; "STAGG"; "URAGG"; "RCAGG"; "HOAGG"; "AGG"; "TYPE"}*/
+/*"FACTEXT" -> {"LNAGG"; "IXAGG"; "ELTAGG"; "CLAGG"; "FLAGG"; "ELAGG"; "OM"}*/
+/*"FACTEXT" -> {"INT"; "LIST"; "ILIST"; "LSAGG-"; "NNI"}*/
+
 "FDIV" [color="#88FF44",href="bookvol10.3.pdf#nameddest=FDIV"]
 "FDIV" -> "FDIVCAT"
 /*"FDIV" -> {"ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"; "SETCAT"}*/
@@ -16026,6 +16042,21 @@ ${MID}/PACEXTC.nrlib/code.o: ${MID}/PACEXTC.spad
 	      | ${INTERPSYS} >${TMP}/trace ; \
 	   fi )
 @
+<<newcode>>=
+
+FACTEXTDEPS = PACPERC PACRATC PACEXTC PACRAT FACTRN
+
+${MID}/FACTEXT.nrlib/code.o: ${MID}/FACTEXT.spad
+	@echo P3 making ${MID}/FACTEXT.nrlib/code.o from ${MID}/FACTEXT.spad
+	@ (cd ${MID} ; \
+	   if [ -z "${NOISE}" ] ; then \
+	    echo -e ")lib ${FACTEXTDEPS} \n )co FACTEXT.spad" \
+              | ${INTERPSYS} ; \
+           else \
+	    echo -e ")lib ${FACTEXTDEPS} \n )co FACTEXT.spad" \
+	      | ${INTERPSYS} >${TMP}/trace ; \
+	   fi )
+@
 
 \section{Broken Files}
 These files are Aldor files
@@ -16762,6 +16793,7 @@ SPADHELP=\
  ${HELP}/EuclideanGroebnerBasisPackage.help \
  ${HELP}/Factored.help \
  ${HELP}/FactoredFunctions2.help \
+ ${HELP}/FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber.help \
  ${HELP}/FactorisationOverPseudoAlgebraicClosureOfRationalNumber.help \
  ${HELP}/File.help \
  ${HELP}/FileName.help \
@@ -16929,6 +16961,7 @@ REGRESS= \
  EuclideanGroebnerBasisPackage.regress \
  Factored.regress \
  FactoredFunctions2.regress \
+ FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber.regress \
  FactorisationOverPseudoAlgebraicClosureOfRationalNumber.regress \
  File.regress \
  FileName.regress \
@@ -17379,6 +17412,26 @@ ${HELP}/FactoredFunctions2.help: ${BOOKS}/bookvol10.4.pamphlet
             >${INPUT}/FactoredFunctions2.input
 	@echo "FactoredFunctions2 (FR2)" >>${HELPFILE}
 
+${HELP}/FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber.help: \
+         ${BOOKS}/bookvol10.4.pamphlet
+	@echo 7283 create \
+    FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber.help from \
+            ${BOOKS}/bookvol10.4.pamphlet
+	@${TANGLE} \
+    -R"FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber.help" \
+            ${BOOKS}/bookvol10.4.pamphlet \
+  >${HELP}/FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber.help
+	@cp \
+ ${HELP}/FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber.help \
+         ${HELP}/FACTEXT.help
+	@${TANGLE} \
+    -R"FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber.input" \
+         ${BOOKS}/bookvol10.4.pamphlet \
+>${INPUT}/FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber.input
+	@echo \
+ "FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber (FACTEXT)" \
+           >>${HELPFILE}
+
 ${HELP}/FactorisationOverPseudoAlgebraicClosureOfRationalNumber.help: \
          ${BOOKS}/bookvol10.4.pamphlet
 	@echo 7285 create \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 9c0abf6..d06ccf4 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2681,5 +2681,7 @@ books/bookvol10.3 add PseudoAlgebraicClosureOfRationalNumber<br/>
 books/bookvol10.3 add PseudoAlgebraicClosureOfFiniteField<br/>
 <a href="patches/20100510.01.tpd.patch">20100510.01.tpd.patch</a>
 books/bookvol10.2 PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory<br/>
+<a href="patches/20100510.02.tpd.patch">20100510.02.tpd.patch</a>
+books/bookvol10.4 add FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber<br/>
  </body>
 </html>
