diff --git a/Python/ceval.c b/Python/ceval.c
index b5b5c27..b689f3d 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -119,6 +119,7 @@
 static void format_exc_check_arg(PyObject *, const char *, PyObject *);
 static PyObject * unicode_concatenate(PyObject *, PyObject *,
                                       PyFrameObject *, unsigned char *);
+static PyObject * special_lookup(PyObject *, char *, PyObject **);
 
 #define NAME_ERROR_MSG \
 	"name '%.200s' is not defined"
@@ -2455,6 +2456,33 @@
 					   STACK_LEVEL());
 			DISPATCH();
 
+		TARGET(SETUP_WITH)
+		{
+			static PyObject *exit, *enter;
+			w = TOP();
+			x = special_lookup(w, "__exit__", &exit);
+			if (!x)
+				break;
+			SET_TOP(x);
+		        u = special_lookup(w, "__enter__", &enter);
+			Py_DECREF(w);
+			if (!u) {
+				x = NULL;
+				break;
+			}
+			x = PyObject_CallFunctionObjArgs(u, NULL);
+			Py_DECREF(u);
+			if (!x)
+				break;
+			/* Setup the finally block before pushing the result
+			   of __enter__ on the stack. */
+			PyFrame_BlockSetup(f, SETUP_FINALLY, INSTR_OFFSET() + oparg,
+					   STACK_LEVEL());
+
+			PUSH(x);
+			DISPATCH();
+		}
+
 		TARGET(WITH_CLEANUP)
 		{
 			/* At the top of the stack are 1-3 values indicating
@@ -2479,17 +2507,36 @@
 			   should still be resumed.)
 			*/
 
-			PyObject *exit_func = POP();
+			PyObject *exit_func;
 			u = TOP();
 			if (u == Py_None) {
+				POP();
+				exit_func = TOP();
+				SET_TOP(u);
 				v = w = Py_None;
 			}
 			else if (PyLong_Check(u)) {
+				POP();
+				switch(PyLong_AsLong(u)) {
+				case WHY_RETURN:
+				case WHY_CONTINUE:
+					/* Retval in TOP. */
+					exit_func = SECOND();
+					SET_SECOND(TOP());
+					SET_TOP(u);
+					break;
+				default:
+					exit_func = TOP();
+					SET_TOP(u);
+					break;
+				}
 				u = v = w = Py_None;
 			}
 			else {
-				v = SECOND();
+			        v = SECOND();
 				w = THIRD();
+				exit_func = stack_pointer[-7];
+				stack_pointer[-7] = NULL;
 			}
 			/* XXX Not the fastest way to call it... */
 			x = PyObject_CallFunctionObjArgs(exit_func, u, v, w,
@@ -2509,11 +2556,7 @@
 			else if (err > 0) {
 				err = 0;
 				/* There was an exception and a True return */
-				STACKADJ(-2);
-				SET_TOP(PyLong_FromLong((long) WHY_SILENCED));
-				Py_DECREF(u);
-				Py_DECREF(v);
-				Py_DECREF(w);
+				PUSH(PyLong_FromLong((long) WHY_SILENCED));
 			}
 			PREDICT(END_FINALLY);
 			break;
@@ -3194,6 +3237,19 @@
 }
 
 
+static PyObject *
+special_lookup(PyObject *o, char *meth, PyObject **cache)
+{
+	PyObject *res;
+	res = _PyObject_LookupSpecial(o, meth, cache);
+	if (res == NULL && !PyErr_Occurred()) {
+		PyErr_SetObject(PyExc_AttributeError, *cache);
+		return NULL;
+	}
+	return res;
+}
+
+
 /* Logic for the raise statement (too complicated for inlining).
    This *consumes* a reference count to each of its arguments. */
 static enum why_code
diff --git a/Python/compile.c b/Python/compile.c
index c78949d..490137f 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -761,6 +761,8 @@
 			return -1;
 		case BREAK_LOOP:
 			return 0;
+	        case SETUP_WITH:
+			return 7;
 		case WITH_CLEANUP:
 			return -1; /* XXX Sometimes more */
 		case STORE_LOCALS:
@@ -3085,85 +3087,31 @@
 static int
 compiler_with(struct compiler *c, stmt_ty s)
 {
-    static identifier enter_attr, exit_attr;
     basicblock *block, *finally;
-    identifier tmpvalue = NULL, tmpexit = NULL;
 
     assert(s->kind == With_kind);
 
-    if (!enter_attr) {
-	enter_attr = PyUnicode_InternFromString("__enter__");
-	if (!enter_attr)
-	    return 0;
-    }
-    if (!exit_attr) {
-	exit_attr = PyUnicode_InternFromString("__exit__");
-	if (!exit_attr)
-	    return 0;
-    }
-
     block = compiler_new_block(c);
     finally = compiler_new_block(c);
     if (!block || !finally)
 	return 0;
 
-    if (s->v.With.optional_vars) {
-	/* Create a temporary variable to hold context.__enter__().
-	   We need to do this rather than preserving it on the stack
-	   because SETUP_FINALLY remembers the stack level.
-	   We need to do the assignment *inside* the try/finally
-	   so that context.__exit__() is called when the assignment
-	   fails.  But we need to call context.__enter__() *before*
-	   the try/finally so that if it fails we won't call
-	   context.__exit__().
-	*/
-	tmpvalue = compiler_new_tmpname(c);
-	if (tmpvalue == NULL)
-	    return 0;
-	PyArena_AddPyObject(c->c_arena, tmpvalue);
-    }
-	tmpexit = compiler_new_tmpname(c);
-	if (tmpexit == NULL)
-	    return 0;
-	PyArena_AddPyObject(c->c_arena, tmpexit);
-
     /* Evaluate EXPR */
     VISIT(c, expr, s->v.With.context_expr);
+    ADDOP_JREL(c, SETUP_WITH, finally);
 
-    /* Squirrel away context.__exit__ by stuffing it under context */
-    ADDOP(c, DUP_TOP);
-    ADDOP_O(c, LOAD_ATTR, exit_attr, names);
-	if (!compiler_nameop(c, tmpexit, Store))
-	    return 0;
-
-    /* Call context.__enter__() */
-    ADDOP_O(c, LOAD_ATTR, enter_attr, names);
-    ADDOP_I(c, CALL_FUNCTION, 0);
-
-    if (s->v.With.optional_vars) {
-	/* Store it in tmpvalue */
-	if (!compiler_nameop(c, tmpvalue, Store))
-	    return 0;
-    }
-    else {
-	/* Discard result from context.__enter__() */
-	ADDOP(c, POP_TOP);
-    }
-
-    /* Start the try block */
-    ADDOP_JREL(c, SETUP_FINALLY, finally);
-
+    /* SETUP_WITH pushes a finally block. */
     compiler_use_next_block(c, block);
     if (!compiler_push_fblock(c, FINALLY_TRY, block)) {
 	return 0;
     }
 
     if (s->v.With.optional_vars) {
-	/* Bind saved result of context.__enter__() to VAR */
-	if (!compiler_nameop(c, tmpvalue, Load) ||
-	    !compiler_nameop(c, tmpvalue, Del))
-	  return 0;
-	VISIT(c, expr, s->v.With.optional_vars);
+        VISIT(c, expr, s->v.With.optional_vars);
+    }
+    else {
+        /* Discard result from context.__enter__() */
+        ADDOP(c, POP_TOP);
     }
 
     /* BLOCK code */
@@ -3181,9 +3129,6 @@
     /* Finally block starts; context.__exit__ is on the stack under
        the exception or return information. Just issue our magic
        opcode. */
-	if (!compiler_nameop(c, tmpexit, Load) ||
-		!compiler_nameop(c, tmpexit, Del))
-		return 0;
     ADDOP(c, WITH_CLEANUP);
 
     /* Finally block ends. */
diff --git a/Python/import.c b/Python/import.c
index bccb971..23dd7b4 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -89,9 +89,10 @@
 			   change LIST_APPEND and SET_ADD, add MAP_ADD)
        Python 3.1a0: 3150 (optimize conditional branches:
 			   introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE)
+       Python 3.2a0: 3160 (add SETUP_WITH)
 */
-#define MAGIC (3150 | ((long)'\r'<<16) | ((long)'\n'<<24))
 
+#define MAGIC (3160 | ((long)'\r'<<16) | ((long)'\n'<<24))
 /* Magic word as global; note that _PyImport_Init() can change the
    value of this global to accommodate for alterations of how the
    compiler works which are enabled by command line switches. */
diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h
index 043e42a..deaf0a3 100644
--- a/Python/opcode_targets.h
+++ b/Python/opcode_targets.h
@@ -142,8 +142,8 @@
 	&&TARGET_CALL_FUNCTION_VAR,
 	&&TARGET_CALL_FUNCTION_KW,
 	&&TARGET_CALL_FUNCTION_VAR_KW,
+	&&TARGET_SETUP_WITH,
 	&&TARGET_EXTENDED_ARG,
-	&&_unknown_opcode,
 	&&TARGET_LIST_APPEND,
 	&&TARGET_SET_ADD,
 	&&TARGET_MAP_ADD,
diff --git a/Python/peephole.c b/Python/peephole.c
index de1b2ac..23735b0 100644
--- a/Python/peephole.c
+++ b/Python/peephole.c
@@ -251,6 +251,7 @@
 			case SETUP_LOOP:
 			case SETUP_EXCEPT:
 			case SETUP_FINALLY:
+			case SETUP_WITH:
 				j = GETJUMPTGT(code, i);
 				blocks[j] = 1;
 				break;
@@ -566,6 +567,7 @@
 			case SETUP_LOOP:
 			case SETUP_EXCEPT:
 			case SETUP_FINALLY:
+			case SETUP_WITH:
 				tgt = GETJUMPTGT(codestr, i);
 				/* Replace JUMP_* to a RETURN into just a RETURN */
 				if (UNCONDITIONAL_JUMP(opcode) &&
@@ -648,6 +650,7 @@
 			case SETUP_LOOP:
 			case SETUP_EXCEPT:
 			case SETUP_FINALLY:
+			case SETUP_WITH:
 				j = addrmap[GETARG(codestr, i) + i + 3] - addrmap[i] - 3;
 				SETARG(codestr, i, j);
 				break;
