diff --git a/Lib/decimal.py b/Lib/decimal.py
index e4c3344..7ae59d1 100644
--- a/Lib/decimal.py
+++ b/Lib/decimal.py
@@ -136,7 +136,6 @@
 
 import threading
 import copy
-import operator
 
 #Rounding
 ROUND_DOWN = 'ROUND_DOWN'
@@ -1716,14 +1715,11 @@
         val = Decimal(1)
         context = context._shallow_copy()
         context.prec = firstprec + elength + 1
-        rounding = context.rounding
         if n < 0:
             #n is a long now, not Decimal instance
             n = -n
             mul = Decimal(1).__div__(mul, context=context)
 
-        shouldround = context._rounding_decision == ALWAYS_ROUND
-
         spot = 1
         while spot <= n:
             spot <<= 1
@@ -1742,7 +1738,7 @@
             spot >>= 1
         context.prec = firstprec
 
-        if shouldround:
+        if context._rounding_decision == ALWAYS_ROUND:
             return val._fix(context)
         return val
 
@@ -1823,8 +1819,6 @@
             if ans:
                 return ans
 
-        out = 0
-
         if watchexp and (context.Emax  < exp or context.Etiny() > exp):
             return context._raise_error(InvalidOperation, 'rescale(a, INF)')
 
@@ -1844,7 +1838,6 @@
         tmp._int = (0,) + tmp._int
         digits += 1
 
-        prevexact = context.flags[Inexact]
         if digits < 0:
             tmp._exp = -digits + tmp._exp
             tmp._int = (0,1)
@@ -1940,7 +1933,6 @@
 
         half = Decimal('0.5')
 
-        count = 1
         maxp = firstprec + 2
         rounding = context._set_rounding(ROUND_HALF_EVEN)
         while 1:
@@ -2043,8 +2035,9 @@
 
         if context is None:
             context = getcontext()
-        context._rounding_decision == ALWAYS_ROUND
-        return ans._fix(context)
+        if context._rounding_decision == ALWAYS_ROUND:
+            return ans._fix(context)
+        return ans
 
     def min(self, other, context=None):
         """Returns the smaller value.
@@ -2089,8 +2082,9 @@
 
         if context is None:
             context = getcontext()
-        context._rounding_decision == ALWAYS_ROUND
-        return ans._fix(context)
+        if context._rounding_decision == ALWAYS_ROUND:
+            return ans._fix(context)
+        return ans
 
     def _isinteger(self):
         """Returns whether self is an integer"""
