diff --git a/src/stable.rs b/src/stable.rs
index 047e630..68e4e33 100644
--- a/src/stable.rs
+++ b/src/stable.rs
@@ -42,7 +42,7 @@
                 if skip_whitespace(input).len() != 0 {
                     Err(LexError)
                 } else {
-                    Ok(output)
+                    Ok(output.0)
                 }
             }
             Err(LexError) => Err(LexError),
@@ -327,8 +327,10 @@
     }
 }
 
-named!(token_stream -> TokenStream,
-       map!(many0!(token_tree), |trees| TokenStream { inner: trees }));
+named!(token_stream -> ::TokenStream, map!(
+    many0!(token_tree),
+    |trees| ::TokenStream(TokenStream { inner: trees })
+));
 
 named!(token_tree -> TokenTree,
        map!(token_kind, |s: TokenKind| {
@@ -339,16 +341,16 @@
        }));
 
 named!(token_kind -> TokenKind, alt!(
-    map!(delimited, |(d, s)| TokenKind::Sequence(d, ::TokenStream(s)))
+    map!(delimited, |(d, s)| TokenKind::Sequence(d, s))
     |
-    map!(literal, |l| TokenKind::Literal(::Literal(l))) // must be before symbol
+    map!(literal, TokenKind::Literal) // must be before symbol
     |
-    map!(symbol, |w| TokenKind::Word(::Symbol(w)))
+    map!(symbol, TokenKind::Word)
     |
     map!(op, |(op, kind)| TokenKind::Op(op, kind))
 ));
 
-named!(delimited -> (Delimiter, TokenStream), alt!(
+named!(delimited -> (Delimiter, ::TokenStream), alt!(
     delimited!(
         punct!("("),
         token_stream,
@@ -368,19 +370,19 @@
     ) => { |ts| (Delimiter::Brace, ts) }
 ));
 
-named!(symbol -> Symbol, alt!(
+named!(symbol -> ::Symbol, alt!(
     lifetime
     |
-    map!(word, Symbol::from)
+    map!(word, ::Symbol::from)
 ));
 
-named!(lifetime -> Symbol, preceded!(
+named!(lifetime -> ::Symbol, preceded!(
     punct!("'"),
     alt!(
         // TODO: can we get rid of this allocation?
-        map!(word, |id| Symbol::from(&format!("'{}", id)[..]))
+        map!(word, |id| ::Symbol::from(format!("'{}", id)))
         |
-        map!(keyword!("static"), |_| Symbol::from("'static"))
+        map!(keyword!("static"), |_| ::Symbol::from("'static"))
     )
 ));
 
@@ -402,7 +404,7 @@
     Ok(("", input))
 }
 
-fn literal(input: &str) -> PResult<Literal> {
+fn literal(input: &str) -> PResult<::Literal> {
     let input_no_ws = skip_whitespace(input);
 
     match literal_nocapture(input_no_ws) {
@@ -410,7 +412,7 @@
             let start = input.len() - input_no_ws.len();
             let len = input_no_ws.len() - a.len();
             let end = start + len;
-            Ok((a, Literal(input[start..end].to_string())))
+            Ok((a, ::Literal(Literal(input[start..end].to_string()))))
         }
         Err(LexError) => Err(LexError),
     }
