diff --git a/Python/ast.c b/Python/ast.c
index 1c79359..ff412b3 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -2959,25 +2959,16 @@
     return TryFinally(body, finally, LINENO(n), n->n_col_offset, c->c_arena);
 }
 
-static expr_ty
-ast_for_with_var(struct compiling *c, const node *n)
-{
-    REQ(n, with_var);
-    return ast_for_expr(c, CHILD(n, 1));
-}
-
-/* with_stmt: 'with' test [ with_var ] ':' suite */
+/* with_item: test ['as' expr] */
 static stmt_ty
-ast_for_with_stmt(struct compiling *c, const node *n)
+ast_for_with_item(struct compiling *c, const node *n, asdl_seq *content)
 {
     expr_ty context_expr, optional_vars = NULL;
-    int suite_index = 3;    /* skip 'with', test, and ':' */
-    asdl_seq *suite_seq;
 
-    assert(TYPE(n) == with_stmt);
-    context_expr = ast_for_expr(c, CHILD(n, 1));
-    if (TYPE(CHILD(n, 2)) == with_var) {
-        optional_vars = ast_for_with_var(c, CHILD(n, 2));
+    REQ(n, with_item);
+    context_expr = ast_for_expr(c, CHILD(n, 0));
+    if (NCH(n) == 3) {
+        optional_vars = ast_for_expr(c, CHILD(n, 2));
 
         if (!optional_vars) {
             return NULL;
@@ -2985,17 +2976,47 @@
         if (!set_context(c, optional_vars, Store, n)) {
             return NULL;
         }
-        suite_index = 4;
     }
 
-    suite_seq = ast_for_suite(c, CHILD(n, suite_index));
-    if (!suite_seq) {
-        return NULL;
-    }
-    return With(context_expr, optional_vars, suite_seq, LINENO(n), 
+    return With(context_expr, optional_vars, content, LINENO(n),
                 n->n_col_offset, c->c_arena);
 }
 
+/* with_stmt: 'with' with_item (',' with_item)* ':' suite */
+static stmt_ty
+ast_for_with_stmt(struct compiling *c, const node *n)
+{
+    int i;
+    stmt_ty ret;
+    asdl_seq *inner;
+
+    REQ(n, with_stmt);
+
+    /* process the with items inside-out */
+    i = NCH(n) - 1;
+    /* the suite of the innermost with item is the suite of the with stmt */
+    inner = ast_for_suite(c, CHILD(n, i));
+    if (!inner)
+        return NULL;
+
+    for (;;) {
+        i -= 2;
+        ret = ast_for_with_item(c, CHILD(n, i), inner);
+        if (!ret)
+            return NULL;
+        /* was this the last item? */
+        if (i == 1)
+            break;
+        /* if not, wrap the result so far in a new sequence */
+        inner = asdl_seq_new(1, c->c_arena);
+        if (!inner)
+            return NULL;
+        asdl_seq_SET(inner, 0, ret);
+    }
+
+    return ret;
+}
+
 static stmt_ty
 ast_for_classdef(struct compiling *c, const node *n, asdl_seq *decorator_seq)
 {
diff --git a/Python/graminit.c b/Python/graminit.c
index 4c159bc..1bea8a6 100644
--- a/Python/graminit.c
+++ b/Python/graminit.c
@@ -911,42 +911,43 @@
 	{99, 1},
 };
 static arc arcs_41_1[1] = {
-	{24, 2},
+	{100, 2},
 };
 static arc arcs_41_2[2] = {
-	{100, 3},
-	{25, 4},
+	{30, 1},
+	{25, 3},
 };
 static arc arcs_41_3[1] = {
-	{25, 4},
+	{26, 4},
 };
 static arc arcs_41_4[1] = {
-	{26, 5},
+	{0, 4},
 };
-static arc arcs_41_5[1] = {
-	{0, 5},
-};
-static state states_41[6] = {
+static state states_41[5] = {
 	{1, arcs_41_0},
 	{1, arcs_41_1},
 	{2, arcs_41_2},
 	{1, arcs_41_3},
 	{1, arcs_41_4},
-	{1, arcs_41_5},
 };
 static arc arcs_42_0[1] = {
-	{80, 1},
+	{24, 1},
 };
-static arc arcs_42_1[1] = {
-	{101, 2},
+static arc arcs_42_1[2] = {
+	{80, 2},
+	{0, 1},
 };
 static arc arcs_42_2[1] = {
-	{0, 2},
+	{101, 3},
 };
-static state states_42[3] = {
+static arc arcs_42_3[1] = {
+	{0, 3},
+};
+static state states_42[4] = {
 	{1, arcs_42_0},
-	{1, arcs_42_1},
+	{2, arcs_42_1},
 	{1, arcs_42_2},
+	{1, arcs_42_3},
 };
 static arc arcs_43_0[1] = {
 	{102, 1},
@@ -1810,10 +1811,10 @@
 	 "\000\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000"},
 	{296, "try_stmt", 0, 13, states_40,
 	 "\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000"},
-	{297, "with_stmt", 0, 6, states_41,
+	{297, "with_stmt", 0, 5, states_41,
 	 "\000\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000"},
-	{298, "with_var", 0, 3, states_42,
-	 "\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000"},
+	{298, "with_item", 0, 4, states_42,
+	 "\000\040\040\200\000\000\000\000\000\040\000\000\000\040\004\000\000\103\050\037\000"},
 	{299, "except_clause", 0, 5, states_43,
 	 "\000\000\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000"},
 	{300, "suite", 0, 5, states_44,
