diff --git a/src/expr.rs b/src/expr.rs
index 76c666f..e50cf3a 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -104,9 +104,8 @@
             pub attrs: Vec<Attribute>,
             pub if_token: Token![if],
             pub cond: Box<Expr>,
-            pub if_true: Block,
-            pub else_token: Option<Token![else]>,
-            pub if_false: Option<Box<Expr>>,
+            pub then_branch: Block,
+            pub else_branch: Option<(Token![else], Box<Expr>)>,
         }),
 
         /// An `if let` expression with an optional else block
@@ -121,9 +120,8 @@
             pub pat: Box<Pat>,
             pub eq_token: Token![=],
             pub expr: Box<Expr>,
-            pub if_true: Block,
-            pub else_token: Option<Token![else]>,
-            pub if_false: Option<Box<Expr>>,
+            pub then_branch: Block,
+            pub else_branch: Option<(Token![else], Box<Expr>)>,
         }),
 
         /// A while loop, with an optional label
@@ -748,7 +746,9 @@
 #[cfg(feature = "parsing")]
 pub mod parsing {
     use super::*;
-    use ty::parsing::{qpath, ty_no_eq_after};
+    use ty::parsing::qpath;
+    #[cfg(feature = "full")]
+    use ty::parsing::ty_no_eq_after;
 
     #[cfg(feature = "full")]
     use proc_macro2::{Delimiter, Span, TokenNode, TokenStream};
@@ -1476,13 +1476,12 @@
                 let_token: let_,
                 eq_token: eq,
                 expr: Box::new(cond),
-                if_true: Block {
+                then_branch: Block {
                     stmts: then_block.0,
                     brace_token: then_block.1,
                 },
                 if_token: if_,
-                else_token: else_block.as_ref().map(|p| Token![else]((p.0).0)),
-                if_false: else_block.map(|p| Box::new(p.1.into())),
+                else_branch: else_block,
             })
         ));
     }
@@ -1497,19 +1496,18 @@
             (ExprIf {
                 attrs: Vec::new(),
                 cond: Box::new(cond),
-                if_true: Block {
+                then_branch: Block {
                     stmts: then_block.0,
                     brace_token: then_block.1,
                 },
                 if_token: if_,
-                else_token: else_block.as_ref().map(|p| Token![else]((p.0).0)),
-                if_false: else_block.map(|p| Box::new(p.1.into())),
+                else_branch: else_block,
             })
         ));
     }
 
     #[cfg(feature = "full")]
-    named!(else_block -> (Token![else], Expr), do_parse!(
+    named!(else_block -> (Token![else], Box<Expr>), do_parse!(
         else_: keyword!(else) >>
         expr: alt!(
             syn!(ExprIf) => { Expr::If }
@@ -1527,7 +1525,7 @@
                 }))
             )
         ) >>
-        (else_, expr)
+        (else_, Box::new(expr))
     ));
 
     #[cfg(feature = "full")]
@@ -2564,21 +2562,20 @@
     #[cfg(feature = "full")]
     fn maybe_wrap_else(
         tokens: &mut Tokens,
-        else_token: &Option<Token![else]>,
-        if_false: &Option<Box<Expr>>,
+        else_: &Option<(Token![else], Box<Expr>)>,
     ) {
-        if let Some(ref if_false) = *if_false {
-            TokensOrDefault(else_token).to_tokens(tokens);
+        if let Some((ref else_token, ref else_)) = *else_ {
+            else_token.to_tokens(tokens);
 
             // If we are not one of the valid expressions to exist in an else
             // clause, wrap ourselves in a block.
-            match **if_false {
+            match **else_ {
                 Expr::If(_) | Expr::IfLet(_) | Expr::Block(_) => {
-                    if_false.to_tokens(tokens);
+                    else_.to_tokens(tokens);
                 }
                 _ => {
                     token::Brace::default().surround(tokens, |tokens| {
-                        if_false.to_tokens(tokens);
+                        else_.to_tokens(tokens);
                     });
                 }
             }
@@ -2591,8 +2588,8 @@
             tokens.append_all(self.attrs.outer());
             self.if_token.to_tokens(tokens);
             wrap_bare_struct(tokens, &self.cond);
-            self.if_true.to_tokens(tokens);
-            maybe_wrap_else(tokens, &self.else_token, &self.if_false);
+            self.then_branch.to_tokens(tokens);
+            maybe_wrap_else(tokens, &self.else_branch);
         }
     }
 
@@ -2605,8 +2602,8 @@
             self.pat.to_tokens(tokens);
             self.eq_token.to_tokens(tokens);
             wrap_bare_struct(tokens, &self.expr);
-            self.if_true.to_tokens(tokens);
-            maybe_wrap_else(tokens, &self.else_token, &self.if_false);
+            self.then_branch.to_tokens(tokens);
+            maybe_wrap_else(tokens, &self.else_branch);
         }
     }
 
diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index 25ddbc6..90a3393 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -1147,9 +1147,11 @@
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         if_token: Token ! [ if ](tokens_helper(_visitor, &(_i . if_token).0)),
         cond: Box::new(_visitor.fold_expr(* _i . cond)),
-        if_true: _visitor.fold_block(_i . if_true),
-        else_token: (_i . else_token).map(|it| { Token ! [ else ](tokens_helper(_visitor, &(it).0)) }),
-        if_false: (_i . if_false).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
+        then_branch: _visitor.fold_block(_i . then_branch),
+        else_branch: (_i . else_branch).map(|it| { (
+            Token ! [ else ](tokens_helper(_visitor, &(( it ) . 0).0)),
+            Box::new(_visitor.fold_expr(* ( it ) . 1)),
+        ) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -1161,9 +1163,11 @@
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
         eq_token: Token ! [ = ](tokens_helper(_visitor, &(_i . eq_token).0)),
         expr: Box::new(_visitor.fold_expr(* _i . expr)),
-        if_true: _visitor.fold_block(_i . if_true),
-        else_token: (_i . else_token).map(|it| { Token ! [ else ](tokens_helper(_visitor, &(it).0)) }),
-        if_false: (_i . if_false).map(|it| { Box::new(_visitor.fold_expr(* it)) }),
+        then_branch: _visitor.fold_block(_i . then_branch),
+        else_branch: (_i . else_branch).map(|it| { (
+            Token ! [ else ](tokens_helper(_visitor, &(( it ) . 0).0)),
+            Box::new(_visitor.fold_expr(* ( it ) . 1)),
+        ) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
diff --git a/src/gen/visit.rs b/src/gen/visit.rs
index d00b2b2..1a9609e 100644
--- a/src/gen/visit.rs
+++ b/src/gen/visit.rs
@@ -924,9 +924,11 @@
     for it in & _i . attrs { _visitor.visit_attribute(it) };
     tokens_helper(_visitor, &(& _i . if_token).0);
     _visitor.visit_expr(& * _i . cond);
-    _visitor.visit_block(& _i . if_true);
-    if let Some(ref it) = _i . else_token { tokens_helper(_visitor, &(it).0) };
-    if let Some(ref it) = _i . if_false { _visitor.visit_expr(& * * it) };
+    _visitor.visit_block(& _i . then_branch);
+    if let Some(ref it) = _i . else_branch { 
+            tokens_helper(_visitor, &(& ( it ) . 0).0);
+            _visitor.visit_expr(& * ( it ) . 1);
+         };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_if_let<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprIfLet) {
@@ -936,9 +938,11 @@
     _visitor.visit_pat(& * _i . pat);
     tokens_helper(_visitor, &(& _i . eq_token).0);
     _visitor.visit_expr(& * _i . expr);
-    _visitor.visit_block(& _i . if_true);
-    if let Some(ref it) = _i . else_token { tokens_helper(_visitor, &(it).0) };
-    if let Some(ref it) = _i . if_false { _visitor.visit_expr(& * * it) };
+    _visitor.visit_block(& _i . then_branch);
+    if let Some(ref it) = _i . else_branch { 
+            tokens_helper(_visitor, &(& ( it ) . 0).0);
+            _visitor.visit_expr(& * ( it ) . 1);
+         };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_in_place<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast ExprInPlace) {
diff --git a/src/gen/visit_mut.rs b/src/gen/visit_mut.rs
index 353c246..a82f430 100644
--- a/src/gen/visit_mut.rs
+++ b/src/gen/visit_mut.rs
@@ -924,9 +924,11 @@
     for it in & mut _i . attrs { _visitor.visit_attribute_mut(it) };
     tokens_helper(_visitor, &mut (& mut _i . if_token).0);
     _visitor.visit_expr_mut(& mut * _i . cond);
-    _visitor.visit_block_mut(& mut _i . if_true);
-    if let Some(ref mut it) = _i . else_token { tokens_helper(_visitor, &mut (it).0) };
-    if let Some(ref mut it) = _i . if_false { _visitor.visit_expr_mut(& mut * * it) };
+    _visitor.visit_block_mut(& mut _i . then_branch);
+    if let Some(ref mut it) = _i . else_branch { 
+            tokens_helper(_visitor, &mut (& mut ( it ) . 0).0);
+            _visitor.visit_expr_mut(& mut * ( it ) . 1);
+         };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_if_let_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprIfLet) {
@@ -936,9 +938,11 @@
     _visitor.visit_pat_mut(& mut * _i . pat);
     tokens_helper(_visitor, &mut (& mut _i . eq_token).0);
     _visitor.visit_expr_mut(& mut * _i . expr);
-    _visitor.visit_block_mut(& mut _i . if_true);
-    if let Some(ref mut it) = _i . else_token { tokens_helper(_visitor, &mut (it).0) };
-    if let Some(ref mut it) = _i . if_false { _visitor.visit_expr_mut(& mut * * it) };
+    _visitor.visit_block_mut(& mut _i . then_branch);
+    if let Some(ref mut it) = _i . else_branch { 
+            tokens_helper(_visitor, &mut (& mut ( it ) . 0).0);
+            _visitor.visit_expr_mut(& mut * ( it ) . 1);
+         };
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_expr_in_place_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut ExprInPlace) {
