diff --git a/Lib/decimal.py b/Lib/decimal.py
index 973f110..808a1f0 100644
--- a/Lib/decimal.py
+++ b/Lib/decimal.py
@@ -10,7 +10,6 @@
 
 # Todo:
 #    Provide a clean way of attaching monetary format representations
-#    Make tests independent of DefaultContext.prec == 9
 
 
 """
@@ -41,6 +40,7 @@
 Here are some examples of using the decimal module:
 
 >>> from decimal import *
+>>> getcontext().prec=9
 >>> Decimal(0)
 Decimal("0")
 >>> Decimal("1")
@@ -129,7 +129,7 @@
     'Underflow',
 
     # Module parameters
-    'SINGLE_PRECISION', 'DEFAULT_MAX_EXPONENT', 'DEFAULT_MIN_EXPONENT',
+    'DEFAULT_MAX_EXPONENT', 'DEFAULT_MIN_EXPONENT',
 
     # Constants for use in setting up contexts
     'ROUND_DOWN', 'ROUND_HALF_UP', 'ROUND_HALF_EVEN', 'ROUND_CEILING',
@@ -149,9 +149,6 @@
 import operator
 xor = operator.xor
 
-#Precision
-SINGLE_PRECISION = 9
-
 #Exponent Range
 DEFAULT_MAX_EXPONENT = 999999999
 DEFAULT_MIN_EXPONENT = -999999999
@@ -425,6 +422,8 @@
 
 def setcontext(context):
     """Set this thread's context to context."""
+    if context == DefaultContext:
+        context = Context()
     threading.currentThread().__decimal_context__ = context
 
 def getcontext():
@@ -2265,13 +2264,13 @@
         operation on the operand. Otherwise, the result is the same as using
         the plus operation on the operand.
 
-        >>> DefaultContext.abs(Decimal('2.1'))
+        >>> ExtendedDefaultContext.abs(Decimal('2.1'))
         Decimal("2.1")
-        >>> DefaultContext.abs(Decimal('-100'))
+        >>> ExtendedDefaultContext.abs(Decimal('-100'))
         Decimal("100")
-        >>> DefaultContext.abs(Decimal('101.5'))
+        >>> ExtendedDefaultContext.abs(Decimal('101.5'))
         Decimal("101.5")
-        >>> DefaultContext.abs(Decimal('-101.5'))
+        >>> ExtendedDefaultContext.abs(Decimal('-101.5'))
         Decimal("101.5")
         """
         return a.__abs__(context=self)
@@ -2279,9 +2278,9 @@
     def add(self, a, b):
         """Return the sum of the two operands.
 
-        >>> DefaultContext.add(Decimal('12'), Decimal('7.00'))
+        >>> ExtendedDefaultContext.add(Decimal('12'), Decimal('7.00'))
         Decimal("19.00")
-        >>> DefaultContext.add(Decimal('1E+2'), Decimal('1.01E+4'))
+        >>> ExtendedDefaultContext.add(Decimal('1E+2'), Decimal('1.01E+4'))
         Decimal("1.02E+4")
         """
         return a.__add__(b, context=self)
@@ -2303,17 +2302,17 @@
         subtraction: '-1' if the result is less than zero, '0' if the result is
         zero or negative zero, or '1' if the result is greater than zero.
 
-        >>> DefaultContext.compare(Decimal('2.1'), Decimal('3'))
+        >>> ExtendedDefaultContext.compare(Decimal('2.1'), Decimal('3'))
         Decimal("-1")
-        >>> DefaultContext.compare(Decimal('2.1'), Decimal('2.1'))
+        >>> ExtendedDefaultContext.compare(Decimal('2.1'), Decimal('2.1'))
         Decimal("0")
-        >>> DefaultContext.compare(Decimal('2.1'), Decimal('2.10'))
+        >>> ExtendedDefaultContext.compare(Decimal('2.1'), Decimal('2.10'))
         Decimal("0")
-        >>> DefaultContext.compare(Decimal('3'), Decimal('2.1'))
+        >>> ExtendedDefaultContext.compare(Decimal('3'), Decimal('2.1'))
         Decimal("1")
-        >>> DefaultContext.compare(Decimal('2.1'), Decimal('-3'))
+        >>> ExtendedDefaultContext.compare(Decimal('2.1'), Decimal('-3'))
         Decimal("1")
-        >>> DefaultContext.compare(Decimal('-3'), Decimal('2.1'))
+        >>> ExtendedDefaultContext.compare(Decimal('-3'), Decimal('2.1'))
         Decimal("-1")
         """
         return a.compare(b, context=self)
@@ -2321,25 +2320,25 @@
     def divide(self, a, b):
         """Decimal division in a specified context.
 
-        >>> DefaultContext.divide(Decimal('1'), Decimal('3'))
+        >>> ExtendedDefaultContext.divide(Decimal('1'), Decimal('3'))
         Decimal("0.333333333")
-        >>> DefaultContext.divide(Decimal('2'), Decimal('3'))
+        >>> ExtendedDefaultContext.divide(Decimal('2'), Decimal('3'))
         Decimal("0.666666667")
-        >>> DefaultContext.divide(Decimal('5'), Decimal('2'))
+        >>> ExtendedDefaultContext.divide(Decimal('5'), Decimal('2'))
         Decimal("2.5")
-        >>> DefaultContext.divide(Decimal('1'), Decimal('10'))
+        >>> ExtendedDefaultContext.divide(Decimal('1'), Decimal('10'))
         Decimal("0.1")
-        >>> DefaultContext.divide(Decimal('12'), Decimal('12'))
+        >>> ExtendedDefaultContext.divide(Decimal('12'), Decimal('12'))
         Decimal("1")
-        >>> DefaultContext.divide(Decimal('8.00'), Decimal('2'))
+        >>> ExtendedDefaultContext.divide(Decimal('8.00'), Decimal('2'))
         Decimal("4.00")
-        >>> DefaultContext.divide(Decimal('2.400'), Decimal('2.0'))
+        >>> ExtendedDefaultContext.divide(Decimal('2.400'), Decimal('2.0'))
         Decimal("1.20")
-        >>> DefaultContext.divide(Decimal('1000'), Decimal('100'))
+        >>> ExtendedDefaultContext.divide(Decimal('1000'), Decimal('100'))
         Decimal("10")
-        >>> DefaultContext.divide(Decimal('1000'), Decimal('1'))
+        >>> ExtendedDefaultContext.divide(Decimal('1000'), Decimal('1'))
         Decimal("1000")
-        >>> DefaultContext.divide(Decimal('2.40E+6'), Decimal('2'))
+        >>> ExtendedDefaultContext.divide(Decimal('2.40E+6'), Decimal('2'))
         Decimal("1.20E+6")
         """
         return a.__div__(b, context=self)
@@ -2347,11 +2346,11 @@
     def divide_int(self, a, b):
         """Divides two numbers and returns the integer part of the result.
 
-        >>> DefaultContext.divide_int(Decimal('2'), Decimal('3'))
+        >>> ExtendedDefaultContext.divide_int(Decimal('2'), Decimal('3'))
         Decimal("0")
-        >>> DefaultContext.divide_int(Decimal('10'), Decimal('3'))
+        >>> ExtendedDefaultContext.divide_int(Decimal('10'), Decimal('3'))
         Decimal("3")
-        >>> DefaultContext.divide_int(Decimal('1'), Decimal('0.3'))
+        >>> ExtendedDefaultContext.divide_int(Decimal('1'), Decimal('0.3'))
         Decimal("3")
         """
         return a.__floordiv__(b, context=self)
@@ -2368,11 +2367,11 @@
         is chosen as the result. Otherwise the maximum (closer to positive
         infinity) of the two operands is chosen as the result.
 
-        >>> DefaultContext.max(Decimal('3'), Decimal('2'))
+        >>> ExtendedDefaultContext.max(Decimal('3'), Decimal('2'))
         Decimal("3")
-        >>> DefaultContext.max(Decimal('-10'), Decimal('3'))
+        >>> ExtendedDefaultContext.max(Decimal('-10'), Decimal('3'))
         Decimal("3")
-        >>> DefaultContext.max(Decimal('1.0'), Decimal('1'))
+        >>> ExtendedDefaultContext.max(Decimal('1.0'), Decimal('1'))
         Decimal("1.0")
         """
         return a.max(b, context=self)
@@ -2386,11 +2385,11 @@
         is chosen as the result. Otherwise the minimum (closer to negative
         infinity) of the two operands is chosen as the result.
 
-        >>> DefaultContext.min(Decimal('3'), Decimal('2'))
+        >>> ExtendedDefaultContext.min(Decimal('3'), Decimal('2'))
         Decimal("2")
-        >>> DefaultContext.min(Decimal('-10'), Decimal('3'))
+        >>> ExtendedDefaultContext.min(Decimal('-10'), Decimal('3'))
         Decimal("-10")
-        >>> DefaultContext.min(Decimal('1.0'), Decimal('1'))
+        >>> ExtendedDefaultContext.min(Decimal('1.0'), Decimal('1'))
         Decimal("1.0")
         """
         return a.min(b, context=self)
@@ -2402,9 +2401,9 @@
         operation minus(a) is calculated as subtract('0', a) where the '0'
         has the same exponent as the operand.
 
-        >>> DefaultContext.minus(Decimal('1.3'))
+        >>> ExtendedDefaultContext.minus(Decimal('1.3'))
         Decimal("-1.3")
-        >>> DefaultContext.minus(Decimal('-1.3'))
+        >>> ExtendedDefaultContext.minus(Decimal('-1.3'))
         Decimal("1.3")
         """
         return a.__neg__(context=self)
@@ -2417,15 +2416,15 @@
         resulting in a number which may be as long as the sum of the lengths
         of the two operands.
 
-        >>> DefaultContext.multiply(Decimal('1.20'), Decimal('3'))
+        >>> ExtendedDefaultContext.multiply(Decimal('1.20'), Decimal('3'))
         Decimal("3.60")
-        >>> DefaultContext.multiply(Decimal('7'), Decimal('3'))
+        >>> ExtendedDefaultContext.multiply(Decimal('7'), Decimal('3'))
         Decimal("21")
-        >>> DefaultContext.multiply(Decimal('0.9'), Decimal('0.8'))
+        >>> ExtendedDefaultContext.multiply(Decimal('0.9'), Decimal('0.8'))
         Decimal("0.72")
-        >>> DefaultContext.multiply(Decimal('0.9'), Decimal('-0'))
+        >>> ExtendedDefaultContext.multiply(Decimal('0.9'), Decimal('-0'))
         Decimal("-0.0")
-        >>> DefaultContext.multiply(Decimal('654321'), Decimal('654321'))
+        >>> ExtendedDefaultContext.multiply(Decimal('654321'), Decimal('654321'))
         Decimal("4.28135971E+11")
         """
         return a.__mul__(b, context=self)
@@ -2436,17 +2435,17 @@
         Essentially a plus operation with all trailing zeros removed from the
         result.
 
-        >>> DefaultContext.normalize(Decimal('2.1'))
+        >>> ExtendedDefaultContext.normalize(Decimal('2.1'))
         Decimal("2.1")
-        >>> DefaultContext.normalize(Decimal('-2.0'))
+        >>> ExtendedDefaultContext.normalize(Decimal('-2.0'))
         Decimal("-2")
-        >>> DefaultContext.normalize(Decimal('1.200'))
+        >>> ExtendedDefaultContext.normalize(Decimal('1.200'))
         Decimal("1.2")
-        >>> DefaultContext.normalize(Decimal('-120'))
+        >>> ExtendedDefaultContext.normalize(Decimal('-120'))
         Decimal("-1.2E+2")
-        >>> DefaultContext.normalize(Decimal('120.00'))
+        >>> ExtendedDefaultContext.normalize(Decimal('120.00'))
         Decimal("1.2E+2")
-        >>> DefaultContext.normalize(Decimal('0.00'))
+        >>> ExtendedDefaultContext.normalize(Decimal('0.00'))
         Decimal("0")
         """
         return a.normalize(context=self)
@@ -2458,9 +2457,9 @@
         operation plus(a) is calculated as add('0', a) where the '0'
         has the same exponent as the operand.
 
-        >>> DefaultContext.plus(Decimal('1.3'))
+        >>> ExtendedDefaultContext.plus(Decimal('1.3'))
         Decimal("1.3")
-        >>> DefaultContext.plus(Decimal('-1.3'))
+        >>> ExtendedDefaultContext.plus(Decimal('-1.3'))
         Decimal("-1.3")
         """
         return a.__pos__(context=self)
@@ -2483,33 +2482,33 @@
         division into 1, the operation is not halted at that point but
         continues.
 
-        >>> DefaultContext.power(Decimal('2'), Decimal('3'))
+        >>> ExtendedDefaultContext.power(Decimal('2'), Decimal('3'))
         Decimal("8")
-        >>> DefaultContext.power(Decimal('2'), Decimal('-3'))
+        >>> ExtendedDefaultContext.power(Decimal('2'), Decimal('-3'))
         Decimal("0.125")
-        >>> DefaultContext.power(Decimal('1.7'), Decimal('8'))
+        >>> ExtendedDefaultContext.power(Decimal('1.7'), Decimal('8'))
         Decimal("69.7575744")
-        >>> DefaultContext.power(Decimal('Infinity'), Decimal('-2'))
+        >>> ExtendedDefaultContext.power(Decimal('Infinity'), Decimal('-2'))
         Decimal("0")
-        >>> DefaultContext.power(Decimal('Infinity'), Decimal('-1'))
+        >>> ExtendedDefaultContext.power(Decimal('Infinity'), Decimal('-1'))
         Decimal("0")
-        >>> DefaultContext.power(Decimal('Infinity'), Decimal('0'))
+        >>> ExtendedDefaultContext.power(Decimal('Infinity'), Decimal('0'))
         Decimal("1")
-        >>> DefaultContext.power(Decimal('Infinity'), Decimal('1'))
+        >>> ExtendedDefaultContext.power(Decimal('Infinity'), Decimal('1'))
         Decimal("Infinity")
-        >>> DefaultContext.power(Decimal('Infinity'), Decimal('2'))
+        >>> ExtendedDefaultContext.power(Decimal('Infinity'), Decimal('2'))
         Decimal("Infinity")
-        >>> DefaultContext.power(Decimal('-Infinity'), Decimal('-2'))
+        >>> ExtendedDefaultContext.power(Decimal('-Infinity'), Decimal('-2'))
         Decimal("0")
-        >>> DefaultContext.power(Decimal('-Infinity'), Decimal('-1'))
+        >>> ExtendedDefaultContext.power(Decimal('-Infinity'), Decimal('-1'))
         Decimal("-0")
-        >>> DefaultContext.power(Decimal('-Infinity'), Decimal('0'))
+        >>> ExtendedDefaultContext.power(Decimal('-Infinity'), Decimal('0'))
         Decimal("1")
-        >>> DefaultContext.power(Decimal('-Infinity'), Decimal('1'))
+        >>> ExtendedDefaultContext.power(Decimal('-Infinity'), Decimal('1'))
         Decimal("-Infinity")
-        >>> DefaultContext.power(Decimal('-Infinity'), Decimal('2'))
+        >>> ExtendedDefaultContext.power(Decimal('-Infinity'), Decimal('2'))
         Decimal("Infinity")
-        >>> DefaultContext.power(Decimal('0'), Decimal('0'))
+        >>> ExtendedDefaultContext.power(Decimal('0'), Decimal('0'))
         Decimal("NaN")
         """
         return a.__pow__(b, modulo, context=self)
@@ -2532,35 +2531,35 @@
         Also unlike other operations, quantize will never raise Underflow, even
         if the result is subnormal and inexact.
 
-        >>> DefaultContext.quantize(Decimal('2.17'), Decimal('0.001'))
+        >>> ExtendedDefaultContext.quantize(Decimal('2.17'), Decimal('0.001'))
         Decimal("2.170")
-        >>> DefaultContext.quantize(Decimal('2.17'), Decimal('0.01'))
+        >>> ExtendedDefaultContext.quantize(Decimal('2.17'), Decimal('0.01'))
         Decimal("2.17")
-        >>> DefaultContext.quantize(Decimal('2.17'), Decimal('0.1'))
+        >>> ExtendedDefaultContext.quantize(Decimal('2.17'), Decimal('0.1'))
         Decimal("2.2")
-        >>> DefaultContext.quantize(Decimal('2.17'), Decimal('1e+0'))
+        >>> ExtendedDefaultContext.quantize(Decimal('2.17'), Decimal('1e+0'))
         Decimal("2")
-        >>> DefaultContext.quantize(Decimal('2.17'), Decimal('1e+1'))
+        >>> ExtendedDefaultContext.quantize(Decimal('2.17'), Decimal('1e+1'))
         Decimal("0E+1")
-        >>> DefaultContext.quantize(Decimal('-Inf'), Decimal('Infinity'))
+        >>> ExtendedDefaultContext.quantize(Decimal('-Inf'), Decimal('Infinity'))
         Decimal("-Infinity")
-        >>> DefaultContext.quantize(Decimal('2'), Decimal('Infinity'))
+        >>> ExtendedDefaultContext.quantize(Decimal('2'), Decimal('Infinity'))
         Decimal("NaN")
-        >>> DefaultContext.quantize(Decimal('-0.1'), Decimal('1'))
+        >>> ExtendedDefaultContext.quantize(Decimal('-0.1'), Decimal('1'))
         Decimal("-0")
-        >>> DefaultContext.quantize(Decimal('-0'), Decimal('1e+5'))
+        >>> ExtendedDefaultContext.quantize(Decimal('-0'), Decimal('1e+5'))
         Decimal("-0E+5")
-        >>> DefaultContext.quantize(Decimal('+35236450.6'), Decimal('1e-2'))
+        >>> ExtendedDefaultContext.quantize(Decimal('+35236450.6'), Decimal('1e-2'))
         Decimal("NaN")
-        >>> DefaultContext.quantize(Decimal('-35236450.6'), Decimal('1e-2'))
+        >>> ExtendedDefaultContext.quantize(Decimal('-35236450.6'), Decimal('1e-2'))
         Decimal("NaN")
-        >>> DefaultContext.quantize(Decimal('217'), Decimal('1e-1'))
+        >>> ExtendedDefaultContext.quantize(Decimal('217'), Decimal('1e-1'))
         Decimal("217.0")
-        >>> DefaultContext.quantize(Decimal('217'), Decimal('1e-0'))
+        >>> ExtendedDefaultContext.quantize(Decimal('217'), Decimal('1e-0'))
         Decimal("217")
-        >>> DefaultContext.quantize(Decimal('217'), Decimal('1e+1'))
+        >>> ExtendedDefaultContext.quantize(Decimal('217'), Decimal('1e+1'))
         Decimal("2.2E+2")
-        >>> DefaultContext.quantize(Decimal('217'), Decimal('1e+2'))
+        >>> ExtendedDefaultContext.quantize(Decimal('217'), Decimal('1e+2'))
         Decimal("2E+2")
         """
         return a.quantize(b, context=self)
@@ -2577,17 +2576,17 @@
         (that is, if integer division on the same two operands would fail, the
         remainder cannot be calculated).
 
-        >>> DefaultContext.remainder(Decimal('2.1'), Decimal('3'))
+        >>> ExtendedDefaultContext.remainder(Decimal('2.1'), Decimal('3'))
         Decimal("2.1")
-        >>> DefaultContext.remainder(Decimal('10'), Decimal('3'))
+        >>> ExtendedDefaultContext.remainder(Decimal('10'), Decimal('3'))
         Decimal("1")
-        >>> DefaultContext.remainder(Decimal('-10'), Decimal('3'))
+        >>> ExtendedDefaultContext.remainder(Decimal('-10'), Decimal('3'))
         Decimal("-1")
-        >>> DefaultContext.remainder(Decimal('10.2'), Decimal('1'))
+        >>> ExtendedDefaultContext.remainder(Decimal('10.2'), Decimal('1'))
         Decimal("0.2")
-        >>> DefaultContext.remainder(Decimal('10'), Decimal('0.3'))
+        >>> ExtendedDefaultContext.remainder(Decimal('10'), Decimal('0.3'))
         Decimal("0.1")
-        >>> DefaultContext.remainder(Decimal('3.6'), Decimal('1.3'))
+        >>> ExtendedDefaultContext.remainder(Decimal('3.6'), Decimal('1.3'))
         Decimal("1.0")
         """
         return a.__mod__(b, context=self)
@@ -2602,19 +2601,19 @@
         (that is, if integer division on the same two operands would fail, the
         remainder cannot be calculated).
 
-        >>> DefaultContext.remainder_near(Decimal('2.1'), Decimal('3'))
+        >>> ExtendedDefaultContext.remainder_near(Decimal('2.1'), Decimal('3'))
         Decimal("-0.9")
-        >>> DefaultContext.remainder_near(Decimal('10'), Decimal('6'))
+        >>> ExtendedDefaultContext.remainder_near(Decimal('10'), Decimal('6'))
         Decimal("-2")
-        >>> DefaultContext.remainder_near(Decimal('10'), Decimal('3'))
+        >>> ExtendedDefaultContext.remainder_near(Decimal('10'), Decimal('3'))
         Decimal("1")
-        >>> DefaultContext.remainder_near(Decimal('-10'), Decimal('3'))
+        >>> ExtendedDefaultContext.remainder_near(Decimal('-10'), Decimal('3'))
         Decimal("-1")
-        >>> DefaultContext.remainder_near(Decimal('10.2'), Decimal('1'))
+        >>> ExtendedDefaultContext.remainder_near(Decimal('10.2'), Decimal('1'))
         Decimal("0.2")
-        >>> DefaultContext.remainder_near(Decimal('10'), Decimal('0.3'))
+        >>> ExtendedDefaultContext.remainder_near(Decimal('10'), Decimal('0.3'))
         Decimal("0.1")
-        >>> DefaultContext.remainder_near(Decimal('3.6'), Decimal('1.3'))
+        >>> ExtendedDefaultContext.remainder_near(Decimal('3.6'), Decimal('1.3'))
         Decimal("-0.3")
         """
         return a.remainder_near(b, context=self)
@@ -2625,13 +2624,13 @@
         The result is never affected by either the sign or the coefficient of
         either operand.
 
-        >>> DefaultContext.same_quantum(Decimal('2.17'), Decimal('0.001'))
+        >>> ExtendedDefaultContext.same_quantum(Decimal('2.17'), Decimal('0.001'))
         False
-        >>> DefaultContext.same_quantum(Decimal('2.17'), Decimal('0.01'))
+        >>> ExtendedDefaultContext.same_quantum(Decimal('2.17'), Decimal('0.01'))
         True
-        >>> DefaultContext.same_quantum(Decimal('2.17'), Decimal('1'))
+        >>> ExtendedDefaultContext.same_quantum(Decimal('2.17'), Decimal('1'))
         False
-        >>> DefaultContext.same_quantum(Decimal('Inf'), Decimal('-Inf'))
+        >>> ExtendedDefaultContext.same_quantum(Decimal('Inf'), Decimal('-Inf'))
         True
         """
         return a.same_quantum(b)
@@ -2642,35 +2641,37 @@
         If the result must be inexact, it is rounded using the round-half-even
         algorithm.
 
-        >>> DefaultContext.sqrt(Decimal('0'))
+        >>> ExtendedDefaultContext.sqrt(Decimal('0'))
         Decimal("0")
-        >>> DefaultContext.sqrt(Decimal('-0'))
+        >>> ExtendedDefaultContext.sqrt(Decimal('-0'))
         Decimal("-0")
-        >>> DefaultContext.sqrt(Decimal('0.39'))
+        >>> ExtendedDefaultContext.sqrt(Decimal('0.39'))
         Decimal("0.624499800")
-        >>> DefaultContext.sqrt(Decimal('100'))
+        >>> ExtendedDefaultContext.sqrt(Decimal('100'))
         Decimal("10")
-        >>> DefaultContext.sqrt(Decimal('1'))
+        >>> ExtendedDefaultContext.sqrt(Decimal('1'))
         Decimal("1")
-        >>> DefaultContext.sqrt(Decimal('1.0'))
+        >>> ExtendedDefaultContext.sqrt(Decimal('1.0'))
         Decimal("1.0")
-        >>> DefaultContext.sqrt(Decimal('1.00'))
+        >>> ExtendedDefaultContext.sqrt(Decimal('1.00'))
         Decimal("1.0")
-        >>> DefaultContext.sqrt(Decimal('7'))
+        >>> ExtendedDefaultContext.sqrt(Decimal('7'))
         Decimal("2.64575131")
-        >>> DefaultContext.sqrt(Decimal('10'))
+        >>> ExtendedDefaultContext.sqrt(Decimal('10'))
         Decimal("3.16227766")
+        >>> ExtendedDefaultContext.prec
+        9
         """
         return a.sqrt(context=self)
 
     def subtract(self, a, b):
         """Return the sum of the two operands.
 
-        >>> DefaultContext.subtract(Decimal('1.3'), Decimal('1.07'))
+        >>> ExtendedDefaultContext.subtract(Decimal('1.3'), Decimal('1.07'))
         Decimal("0.23")
-        >>> DefaultContext.subtract(Decimal('1.3'), Decimal('1.30'))
+        >>> ExtendedDefaultContext.subtract(Decimal('1.3'), Decimal('1.30'))
         Decimal("0.00")
-        >>> DefaultContext.subtract(Decimal('1.3'), Decimal('2.07'))
+        >>> ExtendedDefaultContext.subtract(Decimal('1.3'), Decimal('2.07'))
         Decimal("-0.77")
         """
         return a.__sub__(b, context=self)
@@ -2698,21 +2699,21 @@
         of the operand as the precision setting, except that no flags will
         be set. The rounding mode is taken from the context.
 
-        >>> DefaultContext.to_integral(Decimal('2.1'))
+        >>> ExtendedDefaultContext.to_integral(Decimal('2.1'))
         Decimal("2")
-        >>> DefaultContext.to_integral(Decimal('100'))
+        >>> ExtendedDefaultContext.to_integral(Decimal('100'))
         Decimal("100")
-        >>> DefaultContext.to_integral(Decimal('100.0'))
+        >>> ExtendedDefaultContext.to_integral(Decimal('100.0'))
         Decimal("100")
-        >>> DefaultContext.to_integral(Decimal('101.5'))
+        >>> ExtendedDefaultContext.to_integral(Decimal('101.5'))
         Decimal("102")
-        >>> DefaultContext.to_integral(Decimal('-101.5'))
+        >>> ExtendedDefaultContext.to_integral(Decimal('-101.5'))
         Decimal("-102")
-        >>> DefaultContext.to_integral(Decimal('10E+5'))
+        >>> ExtendedDefaultContext.to_integral(Decimal('10E+5'))
         Decimal("1.0E+6")
-        >>> DefaultContext.to_integral(Decimal('7.89E+77'))
+        >>> ExtendedDefaultContext.to_integral(Decimal('7.89E+77'))
         Decimal("7.89E+77")
-        >>> DefaultContext.to_integral(Decimal('-Inf'))
+        >>> ExtendedDefaultContext.to_integral(Decimal('-Inf'))
         Decimal("-Infinity")
         """
         return a.to_integral(context=self)
@@ -2962,7 +2963,7 @@
 # Is mutable, so than new contexts can have different default values
 
 DefaultContext = Context(
-        prec=SINGLE_PRECISION, rounding=ROUND_HALF_EVEN,
+        prec=28, rounding=ROUND_HALF_EVEN,
         trap_enablers=dict.fromkeys(Signals, 0),
         flags=None,
         _rounding_decision=ALWAYS_ROUND,
@@ -2981,7 +2982,7 @@
 )
 
 ExtendedDefaultContext = Context(
-        prec=SINGLE_PRECISION, rounding=ROUND_HALF_EVEN,
+        prec=9, rounding=ROUND_HALF_EVEN,
         trap_enablers=dict.fromkeys(Signals, 0),
         flags=None,
         _rounding_decision=ALWAYS_ROUND,
diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py
index 6da658f..7bfb13c 100644
--- a/Lib/test/test_decimal.py
+++ b/Lib/test/test_decimal.py
@@ -34,6 +34,13 @@
 from test.test_support import TestSkipped, run_unittest, run_doctest, is_resource_enabled
 import threading
 
+# Tests are built around these assumed context defaults
+DefaultContext.prec=9
+DefaultContext.rounding=ROUND_HALF_EVEN
+DefaultContext.trap_enablers=dict.fromkeys(Signals, 0)
+setcontext(DefaultContext)
+
+
 TESTDATADIR = 'decimaltestdata'
 if __name__ == '__main__':
     file = sys.argv[0]
