diff --git a/Python/ast.c b/Python/ast.c
index 5f369b6..271585f 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -3009,27 +3009,18 @@
     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));
+    REQ(n, with_item);
+    context_expr = ast_for_expr(c, CHILD(n, 0));
     if (!context_expr)
         return NULL;
-    if (TYPE(CHILD(n, 2)) == with_var) {
-        optional_vars = ast_for_with_var(c, CHILD(n, 2));
+    if (NCH(n) == 3) {
+        optional_vars = ast_for_expr(c, CHILD(n, 2));
 
         if (!optional_vars) {
             return NULL;
@@ -3037,17 +3028,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 ec2f421..2e3e9e8 100644
--- a/Python/graminit.c
+++ b/Python/graminit.c
@@ -901,42 +901,43 @@
 	{100, 1},
 };
 static arc arcs_41_1[1] = {
-	{28, 2},
+	{101, 2},
 };
 static arc arcs_41_2[2] = {
-	{101, 3},
-	{23, 4},
+	{29, 1},
+	{23, 3},
 };
 static arc arcs_41_3[1] = {
-	{23, 4},
+	{24, 4},
 };
 static arc arcs_41_4[1] = {
-	{24, 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},
+	{28, 1},
 };
-static arc arcs_42_1[1] = {
-	{84, 2},
+static arc arcs_42_1[2] = {
+	{80, 2},
+	{0, 1},
 };
 static arc arcs_42_2[1] = {
-	{0, 2},
+	{84, 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},
@@ -1877,10 +1878,10 @@
 	 "\000\000\000\000\000\000\000\000\000\000\000\000\001\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\002\000\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\020\000\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\000"},
+	{298, "with_item", 0, 4, states_42,
+	 "\000\040\040\000\000\000\000\000\000\000\000\000\000\040\010\000\200\041\044\015\000\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\000"},
 	{300, "suite", 0, 5, states_44,
