diff --git a/books/bookvol10.3.pamphlet b/books/bookvol10.3.pamphlet
index f165480..a4fb558 100644
--- a/books/bookvol10.3.pamphlet
+++ b/books/bookvol10.3.pamphlet
@@ -67877,37 +67877,73 @@ OrderedDirectProduct(dim:NonNegativeInteger,
 
 --S 1 of 24
 m1:=(x*y*y*z)$OFMONOID(Symbol)
+--R 
+--R
+--R           2
+--R   (1)  x y z
+--R                                               Type: OrderedFreeMonoid Symbol
 --E 1
 
 --S 2 of 24
 m2:=(x*y)$OFMONOID(Symbol)
+--R 
+--R
+--R   (2)  x y
+--R                                               Type: OrderedFreeMonoid Symbol
 --E 2
 
 --S 3 of 24
 lquo(m1,m2)
+--R 
+--R
+--R   (3)  y z
+--R                                    Type: Union(OrderedFreeMonoid Symbol,...)
 --E 3
 
 --S 4 of 24
 m3:=(y*y)$OFMONOID(Symbol)
+--R 
+--R
+--R         2
+--R   (4)  y
+--R                                               Type: OrderedFreeMonoid Symbol
 --E 4
 
 --S 5 of 24
 divide(m1,m2)
+--R 
+--R
+--R   (5)  [lm= y z,rm= "failed"]
+--RType: Union(Record(lm: Union(OrderedFreeMonoid Symbol,"failed"),rm: Union(OrderedFreeMonoid Symbol,"failed")),...)
 --E 5
 
 --S 6 of 24
 divide(m1,m3)
+--R 
+--R
+--R   (6)  [lm= "failed",rm= "failed"]
+--RType: Union(Record(lm: Union(OrderedFreeMonoid Symbol,"failed"),rm: Union(OrderedFreeMonoid Symbol,"failed")),...)
 --E 6
 
 --S 7 of 24
 m4:=(y^3)$OFMONOID(Symbol)
+--R 
+--R
+--R         3
+--R   (7)  y
+--R                                               Type: OrderedFreeMonoid Symbol
 --E 7
 
 --S 8 of 24
 divide(m1,m4)
+--R 
+--R
+--R   (8)  [lm= "failed",rm= "failed"]
+--RType: Union(Record(lm: Union(OrderedFreeMonoid Symbol,"failed"),rm: Union(OrderedFreeMonoid Symbol,"failed")),...)
 --E 8
 
 )set function compile on
+ 
 
 -- Build the non-commutative algebra h=k[x,y] and then make computations
 -- in h using some predefined rules for x and y. For example, giving
@@ -67925,6 +67961,8 @@ divide(m1,m4)
 
 --S 9 of 24
 C ==> OVAR [a,b]
+--R 
+--R                                                                   Type: Void
 --E 9
 
 -- Commutative Field: k = Q[a,b]
@@ -67933,12 +67971,16 @@ C ==> OVAR [a,b]
 
 --S 10 of 24
 K ==> SMP(FRAC INT,C)
+--R 
+--R                                                                   Type: Void
 --E 10
 
 -- Non-commutative variables
 
 --S 11 of 24
 V ==> OVAR [x,y]
+--R 
+--R                                                                   Type: Void
 --E 11
 
 -- Non-commuative algebra k=k[x,y]
@@ -67946,12 +67988,16 @@ V ==> OVAR [x,y]
 
 --S 12 of 24
 H ==> XDPOLY(V,K)
+--R 
+--R                                                                   Type: Void
 --E 12
 
 -- Free Monoid
 
 --S 13 of 24
 M ==> OFMONOID V
+--R 
+--R                                                                   Type: Void
 --E 13
 
 -- Substitution rules are applied to words from the monoid over the 
@@ -67971,35 +68017,127 @@ subs(w:M):H ==
       monom(n3,1)$H * (a::K*y::V+b::K)$M * monom(n3,1)$H
     monom(n2,1)$H * (a::K*x::V+b::K)$H * monom(n2,1)$H
   monom(n1,1)$H * (y::V*x::V*y::V)$H * monom(n1,1)$H
+--R 
+--R   Function declaration subs : OrderedFreeMonoid OrderedVariableList [x
+--R      ,y] -> XDistributedPolynomial(OrderedVariableList [x,y],
+--R      SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList
+--R      [a,b])) has been added to workspace.
+--R                                                                   Type: Void
 --E 14
 
 -- Apply rules to a term. Keep coefficients
 --S 15 of 24
 newterm(x:Record(k:M,c:K)):H == x.c*subs(x,k)
+--R 
+--R   Function declaration newterm : Record(k: OrderedFreeMonoid 
+--R      OrderedVariableList [x,y],c: SparseMultivariatePolynomial(
+--R      Fraction Integer,OrderedVariableList [a,b])) -> 
+--R      XDistributedPolynomial(OrderedVariableList [x,y],
+--R      SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList
+--R      [a,b])) has been added to workspace.
+--R                                                                   Type: Void
 --E 15
 
 -- Reconstruct the polynomial term by term
 
 --S 16 of 24
 newpoly(t:H):H == reduce(+,map(newterm,listOfTerms(t)))
+--R 
+--R   Function declaration newpoly : XDistributedPolynomial(
+--R      OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction 
+--R      Integer,OrderedVariableList [a,b])) -> XDistributedPolynomial(
+--R      OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction 
+--R      Integer,OrderedVariableList [a,b])) has been added to workspace.
+--R                                                                   Type: Void
 --E 16
 
 -- Example calcuations
 
 --S 17 of 24
 p1:(x::V+y::V)$H^2
+--R 
+--R 
+--RDaly Bug
+--R   Category, domain or package constructor ^ is not available.
 --E 17
 
 --S 18 of 24
 newpoly(p1)
+--R 
+--R   There are no library operations named listOfTerms 
+--R      Use HyperDoc Browse or issue
+--R                            )what op listOfTerms
+--R      to learn if there is any operation containing " listOfTerms " in 
+--R      its name.
+--R   Cannot find a definition or applicable library operation named 
+--R      listOfTerms with argument type(s) 
+--RXDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
+--R      
+--R      Perhaps you should use "@" to indicate the required return type, 
+--R      or "$" to specify which version of the function you need.
+--R   AXIOM will attempt to step through and interpret the code.
+--R   Compiling function newpoly with type XDistributedPolynomial(
+--R      OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction 
+--R      Integer,OrderedVariableList [a,b])) -> XDistributedPolynomial(
+--R      OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction 
+--R      Integer,OrderedVariableList [a,b])) 
+--R   There are no library operations named listOfTerms 
+--R      Use HyperDoc Browse or issue
+--R                            )what op listOfTerms
+--R      to learn if there is any operation containing " listOfTerms " in 
+--R      its name.
+--R 
+--RDaly Bug
+--R   Cannot find a definition or applicable library operation named 
+--R      listOfTerms with argument type(s) 
+--RXDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
+--R      
+--R      Perhaps you should use "@" to indicate the required return type, 
+--R      or "$" to specify which version of the function you need.
 --E 18
 
 --S 19 of 24
 p2:=(x::V+y::V)$H^3
+--R 
+--R
+--R          3    2               2      2            2     3
+--R   (17)  y  + y x + y x y + y x  + x y  + x y x + x y + x
+--RType: XDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
 --E 19
 
 --S 20 of 24
 pNew:=newpoly(p2)
+--R 
+--R   There are no library operations named listOfTerms 
+--R      Use HyperDoc Browse or issue
+--R                            )what op listOfTerms
+--R      to learn if there is any operation containing " listOfTerms " in 
+--R      its name.
+--R   Cannot find a definition or applicable library operation named 
+--R      listOfTerms with argument type(s) 
+--RXDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
+--R      
+--R      Perhaps you should use "@" to indicate the required return type, 
+--R      or "$" to specify which version of the function you need.
+--R   AXIOM will attempt to step through and interpret the code.
+--R   Compiling function newpoly with type XDistributedPolynomial(
+--R      OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction 
+--R      Integer,OrderedVariableList [a,b])) -> XDistributedPolynomial(
+--R      OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction 
+--R      Integer,OrderedVariableList [a,b])) 
+--R   There are no library operations named listOfTerms 
+--R      Use HyperDoc Browse or issue
+--R                            )what op listOfTerms
+--R      to learn if there is any operation containing " listOfTerms " in 
+--R      its name.
+--R 
+--RDaly Bug
+--R   Cannot find a definition or applicable library operation named 
+--R      listOfTerms with argument type(s) 
+--RXDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
+--R      
+--R      Perhaps you should use "@" to indicate the required return type, 
+--R      or "$" to specify which version of the function you need.
 --E 20
 
 -- But the rules should be applied more than once
@@ -68007,10 +68145,45 @@ pNew:=newpoly(p2)
 while pNew ~= p2 repeat
   p2 := pNew
   pNew := newpoly(p2)
+--R 
+--R   There are no library operations named listOfTerms 
+--R      Use HyperDoc Browse or issue
+--R                            )what op listOfTerms
+--R      to learn if there is any operation containing " listOfTerms " in 
+--R      its name.
+--R   Cannot find a definition or applicable library operation named 
+--R      listOfTerms with argument type(s) 
+--RXDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
+--R      
+--R      Perhaps you should use "@" to indicate the required return type, 
+--R      or "$" to specify which version of the function you need.
+--R   AXIOM will attempt to step through and interpret the code.
+--R   Compiling function newpoly with type XDistributedPolynomial(
+--R      OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction 
+--R      Integer,OrderedVariableList [a,b])) -> XDistributedPolynomial(
+--R      OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction 
+--R      Integer,OrderedVariableList [a,b])) 
+--R   There are no library operations named listOfTerms 
+--R      Use HyperDoc Browse or issue
+--R                            )what op listOfTerms
+--R      to learn if there is any operation containing " listOfTerms " in 
+--R      its name.
+--R 
+--RDaly Bug
+--R   Cannot find a definition or applicable library operation named 
+--R      listOfTerms with argument type(s) 
+--RXDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
+--R      
+--R      Perhaps you should use "@" to indicate the required return type, 
+--R      or "$" to specify which version of the function you need.
 --E 21
 
 --S 22 of 24
 pNew
+--R 
+--R
+--R   (18)  pNew
+--R                                                          Type: Variable pNew
 --E 22
 
 --S 23 of 24
@@ -68021,10 +68194,54 @@ reduce(p:H):H ==
     p2 := p3
     p3 := newpoly(p2)
   p3
+--R 
+--R   Function declaration reduce : XDistributedPolynomial(
+--R      OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction 
+--R      Integer,OrderedVariableList [a,b])) -> XDistributedPolynomial(
+--R      OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction 
+--R      Integer,OrderedVariableList [a,b])) has been added to workspace.
+--R   Compiled code for newpoly has been cleared.
+--R                                                                   Type: Void
 --E 23
 
 --S 24 of 24
 reduce(p2)
+--R 
+--R   There are no library operations named listOfTerms 
+--R      Use HyperDoc Browse or issue
+--R                            )what op listOfTerms
+--R      to learn if there is any operation containing " listOfTerms " in 
+--R      its name.
+--R   Cannot find a definition or applicable library operation named 
+--R      listOfTerms with argument type(s) 
+--RXDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
+--R      
+--R      Perhaps you should use "@" to indicate the required return type, 
+--R      or "$" to specify which version of the function you need.
+--R   AXIOM will attempt to step through and interpret the code.
+--R   Compiling function newpoly with type XDistributedPolynomial(
+--R      OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction 
+--R      Integer,OrderedVariableList [a,b])) -> XDistributedPolynomial(
+--R      OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction 
+--R      Integer,OrderedVariableList [a,b])) 
+--R   Compiling function reduce with type XDistributedPolynomial(
+--R      OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction 
+--R      Integer,OrderedVariableList [a,b])) -> XDistributedPolynomial(
+--R      OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction 
+--R      Integer,OrderedVariableList [a,b])) 
+--R   There are no library operations named listOfTerms 
+--R      Use HyperDoc Browse or issue
+--R                            )what op listOfTerms
+--R      to learn if there is any operation containing " listOfTerms " in 
+--R      its name.
+--R 
+--RDaly Bug
+--R   Cannot find a definition or applicable library operation named 
+--R      listOfTerms with argument type(s) 
+--RXDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
+--R      
+--R      Perhaps you should use "@" to indicate the required return type, 
+--R      or "$" to specify which version of the function you need.
 --E 24
 
 )spool
@@ -71387,6 +71604,9 @@ PartialFraction(R: EuclideanDomain): Cat == Capsule where
     coerce: % -> Fraction R
       ++ coerce(p) sums up the components of the partial fraction and
       ++ returns a single fraction.
+      ++
+      ++X a:=(13/74)::PFR(INT)
+      ++X a::FRAC(INT)
 
     coerce:  Fraction FRR -> %
       ++ coerce(f) takes a fraction with numerator and denominator in
@@ -71394,32 +71614,52 @@ PartialFraction(R: EuclideanDomain): Cat == Capsule where
       ++ necessary for the parts to be factored because it is not
       ++ known in general how to factor elements of \spad{R} and
       ++ this is needed to decompose into partial fractions.
+      ++
+      ++X (13/74)::PFR(INT)
 
     compactFraction: % -> %
       ++ compactFraction(p) normalizes the partial fraction \spad{p}
       ++ to the compact representation. In this form, the partial
       ++ fraction has only one fractional term per prime in the
       ++ denominator.
+      ++
+      ++X a:=partialFraction(1,factorial 10)
+      ++X b:=padicFraction(a)
+      ++X compactFraction(b)
 
     firstDenom: % -> FRR
       ++ firstDenom(p) extracts the denominator of the first fractional
       ++ term. This returns 1 if there is no fractional part (use
       ++ \spadfunFrom{wholePart}{PartialFraction} to get the whole part).
+      ++
+      ++X a:=partialFraction(1,factorial 10)
+      ++X firstDenom(a)
 
     firstNumer:  % -> R
       ++ firstNumer(p) extracts the numerator of the first fractional
       ++ term. This returns 0 if there is no fractional part (use
       ++ \spadfunFrom{wholePart}{PartialFraction} to get the whole part).
+      ++
+      ++X a:=partialFraction(1,factorial 10)
+      ++X firstNumer(a)
 
     nthFractionalTerm:  (%,Integer) -> %
       ++ nthFractionalTerm(p,n) extracts the nth fractional term from
       ++ the partial fraction \spad{p}.  This returns 0 if the index
       ++ \spad{n} is out of range.
+      ++
+      ++X a:=partialFraction(1,factorial 10)
+      ++X b:=padicFraction(a)
+      ++X nthFractionalTerm(b,3)
 
     numberOfFractionalTerms: % -> Integer
       ++ numberOfFractionalTerms(p) computes the number of fractional
       ++ terms in \spad{p}. This returns 0 if there is no fractional
       ++ part.
+      ++
+      ++X a:=partialFraction(1,factorial 10)
+      ++X b:=padicFraction(a)
+      ++X numberOfFractionalTerms(b)
 
     padicallyExpand: (R,R) -> SUPR
       ++ padicallyExpand(p,x) is a utility function that expands
@@ -71430,16 +71670,25 @@ PartialFraction(R: EuclideanDomain): Cat == Capsule where
       ++ padicFraction(q) expands the fraction p-adically in the primes
       ++ \spad{p} in the denominator of \spad{q}. For example,
       ++ \spad{padicFraction(3/(2**2)) = 1/2 + 1/(2**2)}.
-      ++ Use \spadfunFrom{compactFraction}{PartialFraction} to return to compact form.
+      ++ Use \spadfunFrom{compactFraction}{PartialFraction} to 
+      ++ return to compact form.
+      ++
+      ++X a:=partialFraction(1,factorial 10)
+      ++X padicFraction(a)
 
     partialFraction: (R, FRR) -> %
       ++ partialFraction(numer,denom) is the main function for
       ++ constructing partial fractions. The second argument is the
       ++ denominator and should be factored.
+      ++
+      ++X partialFraction(1,factorial 10)
 
     wholePart: % -> R
       ++ wholePart(p) extracts the whole part of the partial fraction
       ++ \spad{p}.
+      ++
+      ++X a:=(74/13)::PFR(INT)
+      ++X wholePart(a)
 
   Capsule == add
 
diff --git a/changelog b/changelog
index 0e8816d..e096256 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20091030 tpd src/axiom-website/patches.html 20091030.04.tpd.patch
+20091030 tpd books/bookvol10.3 partial fix OrderedFreeMonoid
 20091030 tpd src/axiom-website/patches.html 20091030.03.tpd.patch
 20091030 tpd src/algebra/Makefile add PartialFractionPackage.help
 20091030 tpd books/bookvol10.4 document PartialFractionPackage
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index fef7922..208e80a 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2203,5 +2203,7 @@ src/input/donsimple.input added<br/>
 books/bookvol10.3 document OrderedFreeMonoid<br/>
 <a href="patches/20091030.03.tpd.patch">20091030.03.tpd.patch</a>
 books/bookvol10.4 document PartialFractionPackage<br/>
+<a href="patches/20091030.04.tpd.patch">20091030.04.tpd.patch</a>
+books/bookvol10.3 partial fix OrderedFreeMonoid<br/>
  </body>
 </html>
