diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index e02bc24..91f694d 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -124233,6 +124233,224 @@ PlotTools(): Exports == Implementation where
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+PRJALGPK ProjectiveAlgebraicSetPackage
+\section{package PRJALGPK ProjectiveAlgebraicSetPackage}
+<<ProjectiveAlgebraicSetPackage.input>>=
+)set break resume
+)sys rm -f ProjectiveAlgebraicSetPackage.output
+)spool ProjectiveAlgebraicSetPackage.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show ProjectiveAlgebraicSetPackage
+--R ProjectiveAlgebraicSetPackage(K: Field,symb: List Symbol,PolyRing: PolynomialCategory(K,E,OrderedVariableList symb),E: DirectProductCategory(# symb,NonNegativeInteger),ProjPt: ProjectiveSpaceCategory K)  is a package constructor
+--R Abbreviation for ProjectiveAlgebraicSetPackage is PRJALGPK 
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.4.pamphlet to see algebra source code for PRJALGPK 
+--R
+--R------------------------------- Operations --------------------------------
+--R algebraicSet : List PolyRing -> List ProjPt
+--R rationalPoints : (PolyRing,PositiveInteger) -> List ProjPt
+--R singularPoints : PolyRing -> List ProjPt
+--R singularPointsWithRestriction : (PolyRing,List PolyRing) -> List ProjPt
+--R
+--E 1
+
+)spool
+)lisp (bye)
+@
+<<ProjectiveAlgebraicSetPackage.help>>=
+====================================================================
+ProjectiveAlgebraicSetPackage examples
+====================================================================
+
+See Also:
+o )show ProjectiveAlgebraicSetPackage
+
+@
+\pagehead{ProjectiveAlgebraicSetPackage}{PRJALGPK}
+\pagepic{ps/v104projectivealgebraicsetpackage.eps}{PRJALGPK}{1.00}
+
+{\bf Exports:}\\
+\begin{tabular}{llll}
+\cross{PRJALGPK}{algebraicSet} &
+\cross{PRJALGPK}{rationalPoints} &
+\cross{PRJALGPK}{singularPoints} &
+\cross{PRJALGPK}{singularPointsWithRestriction} 
+\end{tabular}
+
+<<package PRJALGPK ProjectiveAlgebraicSetPackage>>=
+)abbrev package PRJALGPK ProjectiveAlgebraicSetPackage
+++ 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
+ProjectiveAlgebraicSetPackage(K,symb,PolyRing,E,ProjPt):_
+ Exports == Implementation where
+  K   : Field
+  symb: List(Symbol)
+  OV  ==> OrderedVariableList(symb)
+  E : DirectProductCategory(#symb,NonNegativeInteger)
+  PolyRing : PolynomialCategory(K,E,OV)
+  ProjPt   : ProjectiveSpaceCategory(K)
+  PCS      : LocalPowerSeriesCategory(K)
+  
+  OF     ==> OutputForm
+  PI     ==> PositiveInteger
+  RFP    ==> RootsFindingPackage
+  SUP    ==> SparseUnivariatePolynomial
+  PPFC1  ==> PolynomialPackageForCurve(K,PolyRing,E,#symb,ProjPt)
+  SPWRES ==> AffineAlgebraicSetComputeWithResultant(K,symb,PolyRing,E,ProjPt)
+  SPWGRO ==> AffineAlgebraicSetComputeWithGroebnerBasis(K,symb,PolyRing,E,ProjPt)
+
+  Exports ==>  with
+
+    singularPointsWithRestriction: (PolyRing,List(PolyRing)) -> List(ProjPt)
+      ++ return the singular points that anhilate  
+
+    singularPoints: PolyRing -> List(ProjPt)
+      ++ singularPoints retourne les points singulier
+
+    algebraicSet: List(PolyRing) -> List(ProjPt)
+      ++ algebraicSet returns the algebraic set if finite (dimension 0).
+
+    rationalPoints: (PolyRing,PI) -> List(ProjPt)
+      ++ \axiom{rationalPoints(f,d)} returns all points on the curve \axiom{f}
+      ++ in the extension of the ground field of degree \axiom{d}.
+      ++ For \axiom{d > 1} this only works if \axiom{K} is a 
+      ++ \axiomType{LocallyAlgebraicallyClosedField}
+
+  Implementation ==>  add
+
+    import PPFC1
+    import PolyRing
+    import ProjPt
+    
+    listVar:List(OV):= [index(i::PI)$OV for i in 1..#symb]
+    polyToX10 : PolyRing -> SUP(K)
+      
+    --fonctions de resolution de sys. alg. de dim 0
+    singularPoints(crb)==
+      F:=crb
+      Fx:=differentiate(F,index(1)$OV)
+      Fy:=differentiate(F,index(2)$OV)
+      Fz:=differentiate(F,index(3)$OV)
+      idealT:List PolyRing:=[F,Fx,Fy,Fz]
+      idealToX10: List SUP(K) := [polyToX10 pol for pol in idealT]
+      recOfZerosX10:= distinguishedCommonRootsOf(idealToX10,1)$RFP(K)      
+      listOfExtDeg:List Integer:=[recOfZerosX10.extDegree]
+      degExt:=lcm listOfExtDeg
+      zero?(degExt) =>
+        error("------- Infinite number of points ------")
+      ^one?(degExt) =>
+        print(("You need an extension of degree")::OF)
+        print(degExt::OF)
+        error("-------------Have a nice day-------------")
+      listPtsIdl:= [projectivePoint([a,1,0]) for a in recOfZerosX10.zeros]
+      tempL:= affineSingularPoints(crb)$SPWRES
+      if tempL case "failed" then
+        print(("failed with resultant")::OF)
+        print("The singular points will be computed using grobner basis"::OF)
+        tempL := affineSingularPoints(crb)$SPWGRO
+      tempL case "Infinite" =>      
+        error("------- Infinite number of points ------")
+      tempL case Integer => 
+        print(("You need an extension of degree")::OF)
+        print(tempL ::OF)
+        error("-------------Have a nice day-------------")
+      listPtsIdl2:List(ProjPt)
+      if tempL case List(ProjPt) then 
+        listPtsIdl2:= ( tempL :: List(ProjPt))
+      else 
+        error" From ProjectiveAlgebraicSetPackage: this should not happen"
+      listPtsIdl := concat( listPtsIdl , listPtsIdl2)
+      if  pointInIdeal?(idealT,projectivePoint([1,0,0]))$PPFC1 then
+        listPtsIdl:=cons(projectivePoint([1,0,0]),listPtsIdl)
+      listPtsIdl
+
+    algebraicSet(idealT:List(PolyRing)) ==
+      idealToX10: List SUP(K) := [polyToX10 pol for pol in idealT]
+      recOfZerosX10:= distinguishedCommonRootsOf(idealToX10,1)$RFP(K)      
+      listOfExtDeg:List Integer:=[recOfZerosX10.extDegree]
+      degExt:=lcm listOfExtDeg
+      zero?(degExt) =>
+        error("------- Infinite number of points ------")
+      ^one?(degExt) =>
+        print(("You need an extension of degree")::OF)
+        print(degExt::OF)
+        error("-------------Have a nice day-------------")
+      listPtsIdl:= [projectivePoint([a,1,0]) for a in recOfZerosX10.zeros]
+      tempL:= affineAlgSet( idealT )$SPWRES
+      if tempL case "failed" then
+        print("failed with resultant"::OF)
+        print("The finte alg. set  will be computed using grobner basis"::OF)
+        tempL := affineAlgSet( idealT )$SPWGRO
+      tempL case "Infinite" =>      
+        error("------- Infinite number of points ------")
+      tempL case Integer => 
+        print(("You need an extension of degree")::OF)
+        print(tempL ::OF)
+        error("-------------Have a nice day-------------")
+      listPtsIdl2:List(ProjPt)
+      if tempL case List(ProjPt) then 
+        listPtsIdl2:= ( tempL :: List(ProjPt) )
+      else 
+        error" From ProjectiveAlgebraicSetPackage: this should not hapen"
+      listPtsIdl := concat( listPtsIdl , listPtsIdl2)
+      if  pointInIdeal?(idealT,projectivePoint([1,0,0]))$PPFC1 then
+        listPtsIdl:=cons(projectivePoint([1,0,0]),listPtsIdl)
+      listPtsIdl
+   
+    if K has FiniteFieldCategory then
+      
+      rationalPoints(crv:PolyRing,extdegree:PI):List(ProjPt) ==
+	--The code of this is almost the same as for algebraicSet
+	--We could just construct the ideal and call algebraicSet
+	--Should we do that? This might be a bit faster.
+	listPtsIdl:List(ProjPt):= empty()
+        x:= monomial(1,1)$SUP(K)
+	if K has PseudoAlgebraicClosureOfFiniteFieldCategory then 
+	  setTower!(1$K)$K
+        q:= size()$K 
+        px:= x**(q**extdegree) - x
+	crvX10:= polyToX10 crv
+	recOfZerosX10:=distinguishedCommonRootsOf([crvX10,px],1$K)$RFP(K)
+        listPtsIdl:=[projectivePoint([a,1,0]) for a in recOfZerosX10.zeros]
+        --now we got all of the projective points where z = 0 and y ^= 0
+        ratXY1 : List ProjPt:= affineRationalPoints( crv, extdegree )$SPWGRO
+	listPtsIdl:= concat(ratXY1,listPtsIdl)	
+        if  pointInIdeal?([crv],projectivePoint([1,0,0]))$PPFC1 then
+          listPtsIdl:=cons(projectivePoint([1,0,0]),listPtsIdl)
+        listPtsIdl
+
+    polyToX10(pol)==
+      zero?(pol) => 0
+      dd:= degree pol
+      lc:= leadingCoefficient pol
+      pp:= parts dd
+      lp:= last pp
+      ^zero?(lp) => polyToX10 reductum pol
+      e1:= pp.1
+      monomial(lc,e1)$SUP(K) + polyToX10 reductum pol
+
+    singularPointsWithRestriction(F,lstPol)==
+      Fx:=differentiate(F,index(1)$OV)
+      Fy:=differentiate(F,index(2)$OV)
+      Fz:=differentiate(F,index(3)$OV)
+      idealSingulier:List(PolyRing):=concat([F,Fx,Fy,Fz],lstPol)
+      algebraicSet(idealSingulier)
+
+@
+<<PRJALGPK.dotabb>>=
+"PRJALGPK" [color="#FF4488",href="bookvol10.4.pdf#nameddest=PRJALGPK"]
+"AFALGGRO" [color="#FF4488",href="bookvol10.4.pdf#nameddest=AFALGGRO"]
+"PRJALGPK" -> "AFALGGRO"
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{package PTFUNC2 PointFunctions2}
 \pagehead{PointFunctions2}{PTFUNC2}
 \pagepic{ps/v104pointfunctions2.ps}{PTFUNC2}{1.00}
@@ -157008,6 +157226,7 @@ ZeroDimensionalSolvePackage(R,ls,ls2): Exports == Implementation where
 <<package ODEPRIM PrimitiveRatDE>>
 <<package ODEPRRIC PrimitiveRatRicDE>>
 <<package PRINT PrintPackage>>
+<<package PRJALGPK ProjectiveAlgebraicSetPackage>>
 <<package PSEUDLIN PseudoLinearNormalForm>>
 <<package PRS PseudoRemainderSequence>>
 <<package INTPAF PureAlgebraicIntegration>>
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index be063b1..5c3fed1 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -24116,6 +24116,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
    (|PrimeField| . PF)
    (|PrimitiveArrayFunctions2| . PRIMARR2)
    (|PrintPackage| . PRINT)
+   (|ProjectiveAlgebraicSetPackage| . PRJALGPK)
    (|ProjectivePlane| . PROJPL)
    (|ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField| . PROJPLPS)
    (|ProjectiveSpace| . PROJSP)
diff --git a/books/ps/v104projectivealgebraicsetpackage.eps b/books/ps/v104projectivealgebraicsetpackage.eps
new file mode 100644
index 0000000..e3c2f70
--- /dev/null
+++ b/books/ps/v104projectivealgebraicsetpackage.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 138 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 138 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 102 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% PRJALGPK
+gsave
+[ /Rect [ 4 72 90 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=PRJALGPK) >>
+  /Subtype /Link
+/ANN pdfmark
+0.939 0.733 1.000 nodecolor
+newpath 90 108 moveto
+4 108 lineto
+4 72 lineto
+90 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.939 0.733 1.000 nodecolor
+newpath 90 108 moveto
+4 108 lineto
+4 72 lineto
+90 72 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+11.5 85.9 moveto 71 (PRJALGPK) alignedtext
+grestore
+% AFALGGRO
+gsave
+[ /Rect [ 0 0 94 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=AFALGGRO) >>
+  /Subtype /Link
+/ANN pdfmark
+0.939 0.733 1.000 nodecolor
+newpath 94 36 moveto
+0 36 lineto
+0 0 lineto
+94 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.939 0.733 1.000 nodecolor
+newpath 94 36 moveto
+0 36 lineto
+0 0 lineto
+94 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+8 13.9 moveto 78 (AFALGGRO) alignedtext
+grestore
+% PRJALGPK->AFALGGRO
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 47 72 moveto
+47 64 47 55 47 46 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 50.5 46 moveto
+47 36 lineto
+43.5 46 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 50.5 46 moveto
+47 36 lineto
+43.5 46 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index 6f8f40e..c580390 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+20100523 tpd src/axiom-website/patches.html 20100523.01.tpd.patch
+20100523 tpd src/algebra/Makefile help and test for PRJALGPK
+20100523 tpd books/bookvol5 expose ProjectiveAlgebraicSetPackage
+20100523 tpd books/bookvol10.4 add ProjectiveAlgebraicSetPackage
+20100523 tpd books/ps/v104projectivealgebraicsetpackage.eps added
 20100522 tpd src/axiom-website/patches.html 20100522.03.tpd.patch
 20100522 tpd src/algebra/Makefile help and test for AFALGGRO
 20100522 tpd books/bookvol5 expose AFALGGRO
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 2efbcbc..2e99577 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -9580,7 +9580,8 @@ LAYER14=\
   ${OUT}/CCLASS.o   ${OUT}/CPIMA.o   ${OUT}/FSAGG2.o   ${OUT}/GALFACT.o  \
   ${OUT}/IALGFACT.o ${OUT}/IBACHIN.o  ${OUT}/MMLFORM.o ${OUT}/NORMMA.o   \
   ${OUT}/ODERED.o   ${OUT}/OMSAGG.o   ${OUT}/PERM.o    ${OUT}/PERMGRP.o  \
-  ${OUT}/PRIMES.o   ${OUT}/PWFFINTB.o ${OUT}/RDIST.o   ${OUT}/SAE.o      \
+  ${OUT}/PRIMES.o   ${OUT}/PRJALGPK.o \
+  ${OUT}/PWFFINTB.o ${OUT}/RDIST.o   ${OUT}/SAE.o      \
   ${OUT}/SAEFACT.o  ${OUT}/SAERFFC.o  ${OUT}/SGCF.o    ${OUT}/SPACE3.o   \
   ${OUT}/TBAGG.o    ${OUT}/TBAGG-.o   ${OUT}/VIEW3D.o  ${OUT}/WFFINTBS.o \
   layer14done
@@ -9822,6 +9823,27 @@ LAYER14=\
 /*"PRIMES" -> {"DIAGG"; "DIOPS"; "BGAGG"; "SETAGG"; "FINITE"; "LSAGG-"}*/
 /*"PRIMES" -> "STAGG-"*/
 
+"PRJALGPK" [color="#FF4488",href="bookvol10.4.pdf#nameddest=PRJALGPK"]
+"PRJALGPK" -> "AFALGGRO"
+/*"PRJALGPK" -> {"PRSPCAT"; "LOCPOWC"; "SETCATD"; "PACFFC"; "PACPERC"; "RFP"}*/
+/*"PRJALGPK" -> {"PLPKCRV"; "INTERGB"; "FIELD"; "EUCDOM"; "PID"; "GCDDOM"}*/
+/*"PRJALGPK" -> {"INTDOM"; "COMRING"; "RING"; "RNG"; "ABELGRP"; "CABMON"}*/
+/*"PRJALGPK" -> {"ABELMON"; "ABELSG"; "SETCAT"; "BASTYPE"; "KOERCE"}*/
+/*"PRJALGPK" -> {"SGROUP"; "MONOID"; "LMODULE"; "BMODULE"; "RMODULE"}*/
+/*"PRJALGPK" -> {"ALGEBRA"; "MODULE"; "ENTIRER"; "UFD"; "DIVRING"}*/
+/*"PRJALGPK" -> {"POLYCAT"; "PDRING"; "FAMR"; "AMR"; "CHARZ"; "CHARNZ"}*/
+/*"PRJALGPK" -> {"FRETRCT"; "RETRACT"; "EVALAB"; "IEVALAB"; "FLINEXP"}*/
+/*"PRJALGPK" -> {"LINEXP"; "ORDSET"; "KONVERT"; "PATMAB"; "PFECAT"}*/
+/*"PRJALGPK" -> {"DIRPCAT"; "IXAGG"; "HOAGG"; "AGG"; "TYPE"; "ELTAGG"}*/
+/*"PRJALGPK" -> {"ELTAB"; "DIFEXT"; "DIFRING"; "FINITE"; "ORDRING"}*/
+/*"PRJALGPK" -> {"OAGROUP"; "OCAMON"; "OAMON"; "OASGP"; "OAMONS"; "VSPACE"}*/
+/*"PRJALGPK" -> {"SINT"; "INT"; "LSAGG"; "STAGG"; "URAGG"; "RCAGG"}*/
+/*"PRJALGPK" -> {"LNAGG"; "CLAGG"; "FLAGG"; "ELAGG"; "OM"; "LIST"; "ILIST"}*/
+/*"PRJALGPK" -> {"NNI"; "PI"; "INS-"; "EUCDOM-"; "UFD-"; "GCDDOM-"}*/
+/*"PRJALGPK" -> {"LSAGG-"; "STAGG-"; "FFIELDC"; "FPC"; "STEP"; "MONOID-"}*/
+/*"PRJALGPK" -> {"ABELMON-"; "ORDSET-"; "SGROUP-"; "ELAGG-"; "FLAGG-"}*/
+/*"PRJALGPK" -> {"URAGG-"; "OUTFORM"}*/
+
 "PWFFINTB" [color="#FF4488",href="bookvol10.4.pdf#nameddest=PWFFINTB"]
 /*"PWFFINTB" -> {"FFIELDC"; "FPC"; "FIELD"; "EUCDOM"; "PID"; "GCDDOM"}*/
 /*"PWFFINTB" -> {"INTDOM"; "COMRING"; "RING"; "RNG"; "ABELGRP"; "CABMON"}*/
@@ -17000,6 +17022,22 @@ ${MID}/AFALGGRO.nrlib/code.o: ${MID}/AFALGGRO.spad
 	      | ${INTERPSYS} >${TMP}/trace ; \
 	   fi )
 @
+<<newcode>>=
+
+PRJALGPKDEPS = PRSPCAT LOCPOWC SETCATD PACFFC PACPERC RFP PLPKCRV INTERGB \
+               AFALGGRO AFALGRES
+
+${MID}/PRJALGPK.nrlib/code.o: ${MID}/PRJALGPK.spad
+	@echo P3 making ${MID}/PRJALGPK.nrlib/code.o from ${MID}/PRJALGPK.spad
+	@ (cd ${MID} ; \
+	   if [ -z "${NOISE}" ] ; then \
+	    echo -e ")lib ${PRJALGPKDEPS} \n )co PRJALGPK.spad" \
+              | ${INTERPSYS} ; \
+           else \
+	    echo -e ")lib ${PRJALGPKDEPS} \n )co AFALGRES.spad" \
+	      | ${INTERPSYS} >${TMP}/trace ; \
+	   fi )
+@
 
 \section{Broken Files}
 These files are Aldor files
@@ -17841,6 +17879,7 @@ SPADHELP=\
  ${HELP}/Polynomial.help \
  ${HELP}/PolynomialPackageForCurve.help \
  ${HELP}/Product.help \
+ ${HELP}/ProjectiveAlgebraicSetPackage.help \
  ${HELP}/ProjectivePlane.help \
  ${HELP}/ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField.help \
  ${HELP}/ProjectiveSpace.help \
@@ -18031,6 +18070,7 @@ REGRESS= \
  Polynomial.regress \
  PolynomialPackageForCurve.regress \
  Product.regress \
+ ProjectiveAlgebraicSetPackage.regress \
  ProjectivePlane.regress \
  ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField.regress \
  ProjectiveSpace.regress \
@@ -19603,8 +19643,28 @@ ${HELP}/Product.help: ${BOOKS}/bookvol10.3.pamphlet
             >${INPUT}/Product.input
 	@echo "Product (PRODUCT)" >>${HELPFILE}
 
+${HELP}/ProjectiveAlgebraicSetPackage.help: \
+           ${BOOKS}/bookvol10.4.pamphlet
+	@echo 7936 create \
+           ProjectiveAlgebraicSetPackage.help from \
+           ${BOOKS}/bookvol10.4.pamphlet
+	@${TANGLE} \
+           -R"ProjectiveAlgebraicSetPackage.help" \
+           ${BOOKS}/bookvol10.4.pamphlet \
+           >${HELP}/ProjectiveAlgebraicSetPackage.help
+	@cp \
+          ${HELP}/ProjectiveAlgebraicSetPackage.help \
+          ${HELP}/PRJALGPK.help
+	@${TANGLE} \
+          -R"ProjectiveAlgebraicSetPackage.input" \
+          ${BOOKS}/bookvol10.4.pamphlet \
+         >${INPUT}/ProjectiveAlgebraicSetPackage.input
+	@echo \
+         "ProjectiveAlgebraicSetPackage (PRJALGPK)" \
+          >>${HELPFILE}
+
 ${HELP}/ProjectivePlane.help: ${BOOKS}/bookvol10.3.pamphlet
-	@echo 7936 create ProjectivePlane.help from \
+	@echo 7937 create ProjectivePlane.help from \
            ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"ProjectivePlane.help" \
            ${BOOKS}/bookvol10.3.pamphlet \
@@ -19617,7 +19677,7 @@ ${HELP}/ProjectivePlane.help: ${BOOKS}/bookvol10.3.pamphlet
 
 ${HELP}/ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField.help: \
            ${BOOKS}/bookvol10.3.pamphlet
-	@echo 7937 create \
+	@echo 7938 create \
            ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField.help from \
            ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} \
@@ -19636,7 +19696,7 @@ ${HELP}/ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField.help: \
           >>${HELPFILE}
 
 ${HELP}/ProjectiveSpace.help: ${BOOKS}/bookvol10.3.pamphlet
-	@echo 7938 create ProjectiveSpace.help from \
+	@echo 7939 create ProjectiveSpace.help from \
            ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"ProjectiveSpace.help" \
            ${BOOKS}/bookvol10.3.pamphlet \
@@ -19648,7 +19708,7 @@ ${HELP}/ProjectiveSpace.help: ${BOOKS}/bookvol10.3.pamphlet
 	@echo "ProjectiveSpace (PROJSP)" >>${HELPFILE}
 
 ${HELP}/ProjectiveSpaceCategory.help: ${BOOKS}/bookvol10.2.pamphlet
-	@echo 7939 create ProjectiveSpaceCategory.help from \
+	@echo 7940 create ProjectiveSpaceCategory.help from \
            ${BOOKS}/bookvol10.2.pamphlet
 	@${TANGLE} -R"ProjectiveSpaceCategory.help" \
            ${BOOKS}/bookvol10.2.pamphlet \
@@ -19661,7 +19721,7 @@ ${HELP}/ProjectiveSpaceCategory.help: ${BOOKS}/bookvol10.2.pamphlet
 
 ${HELP}/PseudoAlgebraicClosureOfAlgExtOfRationalNumber.help: \
             ${BOOKS}/bookvol10.3.pamphlet
-	@echo 7940 create \
+	@echo 7941 create \
             PseudoAlgebraicClosureOfAlgExtOfRationalNumber.help from \
             ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} \
@@ -19681,7 +19741,7 @@ ${HELP}/PseudoAlgebraicClosureOfAlgExtOfRationalNumber.help: \
 
 ${HELP}/PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.help: \
             ${BOOKS}/bookvol10.2.pamphlet
-	@echo 7940 create \
+	@echo 7942 create \
             PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.help from \
             ${BOOKS}/bookvol10.2.pamphlet
 	@${TANGLE} \
@@ -19701,7 +19761,7 @@ ${HELP}/PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory.help: \
 
 ${HELP}/PseudoAlgebraicClosureOfFiniteFieldCategory.help: \
            ${BOOKS}/bookvol10.2.pamphlet
-	@echo 7941 create PseudoAlgebraicClosureOfFiniteFieldCategory.help \
+	@echo 7943 create PseudoAlgebraicClosureOfFiniteFieldCategory.help \
            from ${BOOKS}/bookvol10.2.pamphlet
 	@${TANGLE} -R"PseudoAlgebraicClosureOfFiniteFieldCategory.help" \
            ${BOOKS}/bookvol10.2.pamphlet \
@@ -19716,7 +19776,7 @@ ${HELP}/PseudoAlgebraicClosureOfFiniteFieldCategory.help: \
 
 ${HELP}/PseudoAlgebraicClosureOfPerfectFieldCategory.help: \
            ${BOOKS}/bookvol10.2.pamphlet
-	@echo 7942 create PseudoAlgebraicClosureOfPerfectFieldCategory.help \
+	@echo 7944 create PseudoAlgebraicClosureOfPerfectFieldCategory.help \
            from ${BOOKS}/bookvol10.2.pamphlet
 	@${TANGLE} -R"PseudoAlgebraicClosureOfPerfectFieldCategory.help" \
            ${BOOKS}/bookvol10.2.pamphlet \
@@ -19731,7 +19791,7 @@ ${HELP}/PseudoAlgebraicClosureOfPerfectFieldCategory.help: \
 
 ${HELP}/PseudoAlgebraicClosureOfFiniteField.help: \
            ${BOOKS}/bookvol10.3.pamphlet
-	@echo 7943 create PseudoAlgebraicClosureOfFiniteField.help \
+	@echo 7945 create PseudoAlgebraicClosureOfFiniteField.help \
            from ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"PseudoAlgebraicClosureOfFiniteField.help" \
            ${BOOKS}/bookvol10.3.pamphlet \
@@ -19746,7 +19806,7 @@ ${HELP}/PseudoAlgebraicClosureOfFiniteField.help: \
 
 ${HELP}/PseudoAlgebraicClosureOfRationalNumber.help: \
            ${BOOKS}/bookvol10.3.pamphlet
-	@echo 7944 create PseudoAlgebraicClosureOfRationalNumber.help \
+	@echo 7946 create PseudoAlgebraicClosureOfRationalNumber.help \
            from ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"PseudoAlgebraicClosureOfRationalNumber.help" \
            ${BOOKS}/bookvol10.3.pamphlet \
@@ -19761,7 +19821,7 @@ ${HELP}/PseudoAlgebraicClosureOfRationalNumber.help: \
 
 ${HELP}/PseudoAlgebraicClosureOfRationalNumberCategory.help: \
            ${BOOKS}/bookvol10.2.pamphlet
-	@echo 7945 create PseudoAlgebraicClosureOfRationalNumberCategory.help \
+	@echo 7947 create PseudoAlgebraicClosureOfRationalNumberCategory.help \
            from ${BOOKS}/bookvol10.2.pamphlet
 	@${TANGLE} -R"PseudoAlgebraicClosureOfRationalNumberCategory.help" \
            ${BOOKS}/bookvol10.2.pamphlet \
@@ -19775,7 +19835,7 @@ ${HELP}/PseudoAlgebraicClosureOfRationalNumberCategory.help: \
            >>${HELPFILE}
 
 ${HELP}/Quaternion.help: ${BOOKS}/bookvol10.3.pamphlet
-	@echo 7946 create Quaternion.help from ${BOOKS}/bookvol10.3.pamphlet
+	@echo 7948 create Quaternion.help from ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"Quaternion.help" ${BOOKS}/bookvol10.3.pamphlet \
            >${HELP}/Quaternion.help
 	@cp ${HELP}/Quaternion.help ${HELP}/QUAT.help
@@ -19784,7 +19844,7 @@ ${HELP}/Quaternion.help: ${BOOKS}/bookvol10.3.pamphlet
 	@echo "Quaternion (QUAT)" >>${HELPFILE}
 
 ${HELP}/QuaternionCategoryFunctions2.help: ${BOOKS}/bookvol10.4.pamphlet
-	@echo 7947 create QuaternionCategoryFunctions2.help from \
+	@echo 7949 create QuaternionCategoryFunctions2.help from \
            ${BOOKS}/bookvol10.4.pamphlet
 	@${TANGLE} -R"QuaternionCategoryFunctions2.help" \
            ${BOOKS}/bookvol10.4.pamphlet \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index d78ffe7..b8fd504 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2785,5 +2785,7 @@ books/bookvol10.4 add NewtonPolygon<br/>
 books/bookvol10.4 add AffineAlgebraicSetComputeWithResultant<br/>
 <a href="patches/20100522.03.tpd.patch">20100522.03.tpd.patch</a>
 books/bookvol10.4 AffineAlgebraicSetComputeWithGroebnerBasis.eps<br/>
+<a href="patches/20100523.01.tpd.patch">20100523.01.tpd.patch</a>
+books/bookvol10.4 add ProjectiveAlgebraicSetPackage<br/>
  </body>
 </html>
