diff --git a/syntax/parse.rs b/syntax/parse.rs
index 20f79ec..9c766ff 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -58,6 +58,8 @@
     let mut doc = Doc::new();
     let mut derives = Vec::new();
     let mut namespace = namespace.clone();
+    let mut cxx_name = None;
+    let mut rust_name = None;
     attrs::parse(
         cx,
         &item.attrs,
@@ -65,6 +67,8 @@
             doc: Some(&mut doc),
             derives: Some(&mut derives),
             namespace: Some(&mut namespace),
+            cxx_name: Some(&mut cxx_name),
+            rust_name: Some(&mut rust_name),
             ..Default::default()
         },
     );
@@ -103,7 +107,7 @@
     }
 
     let struct_token = item.struct_token;
-    let name = Pair::new(namespace, item.ident.clone(), item.ident);
+    let name = pair(namespace, &item.ident, cxx_name, rust_name);
     let brace_token = named_fields.brace_token;
 
     Ok(Api::Struct(Struct {
@@ -121,6 +125,8 @@
     let mut derives = Vec::new();
     let mut repr = None;
     let mut namespace = namespace.clone();
+    let mut cxx_name = None;
+    let mut rust_name = None;
     attrs::parse(
         cx,
         &item.attrs,
@@ -129,6 +135,8 @@
             derives: Some(&mut derives),
             repr: Some(&mut repr),
             namespace: Some(&mut namespace),
+            cxx_name: Some(&mut cxx_name),
+            rust_name: Some(&mut rust_name),
             ..Default::default()
         },
     );
@@ -189,7 +197,7 @@
         }
     }
 
-    let name = Pair::new(namespace, item.ident.clone(), item.ident);
+    let name = pair(namespace, &item.ident, cxx_name, rust_name);
     let repr_ident = Ident::new(repr.as_ref(), Span::call_site());
     let repr_type = Type::Ident(RustName::new(repr_ident));
 
@@ -335,6 +343,8 @@
     let mut doc = Doc::new();
     let mut derives = Vec::new();
     let mut namespace = namespace.clone();
+    let mut cxx_name = None;
+    let mut rust_name = None;
     attrs::parse(
         cx,
         &foreign_type.attrs,
@@ -342,13 +352,14 @@
             doc: Some(&mut doc),
             derives: Some(&mut derives),
             namespace: Some(&mut namespace),
+            cxx_name: Some(&mut cxx_name),
+            rust_name: Some(&mut rust_name),
             ..Default::default()
         },
     );
 
     let type_token = foreign_type.type_token;
-    let ident = foreign_type.ident.clone();
-    let name = Pair::new(namespace, ident.clone(), ident);
+    let name = pair(namespace, &foreign_type.ident, cxx_name, rust_name);
     let colon_token = None;
     let bounds = Vec::new();
     let semi_token = foreign_type.semi_token;
@@ -574,6 +585,8 @@
     let mut doc = Doc::new();
     let mut derives = Vec::new();
     let mut namespace = namespace.clone();
+    let mut cxx_name = None;
+    let mut rust_name = None;
     attrs::parse(
         cx,
         &attrs,
@@ -581,6 +594,8 @@
             doc: Some(&mut doc),
             derives: Some(&mut derives),
             namespace: Some(&mut namespace),
+            cxx_name: Some(&mut cxx_name),
+            rust_name: Some(&mut rust_name),
             ..Default::default()
         },
     );
@@ -591,7 +606,7 @@
         return Err(Error::new_spanned(span, msg));
     }
 
-    let name = Pair::new(namespace, ident.clone(), ident);
+    let name = pair(namespace, &ident, cxx_name, rust_name);
 
     Ok(Api::TypeAlias(TypeAlias {
         doc,
@@ -648,6 +663,8 @@
     let mut doc = Doc::new();
     let mut derives = Vec::new();
     let mut namespace = namespace.clone();
+    let mut cxx_name = None;
+    let mut rust_name = None;
     attrs::parse(
         cx,
         &attrs,
@@ -655,11 +672,13 @@
             doc: Some(&mut doc),
             derives: Some(&mut derives),
             namespace: Some(&mut namespace),
+            cxx_name: Some(&mut cxx_name),
+            rust_name: Some(&mut rust_name),
             ..Default::default()
         },
     );
 
-    let name = Pair::new(namespace, ident.clone(), ident);
+    let name = pair(namespace, &ident, cxx_name, rust_name);
     let colon_token = Some(colon_token);
 
     Ok(match lang {
