diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h
index f758d05..8488089 100644
--- a/include/clang/Parse/Action.h
+++ b/include/clang/Parse/Action.h
@@ -848,11 +848,12 @@
   /// ActOnNamespaceAliasDef - This is called when a namespace alias definition
   /// is parsed.
   virtual DeclPtrTy ActOnNamespaceAliasDef(Scope *CurScope,
+                                           SourceLocation NamespaceLoc,
                                            SourceLocation AliasLoc,
                                            IdentifierInfo *Alias,
                                            const CXXScopeSpec &SS,
-                                           SourceLocation NamespaceLoc,
-                                           IdentifierInfo *NamespaceName) {
+                                           SourceLocation IdentLoc,
+                                           IdentifierInfo *Ident) {
     return DeclPtrTy();
   }
                                          
diff --git a/include/clang/Parse/Parser.h b/include/clang/Parse/Parser.h
index f2f3ccf..66058ca 100644
--- a/include/clang/Parse/Parser.h
+++ b/include/clang/Parse/Parser.h
@@ -997,7 +997,8 @@
   DeclPtrTy ParseUsingDirective(unsigned Context, SourceLocation UsingLoc);
   DeclPtrTy ParseUsingDeclaration(unsigned Context, SourceLocation UsingLoc);
   DeclPtrTy ParseStaticAssertDeclaration();
-  DeclPtrTy ParseNamespaceAlias(SourceLocation AliasLoc, IdentifierInfo *Alias);
+  DeclPtrTy ParseNamespaceAlias(SourceLocation NamespaceLoc,
+                                SourceLocation AliasLoc, IdentifierInfo *Alias);
   
   //===--------------------------------------------------------------------===//
   // C++ 9: classes [class] and C structs/unions.
diff --git a/lib/Parse/ParseDeclCXX.cpp b/lib/Parse/ParseDeclCXX.cpp
index 37eb34e..4201e1c 100644
--- a/lib/Parse/ParseDeclCXX.cpp
+++ b/lib/Parse/ParseDeclCXX.cpp
@@ -62,7 +62,7 @@
   
   if (Tok.is(tok::equal))
     // FIXME: Verify no attributes were present.
-    return ParseNamespaceAlias(IdentLoc, Ident);
+    return ParseNamespaceAlias(NamespaceLoc, IdentLoc, Ident);
   
   if (Tok.is(tok::l_brace)) {
     SourceLocation LBrace = ConsumeBrace();
@@ -99,7 +99,8 @@
 /// ParseNamespaceAlias - Parse the part after the '=' in a namespace
 /// alias definition.
 ///
-Parser::DeclPtrTy Parser::ParseNamespaceAlias(SourceLocation AliasLoc, 
+Parser::DeclPtrTy Parser::ParseNamespaceAlias(SourceLocation NamespaceLoc,
+                                              SourceLocation AliasLoc, 
                                               IdentifierInfo *Alias) {
   assert(Tok.is(tok::equal) && "Not equal token");
   
@@ -117,15 +118,15 @@
   }
 
   // Parse identifier.
-  IdentifierInfo *NamespaceName = Tok.getIdentifierInfo();
-  SourceLocation NamespaceLoc = ConsumeToken();
+  IdentifierInfo *Ident = Tok.getIdentifierInfo();
+  SourceLocation IdentLoc = ConsumeToken();
   
   // Eat the ';'.
   ExpectAndConsume(tok::semi, diag::err_expected_semi_after,
                    "namespace name", tok::semi);
   
-  return Actions.ActOnNamespaceAliasDef(CurScope, AliasLoc, Alias, SS,
-                                        NamespaceLoc, NamespaceName);
+  return Actions.ActOnNamespaceAliasDef(CurScope, NamespaceLoc, AliasLoc, Alias, 
+                                        SS, IdentLoc, Ident);
 }
 
 /// ParseLinkage - We know that the current token is a string_literal
diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h
index a7c48c8..ab1e9d4 100644
--- a/lib/Sema/Sema.h
+++ b/lib/Sema/Sema.h
@@ -1377,11 +1377,12 @@
   void PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir);
 
   virtual DeclPtrTy ActOnNamespaceAliasDef(Scope *CurScope,
+                                           SourceLocation NamespaceLoc,
                                            SourceLocation AliasLoc,
                                            IdentifierInfo *Alias,
                                            const CXXScopeSpec &SS,
-                                           SourceLocation NamespaceLoc,
-                                           IdentifierInfo *NamespaceName);
+                                           SourceLocation IdentLoc,
+                                           IdentifierInfo *Ident);
   
   /// AddCXXDirectInitializerToDecl - This action is called immediately after 
   /// ActOnDeclarator, when a C++ direct initializer is present.
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index 27d42dd..c9a2363 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -1677,11 +1677,12 @@
 }
 
 Sema::DeclPtrTy Sema::ActOnNamespaceAliasDef(Scope *S, 
+                                             SourceLocation NamespaceLoc,
                                              SourceLocation AliasLoc,
                                              IdentifierInfo *Alias,
                                              const CXXScopeSpec &SS,
-                                             SourceLocation NamespaceLoc,
-                                             IdentifierInfo *NamespaceName) {
+                                             SourceLocation IdentLoc,
+                                             IdentifierInfo *Ident) {
   
   // Check if we have a previous declaration with the same name.
   if (NamedDecl *PrevDecl = LookupName(S, Alias, LookupOrdinaryName)) {
@@ -1695,10 +1696,9 @@
   }
 
   // Lookup the namespace name.
-  LookupResult R = LookupParsedName(S, &SS, NamespaceName,
-                                    LookupNamespaceName, false);
+  LookupResult R = LookupParsedName(S, &SS, Ident, LookupNamespaceName, false);
   if (R.isAmbiguous()) {
-    DiagnoseAmbiguousLookup(R, NamespaceName, NamespaceLoc);
+    DiagnoseAmbiguousLookup(R, Ident, IdentLoc);
     return DeclPtrTy();
   }
   
