diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp
index 4fbf2f6..5382ab5 100644
--- a/lib/AST/Decl.cpp
+++ b/lib/AST/Decl.cpp
@@ -297,6 +297,19 @@
   return false;
 }
 
+NamedDecl *NamedDecl::getUnderlyingDecl() {
+  NamedDecl *ND = this;
+  while (true) {
+    if (UsingDecl *UD = dyn_cast<UsingDecl>(ND))
+      ND = UD->getTargetDecl();
+    else if (ObjCCompatibleAliasDecl *AD
+              = dyn_cast<ObjCCompatibleAliasDecl>(ND))
+      return AD->getClassInterface();
+    else
+      return ND;
+  }
+}
+
 //===----------------------------------------------------------------------===//
 // VarDecl Implementation
 //===----------------------------------------------------------------------===//
diff --git a/lib/Sema/SemaLookup.cpp b/lib/Sema/SemaLookup.cpp
index d76761c..cc9e783 100644
--- a/lib/Sema/SemaLookup.cpp
+++ b/lib/Sema/SemaLookup.cpp
@@ -139,20 +139,14 @@
         // nothing to leak.
         Ovl = OverloadedFunctionDecl::Create(Context, (*I)->getDeclContext(),
                                              (*I)->getDeclName());
-        NamedDecl *ND = (*I);
-        if (UsingDecl *UD = dyn_cast<UsingDecl>(ND))
-          ND = UD->getTargetDecl();
-
+        NamedDecl *ND = (*I)->getUnderlyingDecl();
         if (isa<FunctionDecl>(ND))
           Ovl->addOverload(cast<FunctionDecl>(ND));
         else
           Ovl->addOverload(cast<FunctionTemplateDecl>(ND));
       }
 
-      NamedDecl *ND = (*Last);
-      if (UsingDecl *UD = dyn_cast<UsingDecl>(ND))
-        ND = UD->getTargetDecl();
-      
+      NamedDecl *ND = (*Last)->getUnderlyingDecl();
       if (isa<FunctionDecl>(ND))
         Ovl->addOverload(cast<FunctionDecl>(ND));
       else
@@ -219,9 +213,7 @@
       break;
 
     case LResult::Found: {
-      NamedDecl *ND = I->getAsDecl();
-      if (UsingDecl *UD = dyn_cast<UsingDecl>(ND))
-        ND = UD->getTargetDecl();
+      NamedDecl *ND = I->getAsDecl()->getUnderlyingDecl();
         
       if (TagDecl *TD = dyn_cast<TagDecl>(ND)) {
         TagFound = Context.getCanonicalDecl(TD);
@@ -333,11 +325,8 @@
 
 Sema::LookupResult
 Sema::LookupResult::CreateLookupResult(ASTContext &Context, NamedDecl *D) {
-  if (ObjCCompatibleAliasDecl *Alias 
-        = dyn_cast_or_null<ObjCCompatibleAliasDecl>(D))
-    D = Alias->getClassInterface();
-  if (UsingDecl *UD = dyn_cast_or_null<UsingDecl>(D))
-    D = UD->getTargetDecl();
+  if (D)
+    D = D->getUnderlyingDecl();
   
   LookupResult Result;
   Result.StoredKind = (D && isa<OverloadedFunctionDecl>(D))?
@@ -367,12 +356,9 @@
     }
   } 
 
-  Decl *D = *F;
-  if (ObjCCompatibleAliasDecl *Alias 
-        = dyn_cast_or_null<ObjCCompatibleAliasDecl>(D))
-    D = Alias->getClassInterface();
-  if (UsingDecl *UD = dyn_cast_or_null<UsingDecl>(D))
-    D = UD->getTargetDecl();
+  NamedDecl *D = *F;
+  if (D)
+    D = D->getUnderlyingDecl();
 
   Result.StoredKind = SingleDecl;
   Result.First = reinterpret_cast<uintptr_t>(D);
@@ -398,13 +384,10 @@
     }
   }
 
-  Decl *D = *F;
-  if (ObjCCompatibleAliasDecl *Alias 
-        = dyn_cast_or_null<ObjCCompatibleAliasDecl>(D))
-    D = Alias->getClassInterface();
-  if (UsingDecl *UD = dyn_cast_or_null<UsingDecl>(D))
-    D = UD->getTargetDecl();
-
+  NamedDecl *D = *F;
+  if (D)
+    D = D->getUnderlyingDecl();
+  
   Result.StoredKind = SingleDecl;
   Result.First = reinterpret_cast<uintptr_t>(D);
   Result.Last = 0;
