diff --git a/books/bookvol0.pamphlet b/books/bookvol0.pamphlet
index 4410502..03af651 100644
--- a/books/bookvol0.pamphlet
+++ b/books/bookvol0.pamphlet
@@ -64002,6 +64002,9 @@ $\hbox{{\rm op}}_{j}$ & is an operation exported by the category.
 %
 \condata{LSAGG}{ListAggregate}{ExtensibleLinearAggregate FiniteLinearAggregate StreamAggregate}{list}
 %
+\condata{MAGCDOC}{ModularAlgebraicGcdOperations}{}{
+ canonicalIfCan degree MPtoMPT packExps packModulus pseudoRem repack1 zero?}
+
 \condata{MATCAT}{MatrixCategory}{TwoDimensionalArrayCategory}{{\tt *} {\tt **} {\tt +} {\tt -} {\tt /} antisymmetric?
    coerce determinant diagonal? diagonalMatrix elt exquo horizConcat inverse listOfLists matrix minordet nullSpace nullity
    rank rowEchelon scalarMatrix setelt setsubMatrix! square? squareTop subMatrix swapColumns! swapRows! symmetric?
diff --git a/books/bookvol10.2.pamphlet b/books/bookvol10.2.pamphlet
index 7e5f5ec..3e48804 100644
--- a/books/bookvol10.2.pamphlet
+++ b/books/bookvol10.2.pamphlet
@@ -286,6 +286,7 @@ This is the root of the category hierarchy and is not represented by code.
 \pageto{HyperbolicFunctionCategory}{HYPCAT}
 \pageto{InnerEvalable}{IEVALAB}
 \pageto{Logic}{LOGIC}
+\pageto{ModularAlgebraicGcdOperations}{MAGCDOC}
 \pageto{OpenMath}{OM}
 \pageto{PartialTranscendentalFunctions}{PTRANFN}
 \pageto{Patternable}{PATAB}
@@ -1688,6 +1689,154 @@ digraph pic {
 
 \end{chunk}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{ModularAlgebraicGcdOperations}{MAGCDOC}
+\pagepic{ps/v102modularalgebraicgcdoperations.ps}{MAGCDOC}{1.00}
+
+\begin{chunk}{ModularAlgebraicGcdOperations.input}
+)set break resume
+)sys rm -f ModularAlgebraicGcdOperations.output
+)spool ModularAlgebraicGcdOperations.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show ModularAlgebraicGcdOperations
+--R ModularAlgebraicGcdOperations(MPT: Type,MD: Type)  is a category constructor
+--R Abbreviation for ModularAlgebraicGcdOperations is MAGCDOC 
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.2.pamphlet to see algebra source code for MAGCDOC 
+--R
+--R------------------------------- Operations --------------------------------
+--R degree : MPT -> Integer               pseudoRem : (MPT,MPT,MD) -> MPT
+--R zero? : MPT -> Boolean               
+--R MPtoMPT : (Polynomial(Integer),Symbol,List(Symbol),MD) -> MPT
+--R canonicalIfCan : (MPT,MD) -> Union(MPT,"failed")
+--R packExps : (Integer,Integer,MD) -> SortedExponentVector
+--R packModulus : (List(Polynomial(Integer)),List(Symbol),Integer) -> Union(MD,"failed")
+--R repack1 : (MPT,U32Vector,Integer,MD) -> Void
+--R
+--E 1
+
+)spool
+)lisp (bye)
+\end{chunk}
+\begin{chunk}{ModularAlgebraicGcdOperations.help}
+====================================================================
+ModularAlgebraicGcdOperations 
+====================================================================
+
+This category specifies operations needed by ModularAlgebraicGcd
+package.  Since we have multiple implementations we specify interface
+here and put implementations in separate packages.  Most operations
+are done using special purpose abstract representation.  Apropriate
+types are passesd as parametes: MPT is type of modular polynomials in
+one variable with coefficients in some algebraic extension.  MD is
+type of modulus.  Final results are converted to packed representation, 
+with coefficients (from prime field) stored in one array and exponents 
+(in main variable and in auxilary variables representing generators 
+of algebrac extension) stored in parallel array.
+
+\end{chunk}
+
+{\bf Exports:}\\
+
+\begin{tabular}{lllll}
+\cross{MAGCDOC}{canonicalIfCan} &
+\cross{MAGCDOC}{degree} &
+\cross{MAGCDOC}{MPtoMPT} &
+\cross{MAGCDOC}{packExps} &
+\cross{MAGCDOC}{packModulus} \\
+\cross{MAGCDOC}{pseudoRem} &
+\cross{MAGCDOC}{repack1} &
+\cross{MAGCDOC}{zero?} &
+\end{tabular}
+
+These are directly exported but not implemented:
+\begin{verbatim}
+ canonicalIfCan : (MPT,MD) -> Union(MPT,"failed")
+ degree : MPT -> Integer              
+ MPtoMPT : (Polynomial(Integer),Symbol,List(Symbol),MD) -> MPT
+ packExps : (Integer,Integer,MD) -> SortedExponentVector
+ packModulus : (List(Polynomial(Integer)),List(Symbol),Integer) ->
+                  Union(MD,"failed")
+ pseudoRem : (MPT,MPT,MD) -> MPT
+ repack1 : (MPT,U32Vector,Integer,MD) -> Void
+ zero? : MPT -> Boolean               
+\end{verbatim}
+
+\begin{chunk}{category MAGCDOC ModularAlgebraicGcdOperations}
+)abbrev category MAGCDOC ModularAlgebraicGcdOperations
+++ Description: This category specifies operations needed by
+++ ModularAlgebraicGcd package.  Since we have multiple
+++ implementations we specify interface here and put
+++ implementations in separate packages.  Most operations
+++ are done using special purpose abstract representation.
+++ Apropriate types are passesd as parametes: MPT is type
+++ of modular polynomials in one variable with coefficients
+++ in some algebraic extension.  MD is type of modulus.
+++ Final results are converted to packed representation,
+++ with coefficients (from prime field) stored in one
+++ array and exponents (in main variable and in auxilary
+++ variables representing generators of algebrac extension)
+++ stored in parallel array.
+ModularAlgebraicGcdOperations(MPT : Type, MD : Type) : Category ==
+  Exports where
+    MP ==> Polynomial Integer
+    PA ==> U32Vector
+    Exports ==> with
+        pseudoRem : (MPT, MPT, MD) -> MPT
+          ++ pseudoRem(x, y, m) computes pseudoremainder of x by y
+          ++ modulo m.
+        canonicalIfCan : (MPT, MD) -> Union(MPT, "failed")
+          ++ canonicalIfCan(x, m) tries to divide x by its leading
+          ++ coefficient modulo m.
+        packModulus : (List MP, List(Symbol), Integer) -> Union(MD, "failed")
+          ++ packModulus(lp, ls, p) converts lp, ls and prime p which
+          ++ together describe algebraic extension to packed
+          ++ representation.
+        MPtoMPT : (MP, Symbol, List(Symbol), MD) -> MPT
+          ++ MPtoMPT(p, s, ls, m) coverts p to packed represntation.
+        zero? : MPT -> Boolean
+          ++ zero?(x) checks if x is zero.
+        degree : MPT -> Integer
+          ++ degree(x) gives degree of x.
+        packExps : (Integer, Integer, MD) -> SortedExponentVector
+          ++ packExps(d, s, m) produces vector of exponents up
+          ++ to degree d.  s is size (degree) of algebraic extension.
+          ++ Use together with repack1.
+        repack1 : (MPT, PA, Integer, MD) -> Void
+          ++ repack1(x, a, d, m) stores coefficients of x in a.
+          ++ d is degree of x.  Corresponding exponents are given
+          ++ by packExps.
+
+\end{chunk}
+\begin{chunk}{MAGCDOC.dotabb}
+"MAGCDOC"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=MAGCDOC"];
+"MAGCDOC" -> "CATEGORY"
+
+\end{chunk}
+\begin{chunk}{MAGCDOC.dotfull}
+"ModularAlgebraicGcdOperations()"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=MAGCDOC"];
+"ModularAlgebraicGcdOperations(a:Type,b:Type)" -> "Category"
+
+\end{chunk}
+\begin{chunk}{MAGCDOC.dotpic}
+digraph pic {
+ fontsize=10;
+ bgcolor="#ECEA81";
+ node [shape=box, color=white, style=filled];
+
+"MAGCDOC" [color=lightblue];
+"MAGCDOC" -> "Category"
+
+"Category" [color=lightblue];
+}
+
+\end{chunk}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \pagehead{OpenMath}{OM}
 \pagepic{ps/v102openmath.ps}{OM}{1.00}
 
@@ -91606,6 +91755,7 @@ digraph dotabb {
 \getchunk{LOGIC.dotabb}
 \getchunk{LSAGG.dotabb}
 \getchunk{LZSTAGG.dotabb}
+\getchunk{MAGCDOC.dotabb}
 \getchunk{MATCAT.dotabb}
 \getchunk{MDAGG.dotabb}
 \getchunk{MLO.dotabb}
@@ -91831,6 +91981,7 @@ digraph dotfull {
 \getchunk{LOGIC.dotfull}
 \getchunk{LSAGG.dotfull}
 \getchunk{LZSTAGG.dotfull}
+\getchunk{MAGCDOC.dotfull}
 \getchunk{MATCAT.dotfull}
 \getchunk{MDAGG.dotfull}
 \getchunk{MLO.dotfull}
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 4f214d6..3d91d00 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -24449,6 +24449,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
    (|MatrixCommonDenominator| . MCDEN)
    (|MatrixLinearAlgebraFunctions| . MATLIN)
    (|MergeThing| . MTHING)
+   (|ModularAlgebraicGcdOperations| . MAGCDOC)
    (|ModularDistinctDegreeFactorizer| . MDDFACT)
    (|ModuleOperator| . MODOP)
    (|MonoidRingFunctions2| . MRF2)
diff --git a/books/ps/v102modularalgebraicgcdoperations.ps b/books/ps/v102modularalgebraicgcdoperations.ps
new file mode 100644
index 0000000..ac67cae
--- /dev/null
+++ b/books/ps/v102modularalgebraicgcdoperations.ps
@@ -0,0 +1,270 @@
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.26.3 (20100126.1600)
+%%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 136 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 100 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+0.16355 0.45339 0.92549 graphcolor
+newpath -4 -5 moveto
+-4 112 lineto
+97 112 lineto
+97 -5 lineto
+closepath fill
+1 setlinewidth
+0.16355 0.45339 0.92549 graphcolor
+newpath -4 -5 moveto
+-4 112 lineto
+97 112 lineto
+97 -5 lineto
+closepath stroke
+% MAGCDOC
+gsave
+0.53725 0.24706 0.90196 nodecolor
+newpath 92 108 moveto
+0 108 lineto
+0 72 lineto
+92 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.53725 0.24706 0.90196 nodecolor
+newpath 92 108 moveto
+0 108 lineto
+0 72 lineto
+92 72 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 86.4 moveto 76 (MAGCDOC) alignedtext
+grestore
+% Category
+gsave
+0.53725 0.24706 0.90196 nodecolor
+newpath 86 36 moveto
+6 36 lineto
+6 0 lineto
+86 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.53725 0.24706 0.90196 nodecolor
+newpath 86 36 moveto
+6 36 lineto
+6 0 lineto
+86 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 14.4 moveto 64 (Category) alignedtext
+grestore
+% MAGCDOC->Category
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 46 71.83 moveto
+46 64.13 46 54.97 46 46.42 curveto
+stroke
+0 0 0 edgecolor
+newpath 49.5 46.41 moveto
+46 36.41 lineto
+42.5 46.41 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 49.5 46.41 moveto
+46 36.41 lineto
+42.5 46.41 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 136 152
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index b25eb70..1e20baf 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,9 @@
+20130216 tpd src/axiom-website/patches.html 20130216.02.tpd.patch
+20130216 tpd src/algebra/Makefile compile MAGCDOC
+20130216 tpd books/bookvol5 expose MAGCDOC
+20130216 tpd books/bookvol10.2 add MAGCDOC
+20130216 tpd books/bookvol0 add condata for MAGCDOC
+20130216 tpd books/ps/v102modularalgebraicgcdoperations.ps added
 20130216 gdr src/axiom-website/patches.html 20130216.01.gdr.patch
 20130216 gdr books/bookvol10.2 add matrix initializer function
 20130214 tpd src/axiom-website/patches.html 20130214.02.tpd.patch
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 43695a7..e2c499b 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -171,7 +171,7 @@ The help section gets typed out when the user types:
 )help BasicStochasticDifferential
 \end{verbatim}
 \begin{verbatim}
-<BasicStochasticDifferential.help>>=
+begin{chunk}{BasicStochasticDifferential.help}
 ====================================================================
 BasicStochasticDifferential examples
 ====================================================================
@@ -199,7 +199,7 @@ o )help BasicStochasticDifferential
 o )help HexadecimalExpansion
 o )show BasicStochasticDifferential
 
- @
+end{chunk}
 \end{verbatim}
 
 \subsubsection{The pagehead section}
@@ -585,7 +585,8 @@ Used by next layer: BASTYPE CFCAT KOERCE KONVERT TYPE
 LAYER0=\
   ${OUT}/AHYP.o     ${OUT}/ATTREG.o  ${OUT}/BASTYPE.o ${OUT}/BASTYPE-.o \
   ${OUT}/CFCAT.o    ${OUT}/ELTAB.o   ${OUT}/ESCONT1.o ${OUT}/GRDEF.o \
-  ${OUT}/INTBIT.o   ${OUT}/KOERCE.o  ${OUT}/KONVERT.o ${OUT}/MSYSCMD.o \
+  ${OUT}/INTBIT.o   ${OUT}/KOERCE.o  ${OUT}/KONVERT.o \
+  ${OUT}/MAGCDOC.o  ${OUT}/MSYSCMD.o \
   ${OUT}/ODEIFTBL.o ${OUT}/OM.o      ${OUT}/OMCONN.o  ${OUT}/OMDEV.o  \
   ${OUT}/OUT.o      ${OUT}/PRIMCAT.o ${OUT}/PRINT.o   ${OUT}/PTRANFN.o \
   ${OUT}/RFDIST.o   ${OUT}/RIDIST.o  ${OUT}/SPFCAT.o  ${OUT}/TYPE.o \
@@ -640,6 +641,9 @@ LAYER0=\
 "KONVERT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=KONVERT"]
 "KONVERT"  -> "Category"
 
+"MAGCDOC" [color="#4488FF",href="bookvol10.2.pdf#nameddest=MAGCDOC"]
+"MAGCDOC" -> "Category"
+
 "MSYSCMD" [color="#FF4488",href="bookvol10.4.pdf#nameddest=MSYSCMD"]
 "MSYSCMD" -> "Package"
 
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index a04ccb0..3c75a15 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -3973,5 +3973,7 @@ buglist add bug 7232
 src/input/rsa.input added
 <a href="patches/20130216.01.gdr.patch">20130216.01.gdr.patch</a>
 books/bookvol10.2 add matrix initializer function
+<a href="patches/20130216.02.tpd.patch">20130216.02.tpd.patch</a>
+books/bookvol10.2 add MAGCDOC
  </body>
 </html>
