diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index 04b55de..b21478d 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -24722,7 +24722,7 @@ o )show FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber
 
 @
 \pagehead{FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber}{FACTEXT}
-\pagepic{ps/v104factorisationoverpseudoalgebraicclosureofalgextofrationalnumber.ps}{FACTEXT}{1.00}
+\pagepic{ps/v104factorisationoverpseudoalgebraicclosureofalgextofrationalnumber.eps}{FACTEXT}{1.00}
 
 {\bf Exports:}\\
 \begin{tabular}{ll}
@@ -55737,7 +55737,7 @@ o )show LinesOpPack
 
 @
 \pagehead{LinesOpPack}{LOP}
-\pagepic{ps/v104linesoppack.ps}{LOP}{1.00}
+\pagepic{ps/v104linesoppack.eps}{LOP}{1.00}
 
 {\bf Exports:}\\
 \begin{tabular}{lll}
@@ -123854,6 +123854,157 @@ PointsOfFiniteOrderTools(UP, UPUP): Exports == Implementation where
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+PLPKCRV PolynomialPackageForCurve
+\section{package PLPKCRV PolynomialPackageForCurve}
+<<PolynomialPackageForCurve.input>>=
+)set break resume
+)sys rm -f PolynomialPackageForCurve.output
+)spool PolynomialPackageForCurve.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show PolynomialPackageForCurve
+--R PolynomialPackageForCurve(K: Field,PolyRing: FiniteAbelianMonoidRing(K,E),E: DirectProductCategory(dim,NonNegativeInteger),dim: NonNegativeInteger,ProjPt: ProjectiveSpaceCategory K)  is a package constructor
+--R Abbreviation for PolynomialPackageForCurve is PLPKCRV 
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.4.pamphlet to see algebra source code for PLPKCRV 
+--R
+--R------------------------------- Operations --------------------------------
+--R eval : (PolyRing,ProjPt) -> K        
+--R minimalForm : (PolyRing,ProjPt) -> PolyRing
+--R minimalForm : (PolyRing,ProjPt,Integer) -> PolyRing
+--R multiplicity : (PolyRing,ProjPt) -> NonNegativeInteger
+--R multiplicity : (PolyRing,ProjPt,Integer) -> NonNegativeInteger
+--R pointInIdeal? : (List PolyRing,ProjPt) -> Boolean
+--R translateToOrigin : (PolyRing,ProjPt,Integer) -> PolyRing
+--R translateToOrigin : (PolyRing,ProjPt) -> PolyRing
+--R
+--E 1
+
+)spool
+)lisp (bye)
+@
+<<PolynomialPackageForCurve.help>>=
+====================================================================
+PolynomialPackageForCurve examples
+====================================================================
+
+See Also:
+o )show PolynomialPackageForCurve
+
+@
+\pagehead{PolynomialPackageForCurve}{PLPKCRV}
+\pagepic{ps/v104polynomialpackageforcurve.eps}{PLPKCRV}{1.00}
+
+{\bf Exports:}\\
+\begin{tabular}{lllll}
+\cross{PLPKCRV}{eval} &
+\cross{PLPKCRV}{minimalForm} &
+\cross{PLPKCRV}{multiplicity} &
+\cross{PLPKCRV}{pointInIdeal?} &
+\cross{PLPKCRV}{translateToOrigin} 
+\end{tabular}
+
+<<package PLPKCRV PolynomialPackageForCurve>>=
+)abbrev package PLPKCRV PolynomialPackageForCurve
+++ Author: Gaetan Hache
+++ Date Created: 17 nov 1992
+++ Date Last Updated: May 2010 by Tim Daly
+++ Description:  
+++ The following is part of the PAFF package
+PolynomialPackageForCurve(K,PolyRing,E,dim,ProjPt):Exp == Impl where
+  K:Field
+  dim:NonNegativeInteger
+  E   :  DirectProductCategory(dim,NonNegativeInteger)
+  PolyRing: FiniteAbelianMonoidRing(K,E) --   PolynomialCategory(K,E,OV)
+  ProjPt : ProjectiveSpaceCategory(K)
+
+  PackPoly ==> PackageForPoly(K,PolyRing,E,dim)
+
+  Exp ==>  with
+
+    pointInIdeal?: (List(PolyRing),ProjPt) -> Boolean
+      ++ pointInIdeal? test if the given point is in the algebraic set 
+      ++ defined by the given list of polynomials.
+
+    eval: (PolyRing,ProjPt) -> K
+      ++ eval returns the value at given point.
+
+    translateToOrigin: (PolyRing,ProjPt,Integer) -> PolyRing
+      ++ translateToOrigin translate the polynomial from the given point 
+      ++ to the origin
+
+    translateToOrigin: (PolyRing,ProjPt) -> PolyRing
+      ++ translateToOrigin translate the polynomial from the given point 
+      ++ to the origin
+
+    minimalForm: (PolyRing,ProjPt) -> PolyRing
+      ++ minimalForm returns the minimal form after translation to 
+      ++ the origin.
+
+    minimalForm: (PolyRing,ProjPt,Integer) -> PolyRing
+      ++ minimalForm returns the minimal form after translation to 
+      ++ the origin.
+
+    multiplicity: (PolyRing,ProjPt) -> NonNegativeInteger
+      ++ multiplicity returns the multiplicity of the polynomial at 
+      ++ given point.
+
+    multiplicity: (PolyRing,ProjPt,Integer) -> NonNegativeInteger
+      ++ multiplicity returns the multiplicity of the polynomial at 
+      ++ given point.
+
+  Impl ==> add
+
+    import PolyRing
+    import ProjPt
+    import PackPoly
+
+    translateToOrigin(pol,pt,nV)==
+        zero?(pt.nV) => error "Impossible de translater"
+	pt:=homogenize(pt,nV)
+	lpt:List K:=list(pt)$ProjPt
+	translate(pol,lpt,nV)
+	
+    pointInIdeal?(lstPol,pt)==
+      temp:Boolean:=true()$Boolean
+      for pol in lstPol repeat
+        temp:=(zero?(eval(pol,pt)) and temp)
+      temp
+
+    eval(f,pt)==
+      zero? f => 0
+      lpt:List(K) := list pt
+      dd:List NonNegativeInteger := entries degree f
+      lc:= leadingCoefficient f
+      ee:= reduce( "*" , [ p**e for p in lpt for e in dd | ^zero?(e)], 1$K)
+      lc * ee + eval( reductum f, pt) 
+
+    translateToOrigin(pol,pt)==
+      translateToOrigin(pol,pt,lastNonNull(pt))
+
+    multiplicity(crb,pt)==
+      degreeOfMinimalForm(translateToOrigin(crb,pt))
+
+    multiplicity(crb,pt,nV)==
+      degreeOfMinimalForm(translateToOrigin(crb,pt,nV))
+
+    minimalForm(crb,pt)==
+      minimalForm(translateToOrigin(crb,pt))
+
+    minimalForm(crb,pt,nV)==
+      minimalForm(translateToOrigin(crb,pt,nV))
+
+@
+<<PLPKCRV.dotabb>>=
+"PLPKCRV" [color="#FF4488",href="bookvol10.4.pdf#nameddest=PLPKCRV"]
+"DIRPCAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=DIRPCAT"]
+"PLPKCRV" -> "DIRPCAT"
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{package POLTOPOL PolToPol}
 \pagehead{PolToPol}{POLTOPOL}
 \pagepic{ps/v104poltopol.ps}{POLTOPOL}{1.00}
@@ -138132,7 +138283,7 @@ o )show RootsFindingPackage
 
 @
 \pagehead{RootsFindingPackage}{RFP}
-\pagepic{ps/v104rootsfindingpackage.ps}{RFP}{1.00}
+\pagepic{ps/v104rootsfindingpackage.eps}{RFP}{1.00}
 
 {\bf Exports:}\\
 \cross{RFP}{distinguishedCommonRootsOf}
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index d58d21c..857aba3 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -24105,6 +24105,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
    (|PolynomialDecomposition| . PDECOMP)
    (|PolynomialFunctions2| . POLY2)
    (|PolynomialIdeals| . IDEAL)
+   (|PolynomialPackageForCurve| . PLPKCRV)
    (|PolynomialToUnivariatePolynomial| . POLY2UP)
    (|PositiveInteger| . PI)
    (|PowerSeriesLimitPackage| . LIMITPS)
diff --git a/books/ps/v104polynomialpackageforcurve.eps b/books/ps/v104polynomialpackageforcurve.eps
new file mode 100644
index 0000000..b6ce1c2
--- /dev/null
+++ b/books/ps/v104polynomialpackageforcurve.eps
@@ -0,0 +1,266 @@
+%!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: 1
+%%BoundingBox: 36 36 122 152
+%%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 122 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 86 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% PLPKCRV
+gsave
+[ /Rect [ 0 72 78 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=PLPKCRV) >>
+  /Subtype /Link
+/ANN pdfmark
+0.939 0.733 1.000 nodecolor
+newpath 78 108 moveto
+0 108 lineto
+0 72 lineto
+78 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.939 0.733 1.000 nodecolor
+newpath 78 108 moveto
+0 108 lineto
+0 72 lineto
+78 72 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+7.5 85.9 moveto 63 (PLPKCRV) alignedtext
+grestore
+% DIRPCAT
+gsave
+[ /Rect [ 0 0 78 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=DIRPCAT) >>
+  /Subtype /Link
+/ANN pdfmark
+0.606 0.733 1.000 nodecolor
+newpath 78 36 moveto
+0 36 lineto
+0 0 lineto
+78 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.606 0.733 1.000 nodecolor
+newpath 78 36 moveto
+0 36 lineto
+0 0 lineto
+78 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+8 13.9 moveto 62 (DIRPCAT) alignedtext
+grestore
+% PLPKCRV->DIRPCAT
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 39 72 moveto
+39 64 39 55 39 46 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 42.5 46 moveto
+39 36 lineto
+35.5 46 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 42.5 46 moveto
+39 36 lineto
+35.5 46 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index b2b9b7d..94cefd7 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+20100521 tpd src/axiom-website/patches.html 20100521.05.tpd.patch
+20100521 tpd src/algebra/Makefile help and test for PolynomialPackageForCurve
+20100521 tpd books/bookvol5 expose PolynomialPackageForCurve
+20100521 tpd books/bookvol10.4 add PolynomialPackageForCurve
+20100521 tpd books/ps/v104polynomialpackageforcurve.eps added
 20100521 tpd src/axiom-website/patches.html 20100521.04.tpd.patch	
 20100521 tpd books/ps/v104rootsfindingpackage.eps add bounding box info
 20100521 tpd books/ps/v104rootsfindingpackage.ps removed
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 08d2254..658c107 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -5354,6 +5354,7 @@ LAYER11=\
   ${OUT}/PF.o       ${OUT}/PFBR.o     ${OUT}/PFBRU.o    ${OUT}/PFORP.o    \
   ${OUT}/PFOTOOLS.o \
   ${OUT}/PFRPAC.o   ${OUT}/PGCD.o     ${OUT}/PINTERPA.o ${OUT}/PLEQN.o    \
+  ${OUT}/PLPKCRV.o  \
   ${OUT}/PMPLCAT.o  ${OUT}/PMQFCAT.o  ${OUT}/PNTHEORY.o ${OUT}/POLUTIL.o  \
   ${OUT}/POLTOPOL.o ${OUT}/POLYCATQ.o ${OUT}/POLYLIFT.o ${OUT}/POLYROOT.o \
   ${OUT}/POLY2.o    ${OUT}/POLY2UP.o  ${OUT}/PRS.o      ${OUT}/PSQFR.o    \
@@ -7826,6 +7827,22 @@ LAYER11=\
 /*"PLEQN" -> "PI"*/
 
 "PMPLCAT" [color="#FF4488",href="bookvol10.4.pdf#nameddest=PMPLCAT"]
+/*"PLPKCRV" -> {"SETCATD"; "PRSPCAT"; "FIELD"; "EUCDOM"; "PID"; "GCDDOM"}*/
+/*"PLPKCRV" -> {"INTDOM"; "COMRING"; "RING"; "RNG"; "ABELGRP"; "CABMON"}*/
+/*"PLPKCRV" -> {"ABELMON"; "ABELSG"; "SETCAT"; "BASTYPE"; "KOERCE"; "SGROUP"}*/
+/*"PLPKCRV" -> {"MONOID"; "LMODULE"; "BMODULE"; "RMODULE"; "ALGEBRA"}*/
+/*"PLPKCRV" -> {"MODULE"; "ENTIRER"; "UFD"; "DIVRING"; "FAMR"; "AMR"}*/
+/*"PLPKCRV" -> {"CHARZ"; "CHARNZ"; "FRETRCT"; "RETRACT"}*/
+"PLPKCRV" -> "DIRPCAT"
+/*"PLPKCRV" -> {"IXAGG"; "HOAGG"; "AGG"; "TYPE"; "EVALAB"; "IEVALAB"}*/
+/*"PLPKCRV" -> {"ELTAGG"; "ELTAB"; "DIFEXT"; "DIFRING"; "PDRING"; "FLINEXP"}*/
+/*"PLPKCRV" -> {"LINEXP"; "FINITE"; "ORDRING"; "OAGROUP"; "OCAMON"}*/
+/*"PLPKCRV" -> {"OAMON"; "OASGP"; "ORDSET"; "OAMONS"; "VSPACE"; "BOOLEAN"}*/
+/*"PLPKCRV" -> {"NNI"; "INT"; "LSAGG"; "STAGG"; "URAGG"; "RCAGG"; "LNAGG"}*/
+/*"PLPKCRV" -> {"CLAGG"; "KONVERT"; "FLAGG"; "ELAGG"; "OM"; "LIST"}*/
+/*"PLPKCRV" -> {"ILIST"; "LSAGG-"}*/
+
+"PMPLCAT" [color="#FF4488",href="bookvol10.4.pdf#nameddest=PMPLCAT"]
 /*"PMPLCAT" -> {"SETCAT"; "BASTYPE"; "KOERCE"; "OAMONS"; "OCAMON"; "OAMON"}*/
 /*"PMPLCAT" -> {"OASGP"; "ORDSET"; "ABELMON"; "ABELSG"; "CABMON"; "RING"}*/
 /*"PMPLCAT" -> {"RNG"; "ABELGRP"; "SGROUP"; "MONOID"; "LMODULE"; "PATMAB"}*/
@@ -16828,6 +16845,21 @@ ${MID}/DSTREE.nrlib/code.o: ${MID}/DSTREE.spad
 	      | ${INTERPSYS} >${TMP}/trace ; \
 	   fi )
 @
+<<newcode>>=
+ 
+PLPKCRVDEPS = PRSPCAT PFORP SETCATD
+
+${MID}/PLPKCRV.nrlib/code.o: ${MID}/PLPKCRV.spad
+	@echo P3 making ${MID}/PLPKCRV.nrlib/code.o from ${MID}/PLPKCRV.spad
+	@ (cd ${MID} ; \
+	   if [ -z "${NOISE}" ] ; then \
+	    echo -e ")lib ${PLPKCRVDEPS} \n )co PLPKCRV.spad" \
+              | ${INTERPSYS} ; \
+           else \
+	    echo -e ")lib ${PLPKCRVDEPS} \n )co PLPKCRV.spad" \
+	      | ${INTERPSYS} >${TMP}/trace ; \
+	   fi )
+@
 
 \section{Broken Files}
 These files are Aldor files
@@ -17663,6 +17695,7 @@ SPADHELP=\
  ${HELP}/Plcs.help \
  ${HELP}/Plot.help \
  ${HELP}/Polynomial.help \
+ ${HELP}/PolynomialPackageForCurve.help \
  ${HELP}/Product.help \
  ${HELP}/ProjectivePlane.help \
  ${HELP}/ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField.help \
@@ -17848,6 +17881,7 @@ REGRESS= \
  Plcs.regress \
  Plot.regress \
  Polynomial.regress \
+ PolynomialPackageForCurve.regress \
  Product.regress \
  ProjectivePlane.regress \
  ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField.regress \
@@ -19340,6 +19374,18 @@ ${HELP}/Polynomial.help: ${BOOKS}/bookvol10.3.pamphlet
             >${INPUT}/Polynomial.input
 	@echo "Polynomial (POLY)" >>${HELPFILE}
 
+${HELP}/PolynomialPackageForCurve.help: ${BOOKS}/bookvol10.4.pamphlet
+	@echo 7933 create PolynomialPackageForCurve.help from \
+           ${BOOKS}/bookvol10.4.pamphlet
+	@${TANGLE} -R"PolynomialPackageForCurve.help" \
+           ${BOOKS}/bookvol10.4.pamphlet \
+           >${HELP}/PolynomialPackageForCurve.help
+	@cp ${HELP}/PolynomialPackageForCurve.help ${HELP}/PLPKCRV.help
+	@${TANGLE} -R"PolynomialPackageForCurve.input" \
+           ${BOOKS}/bookvol10.4.pamphlet \
+           >${INPUT}/PolynomialPackageForCurve.input
+	@echo "PolynomialPackageForCurve (PLPKCRV)" >>${HELPFILE}
+
 ${HELP}/Product.help: ${BOOKS}/bookvol10.3.pamphlet
 	@echo 7935 create Product.help from ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"Product.help" ${BOOKS}/bookvol10.3.pamphlet \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index b7331a3..7626c54 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2777,5 +2777,7 @@ factorisationoverpseudoalgebraicclosureofalgextofrationalnumber.eps fix<br/>
 books/ps/v104linesoppack.eps added new bounding box info<br/>
 <a href="patches/20100521.04.tpd.patch">20100521.04.tpd.patch</a>
 books/ps/v104rootsfindingpackage.eps add bounding box info<br/>
+<a href="patches/20100521.05.tpd.patch">20100521.05.tpd.patch</a>
+books/bookvol10.4 add PolynomialPackageForCurve<br/>
  </body>
 </html>
