diff --git a/src/expr.rs b/src/expr.rs
index 7910cf7..a4dc9b7 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -1612,8 +1612,6 @@
         |
         call!(expr_closure, allow_struct)
         |
-        call!(expr_unstable_async_closure, allow_struct) => { Expr::Verbatim }
-        |
         cond_reduce!(allow_block, syn!(ExprBlock)) => { Expr::Block }
         |
         // NOTE: This is the prefix-form of range
@@ -2095,8 +2093,10 @@
 
     #[cfg(feature = "full")]
     named!(expr_closure(allow_struct: bool) -> Expr, do_parse!(
+        begin: call!(verbatim::grab_cursor) >>
         attrs: many0!(Attribute::parse_outer) >>
-        movability: option!(keyword!(static)) >>
+        asyncness: option!(keyword!(async)) >>
+        movability: option!(cond_reduce!(asyncness.is_none(), keyword!(static))) >>
         capture: option!(keyword!(move)) >>
         or1: punct!(|) >>
         inputs: call!(Punctuated::parse_terminated_with, fn_arg) >>
@@ -2115,45 +2115,26 @@
             |
             map!(ambiguous_expr!(allow_struct), |e| (ReturnType::Default, e))
         ) >>
-        (ExprClosure {
-            attrs: attrs,
-            movability: movability,
-            capture: capture,
-            or1_token: or1,
-            inputs: inputs,
-            or2_token: or2,
-            output: ret_and_body.0,
-            body: Box::new(ret_and_body.1),
-        }.into())
-    ));
-
-    #[cfg(feature = "full")]
-    named!(expr_unstable_async_closure(allow_struct: bool) -> ExprVerbatim, do_parse!(
-        begin: call!(verbatim::grab_cursor) >>
-        _attrs: many0!(Attribute::parse_outer) >>
-        _asyncness: keyword!(async) >>
-        _movability: option!(keyword!(static)) >>
-        _capture: option!(keyword!(move)) >>
-        _or1: punct!(|) >>
-        _inputs: call!(Punctuated::<FnArg, Token![,]>::parse_terminated_with, fn_arg) >>
-        _or2: punct!(|) >>
-        _ret_and_body: alt!(
-            do_parse!(
-                arrow: punct!(->) >>
-                ty: syn!(Type) >>
-                body: syn!(Block) >>
-                (ReturnType::Type(arrow, Box::new(ty)),
-                 Expr::Block(ExprBlock {
-                    attrs: Vec::new(),
-                    block: body,
-                }))
-            )
-            |
-            map!(ambiguous_expr!(allow_struct), |e| (ReturnType::Default, e))
-        ) >>
         end: call!(verbatim::grab_cursor) >>
-        (ExprVerbatim {
-            tts: verbatim::token_range(begin..end),
+        ({
+            if asyncness.is_some() {
+                // TODO: include asyncness in ExprClosure
+                // https://github.com/dtolnay/syn/issues/396
+                Expr::Verbatim(ExprVerbatim {
+                    tts: verbatim::token_range(begin..end),
+                })
+            } else {
+                Expr::Closure(ExprClosure {
+                    attrs: attrs,
+                    movability: movability,
+                    capture: capture,
+                    or1_token: or1,
+                    inputs: inputs,
+                    or2_token: or2,
+                    output: ret_and_body.0,
+                    body: Box::new(ret_and_body.1),
+                })
+            }
         })
     ));
 
