Inline away MutType
diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index cf93016..043a61e 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -258,8 +258,6 @@
 # [ cfg ( feature = "full" ) ]
 fn fold_method_turbofish(&mut self, i: MethodTurbofish) -> MethodTurbofish { fold_method_turbofish(self, i) }
 
-fn fold_mut_type(&mut self, i: MutType) -> MutType { fold_mut_type(self, i) }
-
 fn fold_nested_meta_item(&mut self, i: NestedMetaItem) -> NestedMetaItem { fold_nested_meta_item(self, i) }
 
 fn fold_parenthesized_generic_arguments(&mut self, i: ParenthesizedGenericArguments) -> ParenthesizedGenericArguments { fold_parenthesized_generic_arguments(self, i) }
@@ -1991,13 +1989,6 @@
     }
 }
 
-pub fn fold_mut_type<V: Folder + ?Sized>(_visitor: &mut V, _i: MutType) -> MutType {
-    MutType {
-        mutability: (_i . mutability).map(|it| { Token ! [ mut ](tokens_helper(_visitor, &(it).0)) }),
-        ty: _visitor.fold_type(_i . ty),
-    }
-}
-
 pub fn fold_nested_meta_item<V: Folder + ?Sized>(_visitor: &mut V, _i: NestedMetaItem) -> NestedMetaItem {
     use ::NestedMetaItem::*;
     match _i {
@@ -2542,7 +2533,8 @@
     TypePtr {
         star_token: Token ! [ * ](tokens_helper(_visitor, &(_i . star_token).0)),
         const_token: (_i . const_token).map(|it| { Token ! [ const ](tokens_helper(_visitor, &(it).0)) }),
-        elem: Box::new(_visitor.fold_mut_type(* _i . elem)),
+        mutability: (_i . mutability).map(|it| { Token ! [ mut ](tokens_helper(_visitor, &(it).0)) }),
+        elem: Box::new(_visitor.fold_type(* _i . elem)),
     }
 }
 
@@ -2550,7 +2542,8 @@
     TypeReference {
         and_token: Token ! [ & ](tokens_helper(_visitor, &(_i . and_token).0)),
         lifetime: (_i . lifetime).map(|it| { _visitor.fold_lifetime(it) }),
-        elem: Box::new(_visitor.fold_mut_type(* _i . elem)),
+        mutability: (_i . mutability).map(|it| { Token ! [ mut ](tokens_helper(_visitor, &(it).0)) }),
+        elem: Box::new(_visitor.fold_type(* _i . elem)),
     }
 }
 
diff --git a/src/gen/visit.rs b/src/gen/visit.rs
index 4991eb2..1f140ff 100644
--- a/src/gen/visit.rs
+++ b/src/gen/visit.rs
@@ -254,8 +254,6 @@
 # [ cfg ( feature = "full" ) ]
 fn visit_method_turbofish(&mut self, i: &'ast MethodTurbofish) { visit_method_turbofish(self, i) }
 
-fn visit_mut_type(&mut self, i: &'ast MutType) { visit_mut_type(self, i) }
-
 fn visit_nested_meta_item(&mut self, i: &'ast NestedMetaItem) { visit_nested_meta_item(self, i) }
 
 fn visit_parenthesized_generic_arguments(&mut self, i: &'ast ParenthesizedGenericArguments) { visit_parenthesized_generic_arguments(self, i) }
@@ -1573,11 +1571,6 @@
     tokens_helper(_visitor, &(& _i . gt_token).0);
 }
 
-pub fn visit_mut_type<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast MutType) {
-    if let Some(ref it) = _i . mutability { tokens_helper(_visitor, &(it).0) };
-    _visitor.visit_type(& _i . ty);
-}
-
 pub fn visit_nested_meta_item<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast NestedMetaItem) {
     use ::NestedMetaItem::*;
     match *_i {
@@ -1972,13 +1965,15 @@
 pub fn visit_type_ptr<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypePtr) {
     tokens_helper(_visitor, &(& _i . star_token).0);
     if let Some(ref it) = _i . const_token { tokens_helper(_visitor, &(it).0) };
-    _visitor.visit_mut_type(& * _i . elem);
+    if let Some(ref it) = _i . mutability { tokens_helper(_visitor, &(it).0) };
+    _visitor.visit_type(& * _i . elem);
 }
 
 pub fn visit_type_reference<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeReference) {
     tokens_helper(_visitor, &(& _i . and_token).0);
     if let Some(ref it) = _i . lifetime { _visitor.visit_lifetime(it) };
-    _visitor.visit_mut_type(& * _i . elem);
+    if let Some(ref it) = _i . mutability { tokens_helper(_visitor, &(it).0) };
+    _visitor.visit_type(& * _i . elem);
 }
 
 pub fn visit_type_slice<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeSlice) {
diff --git a/src/gen/visit_mut.rs b/src/gen/visit_mut.rs
index c20a220..7657273 100644
--- a/src/gen/visit_mut.rs
+++ b/src/gen/visit_mut.rs
@@ -254,8 +254,6 @@
 # [ cfg ( feature = "full" ) ]
 fn visit_method_turbofish_mut(&mut self, i: &mut MethodTurbofish) { visit_method_turbofish_mut(self, i) }
 
-fn visit_mut_type_mut(&mut self, i: &mut MutType) { visit_mut_type_mut(self, i) }
-
 fn visit_nested_meta_item_mut(&mut self, i: &mut NestedMetaItem) { visit_nested_meta_item_mut(self, i) }
 
 fn visit_parenthesized_generic_arguments_mut(&mut self, i: &mut ParenthesizedGenericArguments) { visit_parenthesized_generic_arguments_mut(self, i) }
@@ -1573,11 +1571,6 @@
     tokens_helper(_visitor, &mut (& mut _i . gt_token).0);
 }
 
-pub fn visit_mut_type_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut MutType) {
-    if let Some(ref mut it) = _i . mutability { tokens_helper(_visitor, &mut (it).0) };
-    _visitor.visit_type_mut(& mut _i . ty);
-}
-
 pub fn visit_nested_meta_item_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut NestedMetaItem) {
     use ::NestedMetaItem::*;
     match *_i {
@@ -1972,13 +1965,15 @@
 pub fn visit_type_ptr_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypePtr) {
     tokens_helper(_visitor, &mut (& mut _i . star_token).0);
     if let Some(ref mut it) = _i . const_token { tokens_helper(_visitor, &mut (it).0) };
-    _visitor.visit_mut_type_mut(& mut * _i . elem);
+    if let Some(ref mut it) = _i . mutability { tokens_helper(_visitor, &mut (it).0) };
+    _visitor.visit_type_mut(& mut * _i . elem);
 }
 
 pub fn visit_type_reference_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeReference) {
     tokens_helper(_visitor, &mut (& mut _i . and_token).0);
     if let Some(ref mut it) = _i . lifetime { _visitor.visit_lifetime_mut(it) };
-    _visitor.visit_mut_type_mut(& mut * _i . elem);
+    if let Some(ref mut it) = _i . mutability { tokens_helper(_visitor, &mut (it).0) };
+    _visitor.visit_type_mut(& mut * _i . elem);
 }
 
 pub fn visit_type_slice_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeSlice) {
diff --git a/src/lib.rs b/src/lib.rs
index dc869c0..a6a031f 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -88,7 +88,7 @@
 
 mod ty;
 pub use ty::{Abi, AbiKind, AngleBracketedGenericArguments, BareFnArg, BareFnArgName, BareFnType,
-             GenericArgument, MutType, ParenthesizedGenericArguments, Path,
+             GenericArgument, ParenthesizedGenericArguments, Path,
              PathArguments, PathSegment, PolyTraitRef, QSelf, ReturnType, Type, TypeArray,
              TypeBareFn, TypeBinding, TypeGroup, TypeImplTrait, TypeInfer, TypeNever, TypeParen,
              TypePath, TypePtr, TypeReference, TypeSlice, TypeTraitObject, TypeTuple};
diff --git a/src/ty.rs b/src/ty.rs
index ed18f25..970ddfd 100644
--- a/src/ty.rs
+++ b/src/ty.rs
@@ -20,13 +20,15 @@
         pub Ptr(TypePtr {
             pub star_token: Token![*],
             pub const_token: Option<Token![const]>,
-            pub elem: Box<MutType>,
+            pub mutability: Option<Token![mut]>,
+            pub elem: Box<Type>,
         }),
         /// A reference (`&'a T` or `&'a mut T`)
         pub Reference(TypeReference {
             pub and_token: Token![&],
             pub lifetime: Option<Lifetime>,
-            pub elem: Box<MutType>,
+            pub mutability: Option<Token![mut]>,
+            pub elem: Box<Type>,
         }),
         /// A bare function (e.g. `fn(usize) -> bool`)
         pub BareFn(TypeBareFn {
@@ -82,13 +84,6 @@
 }
 
 ast_struct! {
-    pub struct MutType {
-        pub mutability: Option<Token![mut]>,
-        pub ty: Type,
-    }
-}
-
-ast_struct! {
     /// A "Path" is essentially Rust's notion of a name.
     ///
     /// It's represented as a sequence of identifiers,
@@ -423,10 +418,8 @@
             (TypePtr {
                 const_token: mutability.1,
                 star_token: star,
-                elem: Box::new(MutType {
-                    ty: target,
-                    mutability: mutability.0,
-                }),
+                mutability: mutability.0,
+                elem: Box::new(target),
             })
         ));
     }
@@ -440,10 +433,8 @@
             target: call!(Type::without_plus) >>
             (TypeReference {
                 lifetime: life,
-                elem: Box::new(MutType {
-                    ty: target,
-                    mutability: mutability,
-                }),
+                mutability: mutability,
+                elem: Box::new(target),
                 and_token: amp,
             })
         ));
@@ -835,13 +826,13 @@
     impl ToTokens for TypePtr {
         fn to_tokens(&self, tokens: &mut Tokens) {
             self.star_token.to_tokens(tokens);
-            match self.elem.mutability {
+            match self.mutability {
                 Some(ref tok) => tok.to_tokens(tokens),
                 None => {
                     TokensOrDefault(&self.const_token).to_tokens(tokens);
                 }
             }
-            self.elem.ty.to_tokens(tokens);
+            self.elem.to_tokens(tokens);
         }
     }
 
@@ -849,8 +840,8 @@
         fn to_tokens(&self, tokens: &mut Tokens) {
             self.and_token.to_tokens(tokens);
             self.lifetime.to_tokens(tokens);
-            self.elem.mutability.to_tokens(tokens);
-            self.elem.ty.to_tokens(tokens);
+            self.mutability.to_tokens(tokens);
+            self.elem.to_tokens(tokens);
         }
     }