diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index fd82da5..4f2c3d9 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -307,7 +307,7 @@
 }
 
 uint32_t
-SymbolFileDWARF::GetAbilities ()
+SymbolFileDWARF::CalculateAbilities ()
 {
     uint32_t abilities = 0;
     if (m_obj_file != NULL)
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
index cc4cf55..56d6bf7 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
@@ -84,7 +84,7 @@
                             SymbolFileDWARF(lldb_private::ObjectFile* ofile);
     virtual                 ~SymbolFileDWARF();
 
-    virtual uint32_t        GetAbilities ();
+    virtual uint32_t        CalculateAbilities ();
     virtual void            InitializeObject();
 
     //------------------------------------------------------------------
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
index c09b166..e8212c2 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
@@ -419,7 +419,7 @@
 }
 
 uint32_t
-SymbolFileDWARFDebugMap::GetAbilities ()
+SymbolFileDWARFDebugMap::CalculateAbilities ()
 {
     // In order to get the abilities of this plug-in, we look at the list of
     // N_OSO entries (object files) from the symbol table and make sure that
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h
index ec7dae4..9614d29 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h
@@ -48,7 +48,7 @@
                             SymbolFileDWARFDebugMap (lldb_private::ObjectFile* ofile);
     virtual               ~ SymbolFileDWARFDebugMap ();
 
-    virtual uint32_t        GetAbilities ();
+    virtual uint32_t        CalculateAbilities ();
 
     virtual void            InitializeObject();
 
diff --git a/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp b/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp
index a44d092..5c7d8ed 100644
--- a/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp
+++ b/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp
@@ -83,19 +83,11 @@
 bool
 SymbolFileSymtab::HasObjCSymbols ()
 {
-    if (m_has_objc_symbols == eLazyBoolCalculate)
-    {
-        if (m_obj_file->GetSectionList()->FindSectionByName(ConstString("__objc_data")))
-            m_has_objc_symbols = eLazyBoolYes;
-        else
-            m_has_objc_symbols = eLazyBoolNo;
-    }
-    
-    return m_has_objc_symbols == eLazyBoolYes;
+    return (m_abilities & RuntimeTypes) != 0;
 }
 
 uint32_t
-SymbolFileSymtab::GetAbilities ()
+SymbolFileSymtab::CalculateAbilities ()
 {
     uint32_t abilities = 0;
     if (m_obj_file)
@@ -136,8 +128,11 @@
                 abilities |= GlobalVariables;
             }
             
-            if (HasObjCSymbols())
+            symtab->AppendSymbolIndexesWithType(eSymbolTypeObjCClass, m_objc_class_indexes);
+            
+            if (!m_objc_class_indexes.empty())
             {
+                symtab->SortSymbolIndexesByValue(m_objc_class_indexes, true);
                 abilities |= RuntimeTypes;
             }
         }
@@ -403,14 +398,10 @@
             types.Insert(iter->second);
             return 1;
         }
-            
-        std::string symbol_name("OBJC_CLASS_$_");
-        symbol_name.append(name.AsCString());
-        ConstString symbol_const_string(symbol_name.c_str());
-        
+                    
         std::vector<uint32_t> indices;
-        
-        if (m_obj_file->GetSymtab()->FindAllSymbolsWithNameAndType(symbol_const_string, lldb::eSymbolTypeRuntime, indices) == 0)
+        /*const ConstString &name, SymbolType symbol_type, Debug symbol_debug_type, Visibility symbol_visibility, std::vector<uint32_t>& symbol_indexes*/
+        if (m_obj_file->GetSymtab()->FindAllSymbolsWithNameAndType(name, lldb::eSymbolTypeAny, Symtab::eDebugNo, Symtab::eVisibilityAny, m_objc_class_indexes) == 0)
             return 0;
         
         const bool isForwardDecl = false;
diff --git a/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.h b/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.h
index a913014..a932f4d 100644
--- a/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.h
+++ b/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.h
@@ -42,7 +42,7 @@
     virtual
     ~SymbolFileSymtab();
 
-    virtual uint32_t        GetAbilities ();
+    virtual uint32_t        CalculateAbilities ();
 
     //------------------------------------------------------------------
     // Compile Unit function calls
@@ -119,12 +119,14 @@
     GetPluginVersion();
 
 protected:
-    lldb_private::LazyBool  m_has_objc_symbols;
     std::vector<uint32_t>   m_source_indexes;
     std::vector<uint32_t>   m_func_indexes;
     std::vector<uint32_t>   m_code_indexes;
     std::vector<uint32_t>   m_data_indexes;
     std::vector<uint32_t>   m_addr_indexes; // Anything that needs to go into an search by address
+    std::vector<uint32_t>   m_objc_class_indexes;
+    
+    lldb_private::LazyBool  m_has_objc_symbols;
     
     typedef std::map<lldb_private::ConstString, lldb::TypeSP> TypeMap;
     
