diff --git a/src/data.rs b/src/data.rs
index 9e8e9b4..26367dd 100644
--- a/src/data.rs
+++ b/src/data.rs
@@ -51,24 +51,40 @@
 #[cfg(feature = "parsing")]
 pub mod parsing {
     use super::*;
+    use WhereClause;
     use attr::parsing::outer_attr;
     use constant::parsing::const_expr;
+    use generics::parsing::where_clause;
     use ident::parsing::ident;
     use ty::parsing::ty;
 
-    named!(pub struct_body -> VariantData, alt!(
-        struct_like_body => { VariantData::Struct }
+    named!(pub struct_body -> (WhereClause, VariantData), alt!(
+        do_parse!(
+            wh: where_clause >>
+            body: struct_like_body >>
+            (wh, VariantData::Struct(body))
+        )
         |
-        terminated!(tuple_like_body, punct!(";")) => { VariantData::Tuple }
+        do_parse!(
+            body: tuple_like_body >>
+            wh: where_clause >>
+            punct!(";") >>
+            (wh, VariantData::Tuple(body))
+        )
         |
-        punct!(";") => { |_| VariantData::Unit }
+        do_parse!(
+            wh: where_clause >>
+            punct!(";") >>
+            (wh, VariantData::Unit)
+        )
     ));
 
-    named!(pub enum_body -> Vec<Variant>, do_parse!(
+    named!(pub enum_body -> (WhereClause, Vec<Variant>), do_parse!(
+        wh: where_clause >>
         punct!("{") >>
         variants: terminated_list!(punct!(","), variant) >>
         punct!("}") >>
-        (variants)
+        (wh, variants)
     ));
 
     named!(variant -> Variant, do_parse!(
diff --git a/src/item.rs b/src/item.rs
index 3feed24..a140f8e 100644
--- a/src/item.rs
+++ b/src/item.rs
@@ -1102,14 +1102,21 @@
                     tokens.append("struct");
                     self.ident.to_tokens(tokens);
                     generics.to_tokens(tokens);
-                    generics.where_clause.to_tokens(tokens);
-                    variant_data.to_tokens(tokens);
                     match *variant_data {
                         VariantData::Struct(_) => {
+                            generics.where_clause.to_tokens(tokens);
+                            variant_data.to_tokens(tokens);
                             // no semicolon
                         }
-                        VariantData::Tuple(_) |
-                        VariantData::Unit => tokens.append(";"),
+                        VariantData::Tuple(_) => {
+                            variant_data.to_tokens(tokens);
+                            generics.where_clause.to_tokens(tokens);
+                            tokens.append(";");
+                        }
+                        VariantData::Unit => {
+                            generics.where_clause.to_tokens(tokens);
+                            tokens.append(";");
+                        }
                     }
                 }
                 ItemKind::Union(ref variant_data, ref generics) => {
diff --git a/src/macro_input.rs b/src/macro_input.rs
index 00a31e1..3abdc3d 100644
--- a/src/macro_input.rs
+++ b/src/macro_input.rs
@@ -21,7 +21,7 @@
     use Generics;
     use attr::parsing::outer_attr;
     use data::parsing::{visibility, struct_body, enum_body};
-    use generics::parsing::{generics, where_clause};
+    use generics::parsing::generics;
     use ident::parsing::ident;
 
     named!(pub macro_input -> MacroInput, do_parse!(
@@ -30,25 +30,24 @@
         which: alt!(keyword!("struct") | keyword!("enum")) >>
         id: ident >>
         generics: generics >>
-        where_clause: where_clause >>
         item: switch!(value!(which),
-            "struct" => map!(struct_body, move |body| MacroInput {
+            "struct" => map!(struct_body, move |(wh, body)| MacroInput {
                 ident: id,
                 vis: vis,
                 attrs: attrs,
                 generics: Generics {
-                    where_clause: where_clause,
+                    where_clause: wh,
                     .. generics
                 },
                 body: Body::Struct(body),
             })
             |
-            "enum" => map!(enum_body, move |body| MacroInput {
+            "enum" => map!(enum_body, move |(wh, body)| MacroInput {
                 ident: id,
                 vis: vis,
                 attrs: attrs,
                 generics: Generics {
-                    where_clause: where_clause,
+                    where_clause: wh,
                     .. generics
                 },
                 body: Body::Enum(body),
@@ -77,15 +76,9 @@
             }
             self.ident.to_tokens(tokens);
             self.generics.to_tokens(tokens);
-            self.generics.where_clause.to_tokens(tokens);
-            self.body.to_tokens(tokens);
-        }
-    }
-
-    impl ToTokens for Body {
-        fn to_tokens(&self, tokens: &mut Tokens) {
-            match *self {
+            match self.body {
                 Body::Enum(ref variants) => {
+                    self.generics.where_clause.to_tokens(tokens);
                     tokens.append("{");
                     for variant in variants {
                         variant.to_tokens(tokens);
@@ -94,13 +87,21 @@
                     tokens.append("}");
                 }
                 Body::Struct(ref variant_data) => {
-                    variant_data.to_tokens(tokens);
                     match *variant_data {
                         VariantData::Struct(_) => {
+                            self.generics.where_clause.to_tokens(tokens);
+                            variant_data.to_tokens(tokens);
                             // no semicolon
                         }
-                        VariantData::Tuple(_) |
-                        VariantData::Unit => tokens.append(";"),
+                        VariantData::Tuple(_) => {
+                            variant_data.to_tokens(tokens);
+                            self.generics.where_clause.to_tokens(tokens);
+                            tokens.append(";");
+                        }
+                        VariantData::Unit => {
+                            self.generics.where_clause.to_tokens(tokens);
+                            tokens.append(";");
+                        }
                     }
                 }
             }
