diff --git a/src/libs/cplusplus/CppRewriter.cpp b/src/libs/cplusplus/CppRewriter.cpp
index ca4acd441223623236e93eb589663ec0319e6e3e..d91f175a2a51233002c4848592d2b50fb4646bff 100644
--- a/src/libs/cplusplus/CppRewriter.cpp
+++ b/src/libs/cplusplus/CppRewriter.cpp
@@ -242,9 +242,9 @@ public:
             temps.append(control()->qualifiedNameId(base, n));
         }
 
-        virtual void visit(const NameId *name)
+        virtual void visit(const Identifier *name)
         {
-            temps.append(control()->nameId(identifier(name->identifier())));
+            temps.append(control()->identifier(name->chars(), name->size()));
         }
 
         virtual void visit(const TemplateNameId *name)
diff --git a/src/libs/cplusplus/DeprecatedGenTemplateInstance.cpp b/src/libs/cplusplus/DeprecatedGenTemplateInstance.cpp
index 7edc44d734558a69da41fb5f9eac4078c0a16db9..0247ba2c2db865267db3cbc7ace02004d9c80712 100644
--- a/src/libs/cplusplus/DeprecatedGenTemplateInstance.cpp
+++ b/src/libs/cplusplus/DeprecatedGenTemplateInstance.cpp
@@ -231,7 +231,7 @@ private:
             return previousType;
         }
 
-        virtual void visit(const NameId *name)
+        virtual void visit(const Identifier *name)
         {
             int index = findSubstitution(name->identifier());
 
@@ -261,10 +261,9 @@ private:
             if (! name)
                 return name;
 
-            else if (const Name *nameId = name->asNameId()) {
-                const Identifier *id = control()->identifier(nameId->identifier()->chars(),
-                                                                         nameId->identifier()->size());
-                return control()->nameId(id);
+            else if (const Identifier *nameId = name->asNameId()) {
+                const Identifier *id = control()->identifier(nameId->chars(), nameId->size());
+                return id;
 
             } else if (const TemplateNameId *templId = name->asTemplateNameId()) {
                 QVarLengthArray<FullySpecifiedType, 8> arguments(templId->templateArgumentCount());
diff --git a/src/libs/cplusplus/FindUsages.cpp b/src/libs/cplusplus/FindUsages.cpp
index d96d8046fa7102a6143c3807a5df773a3a6a2954..ff8ccb53e49c7060bedffca215d0ebaa63c27055 100644
--- a/src/libs/cplusplus/FindUsages.cpp
+++ b/src/libs/cplusplus/FindUsages.cpp
@@ -135,7 +135,7 @@ void FindUsages::reportResult(unsigned tokenIndex, const Name *name, Scope *scop
 
 void FindUsages::reportResult(unsigned tokenIndex, const Identifier *id, Scope *scope)
 {
-    reportResult(tokenIndex, control()->nameId(id), scope);
+    reportResult(tokenIndex, id, scope);
 }
 
 void FindUsages::reportResult(unsigned tokenIndex, const QList<LookupItem> &candidates)
diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp
index 68522a74a01c6816358285a55b7b150d746a7897..813a50bb8a0496cb82c351ad63c80df130992f58 100644
--- a/src/libs/cplusplus/LookupContext.cpp
+++ b/src/libs/cplusplus/LookupContext.cpp
@@ -854,7 +854,7 @@ bool CreateBindings::visit(Declaration *decl)
                     qDebug() << "found entity not found for" << oo(namedTy->name());
                 }
             } else if (Class *klass = ty->asClassType()) {
-                if (const NameId *nameId = decl->name()->asNameId()) {
+                if (const Identifier *nameId = decl->name()->asNameId()) {
                     ClassOrNamespace *binding = _currentClassOrNamespace->findOrCreateType(nameId);
                     binding->addSymbol(klass);
                 }
@@ -885,7 +885,7 @@ bool CreateBindings::visit(UsingDeclaration *u)
 {
     if (u->name()) {
         if (const QualifiedNameId *q = u->name()->asQualifiedNameId()) {
-            if (const NameId *unqualifiedId = q->name()->asNameId()) {
+            if (const Identifier *unqualifiedId = q->name()->asNameId()) {
                 if (ClassOrNamespace *delegate = _currentClassOrNamespace->lookupType(q)) {
                     ClassOrNamespace *b = _currentClassOrNamespace->findOrCreateType(unqualifiedId);
                     b->addUsing(delegate);
diff --git a/src/libs/cplusplus/LookupContext.h b/src/libs/cplusplus/LookupContext.h
index 23cb8b3fbee8a4ca5ea9362b0d19af37823309a1..d7b03b97d3579a42d12f0f5ca38ac9796ce0eea8 100644
--- a/src/libs/cplusplus/LookupContext.h
+++ b/src/libs/cplusplus/LookupContext.h
@@ -80,9 +80,9 @@ private:
     QList<LookupItem> lookup_helper(const Name *name, bool searchInEnclosingScope);
 
     void lookup_helper(const Name *name, ClassOrNamespace *binding,
-                            QList<LookupItem> *result,
-                            QSet<ClassOrNamespace *> *processed,
-                            const TemplateNameId *templateId);
+                       QList<LookupItem> *result,
+                       QSet<ClassOrNamespace *> *processed,
+                       const TemplateNameId *templateId);
 
     ClassOrNamespace *lookupType_helper(const Name *name, QSet<ClassOrNamespace *> *processed,
                                         bool searchInEnclosingScope);
diff --git a/src/libs/cplusplus/NamePrettyPrinter.cpp b/src/libs/cplusplus/NamePrettyPrinter.cpp
index 5c6146d0e9895ef6e9dbbbda9450388c93de6326..7d19ef13acfa21602d9589e7c6c05ce6e5cb998b 100644
--- a/src/libs/cplusplus/NamePrettyPrinter.cpp
+++ b/src/libs/cplusplus/NamePrettyPrinter.cpp
@@ -62,7 +62,7 @@ QString NamePrettyPrinter::switchName(const QString &name)
     return previousName;
 }
 
-void NamePrettyPrinter::visit(const NameId *name)
+void NamePrettyPrinter::visit(const Identifier *name)
 {
     const Identifier *id = name->identifier();
     if (id)
diff --git a/src/libs/cplusplus/NamePrettyPrinter.h b/src/libs/cplusplus/NamePrettyPrinter.h
index b136e5215b8c46b2d3fa74769a00926327c6f558..501dbcaa9a3cc16949a2a7dcae875c72e13e6469 100644
--- a/src/libs/cplusplus/NamePrettyPrinter.h
+++ b/src/libs/cplusplus/NamePrettyPrinter.h
@@ -49,7 +49,7 @@ public:
 protected:
     QString switchName(const QString &name = QString());
 
-    virtual void visit(const NameId *name);
+    virtual void visit(const Identifier *name);
     virtual void visit(const TemplateNameId *name);
     virtual void visit(const DestructorNameId *name);
     virtual void visit(const OperatorNameId *name);
diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp
index 3533b1f23974ac6189342271df8bba421f3a271a..b0418419da94dd443d54c70d6f4be1fdcd480bc0 100644
--- a/src/libs/cplusplus/ResolveExpression.cpp
+++ b/src/libs/cplusplus/ResolveExpression.cpp
@@ -231,8 +231,8 @@ bool ResolveExpression::visit(NewExpressionAST *ast)
 
 bool ResolveExpression::visit(TypeidExpressionAST *)
 {
-    const Name *stdName = control()->nameId(control()->identifier("std"));
-    const Name *tiName = control()->nameId(control()->identifier("type_info"));
+    const Name *stdName = control()->identifier("std");
+    const Name *tiName = control()->identifier("type_info");
     const Name *q = control()->qualifiedNameId(control()->qualifiedNameId(/* :: */ 0, stdName), tiName);
 
     FullySpecifiedType ty(control()->namedType(q));
diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp
index aa7f49173b276448d964f62ce24d701f551f6d8f..d9f6c61952692184793fd420a9860794e8ae5d3b 100644
--- a/src/plugins/cppeditor/cppquickfixes.cpp
+++ b/src/plugins/cppeditor/cppquickfixes.cpp
@@ -981,7 +981,7 @@ public:
         }
 
         QSharedPointer<Control> control = state.context().control();
-        const Name *trName = control->nameId(control->identifier("tr"));
+        const Name *trName = control->identifier("tr");
 
         // Check whether we are in a method:
         for (int i = path.size() - 1; i >= 0; --i)
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 4e6f013d7979e67dfeb25d98e0185be2f4402134..45125a145339c4cd00ffbda37c93ce130d931893 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -181,7 +181,7 @@ protected:
         return item;
     }
 
-    virtual void visit(const NameId *name)
+    virtual void visit(const Identifier *name)
     { _item = newCompletionItem(name); }
 
     virtual void visit(const TemplateNameId *name)
diff --git a/src/shared/cplusplus/Bind.cpp b/src/shared/cplusplus/Bind.cpp
index 6aa04592aaaef59f21885345a7bed5ee246faa53..d7ab4d38535679315992c96e54a3d2d9e8796f6e 100644
--- a/src/shared/cplusplus/Bind.cpp
+++ b/src/shared/cplusplus/Bind.cpp
@@ -303,7 +303,7 @@ const Name *Bind::objCSelectorArgument(ObjCSelectorArgumentAST *ast, bool *hasAr
     if (ast->colon_token)
         *hasArg = true;
 
-    return control()->nameId(identifier(ast->name_token));
+    return identifier(ast->name_token);
 }
 
 bool Bind::visit(AttributeAST *ast)
@@ -468,7 +468,7 @@ void Bind::enumerator(EnumeratorAST *ast, Enum *symbol)
     ExpressionTy expression = this->expression(ast->expression);
 
     if (ast->identifier_token) {
-        const Name *name = control()->nameId(identifier(ast->identifier_token));
+        const Name *name = identifier(ast->identifier_token);
         Declaration *e = control()->newDeclaration(ast->identifier_token, name);
         e->setType(control()->integerType(IntegerType::Int)); // ### introduce IntegerType::Enumerator
         symbol->addMember(e);
@@ -1143,20 +1143,20 @@ bool Bind::visit(QtMemberDeclarationAST *ast)
     const Name *name = 0;
 
     if (tokenKind(ast->q_token) == T_Q_D)
-        name = control()->nameId(control()->identifier("d"));
+        name = control()->identifier("d");
     else
-        name = control()->nameId(control()->identifier("q"));
+        name = control()->identifier("q");
 
     FullySpecifiedType declTy = this->expression(ast->type_id);
 
     if (tokenKind(ast->q_token) == T_Q_D) {
         if (NamedType *namedTy = declTy->asNamedType()) {
-            if (const NameId *nameId = namedTy->name()->asNameId()) {
+            if (const Identifier *nameId = namedTy->name()->asNameId()) {
                 std::string privateClass;
                 privateClass += nameId->identifier()->chars();
                 privateClass += "Private";
 
-                const Name *privName = control()->nameId(control()->identifier(privateClass.c_str(), privateClass.size()));
+                const Name *privName = control()->identifier(privateClass.c_str(), privateClass.size());
                 declTy.setType(control()->namedType(privName));
             }
         }
@@ -1987,7 +1987,7 @@ bool Bind::visit(NamespaceAST *ast)
     const Name *namespaceName = 0;
     if (ast->identifier_token) {
         sourceLocation = ast->identifier_token;
-        namespaceName = control()->nameId(identifier(ast->identifier_token));
+        namespaceName = identifier(ast->identifier_token);
     }
 
     Namespace *ns = control()->newNamespace(sourceLocation, namespaceName);
@@ -2008,7 +2008,7 @@ bool Bind::visit(NamespaceAliasDefinitionAST *ast)
     const Name *name = 0;
     if (ast->namespace_name_token) {
         sourceLocation = ast->namespace_name_token;
-        name = control()->nameId(identifier(ast->namespace_name_token));
+        name = identifier(ast->namespace_name_token);
     }
 
     NamespaceAlias *namespaceAlias = control()->newNamespaceAlias(sourceLocation, name);
@@ -2444,14 +2444,16 @@ bool Bind::visit(ConversionFunctionIdAST *ast)
 bool Bind::visit(SimpleNameAST *ast)
 {
     const Identifier *id = identifier(ast->identifier_token);
-    ast->name = _name = control()->nameId(id);
+    _name = id;
+    ast->name = _name;
     return false;
 }
 
 bool Bind::visit(DestructorNameAST *ast)
 {
     const Identifier *id = identifier(ast->identifier_token);
-    ast->name = _name = control()->destructorNameId(id);
+    _name = control()->destructorNameId(id);
+    ast->name = _name;
     return false;
 }
 
diff --git a/src/shared/cplusplus/CPlusPlusForwardDeclarations.h b/src/shared/cplusplus/CPlusPlusForwardDeclarations.h
index 980d5c7dbf201689d51238757134da3a61b38a01..2e42a89afc5637672db73e430a28c3bd12725b2b 100644
--- a/src/shared/cplusplus/CPlusPlusForwardDeclarations.h
+++ b/src/shared/cplusplus/CPlusPlusForwardDeclarations.h
@@ -83,7 +83,7 @@ class SymbolTable;
 // names
 class NameVisitor;
 class Name;
-class NameId;
+class Identifier;
 class TemplateNameId;
 class DestructorNameId;
 class OperatorNameId;
diff --git a/src/shared/cplusplus/Control.cpp b/src/shared/cplusplus/Control.cpp
index 050171eb6a65b35e21f80e41b9958de9bba86d81..14e302a0399c89e13fb1af1918ee123bccaea90f 100644
--- a/src/shared/cplusplus/Control.cpp
+++ b/src/shared/cplusplus/Control.cpp
@@ -129,14 +129,6 @@ template <> struct Compare<ArrayType>
     }
 };
 
-template <> struct Compare<NameId>
-{
-    bool operator()(const NameId &name, const NameId &otherName) const
-    {
-        return name.identifier() < otherName.identifier();
-    }
-};
-
 template <> struct Compare<DestructorNameId>
 {
     bool operator()(const DestructorNameId &name, const DestructorNameId &otherName) const
@@ -256,14 +248,6 @@ public:
         delete_array_entries(symbols);
     }
 
-    const NameId *findOrInsertNameId(const Identifier *id)
-    {
-        if (! id)
-            return 0;
-
-        return nameIds.intern(NameId(id));
-    }
-
     template <typename _Iterator>
     const TemplateNameId *findOrInsertTemplateNameId(const Identifier *id, _Iterator first, _Iterator last)
     {
@@ -498,7 +482,6 @@ public:
     // ### replace std::map with lookup tables. ASAP!
 
     // names
-    Table<NameId> nameIds;
     Table<DestructorNameId> destructorNameIds;
     Table<OperatorNameId> operatorNameIds;
     Table<ConversionNameId> conversionNameIds;
@@ -616,9 +599,6 @@ const NumericLiteral *Control::numericLiteral(const char *chars)
     return numericLiteral(chars, length);
 }
 
-const NameId *Control::nameId(const Identifier *id)
-{ return d->findOrInsertNameId(id); }
-
 const TemplateNameId *Control::templateNameId(const Identifier *id,
                                               const FullySpecifiedType *const args,
                                               unsigned argv)
diff --git a/src/shared/cplusplus/Control.h b/src/shared/cplusplus/Control.h
index 034e4d583c478364a4b976103ad18aaa01215eba..78839fb1e5d0d3e8053a938462402e5802d789f2 100644
--- a/src/shared/cplusplus/Control.h
+++ b/src/shared/cplusplus/Control.h
@@ -65,9 +65,6 @@ public:
     DiagnosticClient *diagnosticClient() const;
     void setDiagnosticClient(DiagnosticClient *diagnosticClient);
 
-    /// Returns the canonical name id.
-    const NameId *nameId(const Identifier *id);
-
     /// Returns the canonical template name id.
     const TemplateNameId *templateNameId(const Identifier *id,
                                          const FullySpecifiedType *const args = 0,
diff --git a/src/shared/cplusplus/Literals.cpp b/src/shared/cplusplus/Literals.cpp
index d56f937c4820e00e8e701d379894ab18b4bef273..9d1bf652254b715b2cb4e7d12901cb597cf918c5 100644
--- a/src/shared/cplusplus/Literals.cpp
+++ b/src/shared/cplusplus/Literals.cpp
@@ -47,6 +47,7 @@
 // THE SOFTWARE.
 
 #include "Literals.h"
+#include "NameVisitor.h"
 #include <cstring>
 #include <algorithm>
 #include <iostream>
@@ -69,7 +70,7 @@ Literal::Literal(const char *chars, unsigned size)
 Literal::~Literal()
 { delete[] _chars; }
 
-bool Literal::isEqualTo(const Literal *other) const
+bool Literal::equalTo(const Literal *other) const
 {
     if (! other)
         return false;
@@ -212,3 +213,18 @@ Identifier::Identifier(const char *chars, unsigned size)
 Identifier::~Identifier()
 { }
 
+void Identifier::accept0(NameVisitor *visitor) const
+{ visitor->visit(this); }
+
+bool Identifier::isEqualTo(const Name *other) const
+{
+    if (this == other)
+        return true;
+
+    else if (other) {
+        if (const Identifier *nameId = other->asNameId()) {
+            return equalTo(nameId);
+        }
+    }
+    return false;
+}
diff --git a/src/shared/cplusplus/Literals.h b/src/shared/cplusplus/Literals.h
index afe9bae2e16a1d213f93abe1eff9ec97010993bf..6c1e958b6ce7fa3502437dd65bd8eb2ad7c8e1e4 100644
--- a/src/shared/cplusplus/Literals.h
+++ b/src/shared/cplusplus/Literals.h
@@ -51,7 +51,7 @@
 
 #include "CPlusPlusForwardDeclarations.h"
 #include "Token.h"
-
+#include "Name.h"
 
 namespace CPlusPlus {
 
@@ -78,7 +78,7 @@ public:
     unsigned hashCode() const;
     static unsigned hashCode(const char *chars, unsigned size);
 
-    bool isEqualTo(const Literal *other) const;
+    bool equalTo(const Literal *other) const;
 
 private:
     char *_chars;
@@ -126,11 +126,21 @@ private:
     };
 };
 
-class CPLUSPLUS_EXPORT Identifier: public Literal
+class CPLUSPLUS_EXPORT Identifier: public Literal, public Name
 {
 public:
     Identifier(const char *chars, unsigned size);
     virtual ~Identifier();
+
+    virtual const Identifier *identifier() const { return this; }
+
+    virtual bool isEqualTo(const Name *other) const;
+
+    virtual const Identifier *asNameId() const
+    { return this; }
+
+protected:
+    virtual void accept0(NameVisitor *visitor) const;
 };
 
 } // end of namespace CPlusPlus
diff --git a/src/shared/cplusplus/Name.h b/src/shared/cplusplus/Name.h
index 152e035382c14546228f0fa56ae01065a6a2dced..a5638fcac7f2f9ef386bc9f0e3997c6c32d419da 100644
--- a/src/shared/cplusplus/Name.h
+++ b/src/shared/cplusplus/Name.h
@@ -70,7 +70,7 @@ public:
     bool isQualifiedNameId() const;
     bool isSelectorNameId() const;
 
-    virtual const NameId *asNameId() const { return 0; }
+    virtual const Identifier *asNameId() const { return 0; }
     virtual const TemplateNameId *asTemplateNameId() const { return 0; }
     virtual const DestructorNameId *asDestructorNameId() const { return 0; }
     virtual const OperatorNameId *asOperatorNameId() const { return 0; }
diff --git a/src/shared/cplusplus/NameVisitor.h b/src/shared/cplusplus/NameVisitor.h
index 5cb046af8e9902bbe2dedcdb6ac713111d143d83..3a67c1846d775aa38aece1ed1a40603d51631abc 100644
--- a/src/shared/cplusplus/NameVisitor.h
+++ b/src/shared/cplusplus/NameVisitor.h
@@ -68,7 +68,7 @@ public:
     virtual bool preVisit(const Name *) { return true; }
     virtual void postVisit(const Name *) {}
 
-    virtual void visit(const NameId *) {}
+    virtual void visit(const Identifier *) {}
     virtual void visit(const TemplateNameId *) {}
     virtual void visit(const DestructorNameId *) {}
     virtual void visit(const OperatorNameId *) {}
diff --git a/src/shared/cplusplus/Names.cpp b/src/shared/cplusplus/Names.cpp
index c4cdafb4f313c3b0bc5b21f9b767b0d4809136cb..63ff03f38cc378966f32a6341d3b3de3c750a628 100644
--- a/src/shared/cplusplus/Names.cpp
+++ b/src/shared/cplusplus/Names.cpp
@@ -90,32 +90,6 @@ bool QualifiedNameId::isEqualTo(const Name *other) const
     return false;
 }
 
-NameId::NameId(const Identifier *identifier)
-    : _identifier(identifier)
-{ }
-
-NameId::~NameId()
-{ }
-
-void NameId::accept0(NameVisitor *visitor) const
-{ visitor->visit(this); }
-
-const Identifier *NameId::identifier() const
-{ return _identifier; }
-
-bool NameId::isEqualTo(const Name *other) const
-{
-    if (other) {
-        const NameId *nameId = other->asNameId();
-        if (! nameId)
-            return false;
-        const Identifier *l = identifier();
-        const Identifier *r = nameId->identifier();
-        return l->isEqualTo(r);
-    }
-    return false;
-}
-
 DestructorNameId::DestructorNameId(const Identifier *identifier)
     : _identifier(identifier)
 { }
diff --git a/src/shared/cplusplus/Names.h b/src/shared/cplusplus/Names.h
index 050632a8b41b687e8de7a3a76607fc20ea8ba040..3a894a351e6627283751be8f4436d325df7ece21 100644
--- a/src/shared/cplusplus/Names.h
+++ b/src/shared/cplusplus/Names.h
@@ -82,26 +82,6 @@ private:
     const Name *_name;
 };
 
-class CPLUSPLUS_EXPORT NameId: public Name
-{
-public:
-    NameId(const Identifier *identifier);
-    virtual ~NameId();
-
-    virtual const Identifier *identifier() const;
-
-    virtual bool isEqualTo(const Name *other) const;
-
-    virtual const NameId *asNameId() const
-    { return this; }
-
-protected:
-    virtual void accept0(NameVisitor *visitor) const;
-
-private:
-    const Identifier *_identifier;
-};
-
 class CPLUSPLUS_EXPORT DestructorNameId: public Name
 {
 public:
diff --git a/src/shared/cplusplus/Scope.cpp b/src/shared/cplusplus/Scope.cpp
index 72d2b774aa4f310fd90fede8bc89d55846d647e0..bc5eeb90bbc116e4bcae42eaab566efc4a8c9313 100644
--- a/src/shared/cplusplus/Scope.cpp
+++ b/src/shared/cplusplus/Scope.cpp
@@ -94,7 +94,6 @@ public:
     /// Returns the last Symbol in the scope.
     iterator lastSymbol() const;
 
-    Symbol *lookat(const Name *name) const;
     Symbol *lookat(const Identifier *id) const;
     Symbol *lookat(int operatorId) const;
 
@@ -157,21 +156,6 @@ void SymbolTable::enterSymbol(Symbol *symbol)
     }
 }
 
-Symbol *SymbolTable::lookat(const Name *name) const
-{
-    if (! name)
-        return 0;
-
-    else if (const OperatorNameId *opId = name->asOperatorNameId())
-        return lookat(opId->kind());
-
-    else if (const Identifier *id = name->identifier())
-        return lookat(id);
-
-    else
-        return 0;
-}
-
 Symbol *SymbolTable::lookat(const Identifier *id) const
 {
     if (! _hash || ! id)
@@ -183,7 +167,7 @@ Symbol *SymbolTable::lookat(const Identifier *id) const
         const Name *identity = symbol->unqualifiedName();
         if (! identity) {
             continue;
-        } else if (const NameId *nameId = identity->asNameId()) {
+        } else if (const Identifier *nameId = identity->asNameId()) {
             if (nameId->identifier()->isEqualTo(id))
                 break;
         } else if (const TemplateNameId *t = identity->asTemplateNameId()) {
@@ -303,9 +287,6 @@ Scope::iterator Scope::firstMember() const
 Scope::iterator Scope::lastMember() const
 { return _members ? _members->lastSymbol() : 0; }
 
-Symbol *Scope::find(const Name *name) const
-{ return _members ? _members->lookat(name) : 0; }
-
 Symbol *Scope::find(const Identifier *id) const
 { return _members ? _members->lookat(id) : 0; }
 
diff --git a/src/shared/cplusplus/Scope.h b/src/shared/cplusplus/Scope.h
index c3a1cb23e7e0dee7259597ea03ccd0d4b4823bc9..47114111ba0d675995265f3028cfb15bb192c82f 100644
--- a/src/shared/cplusplus/Scope.h
+++ b/src/shared/cplusplus/Scope.h
@@ -80,7 +80,6 @@ public:
     /// Returns the last Symbol in the scope.
     iterator lastMember() const;
 
-    Symbol *find(const Name *name) const;
     Symbol *find(const Identifier *id) const;
     Symbol *find(int operatorId) const;
 
diff --git a/src/shared/cplusplus/Symbol.cpp b/src/shared/cplusplus/Symbol.cpp
index 4bc78da935c692b41a2a932af6ca49f3866d9a1c..5d46bc774ad1d610fbb261b9c0d72d90d832ea4c 100644
--- a/src/shared/cplusplus/Symbol.cpp
+++ b/src/shared/cplusplus/Symbol.cpp
@@ -85,7 +85,7 @@ protected:
         return previousValue;
     }
 
-    virtual void visit(const NameId *name)
+    virtual void visit(const Identifier *name)
     { _value = name->identifier()->hashCode(); }
 
     virtual void visit(const TemplateNameId *name)
diff --git a/tests/auto/cplusplus/semantic/tst_semantic.cpp b/tests/auto/cplusplus/semantic/tst_semantic.cpp
index a93b6ec3c6fd0eb1291705b621b188d32f5a2de0..d504a6d3a250599517f9bee2fab3c2f6e23fcd59 100644
--- a/tests/auto/cplusplus/semantic/tst_semantic.cpp
+++ b/tests/auto/cplusplus/semantic/tst_semantic.cpp
@@ -179,7 +179,7 @@ void tst_Semantic::function_declaration_2()
     QVERIFY(! arg->hasInitializer());
 
     // check the argument's name.
-    const NameId *argNameId = arg->name()->asNameId();
+    const Identifier *argNameId = arg->name()->asNameId();
     QVERIFY(argNameId);
 
     const Identifier *argId = argNameId->identifier();
@@ -243,7 +243,7 @@ void tst_Semantic::nested_class_1()
     Class *classObject = doc->globals->memberAt(0)->asClass();
     QVERIFY(classObject);
     QVERIFY(classObject->name());
-    const NameId *classObjectNameId = classObject->name()->asNameId();
+    const Identifier *classObjectNameId = classObject->name()->asNameId();
     QVERIFY(classObjectNameId);
     const Identifier *objectId = classObjectNameId->identifier();
     QCOMPARE(QByteArray(objectId->chars(), objectId->size()), QByteArray("Object"));
diff --git a/tests/auto/cplusplus/typeprettyprinter/tst_typeprettyprinter.cpp b/tests/auto/cplusplus/typeprettyprinter/tst_typeprettyprinter.cpp
index a4d6d3319ceef09b13aa260dabeefa619c933b81..d3fda4748de70b22f29e3ec4d1bc887454e187c1 100644
--- a/tests/auto/cplusplus/typeprettyprinter/tst_typeprettyprinter.cpp
+++ b/tests/auto/cplusplus/typeprettyprinter/tst_typeprettyprinter.cpp
@@ -31,8 +31,8 @@ Q_DECLARE_METATYPE(CPlusPlus::FullySpecifiedType);
 
 TranslationUnit *unit;
 
-NameId *nameId(const QString &name)
-{ return new NameId(new Identifier(name.toLatin1().constData(), name.toLatin1().size())); }
+const Identifier *nameId(const QString &name)
+{ return new Identifier(name.toLatin1().constData(), name.toLatin1().size()); }
 
 Argument *arg(const QString &name, const FullySpecifiedType &ty)
 {