diff --git a/books/bookvol10.2.pamphlet b/books/bookvol10.2.pamphlet
index 4790205..dffd281 100644
--- a/books/bookvol10.2.pamphlet
+++ b/books/bookvol10.2.pamphlet
@@ -1314,6 +1314,7 @@ digraph pic {
 
 {\bf See:}
 
+\pageto{DesingTreeCategory}{DSTRCAT}
 \pageto{Evalable}{EVALAB}
 \pageto{ExpressionSpace}{ES}
 \pageto{MultivariateTaylorSeriesCategory}{MTSCAT}
@@ -4185,6 +4186,242 @@ digraph pic {
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{DesingTreeCategory}{DSTRCAT}
+\pagepic{ps/v102desingtreecategory.eps}{DSTRCAT}{0.75}
+<<DesingTreeCategory.input>>=
+)set break resume
+)sys rm -f DesingTreeCategory.output
+)spool DesingTreeCategory.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show DesingTreeCategory
+--R DesingTreeCategory S: SetCategory  is a category constructor
+--R Abbreviation for DesingTreeCategory is DSTRCAT 
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.2.pamphlet to see algebra source code for DSTRCAT 
+--R
+--R------------------------------- Operations --------------------------------
+--R children : % -> List %                copy : % -> %
+--R cyclic? : % -> Boolean                distance : (%,%) -> Integer
+--R ?.value : (%,value) -> S              empty : () -> %
+--R empty? : % -> Boolean                 eq? : (%,%) -> Boolean
+--R leaf? : % -> Boolean                  leaves : % -> List S
+--R map : ((S -> S),%) -> %               nodes : % -> List %
+--R sample : () -> %                      tree : List S -> %
+--R tree : S -> %                         tree : (S,List %) -> %
+--R value : % -> S                       
+--R #? : % -> NonNegativeInteger if $ has finiteAggregate
+--R ?=? : (%,%) -> Boolean if S has SETCAT
+--R any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate
+--R child? : (%,%) -> Boolean if S has SETCAT
+--R coerce : % -> OutputForm if S has SETCAT
+--R count : (S,%) -> NonNegativeInteger if S has SETCAT and $ has finiteAggregate
+--R count : ((S -> Boolean),%) -> NonNegativeInteger if $ has finiteAggregate
+--R eval : (%,List S,List S) -> % if S has EVALAB S and S has SETCAT
+--R eval : (%,S,S) -> % if S has EVALAB S and S has SETCAT
+--R eval : (%,Equation S) -> % if S has EVALAB S and S has SETCAT
+--R eval : (%,List Equation S) -> % if S has EVALAB S and S has SETCAT
+--R every? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate
+--R hash : % -> SingleInteger if S has SETCAT
+--R latex : % -> String if S has SETCAT
+--R less? : (%,NonNegativeInteger) -> Boolean
+--R map! : ((S -> S),%) -> % if $ has shallowlyMutable
+--R member? : (S,%) -> Boolean if S has SETCAT and $ has finiteAggregate
+--R members : % -> List S if $ has finiteAggregate
+--R more? : (%,NonNegativeInteger) -> Boolean
+--R node? : (%,%) -> Boolean if S has SETCAT
+--R parts : % -> List S if $ has finiteAggregate
+--R setchildren! : (%,List %) -> % if $ has shallowlyMutable
+--R setelt : (%,value,S) -> S if $ has shallowlyMutable
+--R setvalue! : (%,S) -> S if $ has shallowlyMutable
+--R size? : (%,NonNegativeInteger) -> Boolean
+--R ?~=? : (%,%) -> Boolean if S has SETCAT
+--R
+--E 1
+
+)spool
+)lisp (bye)
+@
+<<DesingTreeCategory.help>>=
+====================================================================
+DesingTreeCategory examples
+====================================================================
+
+See Also:
+o )show DesingTreeCategory
+
+@
+
+{\bf See:}
+
+\pageto{Evalable}{EVALAB}
+
+{\bf Exports:}\\
+
+\begin{tabular}{lllll}
+\cross{DSTRCAT}{#?} &
+\cross{DSTRCAT}{?.value} &
+\cross{DSTRCAT}{?=?} &
+\cross{DSTRCAT}{?\~{}=?} &
+\cross{DSTRCAT}{any?} \\
+\cross{DSTRCAT}{child?} &
+\cross{DSTRCAT}{children} &
+\cross{DSTRCAT}{coerce} &
+\cross{DSTRCAT}{copy} &
+\cross{DSTRCAT}{count} \\
+\cross{DSTRCAT}{count} &
+\cross{DSTRCAT}{cyclic?} &
+\cross{DSTRCAT}{distance} &
+\cross{DSTRCAT}{empty} &
+\cross{DSTRCAT}{empty?} \\
+\cross{DSTRCAT}{eq?} &
+\cross{DSTRCAT}{eval} &
+\cross{DSTRCAT}{every?} &
+\cross{DSTRCAT}{hash} &
+\cross{DSTRCAT}{latex} \\
+\cross{DSTRCAT}{leaf?} &
+\cross{DSTRCAT}{leaves} &
+\cross{DSTRCAT}{less?} &
+\cross{DSTRCAT}{map} &
+\cross{DSTRCAT}{map!} \\
+\cross{DSTRCAT}{member?} &
+\cross{DSTRCAT}{members} &
+\cross{DSTRCAT}{more?} &
+\cross{DSTRCAT}{node?} &
+\cross{DSTRCAT}{nodes} \\
+\cross{DSTRCAT}{parts} &
+\cross{DSTRCAT}{sample} &
+\cross{DSTRCAT}{setchildren!} &
+\cross{DSTRCAT}{setelt} &
+\cross{DSTRCAT}{setvalue!} \\
+\cross{DSTRCAT}{size?} &
+\cross{DSTRCAT}{tree} &
+\cross{DSTRCAT}{value} &&
+\end{tabular}
+ 
+
+{\bf Attributes Exported:}
+\begin{itemize}
+\item {\bf \cross{ATTREG}{finiteAggregate}}
+is true if it is an aggregate with a finite number of elements.
+\item {\bf \cross{DSTRCAT}{shallowlyMutable}}
+is true if its values have immediate components that are 
+updateable (mutable). Note that the properties of any component 
+domain are irrevelant to the shallowlyMutable proper.
+\end{itemize}
+
+These are directly exported but not implemented:
+\begin{verbatim}
+ tree : (S,List %) -> %
+ tree : List S -> %
+ tree : S -> %                        
+\end{verbatim}
+
+These exports come from \refto{RecursiveAggregate}(Type)
+\begin{verbatim}
+ #? : % -> NonNegativeInteger if $ has finiteAggregate
+ ?.value : (%,value) -> S             
+ ?=? : (%,%) -> Boolean if S has SETCAT
+ ?~=? : (%,%) -> Boolean if S has SETCAT
+ any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate
+ child? : (%,%) -> Boolean if S has SETCAT
+ children : % -> List %               
+ coerce : % -> OutputForm if S has SETCAT
+ copy : % -> %
+ count : ((S -> Boolean),%) -> NonNegativeInteger if $ has finiteAggregate
+ count : (S,%) -> NonNegativeInteger if S has SETCAT and $ has finiteAggregate
+ cyclic? : % -> Boolean               
+ distance : (%,%) -> Integer
+ empty : () -> %
+ empty? : % -> Boolean                
+ eq? : (%,%) -> Boolean
+ eval : (%,Equation S) -> % if S has EVALAB S and S has SETCAT
+ eval : (%,List Equation S) -> % if S has EVALAB S and S has SETCAT
+ eval : (%,List S,List S) -> % if S has EVALAB S and S has SETCAT
+ eval : (%,S,S) -> % if S has EVALAB S and S has SETCAT
+ every? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate
+ hash : % -> SingleInteger if S has SETCAT
+ latex : % -> String if S has SETCAT
+ leaf? : % -> Boolean                 
+ leaves : % -> List S
+ less? : (%,NonNegativeInteger) -> Boolean
+ map : ((S -> S),%) -> %              
+ map! : ((S -> S),%) -> % if $ has shallowlyMutable
+ member? : (S,%) -> Boolean if S has SETCAT and $ has finiteAggregate
+ members : % -> List S if $ has finiteAggregate
+ more? : (%,NonNegativeInteger) -> Boolean
+ node? : (%,%) -> Boolean if S has SETCAT
+ nodes : % -> List %
+ parts : % -> List S if $ has finiteAggregate
+ sample : () -> %                     
+ setchildren! : (%,List %) -> % if $ has shallowlyMutable
+ setelt : (%,value,S) -> S if $ has shallowlyMutable
+ setvalue! : (%,S) -> S if $ has shallowlyMutable
+ size? : (%,NonNegativeInteger) -> Boolean
+ value : % -> S
+\end{verbatim}
+
+<<category DSTRCAT DesingTreeCategory>>=
+)abbrev category DSTRCAT DesingTreeCategory
+++ Authors: Gaetan Hache
+++ Date Created: jan 1998
+++ Date Last Updated: May 2010 by Tim Daly
+++ Description: 
+++ This category is part of the PAFF package
+DesingTreeCategory(S: SetCategory):Category == RecursiveAggregate(S) with
+
+  shallowlyMutable
+  finiteAggregate
+     
+  tree: (S,List %) -> %
+    ++ tree(nd,ls) creates a tree with value nd, and children ls.
+
+  tree: S -> %
+    ++ tree(nd) creates a tree with value nd, and no children
+
+  tree: List(S) -> %
+    ++ tree(l) creates a chain tree from the list l
+
+@
+<<DSTRCAT.dotabb>>=
+"DSTRCAT" [color=lightblue,href="bookvol10.2.pdf#nameddest=DSTRCAT"];
+"EVALAB" [color="#4488FF",href="bookvol10.2.pdf#nameddest=EVALAB"]
+"DSTRCAT" -> "EVALAB"
+
+@
+<<DSTRCAT.dotfull>>=
+"DesingTreeCategory()"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=DSTRCAT"];
+"DesingTreeCategory()" -> "Evalable()"
+
+<<DSTRCAT.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"DesingTreeCategory()" [color=lightblue];
+"DesingTreeCategory()" -> "Evalable(a:SetCategory)"
+
+"Evalable(a:SetCategory)" [color=lightblue];
+"Evalable(a:SetCategory)" -> "InnerEvalable(a:SetCategory,b:SetCategory)"
+
+"InnerEvalable(a:SetCategory,b:SetCategory)" [color=seagreen];
+"InnerEvalable(a:SetCategory,b:SetCategory)" ->
+    "InnerEvalable(a:SetCategory,b:Type)"
+
+"InnerEvalable(a:SetCategory,b:Type)" [color=lightblue];
+"InnerEvalable(a:SetCategory,b:Type)" -> "Category"
+
+"Category" [color=lightblue];
+
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \pagehead{FortranFunctionCategory}{FORTFN}
 \pagepic{ps/v102fortranfunctioncategory.ps}{FORTFN}{1.00}
 
@@ -77258,6 +77495,7 @@ Note that this code is not included in the generated catdef.spad file.
 <<category KONVERT ConvertibleTo>>
 
 <<category DQAGG DequeueAggregate>>
+<<category DSTRCAT DesingTreeCategory>>
 <<category DIAGG Dictionary>>
 <<category DIOPS DictionaryOperations>>
 <<category DIFEXT DifferentialExtension>>
@@ -77508,6 +77746,7 @@ digraph dotabb {
 <<DLAGG.dotabb>>
 <<DPOLCAT.dotabb>>
 <<DQAGG.dotabb>>
+<<DSTRCAT.dotabb>>
 <<DVARCAT.dotabb>>
 <<ELAGG.dotabb>>
 <<ELEMFUN.dotabb>>
@@ -77732,6 +77971,7 @@ digraph dotfull {
 <<DLAGG.dotfull>>
 <<DPOLCAT.dotfull>>
 <<DQAGG.dotfull>>
+<<DSTRCAT.dotfull>>
 <<DVARCAT.dotfull>>
 <<ELAGG.dotfull>>
 <<ELEMFUN.dotfull>>
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 9020152..819d65e 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -24381,6 +24381,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
    (|ComplexCategory| . COMPCAT)
    (|ConvertibleTo| . KONVERT)
    (|DequeueAggregate| . DQAGG)
+   (|DesingTreeCategory| . DSTRCAT)
    (|Dictionary| . DIAGG)
    (|DictionaryOperations| . DIOPS)
    (|DifferentialExtension| . DIFEXT)
diff --git a/books/ps/v102desingtreecategory.eps b/books/ps/v102desingtreecategory.eps
new file mode 100644
index 0000000..6320338
--- /dev/null
+++ b/books/ps/v102desingtreecategory.eps
@@ -0,0 +1,376 @@
+%!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 368 368
+%%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 368 368
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 332 332 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% DesingTreeCategory()
+gsave
+0.537 0.247 0.902 nodecolor
+newpath 245 324 moveto
+79 324 lineto
+79 288 lineto
+245 288 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 245 324 moveto
+79 324 lineto
+79 288 lineto
+245 288 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+87 301.9 moveto 150 (DesingTreeCategory\(\)) alignedtext
+grestore
+% Evalable(a:SetCategory)
+gsave
+0.537 0.247 0.902 nodecolor
+newpath 253 252 moveto
+71 252 lineto
+71 216 lineto
+253 216 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 253 252 moveto
+71 252 lineto
+71 216 lineto
+253 216 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+78.5 229.9 moveto 167 (Evalable\(a:SetCategory\)) alignedtext
+grestore
+% DesingTreeCategory()->Evalable(a:SetCategory)
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 162 288 moveto
+162 280 162 271 162 262 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 165.5 262 moveto
+162 252 lineto
+158.5 262 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 165.5 262 moveto
+162 252 lineto
+158.5 262 lineto
+closepath stroke
+grestore
+% InnerEvalable(a:SetCategory,b:SetCategory)
+gsave
+0.404 0.667 0.545 nodecolor
+newpath 324 180 moveto
+0 180 lineto
+0 144 lineto
+324 144 lineto
+closepath fill
+1 setlinewidth
+filled
+0.404 0.667 0.545 nodecolor
+newpath 324 180 moveto
+0 180 lineto
+0 144 lineto
+324 144 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+8 157.9 moveto 308 (InnerEvalable\(a:SetCategory,b:SetCategory\)) alignedtext
+grestore
+% Evalable(a:SetCategory)->InnerEvalable(a:SetCategory,b:SetCategory)
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 162 216 moveto
+162 208 162 199 162 190 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 165.5 190 moveto
+162 180 lineto
+158.5 190 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 165.5 190 moveto
+162 180 lineto
+158.5 190 lineto
+closepath stroke
+grestore
+% InnerEvalable(a:SetCategory,b:Type)
+gsave
+0.537 0.247 0.902 nodecolor
+newpath 296 108 moveto
+28 108 lineto
+28 72 lineto
+296 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 296 108 moveto
+28 108 lineto
+28 72 lineto
+296 72 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+35.5 85.9 moveto 253 (InnerEvalable\(a:SetCategory,b:Type\)) alignedtext
+grestore
+% InnerEvalable(a:SetCategory,b:SetCategory)->InnerEvalable(a:SetCategory,b:Type)
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 162 144 moveto
+162 136 162 127 162 118 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 165.5 118 moveto
+162 108 lineto
+158.5 118 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 165.5 118 moveto
+162 108 lineto
+158.5 118 lineto
+closepath stroke
+grestore
+% Category
+gsave
+0.537 0.247 0.902 nodecolor
+newpath 201 36 moveto
+123 36 lineto
+123 0 lineto
+201 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 201 36 moveto
+123 36 lineto
+123 0 lineto
+201 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+130.5 13.9 moveto 63 (Category) alignedtext
+grestore
+% InnerEvalable(a:SetCategory,b:Type)->Category
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 162 72 moveto
+162 64 162 55 162 46 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 165.5 46 moveto
+162 36 lineto
+158.5 46 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 165.5 46 moveto
+162 36 lineto
+158.5 46 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index 46f1457..57f98ab 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+20100520 tpd src/axiom-website/patches.html 20100520.02.tpd.patch
+20100520 tpd src/algebra/Makefile help and test for DesingTreeCategory
+20100520 tpd books/bookvol5 expose DesingTreeCategory
+20100520 tpd books/bookvol10.2 add DesingTreeCategory
+20100520 tpd books/ps/v102desingtreecategory.eps added
 20100520 tpd src/axiom-website/patches.html 20100520.01.tpd.patch
 20100520 tpd src/algebra/Makefile help and test for PACECT, INFCLSPS 
 20100520 tpd books/bookvol5 expose PACECT, INFCLSPS
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index e05b73e..bc1fe8c 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -1253,7 +1253,8 @@ Used by next layer: BGAGG BRAGG ELAGG- GRMOD MODULE OAMON
 LAYER3=\
   ${OUT}/AUTOMOR.o  ${OUT}/BGAGG.o   ${OUT}/BGAGG-.o   ${OUT}/BRAGG.o    \
   ${OUT}/BRAGG-.o   ${OUT}/CARTEN2.o ${OUT}/CHARPOL.o  ${OUT}/COMPLEX2.o \
-  ${OUT}/DIFEXT.o   ${OUT}/DIFEXT-.o ${OUT}/DLAGG.o    ${OUT}/ELAGG.o    \
+  ${OUT}/DIFEXT.o   ${OUT}/DIFEXT-.o ${OUT}/DLAGG.o    ${OUT}/DSTRCAT.o  \
+  ${OUT}/ELAGG.o    \
   ${OUT}/ELAGG-.o   ${OUT}/ES1.o     ${OUT}/ES2.o      ${OUT}/GRMOD.o    \
   ${OUT}/GRMOD-.o   ${OUT}/HYPCAT.o  ${OUT}/HYPCAT-.o  ${OUT}/MKCHSET.o  \
   ${OUT}/MODRING.o  ${OUT}/MODULE.o  ${OUT}/MODULE-.o  ${OUT}/NASRING.o  \
@@ -1345,6 +1346,11 @@ LAYER3=\
 "DLAGG" -> "EVALAB"
 /*"DLAGG" -> "IEVALAB"*/
 
+"DSTRCAT"  [color="#4488FF",href="bookvol10.2.pdf#nameddest=DSTRCAT"]
+/*"DSTRCAT" -> {"RCAGG"; "HOAGG"; "AGG"; "TYPE"; "SETCAT"; "BASTYPE"}*/
+"DSTRCAT" -> "EVALAB"
+/*"DSTRCAT" -> {"KOERCE"; "IEVALAB"}*/
+
 "ELAGG"  [color="#4488FF",href="bookvol10.2.pdf#nameddest=ELAGG"]
 /*"ELAGG" -> "LNAGG"*/
 "ELAGG" -> "IXAGG"
@@ -16744,16 +16750,11 @@ ${MID}/INFCLSPT.nrlib/code.o: ${MID}/INFCLSPT.spad
 	      | ${INTERPSYS} >${TMP}/trace ; \
 	   fi )
 @
-ICPDEPS = LOCPOWC PRSPCAT DIVCAT BLMETCT PROJPL NSDPS PLACES DIV \
-          INFCLCT INFCLSPT SETCATD PLACESC AFFPL
 
 <<newcode>>=
  
-ICPDEPS = UTSZ FFSQFR FFFACTSE INTERGB PACPERC PACFFC PACRATC FACTRN \
-               PACRAT PACOFF PACEXTC FACTEXT PACEXT LOP RFP LOCPOWC NSDPS \
-               LISYSER BLMETCT BLQT BLHN PRSPCAT PROJSP PROJPL PROJPLPS \
-               SETCATD AFSPCAT AFFSP AFFPL AFFPLPS DIVCAT DIV PLACESC PLCS \
-               PLACES PLACESPS INFCLCT INFCLSPT
+ICPDEPS = LOCPOWC PRSPCAT DIVCAT BLMETCT PROJPL NSDPS PLACES DIV \
+          INFCLCT INFCLSPT SETCATD PLACESC AFFPL
 
 ${MID}/ICP.nrlib/code.o: ${MID}/ICP.spad
 	@echo P3 making ${MID}/ICP.nrlib/code.o from ${MID}/ICP.spad
@@ -16768,11 +16769,8 @@ ${MID}/ICP.nrlib/code.o: ${MID}/ICP.spad
 @
 <<newcode>>=
  
-INFCLSPSDEPS = UTSZ FFSQFR FFFACTSE INTERGB PACPERC PACFFC PACRATC FACTRN \
-               PACRAT PACOFF PACEXTC FACTEXT PACEXT LOP RFP LOCPOWC NSDPS \
-               LISYSER BLMETCT BLQT BLHN PRSPCAT PROJSP PROJPL PROJPLPS \
-               SETCATD AFSPCAT AFFSP AFFPL AFFPLPS DIVCAT DIV PLACESC PLCS \
-               PLACES PLACESPS INFCLCT INFCLSPT ICP
+INFCLSPSDEPS = BLMETCT PACOFF PROJPLPS NSDPS PLACESPS DIV INFCLCT INFCLSPT \
+               SETCATD PLACESC LOCPOWC DIVCAT PACOFF AFFPL
 
 ${MID}/INFCLSPS.nrlib/code.o: ${MID}/INFCLSPS.spad
 	@echo P3 making ${MID}/INFCLSPS.nrlib/code.o from ${MID}/INFCLSPS.spad
@@ -17519,6 +17517,7 @@ SPADHELP=\
  ${HELP}/DeRhamComplex.help \
  ${HELP}/DecimalExpansion.help \
  ${HELP}/Dequeue.help \
+ ${HELP}/DesingTreeCategory.help \
  ${HELP}/DistributedMultivariatePolynomial.help \
  ${HELP}/Divisor.help \
  ${HELP}/DivisorCategory.help \
@@ -17715,11 +17714,12 @@ REGRESS= \
  DeRhamComplex.regress \
  DecimalExpansion.regress \
  Dequeue.regress \
+ DesingTreeCategory.regress \
+ DistributedMultivariatePolynomial.regress \
  Divisor.regress \
  DivisorCategory.regress \
  DoubleFloat.regress \
  ElementaryFunction.regress \
- DistributedMultivariatePolynomial.regress \
  EqTable.regress \
  Equation.regress \
  Expression.regress \
@@ -18197,6 +18197,19 @@ ${HELP}/Dequeue.help: ${BOOKS}/bookvol10.3.pamphlet
             >${INPUT}/Dequeue.input
 	@echo "Dequeue (DEQUEUE)" >>${HELPFILE}
 
+${HELP}/DesingTreeCategory.help: \
+            ${BOOKS}/bookvol10.2.pamphlet
+	@echo 7295 create DesingTreeCategory.help \
+            from ${BOOKS}/bookvol10.2.pamphlet
+	@${TANGLE} -R"DesingTreeCategory.help" \
+           ${BOOKS}/bookvol10.2.pamphlet \
+            >${HELP}/DesingTreeCategory.help
+	@cp ${HELP}/DesingTreeCategory.help ${HELP}/DSTRCAT.help
+	@${TANGLE} -R"DesingTreeCategory.input" \
+           ${BOOKS}/bookvol10.2.pamphlet \
+            >${INPUT}/DesingTreeCategory.input
+	@echo "DesingTreeCategory (DSTRCAT)" >>${HELPFILE}
+
 ${HELP}/DistributedMultivariatePolynomial.help: \
             ${BOOKS}/bookvol10.3.pamphlet
 	@echo 7200 create DistributedMultivariatePolynomial.help \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 88170dc..aea8b9e 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2765,5 +2765,7 @@ books/ps/v103infinitlyclosepoint.eps change to lowercase<br/>
 books/bookvol10.3 add InfClsPt<br/>
 <a href="patches/20100520.01.tpd.patch">20100520.01.tpd.patch</a>
 books/bookvol10.3 add PACEXT, INFCLSPS<br/>
+<a href="patches/20100520.02.tpd.patch">20100520.02.tpd.patch</a>
+books/bookvol10.2 add DesingTreeCategory<br/>
  </body>
 </html>
