diff --git a/src/lifetime.rs b/src/lifetime.rs
index e62d6d0..2df7ca8 100644
--- a/src/lifetime.rs
+++ b/src/lifetime.rs
@@ -15,7 +15,6 @@
 
 #[cfg(feature = "parsing")]
 use lookahead;
-use token::Apostrophe;
 
 /// A Rust lifetime: `'a`.
 ///
@@ -33,7 +32,7 @@
 #[cfg_attr(feature = "extra-traits", derive(Debug))]
 #[derive(Clone)]
 pub struct Lifetime {
-    pub apostrophe: Apostrophe,
+    pub apostrophe: Span,
     pub ident: Ident,
 }
 
@@ -69,7 +68,7 @@
         }
 
         Lifetime {
-            apostrophe: Apostrophe::default(),
+            apostrophe: Span::call_site(),
             ident: Ident::new(&s[1..], span),
         }
     }
@@ -119,18 +118,22 @@
 pub mod parsing {
     use super::*;
 
+    use proc_macro2::Spacing;
+
     use ext::IdentExt;
-    use parse::{Error, Parse, ParseStream, Result};
+    use parse::{Parse, ParseStream, Result};
 
     impl Parse for Lifetime {
         fn parse(input: ParseStream) -> Result<Self> {
             Ok(Lifetime {
-                apostrophe: match input.parse() {
-                    Ok(apostrophe) => apostrophe,
-                    Err(err) => {
-                        return Err(Error::new(err.span(), "expected lifetime"));
+                apostrophe: input.step(|cursor| {
+                    if let Some((punct, rest)) = cursor.punct() {
+                        if punct.as_char() == '\'' && punct.spacing() == Spacing::Joint {
+                            return Ok((punct.span(), rest));
+                        }
                     }
-                },
+                    Err(cursor.error("expected lifetime"))
+                })?,
                 ident: input.call(Ident::parse_any)?,
             })
         }
@@ -140,12 +143,15 @@
 #[cfg(feature = "printing")]
 mod printing {
     use super::*;
-    use proc_macro2::TokenStream;
-    use quote::ToTokens;
+
+    use proc_macro2::{Punct, Spacing, TokenStream};
+    use quote::{ToTokens, TokenStreamExt};
 
     impl ToTokens for Lifetime {
         fn to_tokens(&self, tokens: &mut TokenStream) {
-            self.apostrophe.to_tokens(tokens);
+            let mut apostrophe = Punct::new('\'', Spacing::Joint);
+            apostrophe.set_span(self.apostrophe);
+            tokens.append(apostrophe);
             self.ident.to_tokens(tokens);
         }
     }
diff --git a/src/token.rs b/src/token.rs
index 0d33839..4db039a 100644
--- a/src/token.rs
+++ b/src/token.rs
@@ -105,11 +105,9 @@
 
 #[cfg(feature = "parsing")]
 use proc_macro2::Delimiter;
-#[cfg(any(feature = "printing", feature = "parsing"))]
-use proc_macro2::Spacing;
-use proc_macro2::{Ident, Span};
 #[cfg(feature = "printing")]
-use proc_macro2::{Punct, TokenStream};
+use proc_macro2::TokenStream;
+use proc_macro2::{Ident, Span};
 #[cfg(feature = "printing")]
 use quote::{ToTokens, TokenStreamExt};
 
@@ -400,41 +398,9 @@
 }
 
 define_punctuation_structs! {
-    "'" pub struct Apostrophe/1 /// `'`
     "_" pub struct Underscore/1 /// `_`
 }
 
-// Implement Clone anyway because it is required for cloning Lifetime.
-#[cfg(not(feature = "clone-impls"))]
-impl Clone for Apostrophe {
-    fn clone(&self) -> Self {
-        Apostrophe(self.spans)
-    }
-}
-
-#[cfg(feature = "printing")]
-impl ToTokens for Apostrophe {
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        let mut token = Punct::new('\'', Spacing::Joint);
-        token.set_span(self.spans[0]);
-        tokens.append(token);
-    }
-}
-
-#[cfg(feature = "parsing")]
-impl Parse for Apostrophe {
-    fn parse(input: ParseStream) -> Result<Self> {
-        input.step(|cursor| {
-            if let Some((punct, rest)) = cursor.punct() {
-                if punct.as_char() == '\'' && punct.spacing() == Spacing::Joint {
-                    return Ok((Apostrophe(punct.span()), rest));
-                }
-            }
-            Err(cursor.error("expected `'`"))
-        })
-    }
-}
-
 #[cfg(feature = "printing")]
 impl ToTokens for Underscore {
     fn to_tokens(&self, tokens: &mut TokenStream) {
