diff --git a/src/lib.rs b/src/lib.rs
index d019555..746897d 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -65,10 +65,10 @@
 
 impl IntoIterator for TokenStream {
     type Item = TokenTree;
-    type IntoIter = TokenIter;
+    type IntoIter = TokenTreeIter;
 
-    fn into_iter(self) -> TokenIter {
-        TokenIter(self.0.into_iter())
+    fn into_iter(self) -> TokenTreeIter {
+        TokenTreeIter(self.0.into_iter())
     }
 }
 
@@ -100,7 +100,13 @@
 #[derive(Clone, Debug)]
 pub struct TokenTree {
     pub span: Span,
-    pub kind: TokenKind,
+    pub kind: TokenNode,
+}
+
+impl From<TokenNode> for TokenTree {
+    fn from(kind: TokenNode) -> TokenTree {
+        TokenTree { span: Span::default(), kind: kind }
+    }
 }
 
 impl fmt::Display for TokenTree {
@@ -110,10 +116,10 @@
 }
 
 #[derive(Clone, Debug)]
-pub enum TokenKind {
-    Sequence(Delimiter, TokenStream),
-    Word(Symbol),
-    Op(char, OpKind),
+pub enum TokenNode {
+    Group(Delimiter, TokenStream),
+    Term(Term),
+    Op(char, Spacing),
     Literal(Literal),
 }
 
@@ -126,28 +132,20 @@
 }
 
 #[derive(Copy, Clone)]
-pub struct Symbol(imp::Symbol);
+pub struct Term(imp::Term);
 
-impl<'a> From<&'a str> for Symbol {
-    fn from(string: &'a str) -> Symbol {
-        Symbol(string.into())
+impl Term {
+    pub fn intern(string: &str) -> Term {
+        Term(string.into())
     }
-}
 
-impl From<String> for Symbol {
-    fn from(string: String) -> Symbol {
-        Symbol(string[..].into())
-    }
-}
-
-impl Symbol {
     pub fn as_str(&self) -> &str {
         &self.0
     }
 }
 
-#[derive(Copy, Clone, Debug, Eq, PartialEq)]
-pub enum OpKind {
+#[derive(Copy, Clone, Debug)]
+pub enum Spacing {
     Alone,
     Joint,
 }
@@ -155,27 +153,59 @@
 #[derive(Clone)]
 pub struct Literal(imp::Literal);
 
+macro_rules! int_literals {
+    ($($kind:ident,)*) => ($(
+        pub fn $kind(n: $kind) -> Literal {
+            Literal(n.into())
+        }
+    )*)
+}
+
 impl Literal {
-    pub fn byte_char(b: u8) -> Literal {
-        Literal(imp::Literal::byte_char(b))
+    pub fn integer(s: i64) -> Literal {
+        Literal(imp::Literal::integer(s))
+    }
+
+    int_literals! {
+        u8, u16, u32, u64, /*usize*/
+        i8, i16, i32, i64, /*isize,*/
+    }
+
+    pub fn float(f: f64) -> Literal {
+        Literal(imp::Literal::float(f))
+    }
+
+    pub fn f64(f: f64) -> Literal {
+        Literal(f.into())
+    }
+
+    pub fn f32(f: f32) -> Literal {
+        Literal(f.into())
+    }
+
+    pub fn string(string: &str) -> Literal {
+        Literal(string.into())
+    }
+
+    pub fn character(ch: char) -> Literal {
+        Literal(ch.into())
     }
 
     pub fn byte_string(s: &[u8]) -> Literal {
         Literal(imp::Literal::byte_string(s))
     }
 
+    // =======================================================================
+    // Not present upstream in proc_macro yet
+
+    pub fn byte_char(b: u8) -> Literal {
+        Literal(imp::Literal::byte_char(b))
+    }
+
     pub fn doccomment(s: &str) -> Literal {
         Literal(imp::Literal::doccomment(s))
     }
 
-    pub fn float(s: &str) -> Literal {
-        Literal(imp::Literal::float(s))
-    }
-
-    pub fn integer(s: &str) -> Literal {
-        Literal(imp::Literal::integer(s))
-    }
-
     pub fn raw_string(s: &str, pounds: usize) -> Literal {
         Literal(imp::Literal::raw_string(s, pounds))
     }
@@ -185,25 +215,9 @@
     }
 }
 
-macro_rules! froms {
-    ($($t:ty,)*) => {$(
-        impl<'a> From<$t> for Literal {
-            fn from(t: $t) -> Literal {
-                Literal(t.into())
-            }
-        }
-    )*}
-}
+pub struct TokenTreeIter(imp::TokenTreeIter);
 
-froms! {
-    u8, u16, u32, u64, usize,
-    i8, i16, i32, i64, isize,
-    f32, f64, char, &'a str,
-}
-
-pub struct TokenIter(imp::TokenIter);
-
-impl Iterator for TokenIter {
+impl Iterator for TokenTreeIter {
     type Item = TokenTree;
 
     fn next(&mut self) -> Option<TokenTree> {
@@ -214,8 +228,8 @@
 forward_fmt!(Debug for LexError);
 forward_fmt!(Debug for Literal);
 forward_fmt!(Debug for Span);
-forward_fmt!(Debug for Symbol);
-forward_fmt!(Debug for TokenIter);
+forward_fmt!(Debug for Term);
+forward_fmt!(Debug for TokenTreeIter);
 forward_fmt!(Debug for TokenStream);
 forward_fmt!(Display for Literal);
 forward_fmt!(Display for TokenStream);
diff --git a/src/stable.rs b/src/stable.rs
index a6daf84..0d5cdca 100644
--- a/src/stable.rs
+++ b/src/stable.rs
@@ -14,7 +14,7 @@
 use unicode_xid::UnicodeXID;
 use strnom::{PResult, skip_whitespace, block_comment, whitespace, word_break};
 
-use {TokenTree, TokenKind, Delimiter, OpKind};
+use {TokenTree, TokenNode, Delimiter, Spacing};
 
 #[derive(Clone, Debug)]
 pub struct TokenStream {
@@ -60,7 +60,7 @@
             }
             joint = false;
             match tt.kind {
-                TokenKind::Sequence(delim, ref stream) => {
+                TokenNode::Group(delim, ref stream) => {
                     let (start, end) = match delim {
                         Delimiter::Parenthesis => ("(", ")"),
                         Delimiter::Brace => ("{", "}"),
@@ -73,15 +73,15 @@
                         write!(f, "{} {} {}", start, stream, end)?
                     }
                 }
-                TokenKind::Word(ref sym) => write!(f, "{}", sym.as_str())?,
-                TokenKind::Op(ch, ref op) => {
+                TokenNode::Term(ref sym) => write!(f, "{}", sym.as_str())?,
+                TokenNode::Op(ch, ref op) => {
                     write!(f, "{}", ch)?;
                     match *op {
-                        OpKind::Alone => {}
-                        OpKind::Joint => joint = true,
+                        Spacing::Alone => {}
+                        Spacing::Joint => joint = true,
                     }
                 }
-                TokenKind::Literal(ref literal) => {
+                TokenNode::Literal(ref literal) => {
                     write!(f, "{}", literal)?;
                     // handle comments
                     if (literal.0).0.starts_with("/") {
@@ -126,13 +126,13 @@
     }
 }
 
-pub type TokenIter = vec::IntoIter<TokenTree>;
+pub type TokenTreeIter = vec::IntoIter<TokenTree>;
 
 impl IntoIterator for TokenStream {
     type Item = TokenTree;
-    type IntoIter = TokenIter;
+    type IntoIter = TokenTreeIter;
 
-    fn into_iter(self) -> TokenIter {
+    fn into_iter(self) -> TokenTreeIter {
         self.inner.into_iter()
     }
 }
@@ -147,23 +147,23 @@
 }
 
 #[derive(Copy, Clone)]
-pub struct Symbol {
+pub struct Term {
     intern: usize,
     not_send_sync: PhantomData<*const ()>,
 }
 
 thread_local!(static SYMBOLS: RefCell<Interner> = RefCell::new(Interner::new()));
 
-impl<'a> From<&'a str> for Symbol {
-    fn from(string: &'a str) -> Symbol {
-        Symbol {
+impl<'a> From<&'a str> for Term {
+    fn from(string: &'a str) -> Term {
+        Term {
             intern: SYMBOLS.with(|s| s.borrow_mut().intern(string)),
             not_send_sync: PhantomData,
         }
     }
 }
 
-impl ops::Deref for Symbol {
+impl ops::Deref for Term {
     type Target = str;
 
     fn deref(&self) -> &str {
@@ -177,9 +177,9 @@
     }
 }
 
-impl fmt::Debug for Symbol {
+impl fmt::Debug for Term {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        f.debug_tuple("Symbol").field(&&**self).finish()
+        f.debug_tuple("Term").field(&&**self).finish()
     }
 }
 
@@ -259,11 +259,11 @@
         Literal(s.to_string())
     }
 
-    pub fn float(s: &str) -> Literal {
+    pub fn float(s: f64) -> Literal {
         Literal(s.to_string())
     }
 
-    pub fn integer(s: &str) -> Literal {
+    pub fn integer(s: i64) -> Literal {
         Literal(s.to_string())
     }
 
@@ -346,21 +346,21 @@
 ));
 
 named!(token_tree -> TokenTree,
-       map!(token_kind, |s: TokenKind| {
+       map!(token_kind, |s: TokenNode| {
            TokenTree {
                span: ::Span(Span),
                kind: s,
            }
        }));
 
-named!(token_kind -> TokenKind, alt!(
-    map!(delimited, |(d, s)| TokenKind::Sequence(d, s))
+named!(token_kind -> TokenNode, alt!(
+    map!(delimited, |(d, s)| TokenNode::Group(d, s))
     |
-    map!(literal, TokenKind::Literal) // must be before symbol
+    map!(literal, TokenNode::Literal) // must be before symbol
     |
-    map!(symbol, TokenKind::Word)
+    map!(symbol, TokenNode::Term)
     |
-    map!(op, |(op, kind)| TokenKind::Op(op, kind))
+    map!(op, |(op, kind)| TokenNode::Op(op, kind))
 ));
 
 named!(delimited -> (Delimiter, ::TokenStream), alt!(
@@ -383,7 +383,7 @@
     ) => { |ts| (Delimiter::Brace, ts) }
 ));
 
-fn symbol(mut input: &str) -> PResult<::Symbol> {
+fn symbol(mut input: &str) -> PResult<::Term> {
     input = skip_whitespace(input);
 
     let mut chars = input.char_indices();
@@ -409,7 +409,7 @@
     if lifetime && &input[..end] != "'static" && KEYWORDS.contains(&&input[1..end]) {
         Err(LexError)
     } else {
-        Ok((&input[end..], input[..end].into()))
+        Ok((&input[end..], ::Term::intern(&input[..end])))
     }
 }
 
@@ -894,13 +894,13 @@
     keyword!("false") => { |_| () }
 ));
 
-fn op(input: &str) -> PResult<(char, OpKind)> {
+fn op(input: &str) -> PResult<(char, Spacing)> {
     let input = skip_whitespace(input);
     match op_char(input) {
         Ok((rest, ch)) => {
             let kind = match op_char(rest) {
-                Ok(_) => OpKind::Joint,
-                Err(LexError) => OpKind::Alone,
+                Ok(_) => Spacing::Joint,
+                Err(LexError) => Spacing::Alone,
             };
             Ok((rest, (ch, kind)))
         }
diff --git a/src/unstable.rs b/src/unstable.rs
index bf097fb..bf57085 100644
--- a/src/unstable.rs
+++ b/src/unstable.rs
@@ -6,7 +6,7 @@
 
 use proc_macro;
 
-use {TokenTree, TokenKind, Delimiter, OpKind};
+use {TokenTree, TokenNode, Delimiter, Spacing};
 
 #[derive(Clone)]
 pub struct TokenStream(proc_macro::TokenStream);
@@ -55,27 +55,27 @@
         TokenStream(proc_macro::TokenTree {
             span: (tree.span.0).0,
             kind: match tree.kind {
-                TokenKind::Sequence(delim, s) => {
+                TokenNode::Group(delim, s) => {
                     let delim = match delim {
                         Delimiter::Parenthesis => proc_macro::Delimiter::Parenthesis,
                         Delimiter::Bracket => proc_macro::Delimiter::Bracket,
                         Delimiter::Brace => proc_macro::Delimiter::Brace,
                         Delimiter::None => proc_macro::Delimiter::None,
                     };
-                    proc_macro::TokenKind::Sequence(delim, (s.0).0)
+                    proc_macro::TokenNode::Group(delim, (s.0).0)
                 }
-                TokenKind::Op(ch, kind) => {
+                TokenNode::Op(ch, kind) => {
                     let kind = match kind {
-                        OpKind::Joint => proc_macro::OpKind::Joint,
-                        OpKind::Alone => proc_macro::OpKind::Alone,
+                        Spacing::Joint => proc_macro::Spacing::Joint,
+                        Spacing::Alone => proc_macro::Spacing::Alone,
                     };
-                    proc_macro::TokenKind::Op(ch, kind)
+                    proc_macro::TokenNode::Op(ch, kind)
                 }
-                TokenKind::Word(s) => {
-                    proc_macro::TokenKind::Word((s.0).0)
+                TokenNode::Term(s) => {
+                    proc_macro::TokenNode::Term((s.0).0)
                 }
-                TokenKind::Literal(l) => {
-                    proc_macro::TokenKind::Literal((l.0).0)
+                TokenNode::Literal(l) => {
+                    proc_macro::TokenNode::Literal((l.0).0)
                 }
             },
         }.into())
@@ -103,18 +103,18 @@
     }
 }
 
-pub struct TokenIter(proc_macro::TokenIter);
+pub struct TokenTreeIter(proc_macro::TokenTreeIter);
 
 impl IntoIterator for TokenStream {
     type Item = TokenTree;
-    type IntoIter = TokenIter;
+    type IntoIter = TokenTreeIter;
 
-    fn into_iter(self) -> TokenIter {
-        TokenIter(self.0.into_iter())
+    fn into_iter(self) -> TokenTreeIter {
+        TokenTreeIter(self.0.into_iter())
     }
 }
 
-impl Iterator for TokenIter {
+impl Iterator for TokenTreeIter {
     type Item = TokenTree;
 
     fn next(&mut self) -> Option<TokenTree> {
@@ -125,27 +125,27 @@
         Some(TokenTree {
             span: ::Span(Span(token.span)),
             kind: match token.kind {
-                proc_macro::TokenKind::Sequence(delim, s) => {
+                proc_macro::TokenNode::Group(delim, s) => {
                     let delim = match delim {
                         proc_macro::Delimiter::Parenthesis => Delimiter::Parenthesis,
                         proc_macro::Delimiter::Bracket => Delimiter::Bracket,
                         proc_macro::Delimiter::Brace => Delimiter::Brace,
                         proc_macro::Delimiter::None => Delimiter::None,
                     };
-                    TokenKind::Sequence(delim, ::TokenStream(TokenStream(s)))
+                    TokenNode::Group(delim, ::TokenStream(TokenStream(s)))
                 }
-                proc_macro::TokenKind::Op(ch, kind) => {
+                proc_macro::TokenNode::Op(ch, kind) => {
                     let kind = match kind {
-                        proc_macro::OpKind::Joint => OpKind::Joint,
-                        proc_macro::OpKind::Alone => OpKind::Alone,
+                        proc_macro::Spacing::Joint => Spacing::Joint,
+                        proc_macro::Spacing::Alone => Spacing::Alone,
                     };
-                    TokenKind::Op(ch, kind)
+                    TokenNode::Op(ch, kind)
                 }
-                proc_macro::TokenKind::Word(s) => {
-                    TokenKind::Word(::Symbol(Symbol(s)))
+                proc_macro::TokenNode::Term(s) => {
+                    TokenNode::Term(::Term(Term(s)))
                 }
-                proc_macro::TokenKind::Literal(l) => {
-                    TokenKind::Literal(::Literal(Literal(l)))
+                proc_macro::TokenNode::Literal(l) => {
+                    TokenNode::Literal(::Literal(Literal(l)))
                 }
             },
         })
@@ -156,9 +156,9 @@
     }
 }
 
-impl fmt::Debug for TokenIter {
+impl fmt::Debug for TokenTreeIter {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        f.debug_struct("TokenIter").finish()
+        f.debug_struct("TokenTreeIter").finish()
     }
 }
 
@@ -179,23 +179,23 @@
 }
 
 #[derive(Copy, Clone)]
-pub struct Symbol(proc_macro::Symbol);
+pub struct Term(proc_macro::Term);
 
-impl<'a> From<&'a str> for Symbol {
-    fn from(string: &'a str) -> Symbol {
-        Symbol(string.into())
+impl<'a> From<&'a str> for Term {
+    fn from(string: &'a str) -> Term {
+        Term(proc_macro::Term::intern(string))
     }
 }
 
-impl ops::Deref for Symbol {
+impl ops::Deref for Term {
     type Target = str;
 
     fn deref(&self) -> &str {
-        &self.0
+        self.0.as_str()
     }
 }
 
-impl fmt::Debug for Symbol {
+impl fmt::Debug for Term {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         (**self).fmt(f)
     }
@@ -240,12 +240,12 @@
         Literal(to_literal(s))
     }
 
-    pub fn float(s: &str) -> Literal {
-        Literal(to_literal(s))
+    pub fn float(s: f64) -> Literal {
+        Literal(to_literal(&s.to_string()))
     }
 
-    pub fn integer(s: &str) -> Literal {
-        Literal(to_literal(s))
+    pub fn integer(s: i64) -> Literal {
+        Literal(to_literal(&s.to_string()))
     }
 
     pub fn raw_string(s: &str, pounds: usize) -> Literal {
@@ -284,7 +284,7 @@
 fn to_literal(s: &str) -> proc_macro::Literal {
     let stream = s.parse::<proc_macro::TokenStream>().unwrap();
     match stream.into_iter().next().unwrap().kind {
-        proc_macro::TokenKind::Literal(l) => l,
+        proc_macro::TokenNode::Literal(l) => l,
         _ => unreachable!(),
     }
 }
@@ -308,8 +308,7 @@
     ($($t:ident,)*) => {$(
         impl From<$t> for Literal {
             fn from(t: $t) -> Literal {
-                // TODO: remove this `as f32` when fixed upstream
-                Literal(proc_macro::Literal::$t(t as f32))
+                Literal(proc_macro::Literal::$t(t))
             }
         }
     )*}
diff --git a/tests/compile-fail/symbol_send.rs b/tests/compile-fail/symbol_send.rs
index 64727fc..19da4e7 100644
--- a/tests/compile-fail/symbol_send.rs
+++ b/tests/compile-fail/symbol_send.rs
@@ -1,9 +1,9 @@
 extern crate proc_macro2;
 
-use proc_macro2::Symbol;
+use proc_macro2::Term;
 
 fn assert_send<T: Send>() {}
 
 fn main() {
-    assert_send::<Symbol>(); //~ the trait bound `*const (): std::marker::Send` is not satisfied in `proc_macro2::Symbol`
+    assert_send::<Term>(); //~ the trait bound `*const (): std::marker::Send` is not satisfied in `proc_macro2::Term`
 }
diff --git a/tests/compile-fail/symbol_sync.rs b/tests/compile-fail/symbol_sync.rs
index ede06d1..68c1289 100644
--- a/tests/compile-fail/symbol_sync.rs
+++ b/tests/compile-fail/symbol_sync.rs
@@ -1,9 +1,9 @@
 extern crate proc_macro2;
 
-use proc_macro2::Symbol;
+use proc_macro2::Term;
 
 fn assert_sync<T: Sync>() {}
 
 fn main() {
-    assert_sync::<Symbol>(); //~ the trait bound `*const (): std::marker::Sync` is not satisfied in `proc_macro2::Symbol`
+    assert_sync::<Term>(); //~ the trait bound `*const (): std::marker::Sync` is not satisfied in `proc_macro2::Term`
 }
diff --git a/tests/test.rs b/tests/test.rs
index 0f81816..4d6831b 100644
--- a/tests/test.rs
+++ b/tests/test.rs
@@ -1,17 +1,17 @@
 extern crate proc_macro2;
 
-use proc_macro2::{Symbol, Literal, TokenStream};
+use proc_macro2::{Term, Literal, TokenStream};
 
 #[test]
 fn symbols() {
-    assert_eq!(Symbol::from("foo").as_str(), "foo");
-    assert_eq!(Symbol::from("bar").as_str(), "bar");
+    assert_eq!(Term::intern("foo").as_str(), "foo");
+    assert_eq!(Term::intern("bar").as_str(), "bar");
 }
 
 #[test]
 fn literals() {
-    assert_eq!(Literal::from("foo").to_string(), "\"foo\"");
-    assert_eq!(Literal::from("\"").to_string(), "\"\\\"\"");
+    assert_eq!(Literal::string("foo").to_string(), "\"foo\"");
+    assert_eq!(Literal::string("\"").to_string(), "\"\\\"\"");
 }
 
 #[test]
