diff --git a/Doc/lib/libdecimal.tex b/Doc/lib/libdecimal.tex
index e668671..c4095c9 100644
--- a/Doc/lib/libdecimal.tex
+++ b/Doc/lib/libdecimal.tex
@@ -292,9 +292,10 @@
 \begin{classdesc}{Decimal}{\optional{value \optional{, context}}}
   Constructs a new \class{Decimal} object based from \var{value}.
 
-  \var{value} can be an integer, string, or another \class{Decimal} object.
-  If no \var{value} is given, returns \code{Decimal("0")}.  If \var{value} is
-  a string, it should conform to the decimal numeric string syntax:
+  \var{value} can be an integer, string, tuple, or another \class{Decimal}
+  object. If no \var{value} is given, returns \code{Decimal("0")}.  If
+  \var{value} is a string, it should conform to the decimal numeric string
+  syntax:
     
   \begin{verbatim}
     sign           ::=  '+' | '-'
@@ -309,6 +310,12 @@
     numeric-string ::=  [sign] numeric-value | [sign] nan  
   \end{verbatim}
 
+  If \var{value} is a \class{tuple}, it should have three components,
+  a sign (\constant{0} for positive or \constant{1} for negative),
+  a \class{tuple} of digits, and an exponent represented as an integer.
+  For example, \samp{Decimal((0, (1, 4, 1, 4), -3))} returns
+  \samp{Decimal("1.414")}.
+
   The supplied \var{context} or, if not specified, the current context
   governs only the handling of mal-formed strings not conforming to the
   numeric string syntax.  If the context traps \constant{ConversionSyntax},
@@ -706,7 +713,6 @@
     reduced to fit by adding zeroes to the coefficient.
 \end{classdesc*}
 
-
 \begin{classdesc*}{ConversionSyntax}
     Trying to convert a mal-formed string such as:  \code{Decimal('jump')}.
 
@@ -714,12 +720,10 @@
     syntax.  If this signal is not trapped, returns \constant{NaN}.
 \end{classdesc*}
 
-
 \begin{classdesc*}{DecimalException}
     Base class for other signals.
 \end{classdesc*}
 
-
 \begin{classdesc*}{DivisionByZero}
     Signals the division of a non-infinite number by zero.
 
@@ -729,7 +733,6 @@
     the inputs to the calculation.
 \end{classdesc*}
 
-
 \begin{classdesc*}{DivisionImpossible}
     Error performing a division operation.  Caused when an intermediate result
     has more digits that the allowed by the current precision.  If not trapped,
@@ -743,7 +746,6 @@
     It occurs only in the context of division operations.
 \end{classdesc*}
 
-
 \begin{classdesc*}{Inexact}
     Indicates that rounding occurred and the result is not exact.
 
@@ -760,7 +762,6 @@
     rounding operation.  If not trapped, returns \constant{NaN}.
 \end{classdesc*}
 
-
 \begin{classdesc*}{InvalidOperation}
     An invalid operation was performed.
 
@@ -781,7 +782,6 @@
     \end{verbatim}    
 \end{classdesc*}
 
-
 \begin{classdesc*}{Overflow}
     Numerical overflow.
 
@@ -802,7 +802,6 @@
     loss of significant digits.
 \end{classdesc*}
 
-
 \begin{classdesc*}{Subnormal}
     Exponent was lower than \member{Emin} prior to rounding.
           
@@ -810,7 +809,6 @@
     If not trapped, returns the result unchanged.
 \end{classdesc*}
 
-
 \begin{classdesc*}{Underflow}
     Numerical underflow with result rounded to zero.
 
@@ -818,7 +816,6 @@
     \class{Inexact} and \class{Subnormal} are also signaled.
 \end{classdesc*}
 
-
 The following table summarizes the hierarchy of signals:
 
 \begin{verbatim}    
@@ -838,6 +835,8 @@
             Subnormal
 \end{verbatim}            
 
+
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \subsection{Working with threads \label{decimal-threads}}
 
@@ -875,8 +874,129 @@
  
 
 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Recipes \label{decimal-recipes}}
 
+Here are some functions demonstrating ways to work with the
+\class{Decimal} class:
 
+\begin{verbatim}
+from decimal import Decimal, getcontext
 
+def moneyfmt(value, places=2, curr='$', sep=',', dp='.', pos='', neg='-'):
+    """Convert Decimal to a money formatted string.
 
-                                                  
+    places:  required number of places after the decimal point
+    curr:    optional currency symbol before the sign (may be blank)
+    sep:     optional grouping separator (comma, period, or blank)
+    dp:      decimal point indicator (comma or period)
+             only set to blank if places is zero
+    pos:     optional sign for positive numbers ("+" or blank)
+    neg:     optional sign for negative numbers ("-" or blank)
+             leave blank to separately add brackets or a trailing minus
+
+    >>> d = Decimal('-1234567.8901')
+    >>> moneyfmt(d)
+    '-$1,234,567.89'
+    >>> moneyfmt(d, places=0, curr='', sep='.', dp='')
+    '-1.234.568'
+    >>> '($%s)' % moneyfmt(d, curr='', neg='')
+    '($1,234,567.89)'
+    """
+    q = Decimal((0, (1,), -places))    # 2 places --> '0.01'
+    sign, digits, exp = value.quantize(q).as_tuple()
+    result = []
+    digits = map(str, digits)
+    build, next = result.append, digits.pop    
+    for i in range(places):
+        build(next())
+    build(dp)
+    try:
+        while 1:
+            for i in range(3):
+                build(next())
+            if digits:
+                build(sep)
+    except IndexError:
+        pass
+    build(curr)
+    if sign:
+        build(neg)
+    else:
+        build(pos)
+    result.reverse()
+    return ''.join(result)
+
+def pi():
+    "Compute Pi to the current precision"
+    getcontext().prec += 9  # extra digits for intermediate steps
+    one = Decimal(1)        # substitute "one=1.0" for regular floats
+    lastc, t, c, n, na, d, da = 0*one, 3*one, 3*one, 1, 0, 0, 24*one
+    while c != lastc:
+        lastc = c
+        n, na = n+na, na+8
+        d, da = d+da, da+32
+        t = (t * n) / d
+        c += t
+    getcontext().prec -= 10
+    return c
+
+def exp(x):
+    """Return e raised to the power of x.
+
+    >>> print exp(Decimal(1))
+    2.718281828459045235360287471352662498
+    >>> print exp(Decimal(2))
+    7.389056098930650227230427460575007813
+    """
+    getcontext().prec += 9  # extra digits for intermediate steps
+    one = Decimal(1)        # substitute "one=1.0" for regular floats
+    i, laste, e, fact, num = 0*one, 0*one, one, one, one
+    while e != laste:
+        laste = e    
+        i += 1
+        fact *= i
+        num *= x     
+        e += num / fact   
+    getcontext().prec -= 9        
+    return e
+
+def cos(x):
+    """Return the cosine of x as measured in radians.
+
+    >>> print cos(Decimal('0.5'))
+    0.8775825618903727161162815826038296521
+    """
+    getcontext().prec += 9  # extra digits for intermediate steps
+    one = Decimal(1)        # substitute "one=1.0" for regular floats
+    i, laste, e, fact, num, sign = 0*one, 0*one, one, one, one, one
+    while e != laste:
+        laste = e    
+        i += 2
+        fact *= i * (i-1)
+        num *= x * x
+        sign *= -1
+        e += num / fact * sign 
+    getcontext().prec -= 9        
+    return e    
+
+def sin(x):
+    """Return the cosine of x as measured in radians.
+
+    >>> print sin(Decimal('0.5'))
+    0.4794255386042030002732879352155713880
+    """
+    getcontext().prec += 9  # extra digits for intermediate steps
+    one = Decimal(1)        # substitute "one=1.0" for regular floats
+    i, laste, e, fact, num, sign = one, 0*one, x, one, x, one
+    while e != laste:
+        laste = e    
+        i += 2
+        fact *= i * (i-1)
+        num *= x * x
+        sign *= -1
+        e += num / fact * sign 
+    getcontext().prec -= 9        
+    return e  
+
+\end{verbatim}                                             
