diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index 6703c8d..42c5029 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -26765,6 +26765,155 @@ FiniteFieldSolveLinearPolynomialEquation(F:FiniteFieldCategory,
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{package FFSQFR FiniteFieldSquareFreeDecomposition}
+<<FiniteFieldSquareFreeDecomposition.input>>=
+)set break resume
+)sys rm -f FiniteFieldSquareFreeDecomposition.output
+)spool FiniteFieldSquareFreeDecomposition.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show FiniteFieldSquareFreeDecomposition
+--R FiniteFieldSquareFreeDecomposition(K: FiniteFieldCategory,PolK: UnivariatePolynomialCategory K)  is a package constructor
+--R Abbreviation for FiniteFieldSquareFreeDecomposition is FFSQFR 
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.4.pamphlet to see algebra source code for FFSQFR 
+--R
+--R------------------------------- Operations --------------------------------
+--R Musser : PolK -> Factored PolK        Yun : PolK -> Factored PolK
+--R
+--E 1
+
+)spool
+
+@
+<<FiniteFieldSquareFreeDecomposition.help>>=
+====================================================================
+FiniteFieldSquareFreeDecomposition examples
+====================================================================
+
+See also:
+
+o )show FiniteFieldSquareFreeDecomposition
+
+@
+\pagehead{FiniteFieldSquareFreeDecomposition}{FFSQFR}
+\pagepic{ps/v104finitefieldsquarefreedecomposition.ps}{FFSQFR}{1.00}
+
+{\bf Exports:}\\
+\cross{FFSQFR}{PolK} 
+\cross{FFSQFR}{Yun} 
+
+<<package FFSQFR FiniteFieldSquareFreeDecomposition>>=
+)abbrev package FFSQFR FiniteFieldSquareFreeDecomposition
+++ Author: Patrice Naudin and Claude Quitte
+++ Date Created: September 1996
+++ Date Last Updated: April 2010 by Tim Daly
+++ Description:
+++ Part of the package for Algebraic Function Fields in one variable (PAFF)
+FiniteFieldSquareFreeDecomposition (K : FiniteFieldCategory,
+                         PolK : UnivariatePolynomialCategory (K)) : with
+    Musser : PolK -> Factored (PolK)
+    Yun    : PolK -> Factored (PolK)
+  == add
+    
+    p : NonNegativeInteger := characteristic()$K
+    tableOfSquareFreePolynomials := Table (Integer, PolK)
+    oneYunStep2uple := Record (
+       simpleDecomposition : tableOfSquareFreePolynomials,
+        gcdOfArgumentAndDerivative : PolK
+         )
+    
+    rawMusser (P : PolK) : Factored(PolK) ==
+        Q : PolK := gcd(P, D(P))
+        A : PolK := P quo Q
+        decomposition : Factored(PolK) := 1
+        B : PolK
+    
+        for i in 1 .. repeat
+            if i rem p ^= 0 then
+                B := gcd(A, Q)
+                decomposition := sqfrFactor(A quo B, i) * decomposition
+                if B = 1 then leave
+                A := B
+            Q := Q quo A
+        if Q ^= 1 then
+           decomposition:=decomposition * rawMusser (charthRoot(Q)::PolK) ** p
+        return decomposition
+    
+    Musser (P : PolK) : Factored(PolK) ==
+        degree (P) = 0 => return P::Factored(PolK)
+        if (lcP : K := leadingCoefficient(P)) ^= 1 then P := inv(lcP) * P
+        return lcP::PolK * rawMusser (P)
+    
+    oneYunStep (P : PolK) : oneYunStep2uple ==
+        C : PolK := D (P) ;  A : PolK := gcd(P, C)
+        gcd_P_P' : PolK := A ;  B : PolK := P quo A
+        result : tableOfSquareFreePolynomials := empty ()
+        i : Integer := 1
+    
+        repeat
+            C := (C quo A) - D(B)
+            if C = 0 then leave
+            A := gcd(B, C)
+            if A ^= 1 then
+                result (i) := A
+                B := B quo A
+            i := i + 1
+        result (i) := B
+        return [result, gcd_P_P']
+    
+    rawYun (P : PolK) : tableOfSquareFreePolynomials ==
+        u : oneYunStep2uple := oneYunStep (P)
+        gcd_P_P' : PolK := u.gcdOfArgumentAndDerivative
+        U : tableOfSquareFreePolynomials := u.simpleDecomposition
+    
+        R : PolK := gcd_P_P'
+        for j in indices (U) repeat
+            for k in 1 .. j-1 repeat
+                R := R quo U(j)
+        if R = 1 then return U
+        V : tableOfSquareFreePolynomials := rawYun (charthRoot (R)::PolK)
+    
+        result : tableOfSquareFreePolynomials := empty ()
+        gcd_Uj_Vk : PolK ;
+        for k in indices (V) repeat    -- boucle 1
+        
+            for j in  indices (U) | not (U(j) = 1)  repeat    -- boucle 2
+                gcd_Uj_Vk := gcd (U(j), V(k))
+                if not (gcd_Uj_Vk = 1) then
+                    result (j+p*k) := gcd_Uj_Vk
+                    V (k) := V(k) quo gcd_Uj_Vk
+                    U (j) := U(j) quo gcd_Uj_Vk
+                if V(k) = 1 then leave
+        
+            if not (V(k) = 1) then
+                result (p*k):= V (k)
+        
+        for j in  indices (U) | not (U(j) = 1)  repeat    -- boucle 3
+            result (j) := U (j)
+        
+        return result
+    
+    Yun(P : PolK) : Factored(PolK) ==
+        degree (P) = 0  => P::Factored(PolK)
+        if (lcP := leadingCoefficient (P)) ^= 1 then P := inv (lcP)*P
+        U : tableOfSquareFreePolynomials := rawYun (P)
+        PFactored : Factored(PolK) := 1
+        for i in indices (U) repeat
+            PFactored := PFactored * sqfrFactor (U (i), i)
+        return (lcP::PolK) * PFactored
+    
+@
+<<FFSQFR.dotabb>>=
+"FFSQFR" [color="#FF4488",href="bookvol10.4.pdf#nameddest=FFSQFR"]
+"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"]
+"FFSQFR" -> "PFECAT"
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{package FLAGG2 FiniteLinearAggregateFunctions2}
 \pagehead{FiniteLinearAggregateFunctions2}{FLAGG2}
 \pagepic{ps/v104finitelinearaggregatefunctions2.ps}{FLAGG2}{1.00}
@@ -153860,6 +154009,7 @@ ZeroDimensionalSolvePackage(R,ls,ls2): Exports == Implementation where
 <<package FFPOLY FiniteFieldPolynomialPackage>>
 <<package FFPOLY2 FiniteFieldPolynomialPackage2>>
 <<package FFSLPE FiniteFieldSolveLinearPolynomialEquation>>
+<<package FFSQFR FiniteFieldSquareFreeDecomposition>>
 <<package FLAGG2 FiniteLinearAggregateFunctions2>>
 <<package FLASORT FiniteLinearAggregateSort>>
 <<package FSAGG2 FiniteSetAggregateFunctions2>>
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 1a58ea4..344afd6 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -23917,6 +23917,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
    (|FiniteFieldPolynomialPackage2| . FFPOLY2)
    (|FiniteFieldNormalBasis| . FFNB)
    (|FiniteFieldHomomorphisms| . FFHOM)
+   (|FiniteFieldSquareFreeDecomposition| . FFSQFR)
    (|FiniteLinearAggregateFunctions2| . FLAGG2)
    (|FiniteLinearAggregateSort| . FLASORT)
    (|FiniteSetAggregateFunctions2| . FSAGG2)
@@ -24181,6 +24182,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
    (|UnivariatePolynomialCommonDenominator| . UPCDEN)
    (|UnivariatePolynomialFunctions2| . UP2)
    (|UnivariatePolynomialMultiplicationPackage| . UPMP)
+   (|UnivariateTaylorSeriesCZero| . UTSZ)
    (|UnivariatePuiseuxSeriesFunctions2| . UPXS2)
    (|UnivariateTaylorSeriesFunctions2| . UTS2)
    (|UniversalSegment| . UNISEG)
diff --git a/changelog b/changelog
index 01d63cd..bef0167 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+20100419 tpd src/axiom-website/patches.html 20100419.03.tpd.patch
+20100419 tpd src/algebra/Makefile help and regression tests for FFSQFR
+20100419 tpd books/bookvol5 expose FiniteFieldSquareFreeDecomposition
+20100419 tpd books/bookvol10.4 add FiniteFieldSquareFreeDecomposition
 20100419 tpd src/axiom-website/patches.html 20100419.02.tpd.patch
 20100419 tpd books/bookvol10.1 rename and align biblio with bookvolbib
 20100419 tpd books/bookvolbib rename and align biblio with bookvol10.1
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 14ff66f..30afa87 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -5147,7 +5147,8 @@ LAYER11=\
   ${OUT}/E04GCFA.o  ${OUT}/E04JAFA.o  ${OUT}/E04UCFA.o  ${OUT}/FACUTIL.o  \
   ${OUT}/FF.o       ${OUT}/FFCG.o     ${OUT}/FFCGX.o    ${OUT}/FFFG.o     \
   ${OUT}/FFFGF.o    ${OUT}/FFHOM.o    ${OUT}/FFNB.o     ${OUT}/FFNBX.o    \
-  ${OUT}/FFPOLY.o   ${OUT}/FFX.o      ${OUT}/FFSLPE.o   ${OUT}/FGLMICPK.o \
+  ${OUT}/FFPOLY.o   ${OUT}/FFSQFR.o  \
+  ${OUT}/FFX.o      ${OUT}/FFSLPE.o   ${OUT}/FGLMICPK.o \
   ${OUT}/FILE.o     ${OUT}/FINAALG.o  ${OUT}/FINAALG-.o ${OUT}/FINRALG.o  \
   ${OUT}/FINRALG-.o ${OUT}/FFF.o      ${OUT}/FLOATRP.o  ${OUT}/FNAME.o    \
   ${OUT}/FOP.o      ${OUT}/FORMULA.o  ${OUT}/FORT.o     ${OUT}/FRAC.o     \
@@ -6059,6 +6060,22 @@ LAYER11=\
 /*"FFPOLY" -> {"CLAGG-"; "HOAGG-"; "ORDSET-"; "AGG-"; "ELTAGG-"}*/
 /*"FFPOLY" -> {"SETCAT-"; "BASTYPE-"}*/
 
+"FFSQFR" [color="#FF4488",href="bookvol10.4.pdf#nameddest=FFSQFR"]
+/*"FFSQFR" -> {"FFIELDC"; "FPC"; "FIELD"; "EUCDOM"; "PID"; "GCDDOM"}*/
+/*"FFSQFR" -> {"INTDOM"; "COMRING"; "RING"; "RNG"; "ABELGRP"; "CABMON"}*/
+/*"FFSQFR" -> {"ABELMON"; "ABELSG"; "SETCAT"; "BASTYPE"; "KOERCE"; "SGROUP"}*/
+/*"FFSQFR" -> {"MONOID"; "LMODULE"; "BMODULE"; "RMODULE"; "ALGEBRA"}*/ 
+/*"FFSQFR" -> {"MODULE"; "ENTIRER"; "UFD"; "DIVRING"; "CHARNZ"; "FINITE"}*/
+/*"FFSQFR" -> {"STEP"; "DIFRING"; "UPOLYC"; "POLYCAT"; "PDRING"; "FAMR"}*/
+/*"FFSQFR" -> {"AMR"; "CHARZ"; "FRETRCT"; "RETRACT"; "EVALAB"; "IEVALAB"}*/
+/*"FFSQFR" -> {"FLINEXP"; "LINEXP"; "ORDSET"; "KONVERT"; "PATMAB"}*/
+"FFSQFR" -> "PFECAT" 
+/*"FFSQFR" -> {"ELTAB"; "DIFEXT"; "INS"; "OINTDOM"; "ORDRING"; "OAGROUP"}*/
+/*"FFSQFR" -> {"OCAMON"; "OAMON"; "OASGP"; "CFCAT"; "REAL"; "SINT"; "NNI"}*/
+/*"FFSQFR" -> {"INT"; "BOOLEAN"; "INS-"; "EUCDOM-"; "UFD-"; "GCDDOM-"}*/
+/*"FFSQFR" -> {"INTDOM-"; "ALGEBRA-"; "DIFRING-"; "ORDRING-"; "MODULE-"}*/
+/*"FFSQFR" -> {"RING-"; "ABELGRP-"}*/
+
 "FFX" [color="#88FF44",href="bookvol10.3.pdf#nameddest=FFX"]
 "FFX" -> "FAXF"
 /*"FFX" -> {"XF"; "FIELD"; "EUCDOM"; "PID"; "GCDDOM"; "INTDOM"; "COMRING"}*/
@@ -15123,6 +15140,7 @@ LAYER18=\
 "UTS" -> "ACFS"
 /*"UTS" -> {"ACF"; "FS"; "ES"; "FRETRCT"; "GROUP"; "OAMONS"}*/
 
+"UTSZ" [color="#88FF44",href="bookvol10.3.pdf#nameddest=UTSZ"]
 /*"UTSZ" -> {"UTSCAT"; "UPSCAT"; "PSCAT"; "AMR"; "RING"; "RNG"; "ABELGRP"}*/
 /*"UTSZ" -> {"CABMON"; "ABELMON"; "ABELSG"; "SETCAT"; "BASTYPE"; "KOERCE"}*/
 /*"UTSZ" -> {"SGROUP"; "MONOID"; "LMODULE"; "BMODULE"; "RMODULE"}*/
@@ -16470,6 +16488,7 @@ SPADHELP=\
  ${HELP}/FactoredFunctions2.help \
  ${HELP}/File.help \
  ${HELP}/FileName.help \
+ ${HELP}/FiniteFieldSquareFreeDecomposition.help \
  ${HELP}/FlexibleArray.help \
  ${HELP}/Float.help \
  ${HELP}/Fraction.help \
@@ -16626,6 +16645,7 @@ REGRESS= \
  FactoredFunctions2.regress \
  File.regress \
  FileName.regress \
+ FiniteFieldSquareFreeDecomposition.regress \
  FlexibleArray.regress \
  Float.regress \
  Fraction.regress \
@@ -17081,6 +17101,18 @@ ${HELP}/FileName.help: ${BOOKS}/bookvol10.3.pamphlet
             >${INPUT}/FileName.input
 	@echo "FileName (FNAME)" >>${HELPFILE}
 
+${HELP}/FiniteFieldSquareFreeDecomposition.help: ${BOOKS}/bookvol10.4.pamphlet
+	@echo 7305 create FiniteFieldSquareFreeDecomposition.help from \
+           ${BOOKS}/bookvol10.4.pamphlet
+	@${TANGLE} -R"FiniteFieldSquareFreeDecomposition.help" \
+           ${BOOKS}/bookvol10.4.pamphlet \
+           >${HELP}/FiniteFieldSquareFreeDecomposition.help
+	@cp ${HELP}/FiniteFieldSquareFreeDecomposition.help ${HELP}/FFSQFR.help
+	@${TANGLE} -R"FiniteFieldSquareFreeDecomposition.input" \
+            ${BOOKS}/bookvol10.4.pamphlet \
+            >${INPUT}/FiniteFieldSquareFreeDecomposition.input
+	@echo "FiniteFieldSquareFreeDecomposition (FFSQFR)" >>${HELPFILE}
+
 ${HELP}/FlexibleArray.help: ${BOOKS}/bookvol10.3.pamphlet
 	@echo 7310 create FlexibleArray.help from ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"FlexibleArray.help" ${BOOKS}/bookvol10.3.pamphlet \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 9611744..35adcd6 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2641,5 +2641,7 @@ books/bookvolbib add citation SDJ07<br/>
 books/bookvolbib Du95, Ga95, Ha95, Ha96, HI96, HL95, LR88, St93<br/>
 <a href="patches/20100419.02.tpd.patch">20100419.02.tpd.patch</a>
 books/bookvolbib,bookvol1 rename and align biblio sections<br/>
+<a href="patches/20100419.03.tpd.patch">20100419.03.tpd.patch</a>
+books/bookvol10.4 add FiniteFieldSquareFreeDecomposition<br/>
  </body>
 </html>
