diff --git a/src/lib.rs b/src/lib.rs
index 1127e69..10606fe 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -107,11 +107,14 @@
 }
 
 // Returned by reference, so we can't easily wrap it.
+#[cfg(procmacro2_unstable)]
 pub use imp::FileName;
 
+#[cfg(procmacro2_unstable)]
 #[derive(Clone, PartialEq, Eq)]
 pub struct SourceFile(imp::SourceFile);
 
+#[cfg(procmacro2_unstable)]
 impl SourceFile {
     /// Get the path to this source file as a string.
     pub fn path(&self) -> &FileName {
@@ -123,18 +126,21 @@
     }
 }
 
+#[cfg(procmacro2_unstable)]
 impl AsRef<FileName> for SourceFile {
     fn as_ref(&self) -> &FileName {
         self.0.path()
     }
 }
 
+#[cfg(procmacro2_unstable)]
 impl fmt::Debug for SourceFile {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         self.0.fmt(f)
     }
 }
 
+#[cfg(procmacro2_unstable)]
 pub struct LineColumn {
     pub line: usize,
     pub column: usize,
@@ -159,20 +165,24 @@
         Span(imp::Span::def_site())
     }
 
+    #[cfg(procmacro2_unstable)]
     pub fn source_file(&self) -> SourceFile {
         SourceFile(self.0.source_file())
     }
 
+    #[cfg(procmacro2_unstable)]
     pub fn start(&self) -> LineColumn {
         let imp::LineColumn{ line, column } = self.0.start();
         LineColumn { line, column }
     }
 
+    #[cfg(procmacro2_unstable)]
     pub fn end(&self) -> LineColumn {
         let imp::LineColumn{ line, column } = self.0.end();
         LineColumn { line, column }
     }
 
+    #[cfg(procmacro2_unstable)]
     pub fn join(&self, other: Span) -> Option<Span> {
         self.0.join(other.0).map(Span)
     }
diff --git a/src/stable.rs b/src/stable.rs
index 4bcaf6c..041130c 100644
--- a/src/stable.rs
+++ b/src/stable.rs
@@ -1,6 +1,7 @@
 use std::ascii;
 use std::borrow::Borrow;
 use std::cell::RefCell;
+#[cfg(procmacro2_unstable)]
 use std::cmp;
 use std::collections::HashMap;
 use std::fmt;
@@ -11,6 +12,7 @@
 use std::str::FromStr;
 use std::vec;
 
+#[cfg(procmacro2_unstable)]
 use memchr;
 use proc_macro;
 use unicode_xid::UnicodeXID;
@@ -36,20 +38,34 @@
     }
 }
 
+#[cfg(procmacro2_unstable)]
+fn get_cursor(src: &str) -> Cursor {
+    // Create a dummy file & add it to the codemap
+    CODEMAP.with(|cm| {
+        let mut cm = cm.borrow_mut();
+        let name = format!("<parsed string {}>", cm.files.len());
+        let span = cm.add_file(&name, src);
+        Cursor {
+            rest: src,
+            off: span.lo,
+        }
+    })
+}
+
+#[cfg(not(procmacro2_unstable))]
+fn get_cursor(src: &str) -> Cursor {
+    Cursor {
+        rest: src,
+        off: 0,
+    }
+}
+
 impl FromStr for TokenStream {
     type Err = LexError;
 
     fn from_str(src: &str) -> Result<TokenStream, LexError> {
         // Create a dummy file & add it to the codemap
-        let cursor = CODEMAP.with(|cm| {
-            let mut cm = cm.borrow_mut();
-            let name = format!("<parsed string {}>", cm.files.len());
-            let span = cm.add_file(&name, src);
-            Cursor {
-                rest: src,
-                off: span.lo,
-            }
-        });
+        let cursor = get_cursor(src);
 
         match token_stream(cursor) {
             Ok((input, output)) => {
@@ -150,20 +166,24 @@
     }
 }
 
+#[cfg(procmacro2_unstable)]
 #[derive(Clone, PartialEq, Eq, Debug)]
 pub struct FileName(String);
 
+#[cfg(procmacro2_unstable)]
 impl fmt::Display for FileName {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         self.0.fmt(f)
     }
 }
 
+#[cfg(procmacro2_unstable)]
 #[derive(Clone, PartialEq, Eq)]
 pub struct SourceFile {
     name: FileName,
 }
 
+#[cfg(procmacro2_unstable)]
 impl SourceFile {
     /// Get the path to this source file as a string.
     pub fn path(&self) -> &FileName {
@@ -176,12 +196,14 @@
     }
 }
 
+#[cfg(procmacro2_unstable)]
 impl AsRef<FileName> for SourceFile {
     fn as_ref(&self) -> &FileName {
         self.path()
     }
 }
 
+#[cfg(procmacro2_unstable)]
 impl fmt::Debug for SourceFile {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         f.debug_struct("SourceFile")
@@ -191,12 +213,14 @@
     }
 }
 
+#[cfg(procmacro2_unstable)]
 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
 pub struct LineColumn {
     pub line: usize,
     pub column: usize,
 }
 
+#[cfg(procmacro2_unstable)]
 thread_local! {
     static CODEMAP: RefCell<Codemap> = RefCell::new(Codemap {
         // NOTE: We start with a single dummy file which all call_site() and
@@ -209,12 +233,14 @@
     });
 }
 
+#[cfg(procmacro2_unstable)]
 struct FileInfo {
     name: String,
     span: Span,
     lines: Vec<usize>,
 }
 
+#[cfg(procmacro2_unstable)]
 impl FileInfo {
     fn offset_line_column(&self, offset: usize) -> LineColumn {
         assert!(self.span_within(Span { lo: offset as u32, hi: offset as u32 }));
@@ -237,6 +263,7 @@
 }
 
 /// Computes the offsets of each line in the given source string.
+#[cfg(procmacro2_unstable)]
 fn lines_offsets(s: &[u8]) -> Vec<usize> {
     let mut lines = vec![0];
     let mut prev = 0;
@@ -247,10 +274,12 @@
     lines
 }
 
+#[cfg(procmacro2_unstable)]
 struct Codemap {
     files: Vec<FileInfo>,
 }
 
+#[cfg(procmacro2_unstable)]
 impl Codemap {
     fn next_start_pos(&self) -> u32 {
         // Add 1 so there's always space between files.
@@ -297,6 +326,7 @@
         Span { lo: 0, hi: 0 }
     }
 
+    #[cfg(procmacro2_unstable)]
     pub fn source_file(&self) -> SourceFile {
         CODEMAP.with(|cm| {
             let cm = cm.borrow();
@@ -307,6 +337,7 @@
         })
     }
 
+    #[cfg(procmacro2_unstable)]
     pub fn start(&self) -> LineColumn {
         CODEMAP.with(|cm| {
             let cm = cm.borrow();
@@ -315,6 +346,7 @@
         })
     }
 
+    #[cfg(procmacro2_unstable)]
     pub fn end(&self) -> LineColumn {
         CODEMAP.with(|cm| {
             let cm = cm.borrow();
@@ -323,6 +355,7 @@
         })
     }
 
+    #[cfg(procmacro2_unstable)]
     pub fn join(&self, other: Span) -> Option<Span> {
         CODEMAP.with(|cm| {
             let cm = cm.borrow();
diff --git a/src/unstable.rs b/src/unstable.rs
index f4d1a41..41b9f64 100644
--- a/src/unstable.rs
+++ b/src/unstable.rs
@@ -159,9 +159,11 @@
     }
 }
 
+#[cfg(procmacro2_unstable)]
 #[derive(Clone, PartialEq, Eq)]
 pub struct FileName(String);
 
+#[cfg(procmacro2_unstable)]
 impl fmt::Display for FileName {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         self.0.fmt(f)
@@ -170,9 +172,11 @@
 
 // NOTE: We have to generate our own filename object here because we can't wrap
 // the one provided by proc_macro.
+#[cfg(procmacro2_unstable)]
 #[derive(Clone, PartialEq, Eq)]
 pub struct SourceFile(proc_macro::SourceFile, FileName);
 
+#[cfg(procmacro2_unstable)]
 impl SourceFile {
     fn new(sf: proc_macro::SourceFile) -> Self {
         let filename = FileName(sf.path().to_string());
@@ -189,18 +193,21 @@
     }
 }
 
+#[cfg(procmacro2_unstable)]
 impl AsRef<FileName> for SourceFile {
     fn as_ref(&self) -> &FileName {
         self.path()
     }
 }
 
+#[cfg(procmacro2_unstable)]
 impl fmt::Debug for SourceFile {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         self.0.fmt(f)
     }
 }
 
+#[cfg(procmacro2_unstable)]
 pub struct LineColumn {
     pub line: usize,
     pub column: usize,
@@ -218,20 +225,24 @@
         Span(proc_macro::Span::def_site())
     }
 
+    #[cfg(procmacro2_unstable)]
     pub fn source_file(&self) -> SourceFile {
         SourceFile::new(self.0.source_file())
     }
 
+    #[cfg(procmacro2_unstable)]
     pub fn start(&self) -> LineColumn {
         let proc_macro::LineColumn{ line, column } = self.0.start();
         LineColumn { line, column }
     }
 
+    #[cfg(procmacro2_unstable)]
     pub fn end(&self) -> LineColumn {
         let proc_macro::LineColumn{ line, column } = self.0.end();
         LineColumn { line, column }
     }
 
+    #[cfg(procmacro2_unstable)]
     pub fn join(&self, other: Span) -> Option<Span> {
         self.0.join(other.0).map(Span)
     }
