diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index 91f694d..6f640e4 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -57022,6 +57022,308 @@ ListToMap(A:SetCategory, B:Type): Exports == Implementation where
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{package LPARSPT LocalParametrizationOfSimplePointPackage}
+<<LocalParametrizationOfSimplePointPackage.input>>=
+)set break resume
+)sys rm -f LocalParametrizationOfSimplePointPackage.output
+)spool LocalParametrizationOfSimplePointPackage.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show LocalParametrizationOfSimplePointPackage
+--R LocalParametrizationOfSimplePointPackage(K: Field,symb: List Symbol,PolyRing: PolynomialCategory(K,E,OrderedVariableList symb),E: DirectProductCategory(# symb,NonNegativeInteger),ProjPt: ProjectiveSpaceCategory K,PCS: LocalPowerSeriesCategory K,Plc: PlacesCategory(K,PCS))  is a package constructor
+--R Abbreviation for LocalParametrizationOfSimplePointPackage is LPARSPT 
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.4.pamphlet to see algebra source code for LPARSPT 
+--R
+--R------------------------------- Operations --------------------------------
+--R pointDominateBy : Plc -> ProjPt       printInfo : Boolean -> Boolean
+--R printInfo : () -> Boolean            
+--R localParamOfSimplePt : (ProjPt,PolyRing,Integer) -> List PCS
+--R localize : (PolyRing,ProjPt,PolyRing,Integer) -> Record(fnc: PolyRing,crv: PolyRing,chart: List Integer)
+--R pointToPlace : (ProjPt,PolyRing) -> Plc
+--R
+--E 1
+
+)spool
+)lisp (bye)
+@
+<<LocalParametrizationOfSimplePointPackage.help>>=
+====================================================================
+LocalParametrizationOfSimplePointPackage examples
+====================================================================
+
+See Also:
+o )show LocalParametrizationOfSimplePointPackage
+
+@
+\pagehead{LocalParametrizationOfSimplePointPackage}{LPARSPT}
+\pagepic{ps/v104localparametrizationofsimplepointpackage.eps}{LPARSPT}{1.00}
+
+{\bf Exports:}\\
+\begin{tabular}{lllll}
+\cross{LPARSPT}{pointDominateBy} &
+\cross{LPARSPT}{printInfo} &
+\cross{LPARSPT}{localParamOfSimplePt} &
+\cross{LPARSPT}{localize} &
+\cross{LPARSPT}{pointToPlace} 
+\end{tabular}
+
+<<package LPARSPT LocalParametrizationOfSimplePointPackage>>=
+)abbreviation package LPARSPT LocalParametrizationOfSimplePointPackage
+++ 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
+LocalParametrizationOfSimplePointPackage(K,symb,PolyRing,E,ProjPt,PCS,Plc):_
+ Exports == Implementation where
+  K:Field
+  symb: List(Symbol)
+
+  E : DirectProductCategory(#symb,NonNegativeInteger)
+  OV  ==> OrderedVariableList(symb)
+  
+  PolyRing : PolynomialCategory(K,E,OV)
+  ProjPt   : ProjectiveSpaceCategory(K)
+  PCS      : LocalPowerSeriesCategory(K)
+  Plc      : PlacesCategory(K,PCS)
+
+  PI       ==> PositiveInteger
+  NNI      ==> NonNegativeInteger
+  PPFC1    ==> PolynomialPackageForCurve(K,PolyRing,E,#symb,ProjPt)
+  PackPoly ==> PackageForPoly(K,PolyRing,E,#symb)
+  UP       ==> SparseUnivariatePolynomial(K)
+  UPUP     ==> SparseUnivariatePolynomial(UP)
+
+  Exports ==>  with
+
+    printInfo: Boolean -> Boolean
+      ++ printInfo(b) set a flag such that when true (b <- true) prints 
+      ++ some information during some critical computation.
+
+    printInfo: () -> Boolean
+      ++ returns the value of the \spad{printInfo} flag.
+
+    pointToPlace: (ProjPt,PolyRing) -> Plc
+      ++ pointToPlace(pt,pol) takes for input a simple point pt on the curve 
+      ++ defined by pol and set the local parametrization of the point.
+
+    localParamOfSimplePt: (ProjPt,PolyRing,Integer) -> List PCS
+      ++ localParamOfSimplePt(pt,pol,n) computes the local parametrization 
+      ++ of the simple point pt on the curve defined by pol. This local 
+      ++ parametrization is done according to the standard open affine 
+      ++ plane set by n
+
+    pointDominateBy : Plc -> ProjPt
+      ++ pointDominateBy(pl) returns the projective point dominated 
+      ++ by the place pl.
+
+    localize:  (PolyRing,ProjPt,PolyRing,Integer) -> _
+                Record(fnc:PolyRing,crv:PolyRing,chart:List(Integer))
+      ++ localize(f,pt,crv,n) returns a record containing the polynomials f 
+      ++ and crv translate to the origin with respect to pt. The last 
+      ++ element of the records, consisting of three integers contains 
+      ++ information about the local parameter that will be used 
+      ++ (either x or y): the first integer correspond to the variable 
+      ++ that will be used as a local parameter.
+
+  Implementation ==>  add
+
+    import PCS
+    import PolyRing
+    import PPFC1
+    import PackPoly
+    
+    valuationAndMore: (UPUP,UPUP) -> _
+                       Record(ord:Integer,value:K,fnc:UPUP,crv:UPUP)
+
+    localize2: (PolyRing,ProjPt,PolyRing,Integer) -> _
+               Record(fnc2:UPUP,crv2:UPUP)
+
+    coerceToUPUP: (PolyRing,List Integer) -> UPUP
+
+    paramAtOrigin: (UPUP,UPUP,Integer) -> PCS
+  
+    strictTransform: (UPUP,NNI) -> UPUP
+
+    translate: (UPUP,K) -> UPUP
+
+    constant: UPUP -> K
+
+    intCoord: UPUP  -> K
+
+    localMultiplicity: UPUP -> NNI
+
+    mapDegree: (NNI,NNI,NNI) -> NNI
+
+    listVar:List(OV):= [index(i::PI)$OV for i in 1..#symb]
+
+    listMonoPols:List(PolyRing):=listVariable()
+
+    pointDominateBy(pl)==
+      lpl:List PCS:=localParam(pl)
+      empty? lpl => _
+       error "LPARSPT:pointDominateBy::parametrization of point not done yet"
+      lK:List K:=[ findCoef(s,0) for s in lpl]
+      projectivePoint(lK)
+    
+    localParamOfSimplePt(pt,curve,nV)==
+      mult:NNI:=multiplicity(curve,pt,nV)
+      ^one?(mult) => _
+        error "The point is not simple or is not on the curve !"
+      lcl:=[localize2(var,pt,curve,nV) for var in listMonoPols]
+      [paramAtOrigin(l.fnc2,l.crv2,0) for l in lcl]
+
+    pointToPlace(pt,curve)==
+      -- define the chart for strictTransform (of simple point)
+      nV:Integer:=lastNonNull pt
+      pth:=homogenize(pt,nV)
+      chart:List Integer:=[0,0,nV]
+      mult:NNI:=multiplicity(curve,pth,nV)
+      ^one?(mult) => 
+        error "The point is not simple or is not on the curve"
+      -- create a place from the simple point. This is done by giving
+      -- a name to the place: in this case it is the coordinate of 
+      -- the projective point.
+      lpth:List K:= pth :: List(K)
+      plc:Plc:=create(lpth)$Plc
+      ^empty?(localParam(plc)) => plc
+      lcl:=[localize2(var,pth,curve,nV) for var in listMonoPols]
+      lPar:=[paramAtOrigin(l.fnc2,l.crv2,0) for l in lcl]
+      setParam!(plc,lPar)
+      dd:=degree pth 
+      setDegree!(plc,dd)
+      plc
+
+    localVarForPrintInfo:Boolean:=false()$Boolean
+
+    printInfo()==localVarForPrintInfo
+
+    printInfo(flag)==localVarForPrintInfo:=flag
+
+    mapDegree(n,mx,m)==
+      dd:=(n+mx-m) 
+      dd < 0 => _
+        error "LPARSPT:mapDegree called by PARAMP:strictTransform failed"
+      dd  pretend NNI
+
+    strictTransform(pol,m)==
+      zero?(pol) => 0
+      tc:=leadingCoefficient pol
+      tk:= degree pol
+      newTc:= mapExponents(mapDegree(#1,tk,m),tc)
+      monomial(newTc,tk)$UPUP + strictTransform(reductum pol,m)
+
+    Y == monomial(1,1)$UPUP
+
+    trY: (K,NonNegativeInteger) -> UPUP
+    trY(a,n)== (monomial(monomial(a,0)$UP,0)$UPUP + Y)**n
+
+    translate(pol,a)==
+      zero?(pol) => 0 
+      tc:=leadingCoefficient pol
+      tk:= degree pol
+      trY(a,tk) * tc + translate(reductum pol, a)
+
+    constant(pol)==coefficient(coefficient(pol,0)$UPUP,0)$UP
+
+    intCoord(pol)==
+      coefY:=coefficient(coefficient(pol,1)$UPUP,0)$UP
+      cnst:=constant(pol)
+      -cnst * inv coefY
+
+    localMultiplicity(pol)==
+      zero?(pol) => error "Cannot compute the multiplicity for 0"
+      redPol:= reductum pol
+      tc:=leadingCoefficient pol
+      tk:= degree pol
+      m:=tk + minimumDegree(tc)$UP
+      zero?(redPol) => m
+      min( m, localMultiplicity(redPol))
+
+    coerceToUPUP(pol,chart)==
+      zero?(pol) => 0
+      lExp:=parts degree pol
+      lCoef:=leadingCoefficient pol
+      expX:=lExp(chart.1)
+      expY:=lExp(chart.2)
+      monomial(monomial(lCoef,expX)$UP,expY)$UPUP + _
+        coerceToUPUP(reductum(pol),chart)
+
+    -- testing this function. See paramPack for original version. 
+    valuationAndMore(f:UPUP,curve:UPUP)==
+      -- this function evaluate the function f at the origin 
+      -- which must be a simple point on the curve define by "curve"
+      val:= constant(f)
+      ^zero?(val) => [0,val,f,curve]
+      sTrCurve:=strictTransform(curve,1)
+      slp:=intCoord sTrCurve  
+      multPtf:Integer:= localMultiplicity(f)  pretend Integer 
+      sTrFnc:=strictTransform(f,multPtf pretend NNI)
+      newCurve:=translate(sTrCurve,slp)
+      f2:=translate(sTrFnc,slp)
+      val:= constant(f2)
+      [multPtf, val, f2, newCurve]
+
+    paramAtOrigin(f:UPUP,curve:UPUP,ex:Integer)== delay
+      -- this function must be
+      -- called for parametrization a the origin
+      u:=f
+      zero?(u) => 0
+      tt:=u exquo curve 
+      ^(tt case "failed") => 0
+      firstTerm:=valuationAndMore(u,curve)
+      od:=firstTerm.ord    
+      coef:=firstTerm.value
+      newU:=firstTerm.fnc - monomial(monomial(coef,0)$UP,0)$UPUP
+      newCurve:=firstTerm.crv
+      series(od+ex,coef,paramAtOrigin(newU,newCurve,ex+od))
+
+    localize(f:PolyRing,pt:ProjPt,curve:PolyRing,nV:Integer)==
+      curveT:=translateToOrigin(curve,pt,nV)
+      ft:=translateToOrigin(f,pt,nV)
+      fm:=minimalForm(curveT)
+      zero?(d:=totalDegree(fm)$PackPoly) => _
+        error "the point is not on the curve"
+      ^one?(d) => error "the point is singular"
+      subChart:=[i for i in 1..#symb | ^(i= (nV pretend PI))]
+      cf1:=degOneCoef(fm,(subChart.1) pretend PI)
+      cf2:=degOneCoef(fm,(subChart.2) pretend PI)
+      crt:List(Integer)
+      sc:List(Integer):=[(i pretend Integer) for i in subChart]
+      zero?(cf1) =>
+        crt:=concat(sc,nV)
+        [ft,curveT,crt]
+      zero?(cf2) =>
+        crt:=concat(reverse(sc),nV)
+        [ft,curveT,crt]
+      deg1:=degree(curveT,listVar(subChart.1))
+      deg2:=degree(curveT,listVar(subChart.2))
+      deg1 > deg2 =>
+        crt:=concat(sc,nV)
+        [ft,curveT,crt]
+      crt:=concat(reverse(sc),nV)
+      [ft,curveT,crt]
+
+    localize2(f:PolyRing,pt:ProjPt,curve:PolyRing,nV:Integer)==
+      recBlowUp:=localize(f,pt,curve,nV)
+      f2:=coerceToUPUP(recBlowUp.fnc,recBlowUp.chart)
+      curve2:=coerceToUPUP(recBlowUp.crv,recBlowUp.chart)
+      [f2,curve2]
+
+@
+<<LPARSPT.dotabb>>=
+"LPARSPT" [color="#FF4488",href="bookvol10.4.pdf#nameddest=LPARSPT"]
+"DIRPCAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=DIRPCAT"]
+"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"]
+"LPARSPT" -> "DIRPCAT"
+"LPARSPT" -> "PFECAT"
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \chapter{Chapter M}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{package MKBCFUNC MakeBinaryCompiledFunction}
@@ -157078,6 +157380,7 @@ ZeroDimensionalSolvePackage(R,ls,ls2): Exports == Implementation where
 <<package LIST2 ListFunctions2>>
 <<package LIST3 ListFunctions3>>
 <<package LIST2MAP ListToMap>>
+<<package LPARSPT LocalParametrizationOfSimplePointPackage>>
 
 <<package MKBCFUNC MakeBinaryCompiledFunction>>
 <<package MKFLCFN MakeFloatCompiledFunction>>
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 5c3fed1..86f50bb 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -24017,6 +24017,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
    (|ListFunctions2| . LIST2)
    (|ListFunctions3| . LIST3)
    (|ListToMap| . LIST2MAP)
+   (|LocalParametrizationOfSimplePointPackage| . LPARSPT)
    (|MakeFloatCompiledFunction| . MKFLCFN)
    (|MakeFunction| . MKFUNC)
    (|MakeRecord| . MKRECORD)
diff --git a/books/ps/v104localparametrizationofsimplepointpackage.eps b/books/ps/v104localparametrizationofsimplepointpackage.eps
new file mode 100644
index 0000000..4d30ee0
--- /dev/null
+++ b/books/ps/v104localparametrizationofsimplepointpackage.eps
@@ -0,0 +1,311 @@
+%!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 210 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 210 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 174 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% LPARSPT
+gsave
+[ /Rect [ 46 72 124 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=LPARSPT) >>
+  /Subtype /Link
+/ANN pdfmark
+0.939 0.733 1.000 nodecolor
+newpath 124 108 moveto
+46 108 lineto
+46 72 lineto
+124 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.939 0.733 1.000 nodecolor
+newpath 124 108 moveto
+46 108 lineto
+46 72 lineto
+124 72 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+53.5 85.9 moveto 63 (LPARSPT) 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
+% LPARSPT->DIRPCAT
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 73 72 moveto
+68 64 61 54 55 44 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 58.27 42.62 moveto
+50 36 lineto
+52.33 46.34 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 58.27 42.62 moveto
+50 36 lineto
+52.33 46.34 lineto
+closepath stroke
+grestore
+% PFECAT
+gsave
+[ /Rect [ 96 0 166 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 166 36 moveto
+96 36 lineto
+96 0 lineto
+166 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.606 0.733 1.000 nodecolor
+newpath 166 36 moveto
+96 36 lineto
+96 0 lineto
+166 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+104 13.9 moveto 54 (PFECAT) alignedtext
+grestore
+% LPARSPT->PFECAT
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 97 72 moveto
+102 64 109 54 115 44 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 117.67 46.34 moveto
+120 36 lineto
+111.73 42.62 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 117.67 46.34 moveto
+120 36 lineto
+111.73 42.62 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index c580390..e963b02 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+20100523 tpd src/axiom-website/patches.html 20100523.02.tpd.patch
+20100523 tpd src/algebra/Makefile help and test for LPARSPT
+20100523 tpd books/bookvol5 expose LocalParametrizationOfSimplePointPackage
+20100523 tpd books/bookvol10.4 add LocalParametrizationOfSimplePointPackage
+20100523 tpd books/ps/v104localparametrizationofsimplepointpackage.eps
 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
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 2e99577..9a6c4fa 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -8947,14 +8947,16 @@ LAYER11=\
 
 @
 \subsection{Layer12}
-Depends on: DIOPS DPOLCAT FINRALG FRAC RMATCAT RRCC UPXSCAT FFSQFR PACRATC\\
+Depends on: DIOPS DPOLCAT FINRALG FRAC RMATCAT RRCC UPXSCAT FFSQFR PACRATC
+PLPKCRV\\
 Used by next layer: DIAGG FRAMALG MDAGG SMATCAT UPXSCCA
 <<layer12>>=
 
 LAYER12=\
   ${OUT}/DIAGG.o   ${OUT}/DIAGG-.o   ${OUT}/DSMP.o     ${OUT}/EXPUPXS.o \
   ${OUT}/FACTRN.o  ${OUT}/FFFACTSE.o \
-  ${OUT}/FRAMALG.o ${OUT}/FRAMALG-.o ${OUT}/MDAGG.o    ${OUT}/NPOLYGON.o \
+  ${OUT}/FRAMALG.o ${OUT}/FRAMALG-.o ${OUT}/LPARSPT.o  \
+  ${OUT}/MDAGG.o   ${OUT}/NPOLYGON.o \
   ${OUT}/ODPOL.o   ${OUT}/PLOT.o     ${OUT}/RFP.o     \
   ${OUT}/RMCAT2.o  ${OUT}/ROIRC.o    ${OUT}/SDPOL.o   \
   ${OUT}/SMATCAT.o ${OUT}/SMATCAT-.o ${OUT}/TUBETOOL.o ${OUT}/UPXSCCA.o \
@@ -8964,7 +8966,8 @@ LAYER12=\
 @
 <<layerpic>>=
 /* layer 12 */
-/* depends on: DIOPS DPOLCAT FFSQFRFINRALG FRAC RMATCAT RRCC UPXSCAT */
+/* depends on: DIOPS DPOLCAT FFSQFR FINRALG FRAC RMATCAT RRCC UPXSCAT */
+/*             PLPKCRV */
 
 "DFLOAT" [color="#88FF44",href="bookvol10.3.pdf#nameddest=DFLOAT",
           shape=ellipse]
@@ -9098,6 +9101,25 @@ LAYER12=\
 /*"FRAMALG-" -> {"OAGROUP";  "OCAMON";  "OAMON";  "OASGP";  "CFCAT";  "REAL"}*/
 /*"FRAMALG-" -> {"OM";  "NNI";  "PI";  "SINT";  "LIST";  "ILIST"}*/
 
+"LPARSPT" [color="#FF4488",href="bookvol10.4.pdf#nameddest=LPARSPT"]
+"LPARSPT" -> "PLPKCRV"
+/*"LPARSPT" -> {"PFECAT"; "DIRPCAT"}*/
+/*"LPARSPT" -> {"PRSPCAT"; "SETCATD"; "LOCPOWC"; "PLACESC"; "FIELD"}*/
+/*"LPARSPT" -> {"EUCDOM"; "PID"; "GCDDOM"; "INTDOM"; "COMRING"; "RING"}*/
+/*"LPARSPT" -> {"RNG"; "ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"; "SETCAT"}*/
+/*"LPARSPT" -> {"BASTYPE"; "KOERCE"; "SGROUP"; "MONOID"; "LMODULE"}*/
+/*"LPARSPT" -> {"BMODULE"; "RMODULE"; "ALGEBRA"; "MODULE"; "ENTIRER"}*/
+/*"LPARSPT" -> {"UFD"; "DIVRING"; "POLYCAT"; "PDRING"; "FAMR"; "AMR"}*/
+/*"LPARSPT" -> {"CHARZ"; "CHARNZ"; "FRETRCT"; "RETRACT"; "EVALAB"}*/
+/*"LPARSPT" -> {"IEVALAB"; "FLINEXP"; "LINEXP"; "ORDSET"; "KONVERT"}*/
+/*"LPARSPT" -> {"PATMAB"; "IXAGG"; "HOAGG"; "AGG"; "TYPE"; "ELTAGG"}*/
+/*"LPARSPT" -> {"ELTAB"; "DIFEXT"; "DIFRING"; "FINITE"; "ORDRING"}*/
+/*"LPARSPT" -> {"OAGROUP"; "OCAMON"; "OAMON"; "OASGP"; "OAMONS"}*/
+/*"LPARSPT" -> {"VSPACE"; "UPSCAT"; "PSCAT"; "SINT"; "INT"; "LSAGG"}*/
+/*"LPARSPT" -> {"STAGG"; "URAGG"; "RCAGG"; "LNAGG"; "CLAGG"; "FLAGG"}*/
+/*"LPARSPT" -> {"ELAGG"; "OM"; "LIST"; "ILIST"; "NNI"; "BOOLEAN"; "STEP"}*/
+/*"LPARSPT" -> {"UPOLYC"; "PI"; "LSAGG-"; "STAGG-"; "OUTFORM"; "ELAGG-"}*/
+
 "MDAGG" [color="#4488FF",href="bookvol10.2.pdf#nameddest=MDAGG"]
 "MDAGG" -> "DIOPS"
 /*"MDAGG" -> {"BGAGG"; "HOAGG"; "AGG"; "TYPE"; "SETCAT"; "BASTYPE"}*/
@@ -17038,6 +17060,21 @@ ${MID}/PRJALGPK.nrlib/code.o: ${MID}/PRJALGPK.spad
 	      | ${INTERPSYS} >${TMP}/trace ; \
 	   fi )
 @
+<<newcode>>=
+
+LPARSPTDEPS = PRSPCAT LOCPOWC SETCATD PLACESC PLPKCRV PFORP
+
+${MID}/LPARSPT.nrlib/code.o: ${MID}/LPARSPT.spad
+	@echo P3 making ${MID}/LPARSPT.nrlib/code.o from ${MID}/LPARSPT.spad
+	@ (cd ${MID} ; \
+	   if [ -z "${NOISE}" ] ; then \
+	    echo -e ")lib ${LPARSPTDEPS} \n )co LPARSPT.spad" \
+              | ${INTERPSYS} ; \
+           else \
+	    echo -e ")lib ${LPARSPTDEPS} \n )co AFALGRES.spad" \
+	      | ${INTERPSYS} >${TMP}/trace ; \
+	   fi )
+@
 
 \section{Broken Files}
 These files are Aldor files
@@ -17829,6 +17866,7 @@ SPADHELP=\
  ${HELP}/LinearSystemFromPowerSeriesPackage.help \
  ${HELP}/List.help \
  ${HELP}/LinesOpPack.help \
+ ${HELP}/LocalParametrizationOfSimplePointPackage.help \
  ${HELP}/LocalPowerSeriesCategory.help \
  ${HELP}/LyndonWord.help \
  ${HELP}/Magma.help \
@@ -18034,6 +18072,7 @@ REGRESS= \
  LinearSystemFromPowerSeriesPackage.regress \
  List.regress \
  LinesOpPack.regress \
+ LocalParametrizationOfSimplePointPackage.regress \
  LocalPowerSeriesCategory.regress \
  LyndonWord.regress \
  Magma.regress \
@@ -19136,8 +19175,23 @@ ${HELP}/LinesOpPack.help: ${BOOKS}/bookvol10.4.pamphlet
             >${INPUT}/LinesOpPack.input
 	@echo "LinesOpPack (LOP)" >>${HELPFILE}
 
+${HELP}/LocalParametrizationOfSimplePointPackage.help: \
+            ${BOOKS}/bookvol10.4.pamphlet
+	@echo 7577 create LocalParametrizationOfSimplePointPackage.help from \
+            ${BOOKS}/bookvol10.4.pamphlet
+	@${TANGLE} -R"LocalParametrizationOfSimplePointPackage.help" \
+            ${BOOKS}/bookvol10.4.pamphlet \
+            >${HELP}/LocalParametrizationOfSimplePointPackage.help
+	@cp ${HELP}/LocalParametrizationOfSimplePointPackage.help \
+            ${HELP}/LPARSPT.help
+	@${TANGLE} -R"LocalParametrizationOfSimplePointPackage.input" \
+            ${BOOKS}/bookvol10.4.pamphlet \
+            >${INPUT}/LocalParametrizationOfSimplePointPackage.input
+	@echo "LocalParametrizationOfSimplePointPackage (LPARSPT)" \
+           >>${HELPFILE}
+
 ${HELP}/LocalPowerSeriesCategory.help: ${BOOKS}/bookvol10.2.pamphlet
-	@echo 7577 create LocalPowerSeriesCategory.help from \
+	@echo 7578 create LocalPowerSeriesCategory.help from \
             ${BOOKS}/bookvol10.2.pamphlet
 	@${TANGLE} -R"LocalPowerSeriesCategory.help" \
             ${BOOKS}/bookvol10.2.pamphlet \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index b8fd504..9519814 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2787,5 +2787,7 @@ books/bookvol10.4 add AffineAlgebraicSetComputeWithResultant<br/>
 books/bookvol10.4 AffineAlgebraicSetComputeWithGroebnerBasis.eps<br/>
 <a href="patches/20100523.01.tpd.patch">20100523.01.tpd.patch</a>
 books/bookvol10.4 add ProjectiveAlgebraicSetPackage<br/>
+<a href="patches/20100523.02.tpd.patch">20100523.02.tpd.patch</a>
+books/bookvol10.4 add LocalParametrizationOfSimplePointPackage<br/>
  </body>
 </html>
