diff --git a/books/bookvol10.2.pamphlet b/books/bookvol10.2.pamphlet
index dae67bf..6e35d91 100644
--- a/books/bookvol10.2.pamphlet
+++ b/books/bookvol10.2.pamphlet
@@ -7485,6 +7485,129 @@ digraph pic {
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{SetCategoryWithDegree}{SETCATD}
+\pagepic{ps/v102setcategorywithdegree.ps}{SETCATD}{0.75}
+
+<<SetCategoryWithDegree.input>>=
+)set break resume
+)sys rm -f SetCategoryWithDegree.output
+)spool SetCategoryWithDegree.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show SetCategoryWithDegree
+--R SetCategoryWithDegree  is a category constructor
+--R Abbreviation for SetCategoryWithDegree is SETCATD 
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.2.pamphlet to see algebra source code for SETCATD 
+--R
+--R------------------------------- Operations --------------------------------
+--R ?=? : (%,%) -> Boolean                coerce : % -> OutputForm
+--R degree : % -> PositiveInteger         hash : % -> SingleInteger
+--R latex : % -> String                   ?~=? : (%,%) -> Boolean
+--R
+--E 1
+
+)spool
+)lisp (bye)
+@
+<<SetCategoryWithDegree.help>>=
+====================================================================
+SetCategoryWithDegree examples
+====================================================================
+
+See Also:
+o )show SetCategoryWithDegree
+
+@
+
+{\bf See:}
+
+\pagefrom{BasicType}{BASTYPE}
+\pagefrom{CoercibleTo}{KOERCE}
+\pagefrom{SetCategory}{SETCAT}
+
+{\bf Exports:}\\
+
+\begin{tabular}{llllll}
+\cross{SETCATD}{coerce} &
+\cross{SETCATD}{degree} &
+\cross{SETCATD}{hash} &
+\cross{SETCATD}{latex} &
+\cross{SETCATD}{?=?} &
+\cross{SETCATD}{?\~{}=?}
+\end{tabular}
+
+These are directly exported but not implemented:
+\begin{verbatim}
+ degree : % -> PositiveInteger
+\end{verbatim}
+
+These exports come from \refto{SetCategory}():
+\begin{verbatim}
+ coerce : % -> OutputForm             
+ hash : % -> SingleInteger
+ latex : % -> String                  
+ ?=? : (%,%) -> Boolean               
+ ?~=? : (%,%) -> Boolean
+\end{verbatim}
+
+<<category SETCATD SetCategoryWithDegree>>=
+)abbrev category SETCATD SetCategoryWithDegree
+++ Author: Gaetan Hache
+++ Date Created: 17 nov 1992
+++ Date Last Updated: May 2010 by Tim Daly
+++ Keywords:
+++ Description:
+++ This is part of the PAFF package, related to projective space.
+SetCategoryWithDegree:Category == SetCategory with
+    degree: % -> PositiveInteger
+
+@
+<<SETCATD.dotabb>>=
+"SETCATD"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=SETCATD"];
+"SETCATD" -> "SETCAT"
+
+@
+<<SETCATD.dotfull>>=
+"SetCategoryWithDegree()"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=SETCATD"];
+"SetCategoryWithDegree()" -> "SetCategory()"
+
+@
+<<SETCATD.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"SetCategoryWithDegree()" [color=lightblue];
+"SetCategoryWithDegree()" -> "SetCategory()"
+
+"SetCategory()" [color=lightblue];
+"SetCategory()" -> "BasicType()"
+"SetCategory()" -> "CoercibleTo(OutputForm)"
+
+"BasicType()" [color=lightblue];
+"BasicType()" -> "Category"
+
+"CoercibleTo(OutputForm)" [color=seagreen];
+"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)"
+
+"CoercibleTo(a:Type)" [color=lightblue];
+"CoercibleTo(a:Type)" -> "Category"
+
+"Package" [color="#00EE00"];
+
+"Category" [color=lightblue];
+
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \pagehead{SExpressionCategory}{SEXCAT}
 \pagepic{ps/v102sexpressioncategory.ps}{SEXCAT}{0.60}
 
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 81cf809..53344ff 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -24507,6 +24507,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
    (|SemiGroup| . SGROUP)
    (|SetAggregate| . SETAGG)
    (|SetCategory| . SETCAT)
+   (|SetCategoryWithDegree| . SETCATD)
    (|SExpressionCategory| . SEXCAT)
    (|SpecialFunctionCategory| . SPFCAT)
    (|SquareFreeNormalizedTriangularSetCategory| . SNTSCAT)
diff --git a/books/ps/v102setcategorywithdegree.ps b/books/ps/v102setcategorywithdegree.ps
new file mode 100644
index 0000000..e3b3f3d
--- /dev/null
+++ b/books/ps/v102setcategorywithdegree.ps
@@ -0,0 +1,459 @@
+%!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: (atend)
+%%BoundingBox: (atend)
+%%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 347 368
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 311 332 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% SetCategoryWithDegree()
+gsave
+0.537 0.247 0.902 nodecolor
+newpath 213 324 moveto
+17 324 lineto
+17 288 lineto
+213 288 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 213 324 moveto
+17 324 lineto
+17 288 lineto
+213 288 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+24.5 301.9 moveto 181 (SetCategoryWithDegree\(\)) alignedtext
+grestore
+% SetCategory()
+gsave
+0.537 0.247 0.902 nodecolor
+newpath 171 252 moveto
+59 252 lineto
+59 216 lineto
+171 216 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 171 252 moveto
+59 252 lineto
+59 216 lineto
+171 216 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+66.5 229.9 moveto 97 (SetCategory\(\)) alignedtext
+grestore
+% SetCategoryWithDegree()->SetCategory()
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 115 288 moveto
+115 280 115 271 115 262 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 118.5 262 moveto
+115 252 lineto
+111.5 262 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 118.5 262 moveto
+115 252 lineto
+111.5 262 lineto
+closepath stroke
+grestore
+% BasicType()
+gsave
+0.537 0.247 0.902 nodecolor
+newpath 92 108 moveto
+0 108 lineto
+0 72 lineto
+92 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 92 108 moveto
+0 108 lineto
+0 72 lineto
+92 72 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+7.5 85.9 moveto 77 (BasicType\(\)) alignedtext
+grestore
+% SetCategory()->BasicType()
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 100 216 moveto
+92 206 83 193 77 180 curveto
+67 160 59 136 54 118 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 57.23 116.57 moveto
+51 108 lineto
+50.52 118.58 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 57.23 116.57 moveto
+51 108 lineto
+50.52 118.58 lineto
+closepath stroke
+grestore
+% CoercibleTo(OutputForm)
+gsave
+0.404 0.667 0.545 nodecolor
+newpath 274 180 moveto
+86 180 lineto
+86 144 lineto
+274 144 lineto
+closepath fill
+1 setlinewidth
+filled
+0.404 0.667 0.545 nodecolor
+newpath 274 180 moveto
+86 180 lineto
+86 144 lineto
+274 144 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+93.5 157.9 moveto 173 (CoercibleTo\(OutputForm\)) alignedtext
+grestore
+% SetCategory()->CoercibleTo(OutputForm)
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 131 216 moveto
+139 207 148 197 157 188 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 160.05 189.83 moveto
+164 180 lineto
+154.78 185.22 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 160.05 189.83 moveto
+164 180 lineto
+154.78 185.22 lineto
+closepath stroke
+grestore
+% Category
+gsave
+0.537 0.247 0.902 nodecolor
+newpath 154 36 moveto
+76 36 lineto
+76 0 lineto
+154 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 154 36 moveto
+76 36 lineto
+76 0 lineto
+154 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+83.5 13.9 moveto 63 (Category) alignedtext
+grestore
+% BasicType()->Category
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 63 72 moveto
+72 63 82 53 91 43 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 93.4 45.55 moveto
+98 36 lineto
+88.45 40.6 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 93.4 45.55 moveto
+98 36 lineto
+88.45 40.6 lineto
+closepath stroke
+grestore
+% CoercibleTo(a:Type)
+gsave
+0.537 0.247 0.902 nodecolor
+newpath 258 108 moveto
+110 108 lineto
+110 72 lineto
+258 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 258 108 moveto
+110 108 lineto
+110 72 lineto
+258 72 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+117.5 85.9 moveto 133 (CoercibleTo\(a:Type\)) alignedtext
+grestore
+% CoercibleTo(OutputForm)->CoercibleTo(a:Type)
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 181 144 moveto
+182 136 182 127 182 118 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 185.49 118.3 moveto
+183 108 lineto
+178.52 117.6 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 185.49 118.3 moveto
+183 108 lineto
+178.52 117.6 lineto
+closepath stroke
+grestore
+% CoercibleTo(a:Type)->Category
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 167 72 moveto
+158 63 148 53 139 43 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 141.55 40.6 moveto
+132 36 lineto
+136.6 45.55 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 141.55 40.6 moveto
+132 36 lineto
+136.6 45.55 lineto
+closepath stroke
+grestore
+% Package
+gsave
+0.333 1.000 0.933 nodecolor
+newpath 303 324 moveto
+231 324 lineto
+231 288 lineto
+303 288 lineto
+closepath fill
+1 setlinewidth
+filled
+0.333 1.000 0.933 nodecolor
+newpath 303 324 moveto
+231 324 lineto
+231 288 lineto
+303 288 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+239 301.9 moveto 56 (Package) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 347 368
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index 801aaf8..beb2bfe 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+20100514 tpd src/axiom-website/patches.html 20100514.02.tpd.patch
+20100514 tpd src/algebra/Makefile help and test files for SETCATD
+20100514 tpd books/bookvol5 expose SetCategoryWithDegree
+20100514 tpd books/bookvol10.2 add SetCategoryWithDegree
+20100514 tpd books/ps/v102setcategorywithdegree.ps added
 20100514 tpd src/axiom-website/patches.html 20100514.01.tpd.patch
 20100514 tpd src/algebra/Makefile help and test files for BLHN
 20100514 tpd books/bookvol5 expose BlowUpWithHamburgerNoether
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 4349f8c..5f18538 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -327,7 +327,8 @@ LAYER1=\
   ${OUT}/PDECAT.o   ${OUT}/PDEPROB.o  ${OUT}/PLOT1.o    ${OUT}/PPCURVE.o  \
   ${OUT}/PSCURVE.o  ${OUT}/REAL.o     ${OUT}/REPDB.o    ${OUT}/REPSQ.o    \
   ${OUT}/RESLATC.o  ${OUT}/RETRACT.o  ${OUT}/RETRACT-.o ${OUT}/RMODULE.o  \
-  ${OUT}/SEGBIND2.o ${OUT}/SEGCAT.o   ${OUT}/SEXCAT.o   ${OUT}/SGROUP.o   \
+  ${OUT}/SEGBIND2.o ${OUT}/SEGCAT.o   ${OUT}/SETCATD.o  \
+  ${OUT}/SEXCAT.o   ${OUT}/SGROUP.o   \
   ${OUT}/SGROUP-.o  ${OUT}/SPACEC.o   ${OUT}/SPLNODE.o  ${OUT}/STEP.o     \
   ${OUT}/STREAM1.o  ${OUT}/STREAM2.o  ${OUT}/STREAM3.o  ${OUT}/SUCH.o     \
   ${OUT}/TEX1.o     ${OUT}/UDVO.o     ${OUT}/YSTREAM.o \
@@ -712,6 +713,10 @@ LAYER1=\
 "SETCAT-" -> "BASTYPE/KOERCE"
 /*"SETCAT-" -> {"KOERCE"; "SINT"}*/
 
+"SETCATD" [color="#4488FF",href="bookvol10.2.pdf#nameddest=SETCATD"]
+/*"SETCATD" -> "SETCAT"*/
+"SETCATD" -> "BASTYPE/KOERCE"
+
 "SEXCAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=SEXCAT"]
 /*"SEXCAT" -> "SETCAT"*/
 "SEXCAT" -> "BASTYPE/KOERCE"
@@ -17082,6 +17087,7 @@ SPADHELP=\
  ${HELP}/Segment.help \
  ${HELP}/SegmentBinding.help \
  ${HELP}/Set.help \
+ ${HELP}/SetCategoryWithDegree.help \
  ${HELP}/SingleInteger.help \
  ${HELP}/SparseTable.help \
  ${HELP}/SparseMultivariateTaylorSeries.help \
@@ -17243,6 +17249,7 @@ REGRESS= \
  RootsFindingPackage.regress \
  Segment.regress \
  Set.regress \
+ SetCategoryWithDegree.regress \
  SingleInteger.regress \
  SparseTable.regress \
  SparseMultivariateTaylorSeries.regress \
@@ -18741,6 +18748,18 @@ ${HELP}/Set.help: ${BOOKS}/bookvol10.3.pamphlet
             >${INPUT}/Set.input
 	@echo "Set (SET)" >>${HELPFILE}
 
+${HELP}/SetCategoryWithDegree.help: ${BOOKS}/bookvol10.2.pamphlet
+	@echo 8035 create SetCategoryWithDegree.help from \
+           ${BOOKS}/bookvol10.2.pamphlet
+	@${TANGLE} -R"SetCategoryWithDegree.help" \
+           ${BOOKS}/bookvol10.2.pamphlet \
+           >${HELP}/SetCategoryWithDegree.help
+	@cp ${HELP}/SetCategoryWithDegree.help ${HELP}/SETCATD.help
+	@${TANGLE} -R"SetCategoryWithDegree.input" \
+          ${BOOKS}/bookvol10.2.pamphlet \
+          >${INPUT}/SetCategoryWithDegree.input
+	@echo "SetCategoryWithDegree (SETCATD)" >>${HELPFILE}
+
 ${HELP}/SingleInteger.help: ${BOOKS}/bookvol10.3.pamphlet
 	@echo 8040 create SingleInteger.help from ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"SingleInteger.help" ${BOOKS}/bookvol10.3.pamphlet \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 27b38be..6dc811e 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2711,5 +2711,7 @@ books/bookvol10.3 add BlowUpWithQuadTrans<br/>
 books/ps/v103blowupwithquadtrans.ps corrected<br/>
 <a href="patches/20100514.01.tpd.patch">20100514.01.tpd.patch</a>
 books/bookvol10.3 add BlowUpWithHamburgerNoether<br/>
+<a href="patches/20100514.02.tpd.patch">20100514.02.tpd.patch</a>
+books/bookvol10.2 add SetCategoryWithDegree<br/>
  </body>
 </html>
