diff --git a/src/attr.rs b/src/attr.rs
index 90d9af9..cdbc142 100644
--- a/src/attr.rs
+++ b/src/attr.rs
@@ -121,12 +121,12 @@
         }
 
         TokenNode::Term(sym) => {
-            let ident = Ident::new(sym, tts[0].span);
+            let ident = Ident::new(sym.as_str(), tts[0].span);
             if tts.len() >= 3 {
                 if let TokenNode::Op('=', Spacing::Alone) = tts[1].kind {
                     if let TokenNode::Literal(ref lit) = tts[2].kind {
                         let pair = MetaNameValue {
-                            ident: Ident::new(sym, tts[0].span),
+                            ident: Ident::new(sym.as_str(), tts[0].span),
                             eq_token: Token![=]([tts[1].span]),
                             lit: Lit {
                                 value: LitKind::Other(lit.clone()),
diff --git a/src/ident.rs b/src/ident.rs
index 0e2d521..908326e 100644
--- a/src/ident.rs
+++ b/src/ident.rs
@@ -96,9 +96,7 @@
     /// by the parser to create `Ident`s from existing Rust source code.
     ///
     /// Creating new `Ident`s programmatically is easier with `Ident::from`.
-    pub fn new(sym: Term, span: Span) -> Self {
-        let s = sym.as_str();
-
+    pub fn new(s: &str, span: Span) -> Self {
         if s.is_empty() {
             panic!("ident is not allowed to be empty; use Option<Ident>");
         }
@@ -134,7 +132,7 @@
         }
 
         Ident {
-            sym: sym,
+            sym: Term::intern(s),
             span: span,
         }
     }
@@ -142,43 +140,43 @@
 
 impl<'a> From<&'a str> for Ident {
     fn from(s: &str) -> Self {
-        Ident::new(Term::intern(s), Span::default())
+        Ident::new(s, Span::default())
     }
 }
 
 impl From<Token![self]> for Ident {
     fn from(tok: Token![self]) -> Self {
-        Ident::new(Term::intern("self"), tok.0)
+        Ident::new("self", tok.0)
     }
 }
 
 impl From<Token![Self]> for Ident {
     fn from(tok: Token![Self]) -> Self {
-        Ident::new(Term::intern("Self"), tok.0)
+        Ident::new("Self", tok.0)
     }
 }
 
 impl From<Token![super]> for Ident {
     fn from(tok: Token![super]) -> Self {
-        Ident::new(Term::intern("super"), tok.0)
+        Ident::new("super", tok.0)
     }
 }
 
 impl From<Token![crate]> for Ident {
     fn from(tok: Token![crate]) -> Self {
-        Ident::new(Term::intern("crate"), tok.0)
+        Ident::new("crate", tok.0)
     }
 }
 
 impl<'a> From<Cow<'a, str>> for Ident {
     fn from(s: Cow<'a, str>) -> Self {
-        Ident::new(Term::intern(&s), Span::default())
+        Ident::new(&s, Span::default())
     }
 }
 
 impl From<String> for Ident {
     fn from(s: String) -> Self {
-        Ident::new(Term::intern(&s), Span::default())
+        Ident::new(&s, Span::default())
     }
 }
 
