diff --git a/source/API/SBDebugger.cpp b/source/API/SBDebugger.cpp
index 57fff38..5c86d99 100644
--- a/source/API/SBDebugger.cpp
+++ b/source/API/SBDebugger.cpp
@@ -9,7 +9,7 @@
 
 #include "lldb/API/SBDebugger.h"
 
-#include "lldb/lldb-include.h"
+#include "lldb/lldb-private.h"
 
 #include "lldb/API/SBListener.h"
 #include "lldb/API/SBBroadcaster.h"
@@ -679,7 +679,10 @@
 {
     lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController();
 
-    Error err = root_settings_controller->SetVariable (var_name, value, lldb::eVarSetOperationAssign, true,
+    Error err = root_settings_controller->SetVariable (var_name, 
+                                                       value, 
+                                                       eVarSetOperationAssign, 
+                                                       true,
                                                        debugger_instance_name);
     SBError sb_error;
     sb_error.SetError (err);
@@ -691,7 +694,7 @@
 SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name)
 {
     SBStringList ret_value;
-    lldb::SettableVariableType var_type;
+    SettableVariableType var_type;
     lldb_private::Error err;
 
     lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController();
diff --git a/source/API/SBTarget.cpp b/source/API/SBTarget.cpp
index d1a1f27..44f8b1d 100644
--- a/source/API/SBTarget.cpp
+++ b/source/API/SBTarget.cpp
@@ -9,7 +9,7 @@
 
 #include "lldb/API/SBTarget.h"
 
-#include "lldb/lldb-include.h"
+#include "lldb/lldb-public.h"
 
 #include "lldb/API/SBFileSpec.h"
 #include "lldb/API/SBModule.h"
diff --git a/source/Commands/CommandObjectArgs.cpp b/source/Commands/CommandObjectArgs.cpp
index 6075e10..6810b45 100644
--- a/source/Commands/CommandObjectArgs.cpp
+++ b/source/Commands/CommandObjectArgs.cpp
@@ -71,7 +71,7 @@
     Options::ResetOptionValues();
 }
 
-const lldb::OptionDefinition*
+const OptionDefinition*
 CommandObjectArgs::CommandOptions::GetDefinitions ()
 {
     return g_option_table;
@@ -265,7 +265,7 @@
     return result.Succeeded();
 }
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectArgs::CommandOptions::g_option_table[] =
 {
     { LLDB_OPT_SET_1, false, "debug", 'g', no_argument, NULL, 0, eArgTypeNone, "Enable verbose debug logging of the expression parsing and evaluation."},
diff --git a/source/Commands/CommandObjectArgs.h b/source/Commands/CommandObjectArgs.h
index 70f73f0..544d343 100644
--- a/source/Commands/CommandObjectArgs.h
+++ b/source/Commands/CommandObjectArgs.h
@@ -39,12 +39,12 @@
             void
             ResetOptionValues ();
             
-            const lldb::OptionDefinition*
+            const OptionDefinition*
             GetDefinitions ();
             
             // Options table: Required for subclasses of Options.
             
-            static lldb::OptionDefinition g_option_table[];
+            static OptionDefinition g_option_table[];
         };
         
         CommandObjectArgs (CommandInterpreter &interpreter);
diff --git a/source/Commands/CommandObjectBreakpoint.cpp b/source/Commands/CommandObjectBreakpoint.cpp
index 598e6a3..c7bbf85 100644
--- a/source/Commands/CommandObjectBreakpoint.cpp
+++ b/source/Commands/CommandObjectBreakpoint.cpp
@@ -70,7 +70,7 @@
 {
 }
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectBreakpointSet::CommandOptions::g_option_table[] =
 {
     { LLDB_OPT_SET_ALL, false, "shlib", 's', required_argument, NULL, CommandCompletions::eModuleCompletion, eArgTypeShlibName,
@@ -127,7 +127,7 @@
     { 0, false, NULL, 0, 0, NULL, 0, eArgTypeNone, NULL }
 };
 
-const lldb::OptionDefinition*
+const OptionDefinition*
 CommandObjectBreakpointSet::CommandOptions::GetDefinitions ()
 {
     return g_option_table;
@@ -649,7 +649,7 @@
 {
 }
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectBreakpointList::CommandOptions::g_option_table[] =
 {
     { LLDB_OPT_SET_ALL, false, "internal", 'i', no_argument, NULL, 0, eArgTypeNone,
@@ -669,7 +669,7 @@
     { 0, false, NULL, 0, 0, NULL, 0, eArgTypeNone, NULL }
 };
 
-const lldb::OptionDefinition*
+const OptionDefinition*
 CommandObjectBreakpointList::CommandOptions::GetDefinitions ()
 {
     return g_option_table;
@@ -1060,7 +1060,7 @@
 {
 }
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectBreakpointClear::CommandOptions::g_option_table[] =
 {
     { LLDB_OPT_SET_1, false, "file", 'f', required_argument, NULL, CommandCompletions::eSourceFileCompletion, eArgTypeFilename,
@@ -1072,7 +1072,7 @@
     { 0, false, NULL, 0, 0, NULL, 0, eArgTypeNone, NULL }
 };
 
-const lldb::OptionDefinition*
+const OptionDefinition*
 CommandObjectBreakpointClear::CommandOptions::GetDefinitions ()
 {
     return g_option_table;
@@ -1376,7 +1376,7 @@
 {
 }
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectBreakpointModify::CommandOptions::g_option_table[] =
 {
 { LLDB_OPT_SET_ALL, false, "ignore-count", 'i', required_argument, NULL, NULL, eArgTypeCount, "Set the number of times this breakpoint is skipped before stopping." },
@@ -1390,7 +1390,7 @@
 { 0,                false, NULL,            0 , 0,                 NULL, 0,    eArgTypeNone, NULL }
 };
 
-const lldb::OptionDefinition*
+const OptionDefinition*
 CommandObjectBreakpointModify::CommandOptions::GetDefinitions ()
 {
     return g_option_table;
diff --git a/source/Commands/CommandObjectBreakpoint.h b/source/Commands/CommandObjectBreakpoint.h
index 6f31a5f..fdfd1d9 100644
--- a/source/Commands/CommandObjectBreakpoint.h
+++ b/source/Commands/CommandObjectBreakpoint.h
@@ -87,12 +87,12 @@
         void
         ResetOptionValues ();
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ();
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
 
@@ -153,12 +153,12 @@
         void
         ResetOptionValues ();
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ();
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
 
@@ -254,12 +254,12 @@
         void
         ResetOptionValues ();
 
-        const lldb::OptionDefinition *
+        const OptionDefinition *
         GetDefinitions ();
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
 
@@ -314,12 +314,12 @@
         void
         ResetOptionValues ();
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ();
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
 
diff --git a/source/Commands/CommandObjectBreakpointCommand.cpp b/source/Commands/CommandObjectBreakpointCommand.cpp
index f88264b..3af812c 100644
--- a/source/Commands/CommandObjectBreakpointCommand.cpp
+++ b/source/Commands/CommandObjectBreakpointCommand.cpp
@@ -48,7 +48,7 @@
 // FIXME: "script-type" needs to have its contents determined dynamically, so somebody can add a new scripting
 // language to lldb and have it pickable here without having to change this enumeration by hand and rebuild lldb proper.
 
-static lldb::OptionEnumValueElement
+static OptionEnumValueElement
 g_script_option_enumeration[4] =
 {
     { eScriptLanguageNone,    "command",         "Commands are in the lldb command interpreter language"},
@@ -57,7 +57,7 @@
     { 0,                      NULL,              NULL }
 };
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectBreakpointCommandAdd::CommandOptions::g_option_table[] =
 {
     { LLDB_OPT_SET_ALL, false, "one-liner", 'o', required_argument, NULL, NULL, eArgTypeOneLiner,
@@ -72,7 +72,7 @@
     { 0, false, NULL, 0, 0, NULL, 0, eArgTypeNone, NULL }
 };
 
-const lldb::OptionDefinition*
+const OptionDefinition*
 CommandObjectBreakpointCommandAdd::CommandOptions::GetDefinitions ()
 {
     return g_option_table;
diff --git a/source/Commands/CommandObjectBreakpointCommand.h b/source/Commands/CommandObjectBreakpointCommand.h
index 51131d2..5e3e1a1 100644
--- a/source/Commands/CommandObjectBreakpointCommand.h
+++ b/source/Commands/CommandObjectBreakpointCommand.h
@@ -106,12 +106,12 @@
         void
         ResetOptionValues ();
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ();
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
 
diff --git a/source/Commands/CommandObjectCommands.cpp b/source/Commands/CommandObjectCommands.cpp
index 9230aea..49fc022 100644
--- a/source/Commands/CommandObjectCommands.cpp
+++ b/source/Commands/CommandObjectCommands.cpp
@@ -75,7 +75,7 @@
             m_stop_on_continue = true;
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
@@ -83,7 +83,7 @@
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
 
@@ -93,7 +93,7 @@
     
     // Options table: Required for subclasses of Options.
 
-    static lldb::OptionDefinition g_option_table[];
+    static OptionDefinition g_option_table[];
 
     CommandOptions m_options;
     
@@ -165,7 +165,7 @@
     }
 };
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectCommandsSource::CommandOptions::g_option_table[] =
 {
 { LLDB_OPT_SET_ALL, false, "stop-on-error", 'e', required_argument, NULL, 0, eArgTypeBoolean,    "If true, stop executing commands on error."},
diff --git a/source/Commands/CommandObjectDisassemble.cpp b/source/Commands/CommandObjectDisassemble.cpp
index ecfd30f..26752b8 100644
--- a/source/Commands/CommandObjectDisassemble.cpp
+++ b/source/Commands/CommandObjectDisassemble.cpp
@@ -136,13 +136,13 @@
     raw = false;
 }
 
-const lldb::OptionDefinition*
+const OptionDefinition*
 CommandObjectDisassemble::CommandOptions::GetDefinitions ()
 {
     return g_option_table;
 }
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectDisassemble::CommandOptions::g_option_table[] =
 {
 { LLDB_OPT_SET_ALL, false, "bytes",    'b', no_argument,       NULL, 0, eArgTypeNone,             "Show opcode bytes when disassembling."},
diff --git a/source/Commands/CommandObjectDisassemble.h b/source/Commands/CommandObjectDisassemble.h
index a36ae88..4794ee5 100644
--- a/source/Commands/CommandObjectDisassemble.h
+++ b/source/Commands/CommandObjectDisassemble.h
@@ -41,7 +41,7 @@
         void
         ResetOptionValues ();
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ();
 
         bool show_mixed; // Show mixed source/assembly
@@ -53,7 +53,7 @@
         lldb::addr_t m_start_addr;
         lldb::addr_t m_end_addr;
         bool m_at_pc;
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
     };
 
     CommandObjectDisassemble (CommandInterpreter &interpreter);
diff --git a/source/Commands/CommandObjectExpression.cpp b/source/Commands/CommandObjectExpression.cpp
index 0daad3a..e7b1183 100644
--- a/source/Commands/CommandObjectExpression.cpp
+++ b/source/Commands/CommandObjectExpression.cpp
@@ -105,7 +105,7 @@
     show_summary = true;
 }
 
-const lldb::OptionDefinition*
+const OptionDefinition*
 CommandObjectExpression::CommandOptions::GetDefinitions ()
 {
     return g_option_table;
@@ -236,7 +236,7 @@
     {
         lldb::ValueObjectSP result_valobj_sp;
 
-        lldb::ExecutionResults exe_results;
+        ExecutionResults exe_results;
         
         bool keep_in_memory = true;
         
@@ -375,7 +375,7 @@
     return false;
 }
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectExpression::CommandOptions::g_option_table[] =
 {
   //{ LLDB_OPT_SET_ALL, false, "language",   'l', required_argument, NULL, 0, "[c|c++|objc|objc++]",          "Sets the language to use when parsing the expression."},
diff --git a/source/Commands/CommandObjectExpression.h b/source/Commands/CommandObjectExpression.h
index 9cbdf34..5ddb0db 100644
--- a/source/Commands/CommandObjectExpression.h
+++ b/source/Commands/CommandObjectExpression.h
@@ -40,12 +40,12 @@
         void
         ResetOptionValues ();
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ();
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
         //Language  language;
         lldb::Encoding  encoding;
         lldb::Format    format;
diff --git a/source/Commands/CommandObjectFile.cpp b/source/Commands/CommandObjectFile.cpp
index 2c8d561..7d17af9 100644
--- a/source/Commands/CommandObjectFile.cpp
+++ b/source/Commands/CommandObjectFile.cpp
@@ -35,14 +35,14 @@
 {
 }
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectFile::CommandOptions::g_option_table[] =
 {
     { LLDB_OPT_SET_1, false, "arch", 'a', required_argument, NULL, 0, eArgTypeArchitecture, "Specify the architecture to be used when the process is launched."},
     { 0, false, NULL, 0, 0, NULL, 0, eArgTypeNone, NULL }
 };
 
-const lldb::OptionDefinition *
+const OptionDefinition *
 CommandObjectFile::CommandOptions::GetDefinitions ()
 {
     return g_option_table;
diff --git a/source/Commands/CommandObjectFile.h b/source/Commands/CommandObjectFile.h
index 4820b20..bccb4bc 100644
--- a/source/Commands/CommandObjectFile.h
+++ b/source/Commands/CommandObjectFile.h
@@ -55,12 +55,12 @@
         void
         ResetOptionValues ();
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ();
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
 
diff --git a/source/Commands/CommandObjectFrame.cpp b/source/Commands/CommandObjectFrame.cpp
index 0bc30f4..8efb164 100644
--- a/source/Commands/CommandObjectFrame.cpp
+++ b/source/Commands/CommandObjectFrame.cpp
@@ -139,7 +139,7 @@
             relative_frame_offset = INT32_MIN;
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
@@ -147,7 +147,7 @@
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
         int32_t relative_frame_offset;
     };
     
@@ -271,7 +271,7 @@
     CommandOptions m_options;
 };
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectFrameSelect::CommandOptions::g_option_table[] =
 {
 { LLDB_OPT_SET_1, false, "relative", 'r', required_argument, NULL, 0, eArgTypeOffset, "A relative frame index offset from the current frame index."},
@@ -372,7 +372,7 @@
             globals.clear();
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
@@ -380,7 +380,7 @@
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
         bool use_objc:1,
              use_regex:1,
              show_args:1,
@@ -724,7 +724,7 @@
     CommandOptions m_options;
 };
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectFrameVariable::CommandOptions::g_option_table[] =
 {
 { LLDB_OPT_SET_1, false, "debug",      'D', no_argument,       NULL, 0, eArgTypeNone,    "Enable verbose debug information."},
diff --git a/source/Commands/CommandObjectImage.cpp b/source/Commands/CommandObjectImage.cpp
index 0092b39..ed19647 100644
--- a/source/Commands/CommandObjectImage.cpp
+++ b/source/Commands/CommandObjectImage.cpp
@@ -156,7 +156,7 @@
 
 
 static void
-DumpModuleSymtab (CommandInterpreter &interpreter, Stream &strm, Module *module, lldb::SortOrder sort_order)
+DumpModuleSymtab (CommandInterpreter &interpreter, Stream &strm, Module *module, SortOrder sort_order)
 {
     if (module)
     {
@@ -741,7 +741,7 @@
             case 's':
                 {
                     bool found_one = false;
-                    m_sort_order = (lldb::SortOrder) Args::StringToOptionEnum (option_arg, 
+                    m_sort_order = (SortOrder) Args::StringToOptionEnum (option_arg, 
                                                                                g_option_table[option_idx].enum_values, 
                                                                                eSortOrderNone,
                                                                                &found_one);
@@ -767,14 +767,14 @@
             m_sort_order = eSortOrderNone;
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
         }
 
         // Options table: Required for subclasses of Options.
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         SortOrder m_sort_order;
     };
@@ -784,7 +784,7 @@
     CommandOptions m_options;
 };
 
-static lldb::OptionEnumValueElement
+static OptionEnumValueElement
 g_sort_option_enumeration[4] =
 {
     { eSortOrderNone,       "none",     "No sorting, use the original symbol table order."},
@@ -794,7 +794,7 @@
 };
 
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectImageDumpSymtab::CommandOptions::g_option_table[] =
 {
 { LLDB_OPT_SET_1, false, "sort", 's', required_argument, g_sort_option_enumeration, 0, eArgTypeSortOrder, "Supply a sort order when dumping the symbol table."},
@@ -1171,7 +1171,7 @@
             m_format_array.clear();
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
@@ -1179,7 +1179,7 @@
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
         typedef std::vector< std::pair<char, uint32_t> > FormatWidthCollection;
@@ -1311,7 +1311,7 @@
     CommandOptions m_options;
 };
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectImageList::CommandOptions::g_option_table[] =
 {
 { LLDB_OPT_SET_1, false, "arch",       'a', optional_argument, NULL, 0, eArgTypeWidth,   "Display the architecture when listing images."},
@@ -1441,7 +1441,7 @@
             m_verbose = false;
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
@@ -1449,7 +1449,7 @@
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
         int             m_type;         // Should be a eLookupTypeXXX enum after parsing options
         std::string     m_str;          // Holds name lookup
         FileSpec        m_file;         // Files for file lookups
@@ -1679,7 +1679,7 @@
     CommandOptions m_options;
 };
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectImageLookup::CommandOptions::g_option_table[] =
 {
 { LLDB_OPT_SET_1,   true,  "address",    'a', required_argument, NULL, 0, eArgTypeAddress,    "Lookup an address in one or more executable images."},
diff --git a/source/Commands/CommandObjectLog.cpp b/source/Commands/CommandObjectLog.cpp
index b887f1c..d49485a 100644
--- a/source/Commands/CommandObjectLog.cpp
+++ b/source/Commands/CommandObjectLog.cpp
@@ -213,7 +213,7 @@
             log_options = 0;
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
@@ -221,7 +221,7 @@
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
 
@@ -235,7 +235,7 @@
     LogStreamMap m_log_streams;
 };
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectLogEnable::CommandOptions::g_option_table[] =
 {
 { LLDB_OPT_SET_1, false, "file",       'f', required_argument, NULL, 0, eArgTypeFilename,   "Set the destination file to log to."},
diff --git a/source/Commands/CommandObjectMemory.cpp b/source/Commands/CommandObjectMemory.cpp
index 8c8b6bf..4225f86 100644
--- a/source/Commands/CommandObjectMemory.cpp
+++ b/source/Commands/CommandObjectMemory.cpp
@@ -174,7 +174,7 @@
             m_output_as_binary = false;
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
@@ -182,7 +182,7 @@
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
         lldb::Format m_format;
@@ -409,7 +409,7 @@
 #define SET1 LLDB_OPT_SET_1
 #define SET2 LLDB_OPT_SET_2
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectMemoryRead::CommandOptions::g_option_table[] =
 {
 { SET1       , false, "format",       'f', required_argument, NULL, 0, eArgTypeFormat,       "The format that will be used to display the memory. Defaults to bytes with ASCII (--format=Y)."},
@@ -500,7 +500,7 @@
             m_infile_offset = 0;
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
@@ -508,7 +508,7 @@
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
         lldb::Format m_format;
@@ -864,7 +864,7 @@
 #define SET1 LLDB_OPT_SET_1
 #define SET2 LLDB_OPT_SET_2
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectMemoryWrite::CommandOptions::g_option_table[] =
 {
 { SET1       , false, "format", 'f', required_argument, NULL, 0, eArgTypeFormat,   "The format value types that will be decoded and written to memory."},
diff --git a/source/Commands/CommandObjectPlatform.cpp b/source/Commands/CommandObjectPlatform.cpp
index 0294d67..0e321d0 100644
--- a/source/Commands/CommandObjectPlatform.cpp
+++ b/source/Commands/CommandObjectPlatform.cpp
@@ -132,7 +132,7 @@
             os_version_update = UINT32_MAX;
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
@@ -140,7 +140,7 @@
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
 
@@ -151,7 +151,7 @@
     CommandOptions m_options;
 };
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectPlatformCreate::CommandOptions::g_option_table[] =
 {
     { LLDB_OPT_SET_ALL, false, "sdk-version", 'v', required_argument, NULL, 0, eArgTypeNone, "Specify the initial SDK version to use prior to connecting." },
diff --git a/source/Commands/CommandObjectProcess.cpp b/source/Commands/CommandObjectProcess.cpp
index ece8fe1..7eb7c4a 100644
--- a/source/Commands/CommandObjectProcess.cpp
+++ b/source/Commands/CommandObjectProcess.cpp
@@ -94,7 +94,7 @@
             no_stdio = false;
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
@@ -102,7 +102,7 @@
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
 
@@ -404,7 +404,7 @@
 #define SET2 LLDB_OPT_SET_2
 #define SET3 LLDB_OPT_SET_3
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectProcessLaunch::CommandOptions::g_option_table[] =
 {
 { SET1 | SET2 | SET3, false, "stop-at-entry", 's', no_argument,       NULL, 0, eArgTypeNone,    "Stop at the entry point of the program when launching a process."},
@@ -489,7 +489,7 @@
             waitfor = false;
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
@@ -512,7 +512,7 @@
     
             // We are only completing the name option for now...
             
-            const lldb::OptionDefinition *opt_defs = GetDefinitions();
+            const OptionDefinition *opt_defs = GetDefinitions();
             if (opt_defs[opt_defs_index].short_option == 'n')
             {
                 // Are we in the name?
@@ -527,7 +527,7 @@
                 if (platform_sp)
                 {
                     ProcessInfoList process_infos;
-                    platform_sp->FindProcessesByName (partial_name, partial_name ? lldb::eNameMatchStartsWith : lldb::eNameMatchIgnore, process_infos);
+                    platform_sp->FindProcessesByName (partial_name, partial_name ? eNameMatchStartsWith : eNameMatchIgnore, process_infos);
                     const uint32_t num_matches = process_infos.GetSize();
                     if (num_matches > 0)
                     {
@@ -545,7 +545,7 @@
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
 
@@ -817,7 +817,7 @@
 };
 
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectProcessAttach::CommandOptions::g_option_table[] =
 {
 { LLDB_OPT_SET_ALL, false, "plugin", 'P', required_argument, NULL, 0, eArgTypePlugin,        "Name of the process plugin you want to use."},
@@ -1015,7 +1015,7 @@
             plugin_name.clear();
         }
         
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
@@ -1023,7 +1023,7 @@
         
         // Options table: Required for subclasses of Options.
         
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
         
         // Instance variables to hold the values for command options.
         
@@ -1133,7 +1133,7 @@
 };
 
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectProcessConnect::CommandOptions::g_option_table[] =
 {
     { LLDB_OPT_SET_ALL, false, "plugin", 'p', required_argument, NULL, 0, eArgTypePlugin, "Name of the process plugin you want to use."},
@@ -1607,7 +1607,7 @@
             pass.clear();
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
@@ -1615,7 +1615,7 @@
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
 
@@ -1848,7 +1848,7 @@
     CommandOptions m_options;
 };
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectProcessHandle::CommandOptions::g_option_table[] =
 {
 { LLDB_OPT_SET_1, false, "stop",   's', required_argument, NULL, 0, eArgTypeBoolean, "Whether or not the process should be stopped if the signal is received." },
diff --git a/source/Commands/CommandObjectSettings.cpp b/source/Commands/CommandObjectSettings.cpp
index 0924b9c..348885d 100644
--- a/source/Commands/CommandObjectSettings.cpp
+++ b/source/Commands/CommandObjectSettings.cpp
@@ -163,7 +163,7 @@
     {
       Error err = root_settings->SetVariable (var_name_string.c_str(), 
                                               var_value, 
-                                              lldb::eVarSetOperationAssign, 
+                                              eVarSetOperationAssign, 
                                               m_options.m_override, 
                                               m_interpreter.GetDebugger().GetInstanceName().AsCString());
         if (err.Fail ())
@@ -209,7 +209,7 @@
             && completion_str.compare (matches.GetStringAtIndex(0)) == 0))
     {
         matches.Clear();
-        lldb::UserSettingsControllerSP root_settings = Debugger::GetSettingsController();
+        UserSettingsControllerSP root_settings = Debugger::GetSettingsController();
         if (cursor_index == 1)
         {
             // The user is at the end of the variable name, which is complete and valid.
@@ -248,7 +248,7 @@
 {
 }
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectSettingsSet::CommandOptions::g_option_table[] =
 {
     { LLDB_OPT_SET_1, false, "no-override", 'n', no_argument, NULL, NULL, eArgTypeNone, "Prevents already existing instances and pending settings from being assigned this new value.  Using this option means that only the default or specified instance setting values will be updated." },
@@ -256,7 +256,7 @@
     { 0, false, NULL, 0, 0, NULL, 0, eArgTypeNone, NULL }
 };
 
-const lldb::OptionDefinition*
+const OptionDefinition*
 CommandObjectSettingsSet::CommandOptions::GetDefinitions ()
 {
     return g_option_table;
@@ -341,7 +341,7 @@
     if (command.GetArgumentCount())
     {
         // The user requested to see the value of a particular variable.
-        lldb::SettableVariableType var_type;
+        SettableVariableType var_type;
         const char *variable_name = command.GetArgumentAtIndex (0);
         StringList value = root_settings->GetVariable (variable_name, var_type,
                                                        m_interpreter.GetDebugger().GetInstanceName().AsCString(),
@@ -365,16 +365,16 @@
 
             if (value.GetSize() == 0)
                 result.AppendMessageWithFormat ("%s%s = ''\n", variable_name, type_name);
-            else if ((var_type != lldb::eSetVarTypeArray) && (var_type != lldb::eSetVarTypeDictionary))
+            else if ((var_type != eSetVarTypeArray) && (var_type != eSetVarTypeDictionary))
                 result.AppendMessageWithFormat ("%s%s = '%s'\n", variable_name, type_name, value.GetStringAtIndex (0));
             else
             {
                 result.AppendMessageWithFormat ("%s%s:\n", variable_name, type_name);
                 for (unsigned i = 0, e = value.GetSize(); i != e; ++i)
                 {
-                    if (var_type == lldb::eSetVarTypeArray)
+                    if (var_type == eSetVarTypeArray)
                         result.AppendMessageWithFormat ("  [%d]: '%s'\n", i, value.GetStringAtIndex (i));
-                    else if (var_type == lldb::eSetVarTypeDictionary)
+                    else if (var_type == eSetVarTypeDictionary)
                         result.AppendMessageWithFormat ("  '%s'\n", value.GetStringAtIndex (i));
                 }
             }
@@ -615,7 +615,7 @@
 
     Error err = root_settings->SetVariable (var_name_string.c_str(), 
                                             NULL, 
-                                            lldb::eVarSetOperationRemove,  
+                                            eVarSetOperationRemove,  
                                             true, 
                                             m_interpreter.GetDebugger().GetInstanceName().AsCString(),
                                             index_value_string.c_str());
@@ -765,7 +765,7 @@
     {
         Error err = root_settings->SetVariable (var_name_string.c_str(), 
                                                 var_value, 
-                                                lldb::eVarSetOperationReplace, 
+                                                eVarSetOperationReplace, 
                                                 true, 
                                                 m_interpreter.GetDebugger().GetInstanceName().AsCString(),
                                                 index_value_string.c_str());
@@ -911,7 +911,7 @@
     {
         Error err = root_settings->SetVariable (var_name_string.c_str(), 
                                                 var_value, 
-                                                lldb::eVarSetOperationInsertBefore,
+                                                eVarSetOperationInsertBefore,
                                                 true, 
                                                 m_interpreter.GetDebugger().GetInstanceName().AsCString(),
                                                 index_value_string.c_str());
@@ -1058,7 +1058,7 @@
     {
         Error err = root_settings->SetVariable (var_name_string.c_str(), 
                                                 var_value, 
-                                                lldb::eVarSetOperationInsertAfter,
+                                                eVarSetOperationInsertAfter,
                                                 true, 
                                                 m_interpreter.GetDebugger().GetInstanceName().AsCString(), 
                                                 index_value_string.c_str());
@@ -1183,7 +1183,7 @@
     {
         Error err = root_settings->SetVariable (var_name_string.c_str(), 
                                                 var_value, 
-                                                lldb::eVarSetOperationAppend, 
+                                                eVarSetOperationAppend, 
                                                 true, 
                                                 m_interpreter.GetDebugger().GetInstanceName().AsCString());
         if (err.Fail ())
@@ -1279,7 +1279,7 @@
 
     Error err = root_settings->SetVariable (var_name, 
                                             NULL, 
-                                            lldb::eVarSetOperationClear, 
+                                            eVarSetOperationClear, 
                                             false, 
                                             m_interpreter.GetDebugger().GetInstanceName().AsCString());
 
diff --git a/source/Commands/CommandObjectSettings.h b/source/Commands/CommandObjectSettings.h
index 9f36964..7d78c08 100644
--- a/source/Commands/CommandObjectSettings.h
+++ b/source/Commands/CommandObjectSettings.h
@@ -70,12 +70,12 @@
         void
         ResetOptionValues ();
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ();
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
 
diff --git a/source/Commands/CommandObjectSource.cpp b/source/Commands/CommandObjectSource.cpp
index bc9fc37..2c7fb33 100644
--- a/source/Commands/CommandObjectSource.cpp
+++ b/source/Commands/CommandObjectSource.cpp
@@ -81,12 +81,12 @@
             start_line = 0;
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
         }
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
         FileSpec file_spec;
@@ -131,7 +131,7 @@
     CommandOptions m_options;
 };
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectSourceInfo::CommandOptions::g_option_table[] =
 {
 { LLDB_OPT_SET_1, false, "line",       'l', required_argument, NULL, 0, eArgTypeLineNum,    "The line number at which to start the display source."},
@@ -210,12 +210,12 @@
             m_modules.clear();
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
         }
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
         FileSpec file_spec;
@@ -568,7 +568,7 @@
 
 };
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectSourceList::CommandOptions::g_option_table[] =
 {
 { LLDB_OPT_SET_ALL, false, "count",    'c', required_argument, NULL, 0, eArgTypeCount,   "The number of source lines to display."},
diff --git a/source/Commands/CommandObjectTarget.cpp b/source/Commands/CommandObjectTarget.cpp
index f6c7a1c..1780f2b 100644
--- a/source/Commands/CommandObjectTarget.cpp
+++ b/source/Commands/CommandObjectTarget.cpp
@@ -501,7 +501,7 @@
         
         ~CommandOptions () {}
         
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
@@ -606,7 +606,7 @@
         }
 
         
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
         
         std::string m_class_name;
         std::string m_function_name;
@@ -824,7 +824,7 @@
     CommandOptions m_options;
 };
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectTargetStopHookAdd::CommandOptions::g_option_table[] =
 {
     { LLDB_OPT_SET_ALL, false, "shlib", 's', required_argument, NULL, CommandCompletions::eModuleCompletion, eArgTypeShlibName,
diff --git a/source/Commands/CommandObjectThread.cpp b/source/Commands/CommandObjectThread.cpp
index 487cfc9..977f63f 100644
--- a/source/Commands/CommandObjectThread.cpp
+++ b/source/Commands/CommandObjectThread.cpp
@@ -305,7 +305,7 @@
             m_start = 0;
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
@@ -313,7 +313,7 @@
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
         uint32_t m_count;
@@ -466,7 +466,7 @@
     CommandOptions m_options;
 };
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectThreadBacktrace::CommandOptions::g_option_table[] =
 {
 { LLDB_OPT_SET_1, false, "count", 'c', required_argument, NULL, 0, eArgTypeCount, "How many frames to display (-1 for all)"},
@@ -551,7 +551,7 @@
             m_avoid_regexp.clear();
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
@@ -559,7 +559,7 @@
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
         bool m_avoid_no_debug;
@@ -775,7 +775,7 @@
     CommandOptions m_options;
 };
 
-static lldb::OptionEnumValueElement
+static OptionEnumValueElement
 g_tri_running_mode[] =
 {
 { eOnlyThisThread,     "this-thread",    "Run only this thread"},
@@ -784,7 +784,7 @@
 { 0, NULL, NULL }
 };
 
-static lldb::OptionEnumValueElement
+static OptionEnumValueElement
 g_duo_running_mode[] =
 {
 { eOnlyThisThread,     "this-thread",    "Run only this thread"},
@@ -792,7 +792,7 @@
 { 0, NULL, NULL }
 };
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectThreadStepWithTypeAndScope::CommandOptions::g_option_table[] =
 {
 { LLDB_OPT_SET_1, false, "avoid-no-debug",  'a', required_argument, NULL,               0, eArgTypeBoolean,     "A boolean value that sets whether step-in will step over functions with no debug information."},
@@ -1050,7 +1050,7 @@
             m_stop_others = false;
         }
 
-        const lldb::OptionDefinition*
+        const OptionDefinition*
         GetDefinitions ()
         {
             return g_option_table;
@@ -1061,7 +1061,7 @@
 
         // Options table: Required for subclasses of Options.
 
-        static lldb::OptionDefinition g_option_table[];
+        static OptionDefinition g_option_table[];
 
         // Instance variables to hold the values for command options.
     };
@@ -1259,7 +1259,7 @@
 
 };
 
-lldb::OptionDefinition
+OptionDefinition
 CommandObjectThreadUntil::CommandOptions::g_option_table[] =
 {
 { LLDB_OPT_SET_1, false, "frame",   'f', required_argument, NULL,               0, eArgTypeFrameIndex,   "Frame index for until operation - defaults to 0"},
diff --git a/source/Core/Address.cpp b/source/Core/Address.cpp
index 12de3aa..004798e 100644
--- a/source/Core/Address.cpp
+++ b/source/Core/Address.cpp
@@ -377,7 +377,7 @@
     case DumpStyleResolvedDescriptionNoModule:
         if (IsSectionOffset())
         {
-            lldb::AddressType addr_type = eAddressTypeLoad;
+            AddressType addr_type = eAddressTypeLoad;
             addr_t addr = GetLoadAddress (target);
             if (addr == LLDB_INVALID_ADDRESS)
             {
@@ -809,7 +809,7 @@
     }
 }
 
-lldb::AddressClass
+AddressClass
 Address::GetAddressClass () const
 {
     Module *module = GetModule();
diff --git a/source/Core/ArchSpec.cpp b/source/Core/ArchSpec.cpp
index b44aa21..1713493 100644
--- a/source/Core/ArchSpec.cpp
+++ b/source/Core/ArchSpec.cpp
@@ -285,7 +285,7 @@
     SetTriple(triple);
 }
 
-ArchSpec::ArchSpec (lldb::ArchitectureType arch_type, uint32_t cpu, uint32_t subtype) :
+ArchSpec::ArchSpec (ArchitectureType arch_type, uint32_t cpu, uint32_t subtype) :
     m_triple (),
     m_core (kCore_invalid),
     m_byte_order (eByteOrderInvalid)
@@ -463,7 +463,7 @@
 }
 
 bool
-ArchSpec::SetArchitecture (lldb::ArchitectureType arch_type, uint32_t cpu, uint32_t sub)
+ArchSpec::SetArchitecture (ArchitectureType arch_type, uint32_t cpu, uint32_t sub)
 {
     m_core = kCore_invalid;
     bool update_triple = true;
diff --git a/source/Core/Debugger.cpp b/source/Core/Debugger.cpp
index 89ceab9..ca0dde9 100644
--- a/source/Core/Debugger.cpp
+++ b/source/Core/Debugger.cpp
@@ -762,7 +762,7 @@
                         RegisterKind reg_kind = kNumRegisterKinds; 
                         uint32_t reg_num = LLDB_INVALID_REGNUM;
                         FileSpec format_file_spec;
-                        const lldb::RegisterInfo *reg_info = NULL;
+                        const RegisterInfo *reg_info = NULL;
                         RegisterContext *reg_ctx = NULL;
 
                         // Each variable must set success to true below...
@@ -1440,7 +1440,7 @@
                                                           const char *value,
                                                           const ConstString &instance_name,
                                                           const SettingEntry &entry,
-                                                          lldb::VarSetOperationType op,
+                                                          VarSetOperationType op,
                                                           Error &err,
                                                           bool pending)
 {
diff --git a/source/Core/EmulateInstruction.cpp b/source/Core/EmulateInstruction.cpp
index d596cdd..05ded39 100644
--- a/source/Core/EmulateInstruction.cpp
+++ b/source/Core/EmulateInstruction.cpp
@@ -59,9 +59,9 @@
     m_write_mem_callback (write_mem_callback),
     m_read_reg_callback (read_reg_callback),
     m_write_reg_callback (write_reg_callback),
-    m_inst_pc (LLDB_INVALID_ADDRESS)
+    m_opcode_pc (LLDB_INVALID_ADDRESS)
 {
-    ::memset (&m_inst, 0, sizeof (m_inst));
+    ::memset (&m_opcode, 0, sizeof (m_opcode));
 }
 
 uint64_t
diff --git a/source/Core/Section.cpp b/source/Core/Section.cpp
index d2682f5..0765c54 100644
--- a/source/Core/Section.cpp
+++ b/source/Core/Section.cpp
@@ -567,7 +567,7 @@
 
 
 SectionSP
-SectionList::FindSectionByType (lldb::SectionType sect_type, bool check_children, uint32_t start_idx) const
+SectionList::FindSectionByType (SectionType sect_type, bool check_children, uint32_t start_idx) const
 {
     SectionSP sect_sp;
     uint32_t num_sections = m_sections.size();
diff --git a/source/Core/Value.cpp b/source/Core/Value.cpp
index 98aac43..2d8ac91 100644
--- a/source/Core/Value.cpp
+++ b/source/Core/Value.cpp
@@ -208,7 +208,7 @@
     return m_value_type;
 }
 
-lldb::AddressType
+AddressType
 Value::GetValueAddressType () const
 {
     if (m_context_type == eContextTypeValue)
@@ -515,7 +515,7 @@
 
     Error error;
     lldb::addr_t address = LLDB_INVALID_ADDRESS;
-    lldb::AddressType address_type = eAddressTypeFile;
+    AddressType address_type = eAddressTypeFile;
     switch (m_value_type)
     {
     default:
@@ -663,7 +663,7 @@
         }
         else
         {
-            error.SetErrorStringWithFormat ("unsupported lldb::AddressType value (%i)", address_type);
+            error.SetErrorStringWithFormat ("unsupported AddressType value (%i)", address_type);
         }
     }
     else
@@ -714,7 +714,7 @@
         case eValueTypeLoadAddress:          // load address value
         case eValueTypeHostAddress:          // host address value (for memory in the process that is using liblldb)
             {
-                lldb::AddressType address_type = m_value_type == eValueTypeLoadAddress ? eAddressTypeLoad : eAddressTypeHost;
+                AddressType address_type = m_value_type == eValueTypeLoadAddress ? eAddressTypeLoad : eAddressTypeHost;
                 lldb::addr_t addr = m_value.ULongLong(LLDB_INVALID_ADDRESS);
                 DataExtractor data;
                 if (ClangASTType::ReadFromMemory (ast_context, opaque_clang_qual_type, exe_ctx, addr, address_type, data))
diff --git a/source/Core/ValueObject.cpp b/source/Core/ValueObject.cpp
index 9346db4..948ace7 100644
--- a/source/Core/ValueObject.cpp
+++ b/source/Core/ValueObject.cpp
@@ -439,7 +439,7 @@
                     if (process != NULL)
                     {
                         lldb::addr_t cstr_address = LLDB_INVALID_ADDRESS;
-                        lldb::AddressType cstr_address_type = eAddressTypeInvalid;
+                        AddressType cstr_address_type = eAddressTypeInvalid;
 
                         size_t cstr_len = 0;
                         if (type_flags.Test (ClangASTContext::eTypeIsArray))
@@ -521,7 +521,7 @@
                 }
                 else if (ClangASTContext::IsFunctionPointerType (clang_type))
                 {
-                    lldb::AddressType func_ptr_address_type = eAddressTypeInvalid;
+                    AddressType func_ptr_address_type = eAddressTypeInvalid;
                     lldb::addr_t func_ptr_address = GetPointerValue (func_ptr_address_type, true);
 
                     if (func_ptr_address != 0 && func_ptr_address != LLDB_INVALID_ADDRESS)
@@ -684,7 +684,7 @@
 }
 
 addr_t
-ValueObject::GetAddressOf (lldb::AddressType &address_type, bool scalar_is_load_address)
+ValueObject::GetAddressOf (AddressType &address_type, bool scalar_is_load_address)
 {
     switch (m_value.GetValueType())
     {
@@ -710,7 +710,7 @@
 }
 
 addr_t
-ValueObject::GetPointerValue (lldb::AddressType &address_type, bool scalar_is_load_address)
+ValueObject::GetPointerValue (AddressType &address_type, bool scalar_is_load_address)
 {
     lldb::addr_t address = LLDB_INVALID_ADDRESS;
     address_type = eAddressTypeInvalid;
@@ -1145,7 +1145,7 @@
                 {
                     // We have a pointer or reference whose value is an address.
                     // Make sure that address is not NULL
-                    lldb::AddressType ptr_address_type;
+                    AddressType ptr_address_type;
                     if (valobj->GetPointerValue (ptr_address_type, true) == 0)
                         print_children = false;
 
@@ -1339,7 +1339,7 @@
 ValueObject::AddressOf (Error &error)
 {
     lldb::ValueObjectSP valobj_sp;
-    lldb::AddressType address_type = eAddressTypeInvalid;
+    AddressType address_type = eAddressTypeInvalid;
     const bool scalar_is_load_address = false;
     lldb::addr_t addr = GetAddressOf (address_type, scalar_is_load_address);
     error.Clear();
diff --git a/source/Core/ValueObjectConstResult.cpp b/source/Core/ValueObjectConstResult.cpp
index 253c374..55273a9 100644
--- a/source/Core/ValueObjectConstResult.cpp
+++ b/source/Core/ValueObjectConstResult.cpp
@@ -97,7 +97,7 @@
     void *clang_type,
     const ConstString &name,
     lldb::addr_t address,
-    lldb::AddressType address_type,
+    AddressType address_type,
     uint8_t addr_byte_size
 ) :
     ValueObject (NULL),
diff --git a/source/Expression/ClangExpressionDeclMap.cpp b/source/Expression/ClangExpressionDeclMap.cpp
index aa45992..d528d38 100644
--- a/source/Expression/ClangExpressionDeclMap.cpp
+++ b/source/Expression/ClangExpressionDeclMap.cpp
@@ -470,7 +470,7 @@
     
     SymbolContextList sc_list;
     
-    m_parser_vars->m_exe_ctx->target->GetImages().FindSymbolsWithNameAndType(name, lldb::eSymbolTypeAny, sc_list);
+    m_parser_vars->m_exe_ctx->target->GetImages().FindSymbolsWithNameAndType(name, eSymbolTypeAny, sc_list);
     
     if (!sc_list.GetSize())
         return false;
@@ -598,7 +598,7 @@
                 return false;
             }
                         
-            lldb::RegisterInfo *register_info = location_value->GetRegisterInfo();
+            RegisterInfo *register_info = location_value->GetRegisterInfo();
             
             if (!register_info)
             {
@@ -990,7 +990,7 @@
                                                                                  var_sp->GetTypeFromUser().GetOpaqueQualType(),
                                                                                  var_sp->GetName(),
                                                                                  mem,
-                                                                                 lldb::eAddressTypeLoad,
+                                                                                 eAddressTypeLoad,
                                                                                  pvar_byte_size));
             }
             
@@ -1000,7 +1000,7 @@
                 return false;
             }
             
-            if (var_sp->m_live_sp->GetValue().GetValueAddressType() != lldb::eAddressTypeLoad)
+            if (var_sp->m_live_sp->GetValue().GetValueAddressType() != eAddressTypeLoad)
             {
                 err.SetErrorStringWithFormat("The address of the memory area for %s is in an incorrect format", var_sp->GetName().GetCString());
                 return false;
@@ -1084,7 +1084,7 @@
                                                                              var_sp->GetTypeFromUser().GetOpaqueQualType(),
                                                                              var_sp->GetName(),
                                                                              mem,
-                                                                             lldb::eAddressTypeLoad,
+                                                                             eAddressTypeLoad,
                                                                              pvar_byte_size));
             
             // Clear the flag if the variable will never be deallocated.
@@ -1221,7 +1221,7 @@
             
             lldb::addr_t mem; // The address of a spare memory area aused to hold the variable.
             
-            lldb::RegisterInfo *register_info = location_value->GetRegisterInfo();
+            RegisterInfo *register_info = location_value->GetRegisterInfo();
             
             if (!register_info)
             {
@@ -1250,7 +1250,7 @@
                     return false;
                 }
                 
-                if (expr_var->m_live_sp->GetValue().GetValueAddressType() != lldb::eAddressTypeLoad)
+                if (expr_var->m_live_sp->GetValue().GetValueAddressType() != eAddressTypeLoad)
                 {
                     err.SetErrorStringWithFormat("The address of the memory area for %s is in an incorrect format", name.GetCString());
                     return false;
@@ -1348,7 +1348,7 @@
                                                                                    type.GetOpaqueQualType(),
                                                                                    name,
                                                                                    mem,
-                                                                                   lldb::eAddressTypeLoad,
+                                                                                   eAddressTypeLoad,
                                                                                    value_byte_size));
                 
                 // Now write the location of the area into the struct.
@@ -1432,7 +1432,7 @@
     bool dematerialize,
     ExecutionContext &exe_ctx,
     RegisterContext &reg_ctx,
-    const lldb::RegisterInfo &reg_info,
+    const RegisterInfo &reg_info,
     lldb::addr_t addr, 
     Error &err
 )
@@ -1762,7 +1762,7 @@
         
         if (m_parser_vars->m_exe_ctx->GetRegisterContext())
         {
-            const lldb::RegisterInfo *reg_info(m_parser_vars->m_exe_ctx->GetRegisterContext()->GetRegisterInfoByName(reg_name));
+            const RegisterInfo *reg_info(m_parser_vars->m_exe_ctx->GetRegisterContext()->GetRegisterInfoByName(reg_name));
             
             if (reg_info)
                 AddOneRegister(context, reg_info);
diff --git a/source/Expression/ClangExpressionParser.cpp b/source/Expression/ClangExpressionParser.cpp
index e228cc5..e9e49e3 100644
--- a/source/Expression/ClangExpressionParser.cpp
+++ b/source/Expression/ClangExpressionParser.cpp
@@ -214,7 +214,7 @@
     {
         if (process->GetObjCLanguageRuntime())
         {
-            if (process->GetObjCLanguageRuntime()->GetRuntimeVersion() == lldb::eAppleObjC_V2)
+            if (process->GetObjCLanguageRuntime()->GetRuntimeVersion() == eAppleObjC_V2)
             {
                 m_compiler->getLangOpts().ObjCNonFragileABI = true;     // NOT i386
                 m_compiler->getLangOpts().ObjCNonFragileABI2 = true;    // NOT i386
diff --git a/source/Expression/ClangExpressionVariable.cpp b/source/Expression/ClangExpressionVariable.cpp
index bf1a3da..c5bc5c4 100644
--- a/source/Expression/ClangExpressionVariable.cpp
+++ b/source/Expression/ClangExpressionVariable.cpp
@@ -62,16 +62,16 @@
     return m_frozen_sp;
 }
 
-lldb::RegisterInfo *
+RegisterInfo *
 ClangExpressionVariable::GetRegisterInfo()
 {
     return m_frozen_sp->GetValue().GetRegisterInfo();
 }
 
 void
-ClangExpressionVariable::SetRegisterInfo (const lldb::RegisterInfo *reg_info)
+ClangExpressionVariable::SetRegisterInfo (const RegisterInfo *reg_info)
 {
-    return m_frozen_sp->GetValue().SetContext (Value::eContextTypeRegisterInfo, const_cast<lldb::RegisterInfo *>(reg_info));
+    return m_frozen_sp->GetValue().SetContext (Value::eContextTypeRegisterInfo, const_cast<RegisterInfo *>(reg_info));
 }
 
 lldb::clang_type_t
diff --git a/source/Expression/ClangFunction.cpp b/source/Expression/ClangFunction.cpp
index c3a3657..9d7f754 100644
--- a/source/Expression/ClangFunction.cpp
+++ b/source/Expression/ClangFunction.cpp
@@ -286,7 +286,7 @@
         
     Error error;
     using namespace clang;
-    lldb::ExecutionResults return_value = lldb::eExecutionSetupError;
+    ExecutionResults return_value = eExecutionSetupError;
 
     Process *process = exe_ctx.process;
 
@@ -461,13 +461,13 @@
     exe_ctx.process->DeallocateMemory(args_addr);
 }
 
-lldb::ExecutionResults
+ExecutionResults
 ClangFunction::ExecuteFunction(ExecutionContext &exe_ctx, Stream &errors, Value &results)
 {
     return ExecuteFunction (exe_ctx, errors, 1000, true, results);
 }
 
-lldb::ExecutionResults
+ExecutionResults
 ClangFunction::ExecuteFunction(ExecutionContext &exe_ctx, Stream &errors, bool stop_others, Value &results)
 {
     const bool try_all_threads = false;
@@ -475,7 +475,7 @@
     return ExecuteFunction (exe_ctx, NULL, errors, stop_others, NULL, try_all_threads, discard_on_error, results);
 }
 
-lldb::ExecutionResults
+ExecutionResults
 ClangFunction::ExecuteFunction(
         ExecutionContext &exe_ctx, 
         Stream &errors, 
@@ -490,7 +490,7 @@
 }
 
 // This is the static function
-lldb::ExecutionResults 
+ExecutionResults 
 ClangFunction::ExecuteFunction (
         ExecutionContext &exe_ctx, 
         lldb::addr_t function_address, 
@@ -506,7 +506,7 @@
                                                                                errors, stop_others, discard_on_error, 
                                                                                this_arg));
     if (call_plan_sp == NULL)
-        return lldb::eExecutionSetupError;
+        return eExecutionSetupError;
     
     call_plan_sp->SetPrivate(true);
     
@@ -514,7 +514,7 @@
                                             single_thread_timeout_usec, errors);
 }  
 
-lldb::ExecutionResults
+ExecutionResults
 ClangFunction::ExecuteFunction(
         ExecutionContext &exe_ctx, 
         lldb::addr_t *args_addr_ptr, 
@@ -526,7 +526,7 @@
         Value &results)
 {
     using namespace clang;
-    lldb::ExecutionResults return_value = lldb::eExecutionSetupError;
+    ExecutionResults return_value = eExecutionSetupError;
     
     lldb::addr_t args_addr;
     
@@ -536,12 +536,12 @@
         args_addr = LLDB_INVALID_ADDRESS;
         
     if (CompileFunction(errors) != 0)
-        return lldb::eExecutionSetupError;
+        return eExecutionSetupError;
     
     if (args_addr == LLDB_INVALID_ADDRESS)
     {
         if (!InsertFunction(exe_ctx, args_addr, errors))
-            return lldb::eExecutionSetupError;
+            return eExecutionSetupError;
     }
     
     return_value = ClangFunction::ExecuteFunction (exe_ctx, 
@@ -556,7 +556,7 @@
     if (args_addr_ptr != NULL)
         *args_addr_ptr = args_addr;
     
-    if (return_value != lldb::eExecutionCompleted)
+    if (return_value != eExecutionCompleted)
         return return_value;
 
     FetchFunctionResults(exe_ctx, args_addr, results);
@@ -564,7 +564,7 @@
     if (args_addr_ptr == NULL)
         DeallocateFunctionResults(exe_ctx, args_addr);
         
-    return lldb::eExecutionCompleted;
+    return eExecutionCompleted;
 }
 
 clang::ASTConsumer *
diff --git a/source/Expression/ClangUserExpression.cpp b/source/Expression/ClangUserExpression.cpp
index 715677e..dda810e 100644
--- a/source/Expression/ClangUserExpression.cpp
+++ b/source/Expression/ClangUserExpression.cpp
@@ -453,7 +453,7 @@
     return true;
 }        
 
-lldb::ExecutionResults
+ExecutionResults
 ClangUserExpression::Execute (Stream &error_stream,
                               ExecutionContext &exe_ctx,
                               bool discard_on_error,
@@ -471,7 +471,7 @@
         
         error_stream.Printf("We don't currently support executing DWARF expressions");
         
-        return lldb::eExecutionSetupError;
+        return eExecutionSetupError;
     }
     else if (m_jit_start_addr != LLDB_INVALID_ADDRESS)
     {
@@ -481,7 +481,7 @@
         lldb::addr_t cmd_ptr = NULL;
         
         if (!PrepareToExecuteJITExpression (error_stream, exe_ctx, struct_address, object_ptr, cmd_ptr))
-            return lldb::eExecutionSetupError;
+            return eExecutionSetupError;
         
         const bool stop_others = true;
         const bool try_all_threads = true;
@@ -497,7 +497,7 @@
                                                                           shared_ptr_to_me));
         
         if (call_plan_sp == NULL || !call_plan_sp->ValidatePlan (NULL))
-            return lldb::eExecutionSetupError;
+            return eExecutionSetupError;
     
         call_plan_sp->SetPrivate(true);
     
@@ -506,7 +506,7 @@
         if (log)
             log->Printf("-- [ClangUserExpression::Execute] Execution of expression begins --");
         
-        lldb::ExecutionResults execution_result = exe_ctx.process->RunThreadPlan (exe_ctx, 
+        ExecutionResults execution_result = exe_ctx.process->RunThreadPlan (exe_ctx, 
                                                                                   call_plan_sp, 
                                                                                   stop_others, 
                                                                                   try_all_threads, 
@@ -517,7 +517,7 @@
         if (log)
             log->Printf("-- [ClangUserExpression::Execute] Execution of expression completed --");
 
-        if (execution_result == lldb::eExecutionInterrupted)
+        if (execution_result == eExecutionInterrupted)
         {
             if (discard_on_error)
                 error_stream.Printf ("Expression execution was interrupted.  The process has been returned to the state before execution.");
@@ -526,21 +526,21 @@
 
             return execution_result;
         }
-        else if (execution_result != lldb::eExecutionCompleted)
+        else if (execution_result != eExecutionCompleted)
         {
             error_stream.Printf ("Couldn't execute function; result was %s\n", Process::ExecutionResultAsCString (execution_result));
             return execution_result;
         }
         
         if  (FinalizeJITExecution (error_stream, exe_ctx, result))
-            return lldb::eExecutionCompleted;
+            return eExecutionCompleted;
         else
-            return lldb::eExecutionSetupError;
+            return eExecutionSetupError;
     }
     else
     {
         error_stream.Printf("Expression can't be run; neither DWARF nor a JIT compiled function is present");
-        return lldb::eExecutionSetupError;
+        return eExecutionSetupError;
     }
 }
 
@@ -553,7 +553,7 @@
     return *m_dwarf_opcodes.get();
 }
 
-lldb::ExecutionResults
+ExecutionResults
 ClangUserExpression::Evaluate (ExecutionContext &exe_ctx, 
                                bool discard_on_error,
                                bool keep_in_memory,
@@ -564,14 +564,14 @@
     lldb::LogSP log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_EXPRESSIONS | LIBLLDB_LOG_STEP));
 
     Error error;
-    lldb::ExecutionResults execution_results = lldb::eExecutionSetupError;
+    ExecutionResults execution_results = eExecutionSetupError;
     
     if (exe_ctx.process == NULL)
     {
         error.SetErrorString ("Must have a process to evaluate expressions.");
             
         result_valobj_sp.reset (new ValueObjectConstResult (error));
-        return lldb::eExecutionSetupError;
+        return eExecutionSetupError;
     }
     
     if (!exe_ctx.process->GetDynamicCheckers())
@@ -591,7 +591,7 @@
                 error.SetErrorString (install_errors.GetString().c_str());
             
             result_valobj_sp.reset (new ValueObjectConstResult (error));
-            return lldb::eExecutionSetupError;
+            return eExecutionSetupError;
         }
             
         exe_ctx.process->SetDynamicCheckers(dynamic_checkers);
@@ -641,7 +641,7 @@
                                                              user_expression_sp, 
                                                              expr_result);
             
-            if (execution_results != lldb::eExecutionCompleted)
+            if (execution_results != eExecutionCompleted)
             {
                 if (log)
                     log->Printf("== [ClangUserExpression::Evaluate] Execution completed abnormally ==");
diff --git a/source/Expression/DWARFExpression.cpp b/source/Expression/DWARFExpression.cpp
index 2b7832e..09d66fd 100644
--- a/source/Expression/DWARFExpression.cpp
+++ b/source/Expression/DWARFExpression.cpp
@@ -588,8 +588,8 @@
             }
             else
             {
-                if (m_data.GetAddressByteSize() == 4 && begin_addr_offset == 0xFFFFFFFFull ||
-                    m_data.GetAddressByteSize() == 8 && begin_addr_offset == 0xFFFFFFFFFFFFFFFFull)
+                if ((m_data.GetAddressByteSize() == 4 && (begin_addr_offset == UINT32_MAX)) ||
+                    (m_data.GetAddressByteSize() == 8 && (begin_addr_offset == UINT64_MAX)))
                 {
                     curr_base_addr = end_addr_offset + location_list_base_addr;
                     // We have a new base address
@@ -2388,7 +2388,7 @@
                             case Value::eValueTypeLoadAddress:
                             case Value::eValueTypeHostAddress:
                                 {
-                                    lldb::AddressType address_type = (value_type == Value::eValueTypeLoadAddress ? eAddressTypeLoad : eAddressTypeHost);
+                                    AddressType address_type = (value_type == Value::eValueTypeLoadAddress ? eAddressTypeLoad : eAddressTypeHost);
                                     lldb::addr_t addr = stack.back().GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
                                     if (!ClangASTType::WriteToMemory (ast_context,
                                                                           clang_type,
diff --git a/source/Host/common/Host.cpp b/source/Host/common/Host.cpp
index e6c4bde..515070e 100644
--- a/source/Host/common/Host.cpp
+++ b/source/Host/common/Host.cpp
@@ -273,20 +273,20 @@
                 if (cputype & CPU_ARCH_ABI64)
                 {
                     // We have a 64 bit kernel on a 64 bit system
-                    g_host_arch_32.SetArchitecture (lldb::eArchTypeMachO, ~(CPU_ARCH_MASK) & cputype, cpusubtype);
-                    g_host_arch_64.SetArchitecture (lldb::eArchTypeMachO, cputype, cpusubtype);
+                    g_host_arch_32.SetArchitecture (eArchTypeMachO, ~(CPU_ARCH_MASK) & cputype, cpusubtype);
+                    g_host_arch_64.SetArchitecture (eArchTypeMachO, cputype, cpusubtype);
                 }
                 else
                 {
                     // We have a 32 bit kernel on a 64 bit system
-                    g_host_arch_32.SetArchitecture (lldb::eArchTypeMachO, cputype, cpusubtype);
+                    g_host_arch_32.SetArchitecture (eArchTypeMachO, cputype, cpusubtype);
                     cputype |= CPU_ARCH_ABI64;
-                    g_host_arch_64.SetArchitecture (lldb::eArchTypeMachO, cputype, cpusubtype);
+                    g_host_arch_64.SetArchitecture (eArchTypeMachO, cputype, cpusubtype);
                 }
             }
             else
             {
-                g_host_arch_32.SetArchitecture (lldb::eArchTypeMachO, cputype, cpusubtype);
+                g_host_arch_32.SetArchitecture (eArchTypeMachO, cputype, cpusubtype);
                 g_host_arch_64.Clear();
             }
         }
diff --git a/source/Host/macosx/Host.mm b/source/Host/macosx/Host.mm
index 3231be9..f6fd4c1 100644
--- a/source/Host/macosx/Host.mm
+++ b/source/Host/macosx/Host.mm
@@ -958,7 +958,7 @@
                 case llvm::MachO::CPUTypeX86_64:    sub = llvm::MachO::CPUSubType_X86_64_ALL;   break;
                 default: break;
             }
-            process_info.GetArchitecture ().SetArchitecture (lldb::eArchTypeMachO, cpu, sub);
+            process_info.GetArchitecture ().SetArchitecture (eArchTypeMachO, cpu, sub);
             return true;
         }
     }
diff --git a/source/Interpreter/Args.cpp b/source/Interpreter/Args.cpp
index d278873..df276ba 100644
--- a/source/Interpreter/Args.cpp
+++ b/source/Interpreter/Args.cpp
@@ -796,7 +796,7 @@
 
 
 int32_t
-Args::StringToOptionEnum (const char *s, lldb::OptionEnumValueElement *enum_values, int32_t fail_value, bool *success_ptr)
+Args::StringToOptionEnum (const char *s, OptionEnumValueElement *enum_values, int32_t fail_value, bool *success_ptr)
 {    
     if (enum_values && s && s[0])
     {
diff --git a/source/Interpreter/CommandInterpreter.cpp b/source/Interpreter/CommandInterpreter.cpp
index 0fd9dab..98786f7 100644
--- a/source/Interpreter/CommandInterpreter.cpp
+++ b/source/Interpreter/CommandInterpreter.cpp
@@ -76,7 +76,7 @@
     StreamString var_name;
     var_name.Printf ("[%s].script-lang", dbg_name);
     debugger.GetSettingsController()->SetVariable (var_name.GetData(), lang_name.c_str(), 
-                                                   lldb::eVarSetOperationAssign, false, 
+                                                   eVarSetOperationAssign, false, 
                                                    m_debugger.GetInstanceName().AsCString());                                                   
     SetEventName (eBroadcastBitThreadShouldExit, "thread-should-exit");
     SetEventName (eBroadcastBitResetPrompt, "reset-prompt");
diff --git a/source/Interpreter/CommandObject.cpp b/source/Interpreter/CommandObject.cpp
index 38d5cfb..dff6119 100644
--- a/source/Interpreter/CommandObject.cpp
+++ b/source/Interpreter/CommandObject.cpp
@@ -489,7 +489,7 @@
 }
 
 bool
-CommandObject::IsPairType (lldb::ArgumentRepetitionType arg_repeat_type)
+CommandObject::IsPairType (ArgumentRepetitionType arg_repeat_type)
 {
     if ((arg_repeat_type == eArgRepeatPairPlain)
         ||  (arg_repeat_type == eArgRepeatPairOptional)
diff --git a/source/Interpreter/Options.cpp b/source/Interpreter/Options.cpp
index cd810c6..630f24c 100644
--- a/source/Interpreter/Options.cpp
+++ b/source/Interpreter/Options.cpp
@@ -177,7 +177,7 @@
     if (num_options == 0)
         return;
 
-    const lldb::OptionDefinition *full_options_table = GetDefinitions();
+    const OptionDefinition *full_options_table = GetDefinitions();
     m_required_options.resize(1);
     m_optional_options.resize(1);
     
@@ -230,7 +230,7 @@
 uint32_t
 Options::NumCommandOptions ()
 {
-    const lldb::OptionDefinition *full_options_table = GetDefinitions ();
+    const OptionDefinition *full_options_table = GetDefinitions ();
     if (full_options_table == NULL) 
         return 0;
         
@@ -258,7 +258,7 @@
 
         uint32_t i;
         uint32_t j;
-        const lldb::OptionDefinition *full_options_table = GetDefinitions();
+        const OptionDefinition *full_options_table = GetDefinitions();
 
         std::bitset<256> option_seen;
 
@@ -368,7 +368,7 @@
 {
     const uint32_t screen_width = interpreter.GetDebugger().GetTerminalWidth();
 
-    const lldb::OptionDefinition *full_options_table = GetDefinitions();
+    const OptionDefinition *full_options_table = GetDefinitions();
     const uint32_t save_indent_level = strm.GetIndentLevel();
     const char *name;
 
diff --git a/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp b/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp
index dd9e066..739b4cf 100644
--- a/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp
+++ b/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp
@@ -24,8 +24,8 @@
 using namespace lldb_private;
 
 // Convenient macro definitions.
-#define APSR_C Bit32(m_inst_cpsr, CPSR_C_POS)
-#define APSR_V Bit32(m_inst_cpsr, CPSR_V_POS)
+#define APSR_C Bit32(m_opcode_cpsr, CPSR_C_POS)
+#define APSR_V Bit32(m_opcode_cpsr, CPSR_V_POS)
 
 #define AlignPC(pc_val) (pc_val & 0xFFFFFFFC)
 
@@ -848,10 +848,10 @@
         {
             // APSR.N = result<31>; 
             // APSR.Z = IsZeroBit(result);
-            m_new_inst_cpsr = m_inst_cpsr;
+            m_new_inst_cpsr = m_opcode_cpsr;
             SetBit32 (m_new_inst_cpsr, CPSR_N_POS, Bit32 (result, 31));
             SetBit32 (m_new_inst_cpsr, CPSR_Z_POS, result == 0 ? 1 : 0);
-            if (m_new_inst_cpsr != m_inst_cpsr)
+            if (m_new_inst_cpsr != m_opcode_cpsr)
             {
                 if (!WriteRegisterUnsigned (context, eRegisterKindGeneric, LLDB_REGNUM_GENERIC_FLAGS, m_new_inst_cpsr))
                     return false;
@@ -5959,7 +5959,7 @@
         addr_t address;
                   
         // offset = Shift(R[m], shift_t, shift_n, APSR.C);   -- Note "The APSR is an application level alias for the CPSR".
-        addr_t offset = Shift (Rm, shift_t, shift_n, Bit32 (m_inst_cpsr, APSR_C));
+        addr_t offset = Shift (Rm, shift_t, shift_n, Bit32 (m_opcode_cpsr, APSR_C));
                   
         // offset_addr = if add then (R[n] + offset) else (R[n] - offset); 
         if (add)
@@ -9920,7 +9920,7 @@
 EmulateInstructionARM::ReadInstruction ()
 {
     bool success = false;
-    m_inst_cpsr = ReadRegisterUnsigned (eRegisterKindGeneric, LLDB_REGNUM_GENERIC_FLAGS, 0, &success);
+    m_opcode_cpsr = ReadRegisterUnsigned (eRegisterKindGeneric, LLDB_REGNUM_GENERIC_FLAGS, 0, &success);
     if (success)
     {
         addr_t pc = ReadRegisterUnsigned (eRegisterKindGeneric, LLDB_REGNUM_GENERIC_PC, LLDB_INVALID_ADDRESS, &success);
@@ -9930,37 +9930,37 @@
             read_inst_context.type = eContextReadOpcode;
             read_inst_context.SetNoArgs ();
                   
-            if (m_inst_cpsr & MASK_CPSR_T)
+            if (m_opcode_cpsr & MASK_CPSR_T)
             {
-                m_inst_mode = eModeThumb;
+                m_opcode_mode = eModeThumb;
                 uint32_t thumb_opcode = MemARead(read_inst_context, pc, 2, 0, &success);
                 
                 if (success)
                 {
-                    if ((m_inst.opcode.inst16 & 0xe000) != 0xe000 || ((m_inst.opcode.inst16 & 0x1800u) == 0))
+                    if ((m_opcode.data.inst16 & 0xe000) != 0xe000 || ((m_opcode.data.inst16 & 0x1800u) == 0))
                     {
-                        m_inst.opcode_type = eOpcode16;
-                        m_inst.opcode.inst16 = thumb_opcode;
+                        m_opcode.type = eOpcode16;
+                        m_opcode.data.inst16 = thumb_opcode;
                     }
                     else
                     {
-                        m_inst.opcode_type = eOpcode32;
-                        m_inst.opcode.inst32 = (thumb_opcode << 16) | MemARead(read_inst_context, pc + 2, 2, 0, &success);
+                        m_opcode.type = eOpcode32;
+                        m_opcode.data.inst32 = (thumb_opcode << 16) | MemARead(read_inst_context, pc + 2, 2, 0, &success);
                     }
                 }
             }
             else
             {
-                m_inst_mode = eModeARM;
-                m_inst.opcode_type = eOpcode32;
-                m_inst.opcode.inst32 = MemARead(read_inst_context, pc, 4, 0, &success);
+                m_opcode_mode = eModeARM;
+                m_opcode.type = eOpcode32;
+                m_opcode.data.inst32 = MemARead(read_inst_context, pc, 4, 0, &success);
             }
         }
     }
     if (!success)
     {
-        m_inst_mode = eModeInvalid;
-        m_inst_pc = LLDB_INVALID_ADDRESS;
+        m_opcode_mode = eModeInvalid;
+        m_opcode_pc = LLDB_INVALID_ADDRESS;
     }
     return success;
 }
@@ -9974,7 +9974,7 @@
 bool
 EmulateInstructionARM::ConditionPassed ()
 {
-    if (m_inst_cpsr == 0)
+    if (m_opcode_cpsr == 0)
         return false;
 
     const uint32_t cond = CurrentCond ();
@@ -9985,23 +9985,23 @@
     bool result = false;
     switch (UnsignedBits(cond, 3, 1))
     {
-    case 0: result = (m_inst_cpsr & MASK_CPSR_Z) != 0; break;
-    case 1: result = (m_inst_cpsr & MASK_CPSR_C) != 0; break;
-    case 2: result = (m_inst_cpsr & MASK_CPSR_N) != 0; break;
-    case 3: result = (m_inst_cpsr & MASK_CPSR_V) != 0; break;
-    case 4: result = ((m_inst_cpsr & MASK_CPSR_C) != 0) && ((m_inst_cpsr & MASK_CPSR_Z) == 0); break;
+    case 0: result = (m_opcode_cpsr & MASK_CPSR_Z) != 0; break;
+    case 1: result = (m_opcode_cpsr & MASK_CPSR_C) != 0; break;
+    case 2: result = (m_opcode_cpsr & MASK_CPSR_N) != 0; break;
+    case 3: result = (m_opcode_cpsr & MASK_CPSR_V) != 0; break;
+    case 4: result = ((m_opcode_cpsr & MASK_CPSR_C) != 0) && ((m_opcode_cpsr & MASK_CPSR_Z) == 0); break;
     case 5: 
         {
-            bool n = (m_inst_cpsr & MASK_CPSR_N);
-            bool v = (m_inst_cpsr & MASK_CPSR_V);
+            bool n = (m_opcode_cpsr & MASK_CPSR_N);
+            bool v = (m_opcode_cpsr & MASK_CPSR_V);
             result = n == v;
         }
         break;
     case 6: 
         {
-            bool n = (m_inst_cpsr & MASK_CPSR_N);
-            bool v = (m_inst_cpsr & MASK_CPSR_V);
-            result = n == v && ((m_inst_cpsr & MASK_CPSR_Z) == 0);
+            bool n = (m_opcode_cpsr & MASK_CPSR_N);
+            bool v = (m_opcode_cpsr & MASK_CPSR_V);
+            result = n == v && ((m_opcode_cpsr & MASK_CPSR_Z) == 0);
         }
         break;
     case 7: 
@@ -10017,31 +10017,31 @@
 uint32_t
 EmulateInstructionARM::CurrentCond ()
 {
-    switch (m_inst_mode)
+    switch (m_opcode_mode)
     {
     default:
     case eModeInvalid:
         break;
 
     case eModeARM:
-        return UnsignedBits(m_inst.opcode.inst32, 31, 28);
+        return UnsignedBits(m_opcode.data.inst32, 31, 28);
     
     case eModeThumb:
         // For T1 and T3 encodings of the Branch instruction, it returns the 4-bit
         // 'cond' field of the encoding.
-        if (m_inst.opcode_type == eOpcode16 &&
-            Bits32(m_inst.opcode.inst16, 15, 12) == 0x0d &&
-            Bits32(m_inst.opcode.inst16, 11, 7) != 0x0f)
+        if (m_opcode.type == eOpcode16 &&
+            Bits32(m_opcode.data.inst16, 15, 12) == 0x0d &&
+            Bits32(m_opcode.data.inst16, 11, 7) != 0x0f)
         {
-            return Bits32(m_inst.opcode.inst16, 11, 7);
+            return Bits32(m_opcode.data.inst16, 11, 7);
         }
-        else if (m_inst.opcode_type == eOpcode32 &&
-                 Bits32(m_inst.opcode.inst32, 31, 27) == 0x1e &&
-                 Bits32(m_inst.opcode.inst32, 15, 14) == 0x02 &&
-                 Bits32(m_inst.opcode.inst32, 12, 12) == 0x00 &&
-                 Bits32(m_inst.opcode.inst32, 25, 22) <= 0x0d)
+        else if (m_opcode.type == eOpcode32 &&
+                 Bits32(m_opcode.data.inst32, 31, 27) == 0x1e &&
+                 Bits32(m_opcode.data.inst32, 15, 14) == 0x02 &&
+                 Bits32(m_opcode.data.inst32, 12, 12) == 0x00 &&
+                 Bits32(m_opcode.data.inst32, 25, 22) <= 0x0d)
         {
-            return Bits32(m_inst.opcode.inst32, 25, 22);
+            return Bits32(m_opcode.data.inst32, 25, 22);
         }
         
         return m_it_session.GetCond();
@@ -10083,7 +10083,7 @@
 bool
 EmulateInstructionARM::CurrentModeIsPrivileged ()
 {
-    uint32_t mode = Bits32 (m_inst_cpsr, 4, 0);
+    uint32_t mode = Bits32 (m_opcode_cpsr, 4, 0);
                   
     if (BadMode (mode))
         return false;
@@ -10101,7 +10101,7 @@
 
     uint32_t tmp_cpsr = 0;
         
-    tmp_cpsr = tmp_cpsr | (Bits32 (m_inst_cpsr, 23, 20) << 20);
+    tmp_cpsr = tmp_cpsr | (Bits32 (m_opcode_cpsr, 23, 20) << 20);
                   
     if (BitIsSet (bytemask, 3))
     {
@@ -10134,7 +10134,7 @@
             tmp_cpsr = tmp_cpsr | Bits32 (value, 4, 0);
     }
                   
-    m_inst_cpsr = tmp_cpsr;
+    m_opcode_cpsr = tmp_cpsr;
 }
 
                   
@@ -10222,16 +10222,16 @@
 EmulateInstructionARM::Mode
 EmulateInstructionARM::CurrentInstrSet ()
 {
-    return m_inst_mode;
+    return m_opcode_mode;
 }
 
-// Set the 'T' bit of our CPSR.  The m_inst_mode gets updated when the next
+// Set the 'T' bit of our CPSR.  The m_opcode_mode gets updated when the next
 // ReadInstruction() is performed.  This function has a side effect of updating
 // the m_new_inst_cpsr member variable if necessary.
 bool
 EmulateInstructionARM::SelectInstrSet (Mode arm_or_thumb)
 {
-    m_new_inst_cpsr = m_inst_cpsr;
+    m_new_inst_cpsr = m_opcode_cpsr;
     switch (arm_or_thumb)
     {
     default:
@@ -10401,14 +10401,14 @@
                                    const uint32_t carry,
                                    const uint32_t overflow)
 {
-    m_new_inst_cpsr = m_inst_cpsr;
+    m_new_inst_cpsr = m_opcode_cpsr;
     SetBit32(m_new_inst_cpsr, CPSR_N_POS, Bit32(result, CPSR_N_POS));
     SetBit32(m_new_inst_cpsr, CPSR_Z_POS, result == 0 ? 1 : 0);
     if (carry != ~0u)
         SetBit32(m_new_inst_cpsr, CPSR_C_POS, carry);
     if (overflow != ~0u)
         SetBit32(m_new_inst_cpsr, CPSR_V_POS, overflow);
-    if (m_new_inst_cpsr != m_inst_cpsr)
+    if (m_new_inst_cpsr != m_opcode_cpsr)
     {
         if (!WriteRegisterUnsigned (context, eRegisterKindGeneric, LLDB_REGNUM_GENERIC_FLAGS, m_new_inst_cpsr))
             return false;
@@ -10420,7 +10420,7 @@
 EmulateInstructionARM::EvaluateInstruction ()
 {
     // Advance the ITSTATE bits to their values for the next instruction.
-    if (m_inst_mode == eModeThumb && m_it_session.InITBlock())
+    if (m_opcode_mode == eModeThumb && m_it_session.InITBlock())
         m_it_session.ITAdvance();
 
     return false;
diff --git a/source/Plugins/Instruction/ARM/EmulateInstructionARM.h b/source/Plugins/Instruction/ARM/EmulateInstructionARM.h
index 9e5611a..d798517 100644
--- a/source/Plugins/Instruction/ARM/EmulateInstructionARM.h
+++ b/source/Plugins/Instruction/ARM/EmulateInstructionARM.h
@@ -105,8 +105,8 @@
                             read_reg_callback,
                             write_reg_callback),
         m_arm_isa (0),
-        m_inst_mode (eModeInvalid),
-        m_inst_cpsr (0),
+        m_opcode_mode (eModeInvalid),
+        m_opcode_cpsr (0),
         m_it_session ()
     {
     }
@@ -733,8 +733,8 @@
     EmulateRFE (ARMEncoding encoding);
      
     uint32_t m_arm_isa;
-    Mode m_inst_mode;
-    uint32_t m_inst_cpsr;
+    Mode m_opcode_mode;
+    uint32_t m_opcode_cpsr;
     uint32_t m_new_inst_cpsr; // This can get updated by the opcode.
     ITSession m_it_session;
 };
diff --git a/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp b/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp
index 1188064..ca2d3e2 100644
--- a/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp
+++ b/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp
@@ -136,7 +136,7 @@
                                                      try_all_threads, 
                                                      unwind_on_error, 
                                                      ret);
-    if (results != lldb::eExecutionCompleted)
+    if (results != eExecutionCompleted)
     {
         str.Printf("Error evaluating Print Object function: %d.\n", results);
         return false;
@@ -246,7 +246,7 @@
 //------------------------------------------------------------------
 // Static Functions
 //------------------------------------------------------------------
-enum lldb::ObjCRuntimeVersions
+enum ObjCRuntimeVersions
 AppleObjCRuntime::GetObjCVersion (Process *process, ModuleSP &objc_module_sp)
 {
     ModuleList &images = process->GetTarget().GetImages();
@@ -259,21 +259,21 @@
             objc_module_sp = module_sp;
             ObjectFile *ofile = module_sp->GetObjectFile();
             if (!ofile)
-                return lldb::eObjC_VersionUnknown;
+                return eObjC_VersionUnknown;
             
             SectionList *sections = ofile->GetSectionList();
             if (!sections)
-                return lldb::eObjC_VersionUnknown;    
+                return eObjC_VersionUnknown;    
             SectionSP v1_telltale_section_sp = sections->FindSectionByName(ConstString ("__OBJC"));
             if (v1_telltale_section_sp)
             {
-                return lldb::eAppleObjC_V1;
+                return eAppleObjC_V1;
             }
-            return lldb::eAppleObjC_V2;
+            return eAppleObjC_V2;
         }
     }
             
-    return lldb::eObjC_VersionUnknown;
+    return eObjC_VersionUnknown;
 }
 
 void
diff --git a/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.h b/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.h
index 1577434..8c2920d 100644
--- a/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.h
+++ b/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.h
@@ -67,7 +67,7 @@
     static bool
     AppleIsModuleObjCLibrary (const lldb::ModuleSP &module_sp);
 
-    static enum lldb::ObjCRuntimeVersions
+    static enum ObjCRuntimeVersions
     GetObjCVersion (Process *process, ModuleSP &objc_module_sp);
 
     //------------------------------------------------------------------
diff --git a/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp b/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp
index a9203db..4bb1edc 100644
--- a/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp
+++ b/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp
@@ -59,7 +59,7 @@
     {
         ModuleSP objc_module_sp;
         
-        if (AppleObjCRuntime::GetObjCVersion (process, objc_module_sp) == lldb::eAppleObjC_V1)
+        if (AppleObjCRuntime::GetObjCVersion (process, objc_module_sp) == eAppleObjC_V1)
             return new AppleObjCRuntimeV1 (process);
         else
             return NULL;
diff --git a/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h b/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h
index 832a165..1e65713 100644
--- a/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h
+++ b/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h
@@ -64,10 +64,10 @@
     virtual void
     SetExceptionBreakpoints ();
     
-    virtual lldb::ObjCRuntimeVersions
+    virtual ObjCRuntimeVersions
     GetRuntimeVersion ()
     {
-        return lldb::eAppleObjC_V1;
+        return eAppleObjC_V1;
     }
 protected:
     
diff --git a/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp b/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
index 2ad8388..11c2a09 100644
--- a/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
+++ b/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
@@ -65,7 +65,7 @@
     {
         ModuleSP objc_module_sp;
         
-        if (AppleObjCRuntime::GetObjCVersion (process, objc_module_sp) == lldb::eAppleObjC_V2)
+        if (AppleObjCRuntime::GetObjCVersion (process, objc_module_sp) == eAppleObjC_V2)
             return new AppleObjCRuntimeV2 (process, objc_module_sp);
         else
             return NULL;
diff --git a/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h b/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h
index e4bb556..e6c1371 100644
--- a/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h
+++ b/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h
@@ -65,10 +65,10 @@
     virtual void
     SetExceptionBreakpoints ();
 
-    virtual lldb::ObjCRuntimeVersions
+    virtual ObjCRuntimeVersions
     GetRuntimeVersion ()
     {
-        return lldb::eAppleObjC_V2;
+        return eAppleObjC_V2;
     }
     
 protected:
diff --git a/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp b/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp
index b213e11..39e1d8d 100644
--- a/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp
+++ b/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp
@@ -28,16 +28,21 @@
 //----------------------------------------------------------------------
 // ThreadPlanStepThroughObjCTrampoline constructor
 //----------------------------------------------------------------------
-AppleThreadPlanStepThroughObjCTrampoline::AppleThreadPlanStepThroughObjCTrampoline(
-        Thread &thread, 
-        AppleObjCTrampolineHandler *trampoline_handler, 
-        lldb::addr_t args_addr, 
-        lldb::addr_t object_addr,
-        lldb::addr_t isa_addr,
-        lldb::addr_t sel_addr,
-        bool stop_others) :
-    ThreadPlan (ThreadPlan::eKindGeneric, "MacOSX Step through ObjC Trampoline", thread, 
-        lldb::eVoteNoOpinion, lldb::eVoteNoOpinion),
+AppleThreadPlanStepThroughObjCTrampoline::AppleThreadPlanStepThroughObjCTrampoline
+(
+    Thread &thread, 
+    AppleObjCTrampolineHandler *trampoline_handler, 
+    lldb::addr_t args_addr, 
+    lldb::addr_t object_addr,
+    lldb::addr_t isa_addr,
+    lldb::addr_t sel_addr,
+    bool stop_others
+) :
+    ThreadPlan (ThreadPlan::eKindGeneric, 
+                "MacOSX Step through ObjC Trampoline", 
+                thread, 
+                eVoteNoOpinion, 
+                eVoteNoOpinion),
     m_trampoline_handler (trampoline_handler),
     m_args_addr (args_addr),
     m_object_addr (object_addr),
diff --git a/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp b/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp
index 4fe6489..786a2ce 100644
--- a/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp
+++ b/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp
@@ -190,7 +190,7 @@
 {
     if (idx < m_header.nfat_arch)
     {
-        arch.SetArchitecture (lldb::eArchTypeMachO, m_fat_archs[idx].cputype, m_fat_archs[idx].cpusubtype);
+        arch.SetArchitecture (eArchTypeMachO, m_fat_archs[idx].cputype, m_fat_archs[idx].cpusubtype);
         return true;
     }
     return false;
diff --git a/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp b/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
index 67b6a5e..379186a 100644
--- a/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ b/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -754,7 +754,7 @@
         section_list->Dump(s, NULL, true, UINT32_MAX);
     Symtab *symtab = GetSymtab();
     if (symtab)
-        symtab->Dump(s, NULL, lldb::eSortOrderNone);
+        symtab->Dump(s, NULL, eSortOrderNone);
     s->EOL();
     DumpDependentModules(s);
     s->EOL();
@@ -1041,7 +1041,7 @@
     if (!ParseHeader())
         return false;
 
-    arch.SetArchitecture (lldb::eArchTypeELF, m_header.e_machine, LLDB_INVALID_CPUTYPE);
+    arch.SetArchitecture (eArchTypeELF, m_header.e_machine, LLDB_INVALID_CPUTYPE);
     arch.GetTriple().setOSName (Host::GetOSString().GetCString());
     arch.GetTriple().setVendorName(Host::GetVendorString().GetCString());
     return true;
diff --git a/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
index 72c21fe..7c845ec 100644
--- a/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ b/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -202,7 +202,7 @@
     return m_data.GetAddressByteSize ();
 }
 
-lldb::AddressClass
+AddressClass
 ObjectFileMachO::GetAddressClass (lldb::addr_t file_addr)
 {
     Symtab *symtab = GetSymtab();
@@ -217,7 +217,7 @@
                 const Section *section = range_ptr->GetBaseAddress().GetSection();
                 if (section)
                 {
-                    const lldb::SectionType section_type = section->GetType();
+                    const SectionType section_type = section->GetType();
                     switch (section_type)
                     {
                     case eSectionTypeInvalid:               return eAddressClassUnknown;
@@ -233,7 +233,7 @@
 
                     case eSectionTypeContainer:             return eAddressClassUnknown;
                     case eSectionTypeData:                  return eAddressClassData;
-                    case eSectionTypeDataCString:           return eAddressClassDataConst;
+                    case eSectionTypeDataCString:           return eAddressClassData;
                     case eSectionTypeDataCStringPointers:   return eAddressClassData;
                     case eSectionTypeDataSymbolAddress:     return eAddressClassData;
                     case eSectionTypeData4:                 return eAddressClassData;
@@ -241,8 +241,8 @@
                     case eSectionTypeData16:                return eAddressClassData;
                     case eSectionTypeDataPointers:          return eAddressClassData;
                     case eSectionTypeZeroFill:              return eAddressClassData;
-                    case eSectionTypeDataObjCMessageRefs:   return eAddressClassDataConst;
-                    case eSectionTypeDataObjCCFStrings:     return eAddressClassDataConst;
+                    case eSectionTypeDataObjCMessageRefs:   return eAddressClassData;
+                    case eSectionTypeDataObjCCFStrings:     return eAddressClassData;
                     case eSectionTypeDebug:                 return eAddressClassDebug;
                     case eSectionTypeDWARFDebugAbbrev:      return eAddressClassDebug;
                     case eSectionTypeDWARFDebugAranges:     return eAddressClassDebug;
@@ -261,7 +261,7 @@
                 }
             }
             
-            const lldb::SymbolType symbol_type = symbol->GetType();
+            const SymbolType symbol_type = symbol->GetType();
             switch (symbol_type)
             {
             case eSymbolTypeAny:            return eAddressClassUnknown;
@@ -1659,7 +1659,7 @@
         
         SymbolContextList contexts;
         SymbolContext context;
-        if (!m_module->FindSymbolsWithNameAndType(ConstString ("start"), lldb::eSymbolTypeCode, contexts))
+        if (!m_module->FindSymbolsWithNameAndType(ConstString ("start"), eSymbolTypeCode, contexts))
             return m_entry_point_address;
         
         contexts.GetContextAtIndex(0, context);
@@ -1675,7 +1675,7 @@
 ObjectFileMachO::GetArchitecture (ArchSpec &arch)
 {
     lldb_private::Mutex::Locker locker(m_mutex);
-    arch.SetArchitecture (lldb::eArchTypeMachO, m_header.cputype, m_header.cpusubtype);
+    arch.SetArchitecture (eArchTypeMachO, m_header.cputype, m_header.cpusubtype);
     return true;
 }
 
diff --git a/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h b/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h
index bd25062..0cd96ba 100644
--- a/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h
+++ b/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h
@@ -74,7 +74,7 @@
     virtual size_t
     GetAddressByteSize ()  const;
 
-    virtual lldb::AddressClass
+    virtual lldb_private::AddressClass
     GetAddressClass (lldb::addr_t file_addr);
 
     virtual lldb_private::Symtab *
diff --git a/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp b/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp
index 2478930..6004693 100644
--- a/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp
+++ b/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp
@@ -130,7 +130,7 @@
 
 uint32_t
 PlatformMacOSX::FindProcessesByName (const char *name_match, 
-                                     lldb::NameMatchType name_match_type,
+                                     NameMatchType name_match_type,
                                      ProcessInfoList &process_infos)
 {
     uint32_t match_count = 0;
diff --git a/source/Plugins/Platform/MacOSX/PlatformMacOSX.h b/source/Plugins/Platform/MacOSX/PlatformMacOSX.h
index 851db84..c0346cb 100644
--- a/source/Plugins/Platform/MacOSX/PlatformMacOSX.h
+++ b/source/Plugins/Platform/MacOSX/PlatformMacOSX.h
@@ -85,7 +85,7 @@
 
         virtual uint32_t
         FindProcessesByName (const char *name_match, 
-                             lldb::NameMatchType name_match_type,
+                             NameMatchType name_match_type,
                              ProcessInfoList &process_infos);
 
         virtual bool
diff --git a/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp b/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
index d56ed3f..0d8886b 100644
--- a/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
+++ b/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
@@ -420,7 +420,7 @@
 
 uint32_t
 PlatformRemoteiOS::FindProcessesByName (const char *name_match, 
-                                        lldb::NameMatchType name_match_type,
+                                        NameMatchType name_match_type,
                                         ProcessInfoList &process_infos)
 {
     // TODO: if connected, send a packet to get the remote process infos by name
diff --git a/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h b/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h
index a6bfc44..aec84c0 100644
--- a/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h
+++ b/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h
@@ -96,7 +96,7 @@
 
         virtual uint32_t
         FindProcessesByName (const char *name_match, 
-                             lldb::NameMatchType name_match_type,
+                             NameMatchType name_match_type,
                              ProcessInfoList &process_infos);
 
         virtual bool
diff --git a/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp b/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
index 6c955e0..65978f2 100644
--- a/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
+++ b/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
@@ -128,7 +128,7 @@
 
 uint32_t
 PlatformRemoteGDBServer::FindProcessesByName (const char *name_match, 
-                                              lldb::NameMatchType name_match_type,
+                                              NameMatchType name_match_type,
                                               ProcessInfoList &process_infos)
 {
     return 0;
diff --git a/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h b/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h
index 9551cd8..82259d8 100644
--- a/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h
+++ b/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h
@@ -86,7 +86,7 @@
 
         virtual uint32_t
         FindProcessesByName (const char *name_match, 
-                             lldb::NameMatchType name_match_type,
+                             NameMatchType name_match_type,
                              ProcessInfoList &process_infos);
 
         virtual bool
diff --git a/source/Plugins/Process/MacOSX-User/source/MacOSX/MachException.cpp b/source/Plugins/Process/MacOSX-User/source/MacOSX/MachException.cpp
index e975688..3c049f6 100644
--- a/source/Plugins/Process/MacOSX-User/source/MacOSX/MachException.cpp
+++ b/source/Plugins/Process/MacOSX-User/source/MacOSX/MachException.cpp
@@ -369,7 +369,7 @@
         else
             err.Clear();
 
-        if (log && log->GetMask().Test(PD_LOG_EXCEPTIONS) || err.Fail())
+        if (log && (log->GetMask().Test(PD_LOG_EXCEPTIONS) || err.Fail()))
             err.PutToLog(log.get(), "::ptrace (request = PT_THUPDATE, pid = %i, tid = 0x%4.4x, signal = %i)", state_pid, state.thread_port, signal);
     }
 
diff --git a/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_arm.cpp b/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_arm.cpp
index cac805e..35805b5 100644
--- a/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_arm.cpp
+++ b/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_arm.cpp
@@ -186,7 +186,7 @@
 #define DEFINE_DBG(reg, i)  #reg, NULL, sizeof(((RegisterContextMach_arm::DBG *)NULL)->reg[i]), DBG_OFFSET(reg[i]), eEncodingUint, eFormatHex, { LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, dbg_##reg##i }
 #define REG_CONTEXT_SIZE (sizeof (RegisterContextMach_arm::GPR) + sizeof (RegisterContextMach_arm::FPU) + sizeof (RegisterContextMach_arm::EXC))
 // General purpose registers
-static lldb::RegisterInfo
+static RegisterInfo
 g_register_infos[] =
 {
 //  NAME        ALT     SZ  OFFSET              ENCODING        FORMAT          COMPILER            DWARF               GENERIC                     LLDB NATIVE
diff --git a/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_arm.h b/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_arm.h
index 3f9654c..ef4b7af 100644
--- a/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_arm.h
+++ b/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_arm.h
@@ -65,13 +65,13 @@
     virtual size_t
     GetRegisterCount ();
 
-    virtual const lldb::RegisterInfo *
+    virtual const lldb_private::RegisterInfo *
     GetRegisterInfoAtIndex (uint32_t reg);
 
     virtual size_t
     GetRegisterSetCount ();
 
-    virtual const lldb::RegisterSet *
+    virtual const lldb_private::RegisterSet *
     GetRegisterSet (uint32_t set);
 
     virtual bool
@@ -297,7 +297,7 @@
     static size_t
     GetRegisterInfosCount ();
 
-    static const lldb::RegisterInfo *
+    static const lldb_private::RegisterInfo *
     GetRegisterInfos ();
 };
 
diff --git a/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_i386.h b/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_i386.h
index 7a3c5da..969fa9a 100644
--- a/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_i386.h
+++ b/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_i386.h
@@ -33,13 +33,13 @@
     virtual size_t
     GetRegisterCount ();
 
-    virtual const lldb::RegisterInfo *
+    virtual const lldb_private::RegisterInfo *
     GetRegisterInfoAtIndex (uint32_t reg);
 
     virtual size_t
     GetRegisterSetCount ();
 
-    virtual const lldb::RegisterSet *
+    virtual const lldb_private::RegisterSet *
     GetRegisterSet (uint32_t set);
 
     virtual bool
@@ -249,7 +249,7 @@
     static size_t
     GetRegisterInfosCount ();
 
-    static const lldb::RegisterInfo *
+    static const lldb_private::RegisterInfo *
     GetRegisterInfos ();
 };
 
diff --git a/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_x86_64.cpp b/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_x86_64.cpp
index 9995b0d..098a168 100644
--- a/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_x86_64.cpp
+++ b/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_x86_64.cpp
@@ -342,7 +342,7 @@
     return k_num_register_infos;
 }
 
-const RegisterInfo *
+const lldb_private::RegisterInfo *
 RegisterContextMach_x86_64::GetRegisterInfos ()
 {
     return g_register_infos;
diff --git a/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_x86_64.h b/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_x86_64.h
index 316575c..5b0bdc7 100644
--- a/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_x86_64.h
+++ b/source/Plugins/Process/MacOSX-User/source/RegisterContextMach_x86_64.h
@@ -32,13 +32,13 @@
     virtual size_t
     GetRegisterCount ();
 
-    virtual const lldb::RegisterInfo *
+    virtual const lldb_private::RegisterInfo *
     GetRegisterInfoAtIndex (uint32_t reg);
 
     virtual size_t
     GetRegisterSetCount ();
 
-    virtual const lldb::RegisterSet *
+    virtual const lldb_private::RegisterSet *
     GetRegisterSet (uint32_t set);
 
     virtual bool
@@ -253,7 +253,7 @@
     static size_t
     GetRegisterInfosCount ();
 
-    static const lldb::RegisterInfo *
+    static const lldb_private::RegisterInfo *
     GetRegisterInfos ();
 
 };
diff --git a/source/Plugins/Process/Utility/RegisterContextLLDB.h b/source/Plugins/Process/Utility/RegisterContextLLDB.h
index f75a9b8..ac2c560 100644
--- a/source/Plugins/Process/Utility/RegisterContextLLDB.h
+++ b/source/Plugins/Process/Utility/RegisterContextLLDB.h
@@ -40,13 +40,13 @@
     virtual size_t
     GetRegisterCount ();
 
-    virtual const lldb::RegisterInfo *
+    virtual const lldb_private::RegisterInfo *
     GetRegisterInfoAtIndex (uint32_t reg);
 
     virtual size_t
     GetRegisterSetCount ();
 
-    virtual const lldb::RegisterSet *
+    virtual const lldb_private::RegisterSet *
     GetRegisterSet (uint32_t reg_set);
 
     virtual bool
diff --git a/source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp b/source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp
index 4a84e46..851d924 100644
--- a/source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp
+++ b/source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp
@@ -57,7 +57,7 @@
     return m_thread.GetRegisterContext()->GetRegisterCount();
 }
 
-const lldb::RegisterInfo *
+const RegisterInfo *
 RegisterContextMacOSXFrameBackchain::GetRegisterInfoAtIndex (uint32_t reg)
 {
     return m_thread.GetRegisterContext()->GetRegisterInfoAtIndex(reg);
@@ -71,7 +71,7 @@
 
 
 
-const lldb::RegisterSet *
+const RegisterSet *
 RegisterContextMacOSXFrameBackchain::GetRegisterSet (uint32_t reg_set)
 {
     return m_thread.GetRegisterContext()->GetRegisterSet (reg_set);
diff --git a/source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.h b/source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.h
index 7997a23..bc7c2a0 100644
--- a/source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.h
+++ b/source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.h
@@ -41,13 +41,13 @@
     virtual size_t
     GetRegisterCount ();
 
-    virtual const lldb::RegisterInfo *
+    virtual const lldb_private::RegisterInfo *
     GetRegisterInfoAtIndex (uint32_t reg);
 
     virtual size_t
     GetRegisterSetCount ();
 
-    virtual const lldb::RegisterSet *
+    virtual const lldb_private::RegisterSet *
     GetRegisterSet (uint32_t reg_set);
 
     virtual bool
diff --git a/source/Plugins/Process/Utility/UnwindLLDB.h b/source/Plugins/Process/Utility/UnwindLLDB.h
index 1c01a3d..97b0882 100644
--- a/source/Plugins/Process/Utility/UnwindLLDB.h
+++ b/source/Plugins/Process/Utility/UnwindLLDB.h
@@ -12,7 +12,7 @@
 
 #include <vector>
 
-#include "lldb/lldb-include.h"
+#include "lldb/lldb-public.h"
 #include "lldb/Symbol/FuncUnwinders.h"
 #include "lldb/Symbol/UnwindPlan.h"
 #include "lldb/Target/RegisterContext.h"
diff --git a/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp b/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
index e158e5c..f8a0600 100644
--- a/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
+++ b/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
@@ -859,7 +859,7 @@
                 {
                     if (cpu != LLDB_INVALID_CPUTYPE)
                     {
-                        m_host_arch.SetArchitecture (lldb::eArchTypeMachO, cpu, sub);
+                        m_host_arch.SetArchitecture (eArchTypeMachO, cpu, sub);
                         if (pointer_byte_size)
                         {
                             assert (pointer_byte_size == m_host_arch.GetAddressByteSize());
@@ -943,7 +943,7 @@
 const lldb_private::ArchSpec &
 GDBRemoteCommunicationClient::GetHostArchitecture ()
 {
-    if (m_supports_qHostInfo == lldb::eLazyBoolCalculate)
+    if (m_supports_qHostInfo == eLazyBoolCalculate)
         GetHostInfo ();
     return m_host_arch;
 }
diff --git a/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h b/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
index 410d80d..39ddb62 100644
--- a/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
+++ b/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
@@ -237,15 +237,15 @@
     //------------------------------------------------------------------
     // Classes that inherit from GDBRemoteCommunicationClient can see and modify these
     //------------------------------------------------------------------
-    lldb::LazyBool m_supports_not_sending_acks;
-    lldb::LazyBool m_supports_thread_suffix;
-    lldb::LazyBool m_supports_qHostInfo;
-    lldb::LazyBool m_supports_vCont_all;
-    lldb::LazyBool m_supports_vCont_any;
-    lldb::LazyBool m_supports_vCont_c;
-    lldb::LazyBool m_supports_vCont_C;
-    lldb::LazyBool m_supports_vCont_s;
-    lldb::LazyBool m_supports_vCont_S;
+    lldb_private::LazyBool m_supports_not_sending_acks;
+    lldb_private::LazyBool m_supports_thread_suffix;
+    lldb_private::LazyBool m_supports_qHostInfo;
+    lldb_private::LazyBool m_supports_vCont_all;
+    lldb_private::LazyBool m_supports_vCont_any;
+    lldb_private::LazyBool m_supports_vCont_c;
+    lldb_private::LazyBool m_supports_vCont_C;
+    lldb_private::LazyBool m_supports_vCont_s;
+    lldb_private::LazyBool m_supports_vCont_S;
 
     // If we need to send a packet while the target is running, the m_async_XXX
     // member variables take care of making this happen.
diff --git a/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp b/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp
index 73d3535..556fa51 100644
--- a/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp
+++ b/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp
@@ -92,7 +92,7 @@
     return m_reg_info.GetNumRegisters ();
 }
 
-const lldb::RegisterInfo *
+const RegisterInfo *
 GDBRemoteRegisterContext::GetRegisterInfoAtIndex (uint32_t reg)
 {
     return m_reg_info.GetRegisterInfoAtIndex (reg);
@@ -106,7 +106,7 @@
 
 
 
-const lldb::RegisterSet *
+const RegisterSet *
 GDBRemoteRegisterContext::GetRegisterSet (uint32_t reg_set)
 {
     return m_reg_info.GetRegisterSet (reg_set);
@@ -474,7 +474,7 @@
 void
 GDBRemoteDynamicRegisterInfo::HardcodeARMRegisters()
 {
-    static lldb::RegisterInfo
+    static RegisterInfo
     g_register_infos[] =
     {
         //  NAME        ALT     SZ  OFF   ENCODING           FORMAT            COMPILER              DWARF               GENERIC              GDB                    LLDB NATIVE
@@ -555,7 +555,7 @@
         {   "d30",      NULL,   8,  420,  eEncodingIEEE754,  eFormatFloat,   { LLDB_INVALID_REGNUM,  dwarf_d30,          LLDB_INVALID_REGNUM,  LLDB_INVALID_REGNUM,     73 }},
         {   "d31",      NULL,   8,  428,  eEncodingIEEE754,  eFormatFloat,   { LLDB_INVALID_REGNUM,  dwarf_d31,          LLDB_INVALID_REGNUM,  LLDB_INVALID_REGNUM,     74 }},
     };
-    static const uint32_t num_registers = sizeof (g_register_infos)/sizeof (lldb::RegisterInfo);
+    static const uint32_t num_registers = sizeof (g_register_infos)/sizeof (RegisterInfo);
     static ConstString gpr_reg_set ("General Purpose Registers");
     static ConstString vfp_reg_set ("Floating Point Registers");
     for (uint32_t i=0; i<num_registers; ++i)
diff --git a/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.h b/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.h
index ac6bbe5..3848ffc 100644
--- a/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.h
+++ b/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.h
@@ -46,7 +46,10 @@
     }
 
     void
-    AddRegister (lldb::RegisterInfo &reg_info, lldb_private::ConstString &reg_name, lldb_private::ConstString &reg_alt_name, lldb_private::ConstString &set_name)
+    AddRegister (lldb_private::RegisterInfo &reg_info, 
+                 lldb_private::ConstString &reg_name, 
+                 lldb_private::ConstString &reg_alt_name, 
+                 lldb_private::ConstString &set_name)
     {
         const uint32_t reg_num = m_regs.size();
         m_reg_names.push_back (reg_name);
@@ -94,7 +97,7 @@
         return m_reg_data_byte_size;
     }
 
-    const lldb::RegisterInfo *
+    const lldb_private::RegisterInfo *
     GetRegisterInfoAtIndex (uint32_t i) const
     {
         if (i < m_regs.size())
@@ -102,7 +105,7 @@
         return NULL;
     }
 
-    const lldb::RegisterSet *
+    const lldb_private::RegisterSet *
     GetRegisterSet (uint32_t i) const
     {
         if (i < m_sets.size())
@@ -122,7 +125,7 @@
 
         m_set_names.push_back(set_name);
         m_set_reg_nums.resize(m_set_reg_nums.size()+1);
-        lldb::RegisterSet new_set = { set_name.AsCString(), NULL, 0, NULL };
+        lldb_private::RegisterSet new_set = { set_name.AsCString(), NULL, 0, NULL };
         m_sets.push_back (new_set);
         return m_sets.size() - 1;
     }
@@ -157,8 +160,8 @@
     //------------------------------------------------------------------
     // Classes that inherit from GDBRemoteRegisterContext can see and modify these
     //------------------------------------------------------------------
-    typedef std::vector <lldb::RegisterInfo> reg_collection;
-    typedef std::vector <lldb::RegisterSet> set_collection;
+    typedef std::vector <lldb_private::RegisterInfo> reg_collection;
+    typedef std::vector <lldb_private::RegisterSet> set_collection;
     typedef std::vector <uint32_t> reg_num_collection;
     typedef std::vector <reg_num_collection> set_reg_num_collection;
     typedef std::vector <lldb_private::ConstString> name_collection;
@@ -195,13 +198,13 @@
     virtual size_t
     GetRegisterCount ();
 
-    virtual const lldb::RegisterInfo *
+    virtual const lldb_private::RegisterInfo *
     GetRegisterInfoAtIndex (uint32_t reg);
 
     virtual size_t
     GetRegisterSetCount ();
 
-    virtual const lldb::RegisterSet *
+    virtual const lldb_private::RegisterSet *
     GetRegisterSet (uint32_t reg_set);
 
     virtual bool
diff --git a/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h b/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
index 8585d01..991d929 100644
--- a/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
+++ b/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
@@ -168,7 +168,7 @@
     const DWARFDebugRanges* DebugRanges() const;
 
     const lldb_private::DataExtractor&
-    GetCachedSectionData (uint32_t got_flag, lldb::SectionType sect_type, lldb_private::DataExtractor &data);
+    GetCachedSectionData (uint32_t got_flag, lldb_private::SectionType sect_type, lldb_private::DataExtractor &data);
 
     static bool
     SupportedVersion(uint16_t version);
diff --git a/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp b/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
index 880d826..2c9a7c3 100644
--- a/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
+++ b/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
@@ -852,7 +852,11 @@
     CompileUnitInfo *comp_unit_info = NULL;
     if (oso_index_count)
     {
-        comp_unit_info = (CompileUnitInfo*)bsearch(&symbol_idx, &m_compile_unit_infos[0], m_compile_unit_infos.size(), sizeof(CompileUnitInfo), (comparison_function)SymbolContainsSymbolWithIndex);
+        comp_unit_info = (CompileUnitInfo*)bsearch(&symbol_idx, 
+                                                   &m_compile_unit_infos[0], 
+                                                   m_compile_unit_infos.size(), 
+                                                   sizeof(CompileUnitInfo), 
+                                                   (ComparisonFunction)SymbolContainsSymbolWithIndex);
     }
 
     if (oso_idx_ptr)
@@ -872,7 +876,11 @@
     CompileUnitInfo *comp_unit_info = NULL;
     if (oso_index_count)
     {
-        comp_unit_info = (CompileUnitInfo*)bsearch(&symbol_id, &m_compile_unit_infos[0], m_compile_unit_infos.size(), sizeof(CompileUnitInfo), (comparison_function)SymbolContainsSymbolWithID);
+        comp_unit_info = (CompileUnitInfo*)::bsearch (&symbol_id, 
+                                                      &m_compile_unit_infos[0], 
+                                                      m_compile_unit_infos.size(), 
+                                                      sizeof(CompileUnitInfo), 
+                                                      (ComparisonFunction)SymbolContainsSymbolWithID);
     }
 
     if (oso_idx_ptr)
diff --git a/source/Symbol/ClangASTType.cpp b/source/Symbol/ClangASTType.cpp
index 6e68f9b..1d3b02f 100644
--- a/source/Symbol/ClangASTType.cpp
+++ b/source/Symbol/ClangASTType.cpp
@@ -1305,7 +1305,7 @@
 (
     lldb_private::ExecutionContext *exe_ctx,
     lldb::addr_t addr,
-    lldb::AddressType address_type,
+    AddressType address_type,
     lldb_private::DataExtractor &data
 )
 {
@@ -1325,11 +1325,11 @@
     clang_type_t clang_type,
     lldb_private::ExecutionContext *exe_ctx,
     lldb::addr_t addr,
-    lldb::AddressType address_type,
+    AddressType address_type,
     lldb_private::DataExtractor &data
 )
 {
-    if (address_type == lldb::eAddressTypeFile)
+    if (address_type == eAddressTypeFile)
     {
         // Can't convert a file address to anything valid without more
         // context (which Module it came from)
@@ -1347,7 +1347,7 @@
     uint8_t* dst = (uint8_t*)data.PeekData(0, byte_size);
     if (dst != NULL)
     {
-        if (address_type == lldb::eAddressTypeHost)
+        if (address_type == eAddressTypeHost)
         {
             // The address is an address in this process, so just copy it
             memcpy (dst, (uint8_t*)NULL + addr, byte_size);
@@ -1370,7 +1370,7 @@
 (
     lldb_private::ExecutionContext *exe_ctx,
     lldb::addr_t addr,
-    lldb::AddressType address_type,
+    AddressType address_type,
     StreamString &new_value
 )
 {
@@ -1389,11 +1389,11 @@
     clang_type_t clang_type,
     lldb_private::ExecutionContext *exe_ctx,
     lldb::addr_t addr,
-    lldb::AddressType address_type,
+    AddressType address_type,
     StreamString &new_value
 )
 {
-    if (address_type == lldb::eAddressTypeFile)
+    if (address_type == eAddressTypeFile)
     {
         // Can't convert a file address to anything valid without more
         // context (which Module it came from)
@@ -1404,7 +1404,7 @@
 
     if (byte_size > 0)
     {
-        if (address_type == lldb::eAddressTypeHost)
+        if (address_type == eAddressTypeHost)
         {
             // The address is an address in this process, so just copy it
             memcpy ((void *)addr, new_value.GetData(), byte_size);
diff --git a/source/Symbol/DWARFCallFrameInfo.cpp b/source/Symbol/DWARFCallFrameInfo.cpp
index 46da631..3fb84f4 100644
--- a/source/Symbol/DWARFCallFrameInfo.cpp
+++ b/source/Symbol/DWARFCallFrameInfo.cpp
@@ -125,7 +125,7 @@
     const uint32_t length = m_cfi_data.GetU32(&offset);
     const dw_offset_t cie_id = m_cfi_data.GetU32(&offset);
     const dw_offset_t end_offset = cie_offset + length + 4;
-    if (length > 0 && (!m_is_eh_frame && cie_id == 0xfffffffful) || (m_is_eh_frame && cie_id == 0ul))
+    if (length > 0 && ((!m_is_eh_frame && cie_id == 0xfffffffful) || (m_is_eh_frame && cie_id == 0ul)))
     {
         size_t i;
         //    cie.offset = cie_offset;
diff --git a/source/Symbol/ObjectFile.cpp b/source/Symbol/ObjectFile.cpp
index fde35a0..4584208 100644
--- a/source/Symbol/ObjectFile.cpp
+++ b/source/Symbol/ObjectFile.cpp
@@ -102,7 +102,7 @@
     return m_module->SetArchitecture (new_arch);
 }
 
-lldb::AddressClass
+AddressClass
 ObjectFile::GetAddressClass (lldb::addr_t file_addr)
 {
     Symtab *symtab = GetSymtab();
@@ -117,14 +117,14 @@
                 const Section *section = range_ptr->GetBaseAddress().GetSection();
                 if (section)
                 {
-                    const lldb::SectionType section_type = section->GetType();
+                    const SectionType section_type = section->GetType();
                     switch (section_type)
                     {
                     case eSectionTypeInvalid:               return eAddressClassUnknown;
                     case eSectionTypeCode:                  return eAddressClassCode;
                     case eSectionTypeContainer:             return eAddressClassUnknown;
                     case eSectionTypeData:                  return eAddressClassData;
-                    case eSectionTypeDataCString:           return eAddressClassDataConst;
+                    case eSectionTypeDataCString:           return eAddressClassData;
                     case eSectionTypeDataCStringPointers:   return eAddressClassData;
                     case eSectionTypeDataSymbolAddress:     return eAddressClassData;
                     case eSectionTypeData4:                 return eAddressClassData;
@@ -132,8 +132,8 @@
                     case eSectionTypeData16:                return eAddressClassData;
                     case eSectionTypeDataPointers:          return eAddressClassData;
                     case eSectionTypeZeroFill:              return eAddressClassData;
-                    case eSectionTypeDataObjCMessageRefs:   return eAddressClassDataConst;
-                    case eSectionTypeDataObjCCFStrings:     return eAddressClassDataConst;
+                    case eSectionTypeDataObjCMessageRefs:   return eAddressClassData;
+                    case eSectionTypeDataObjCCFStrings:     return eAddressClassData;
                     case eSectionTypeDebug:                 return eAddressClassDebug;
                     case eSectionTypeDWARFDebugAbbrev:      return eAddressClassDebug;
                     case eSectionTypeDWARFDebugAranges:     return eAddressClassDebug;
@@ -152,7 +152,7 @@
                 }
             }
             
-            const lldb::SymbolType symbol_type = symbol->GetType();
+            const SymbolType symbol_type = symbol->GetType();
             switch (symbol_type)
             {
             case eSymbolTypeAny:            return eAddressClassUnknown;
diff --git a/source/Symbol/Symtab.cpp b/source/Symbol/Symtab.cpp
index 09f80c7..e12cc4c 100644
--- a/source/Symbol/Symtab.cpp
+++ b/source/Symbol/Symtab.cpp
@@ -74,7 +74,7 @@
 }
 
 void
-Symtab::Dump (Stream *s, Target *target, lldb::SortOrder sort_order)
+Symtab::Dump (Stream *s, Target *target, SortOrder sort_order)
 {
     Mutex::Locker locker (m_mutex);
 
@@ -749,7 +749,11 @@
 FindIndexPtrForSymbolContainingAddress(Symtab* symtab, addr_t file_addr, const uint32_t* indexes, uint32_t num_indexes)
 {
     SymbolSearchInfo info = { symtab, file_addr, NULL, NULL, 0 };
-    bsearch(&info, indexes, num_indexes, sizeof(uint32_t), (comparison_function)SymbolWithClosestFileAddress);
+    ::bsearch (&info, 
+               indexes, 
+               num_indexes, 
+               sizeof(uint32_t), 
+               (ComparisonFunction)SymbolWithClosestFileAddress);
     return info;
 }
 
@@ -851,7 +855,11 @@
 
     SymbolSearchInfo info = { this, file_addr, NULL, NULL, 0 };
 
-    uint32_t* match = (uint32_t*)bsearch(&info, &m_addr_indexes[0], m_addr_indexes.size(), sizeof(uint32_t), (comparison_function)SymbolWithFileAddress);
+    uint32_t* match = (uint32_t*)::bsearch (&info, 
+                                            &m_addr_indexes[0], 
+                                            m_addr_indexes.size(), 
+                                            sizeof(uint32_t), 
+                                            (ComparisonFunction)SymbolWithFileAddress);
     if (match)
         return SymbolAtIndex (*match);
     return NULL;
@@ -865,7 +873,11 @@
 
     SymbolSearchInfo info = { this, file_addr, NULL, NULL, 0 };
 
-    bsearch(&info, indexes, num_indexes, sizeof(uint32_t), (comparison_function)SymbolWithClosestFileAddress);
+    ::bsearch (&info, 
+               indexes, 
+               num_indexes, 
+               sizeof(uint32_t), 
+               (ComparisonFunction)SymbolWithClosestFileAddress);
 
     if (info.match_symbol)
     {
diff --git a/source/Symbol/Type.cpp b/source/Symbol/Type.cpp
index 7cd9857..379fa20 100644
--- a/source/Symbol/Type.cpp
+++ b/source/Symbol/Type.cpp
@@ -352,7 +352,7 @@
     ExecutionContext *exe_ctx,
     Stream *s,
     lldb::addr_t address,
-    lldb::AddressType address_type,
+    AddressType address_type,
     bool show_types,
     bool show_summary,
     bool verbose
@@ -374,9 +374,9 @@
 
 
 bool
-Type::ReadFromMemory (ExecutionContext *exe_ctx, lldb::addr_t addr, lldb::AddressType address_type, DataExtractor &data)
+Type::ReadFromMemory (ExecutionContext *exe_ctx, lldb::addr_t addr, AddressType address_type, DataExtractor &data)
 {
-    if (address_type == lldb::eAddressTypeFile)
+    if (address_type == eAddressTypeFile)
     {
         // Can't convert a file address to anything valid without more
         // context (which Module it came from)
@@ -393,7 +393,7 @@
     uint8_t* dst = (uint8_t*)data.PeekData(0, byte_size);
     if (dst != NULL)
     {
-        if (address_type == lldb::eAddressTypeHost)
+        if (address_type == eAddressTypeHost)
         {
             // The address is an address in this process, so just copy it
             memcpy (dst, (uint8_t*)NULL + addr, byte_size);
@@ -413,7 +413,7 @@
 
 
 bool
-Type::WriteToMemory (ExecutionContext *exe_ctx, lldb::addr_t addr, lldb::AddressType address_type, DataExtractor &data)
+Type::WriteToMemory (ExecutionContext *exe_ctx, lldb::addr_t addr, AddressType address_type, DataExtractor &data)
 {
     return false;
 }
diff --git a/source/Target/Process.cpp b/source/Target/Process.cpp
index c5d470d..54c60f5 100644
--- a/source/Target/Process.cpp
+++ b/source/Target/Process.cpp
@@ -2693,7 +2693,7 @@
 void
 Process::SettingsInitialize ()
 {
-    static std::vector<lldb::OptionEnumValueElement> g_plugins;
+    static std::vector<OptionEnumValueElement> g_plugins;
     
     int i=0; 
     const char *name;
@@ -2781,13 +2781,13 @@
     if (thread_plan_sp.get() == NULL)
     {
         errors.Printf("RunThreadPlan called with empty thread plan.");
-        return lldb::eExecutionSetupError;
+        return eExecutionSetupError;
     }
     
     if (m_private_state.GetValue() != eStateStopped)
     {
         errors.Printf ("RunThreadPlan called while the private state was not stopped.");
-        return lldb::eExecutionSetupError;
+        return eExecutionSetupError;
     }
     
     // Save this value for restoration of the execution context after we run
@@ -2854,7 +2854,7 @@
             if (!resume_error.Success())
             {
                 errors.Printf("Error resuming inferior: \"%s\".\n", resume_error.AsCString());
-                return_value = lldb::eExecutionSetupError;
+                return_value = eExecutionSetupError;
                 break;
             }
     
@@ -2869,7 +2869,7 @@
                     log->Printf("Didn't get any event after initial resume, exiting.");
 
                 errors.Printf("Didn't get any event after initial resume, exiting.");
-                return_value = lldb::eExecutionSetupError;
+                return_value = eExecutionSetupError;
                 break;
             }
             
@@ -2880,7 +2880,7 @@
                     log->Printf("Didn't get running event after initial resume, got %s instead.", StateAsCString(stop_state));
 
                 errors.Printf("Didn't get running event after initial resume, got %s instead.", StateAsCString(stop_state));
-                return_value = lldb::eExecutionSetupError;
+                return_value = eExecutionSetupError;
                 break;
             }
         
@@ -2930,12 +2930,12 @@
                     // Yay, we're done.
                     if (log)
                         log->Printf ("Execution completed successfully.");
-                    return_value = lldb::eExecutionCompleted;
+                    return_value = eExecutionCompleted;
                     break;
                 case lldb::eStateCrashed:
                     if (log)
                         log->Printf ("Execution crashed.");
-                    return_value = lldb::eExecutionInterrupted;
+                    return_value = eExecutionInterrupted;
                     break;
                 case lldb::eStateRunning:
                     do_resume = false;
@@ -2944,7 +2944,7 @@
                 default:
                     if (log)
                         log->Printf("Execution stopped with unexpected state: %s.", StateAsCString(stop_state));
-                    return_value = lldb::eExecutionInterrupted;
+                    return_value = eExecutionInterrupted;
                     break;
                 }
                 if (keep_going)
@@ -2956,7 +2956,7 @@
             {
                 if (log)
                     log->Printf ("got_event was true, but the event pointer was null.  How odd...");
-                return_value = lldb::eExecutionInterrupted;
+                return_value = eExecutionInterrupted;
                 break;
             }
         }
@@ -3019,7 +3019,7 @@
                             if (log)
                                 log->Printf ("Process::RunThreadPlan(): Even though we timed out, the call plan was done.  "
                                              "Exiting wait loop.");
-                            return_value = lldb::eExecutionCompleted;
+                            return_value = eExecutionCompleted;
                             break;
                         }
 
@@ -3027,7 +3027,7 @@
                         {
                             if (log)
                                 log->Printf ("try_all_threads was false, we stopped so now we're quitting.");
-                            return_value = lldb::eExecutionInterrupted;
+                            return_value = eExecutionInterrupted;
                             break;
                         }
                         
@@ -3046,7 +3046,7 @@
                             // Running all threads failed, so return Interrupted.
                             if (log)
                                 log->Printf("Process::RunThreadPlan(): running all threads timed out.");
-                            return_value = lldb::eExecutionInterrupted;
+                            return_value = eExecutionInterrupted;
                             break;
                         }
                     }
@@ -3055,7 +3055,7 @@
                 {   if (log)
                         log->Printf("Process::RunThreadPlan(): halt said it succeeded, but I got no event.  "
                                 "I'm getting out of here passing Interrupted.");
-                    return_value = lldb::eExecutionInterrupted;
+                    return_value = eExecutionInterrupted;
                     break;
                 }
             }
@@ -3075,7 +3075,7 @@
                     // This is not going anywhere, bag out.
                     if (log)
                         log->Printf ("Process::RunThreadPlan(): halt failed: and waiting for the stopped event failed.");
-                    return_value = lldb::eExecutionInterrupted;
+                    return_value = eExecutionInterrupted;
                     break;                
                 }
                 else
@@ -3093,7 +3093,7 @@
                             if (log)
                                 log->Printf ("Process::RunThreadPlan(): Even though we timed out, the call plan was done.  "
                                              "Exiting wait loop.");
-                            return_value = lldb::eExecutionCompleted;
+                            return_value = eExecutionCompleted;
                             break;
                         }
 
@@ -3112,7 +3112,7 @@
                             // Running all threads failed, so return Interrupted.
                             if (log)
                                 log->Printf("Process::RunThreadPlan(): running all threads timed out.");
-                            return_value = lldb::eExecutionInterrupted;
+                            return_value = eExecutionInterrupted;
                             break;
                         }
                     }
@@ -3120,7 +3120,7 @@
                     {
                         log->Printf ("Process::RunThreadPlan(): halt failed, I waited and didn't get"
                                      " a stopped event, instead got %s.", StateAsCString(stop_state));
-                        return_value = lldb::eExecutionInterrupted;
+                        return_value = eExecutionInterrupted;
                         break;                
                     }
                 }
@@ -3230,13 +3230,13 @@
         {
             if (log)
                 log->Printf("Process::RunThreadPlan(): thread plan is done");
-            return_value = lldb::eExecutionCompleted;
+            return_value = eExecutionCompleted;
         }
         else if (exe_ctx.thread->WasThreadPlanDiscarded (thread_plan_sp.get()))
         {
             if (log)
                 log->Printf("Process::RunThreadPlan(): thread plan was discarded");
-            return_value = lldb::eExecutionDiscarded;
+            return_value = eExecutionDiscarded;
         }
         else
         {
@@ -3279,19 +3279,19 @@
     
     switch (result)
     {
-        case lldb::eExecutionCompleted:
+        case eExecutionCompleted:
             result_name = "eExecutionCompleted";
             break;
-        case lldb::eExecutionDiscarded:
+        case eExecutionDiscarded:
             result_name = "eExecutionDiscarded";
             break;
-        case lldb::eExecutionInterrupted:
+        case eExecutionInterrupted:
             result_name = "eExecutionInterrupted";
             break;
-        case lldb::eExecutionSetupError:
+        case eExecutionSetupError:
             result_name = "eExecutionSetupError";
             break;
-        case lldb::eExecutionTimedOut:
+        case eExecutionTimedOut:
             result_name = "eExecutionTimedOut";
             break;
     }
@@ -3411,7 +3411,7 @@
                                                          const char *value,
                                                          const ConstString &instance_name,
                                                          const SettingEntry &entry,
-                                                         lldb::VarSetOperationType op,
+                                                         VarSetOperationType op,
                                                          Error &err,
                                                          bool pending)
 {
diff --git a/source/Target/Target.cpp b/source/Target/Target.cpp
index 8cc0a72..3dc1104 100644
--- a/source/Target/Target.cpp
+++ b/source/Target/Target.cpp
@@ -1314,7 +1314,7 @@
                                                const char *index_value,
                                                const char *value,
                                                const SettingEntry &entry,
-                                               const lldb::VarSetOperationType op,
+                                               const VarSetOperationType op,
                                                Error&err)
 {
     if (var_name == GetSettingNameForDefaultArch())
@@ -1357,10 +1357,7 @@
 ) :
     InstanceSettings (owner, name ? name : InstanceSettings::InvalidName().AsCString(), live_instance),
     m_expr_prefix_path (),
-    m_expr_prefix_contents (),
-    m_execution_level (eExecutionLevelAuto),
-    m_execution_mode (eExecutionModeAuto),
-    m_execution_os_type (eExecutionOSTypeAuto)
+    m_expr_prefix_contents ()
 {
     // CopyInstanceSettings is a pure virtual function in InstanceSettings; it therefore cannot be called
     // until the vtables for TargetInstanceSettings are properly set up, i.e. AFTER all the initializers.
@@ -1412,12 +1409,10 @@
                                                         const char *value,
                                                         const ConstString &instance_name,
                                                         const SettingEntry &entry,
-                                                        lldb::VarSetOperationType op,
+                                                        VarSetOperationType op,
                                                         Error &err,
                                                         bool pending)
 {
-    int new_enum = -1;
-
     if (var_name == GetSettingNameForExpressionPrefix ())
     {
         switch (op)
@@ -1426,7 +1421,7 @@
             err.SetErrorToGenericError ();
             err.SetErrorString ("Unrecognized operation. Cannot update value.\n");
             return;
-        case lldb::eVarSetOperationAssign:
+        case eVarSetOperationAssign:
             {
                 FileSpec file_spec(value, true);
                 
@@ -1450,34 +1445,16 @@
                 m_expr_prefix_contents.assign(reinterpret_cast<const char *>(data_sp->GetBytes()), data_sp->GetByteSize());
             }
             return;
-        case lldb::eVarSetOperationAppend:
+        case eVarSetOperationAppend:
             err.SetErrorToGenericError ();
             err.SetErrorString ("Cannot append to a path.\n");
             return;
-        case lldb::eVarSetOperationClear:
+        case eVarSetOperationClear:
             m_expr_prefix_path.clear ();
             m_expr_prefix_contents.clear ();
             return;
         }
     }
-    else if (var_name == GetSettingNameForExecutionLevel ())
-    {
-        UserSettingsController::UpdateEnumVariable (entry.enum_values, &new_enum, value, err);
-        if (err.Success())
-            m_execution_level = (ExecutionLevel)new_enum;
-    }
-    else if (var_name == GetSettingNameForExecutionMode ())
-    {
-        UserSettingsController::UpdateEnumVariable (entry.enum_values, &new_enum, value, err);
-        if (err.Success())
-            m_execution_mode = (ExecutionMode)new_enum;
-    }
-    else if (var_name == GetSettingNameForExecutionOSType ())
-    {
-        UserSettingsController::UpdateEnumVariable (entry.enum_values, &new_enum, value, err);
-        if (err.Success())
-            m_execution_os_type = (ExecutionOSType)new_enum;
-    }
 }
 
 void
@@ -1490,9 +1467,6 @@
     
     m_expr_prefix_path      = new_settings_ptr->m_expr_prefix_path;
     m_expr_prefix_contents  = new_settings_ptr->m_expr_prefix_contents;
-    m_execution_level       = new_settings_ptr->m_execution_level;
-    m_execution_mode        = new_settings_ptr->m_execution_mode;
-    m_execution_os_type     = new_settings_ptr->m_execution_os_type;
 }
 
 bool
@@ -1505,18 +1479,6 @@
     {
         value.AppendString (m_expr_prefix_path.c_str(), m_expr_prefix_path.size());
     }
-    else if (var_name == GetSettingNameForExecutionLevel ())
-    {
-        value.AppendString (UserSettingsController::EnumToString (entry.enum_values, m_execution_level));
-    }
-    else if (var_name == GetSettingNameForExecutionMode ())
-    {
-        value.AppendString (UserSettingsController::EnumToString (entry.enum_values, m_execution_mode));
-    }
-    else if (var_name == GetSettingNameForExecutionOSType ())
-    {
-        value.AppendString (UserSettingsController::EnumToString (entry.enum_values, m_execution_os_type));
-    }
     else 
     {
         if (err)
@@ -1553,45 +1515,11 @@
     { NULL              , eSetVarTypeNone   , NULL      , NULL, false, false, NULL }
 };
 
-static lldb::OptionEnumValueElement
-g_execution_level_enums[] =
-{
-    { eExecutionLevelAuto   , "auto"    , "Automatically detect the execution level (user/kernel)." },
-    { eExecutionLevelKernel , "kernel"  , "Treat executables as kernel executables." },
-    { eExecutionLevelUser   , "user"    , "Treat executables as user space executables." },
-    { 0                             , NULL      , NULL }
-};
-
-static lldb::OptionEnumValueElement
-g_execution_mode_enums[] =
-{
-    { eExecutionModeAuto    , "auto"    , "Automatically detect the execution mode (static/dynamic)." },
-    { eExecutionModeStatic  , "static"  , "All executables are static and addresses at the virtual addresses in the object files." },
-    { eExecutionModeDynamic , "dynamic" , "Executables and shared libraries are dynamically loaded.." },
-    { 0                             , NULL      , NULL }
-};
-
-static lldb::OptionEnumValueElement
-g_execution_os_enums[] =
-{
-    { eExecutionOSTypeAuto  , "auto"    , "Automatically detect the execution OS (none/halted/live)." },
-    { eExecutionOSTypeNone  , "none"    , "There is no operating system available (no processes or threads)." },
-    { eExecutionOSTypeHalted, "halted"  , "There is an operating system, but it is halted when the debugger is halted. "
-                                                  "Processes and threads must be discovered by accessing symbols and reading "
-                                                  "memory." },
-    { eExecutionOSTypeLive  , "live"    , "There is a live operating system with debug services that can be used to "
-                                                  "get processes, threads and theirs states." },
-    { 0, NULL, NULL }
-};
-
 SettingEntry
 Target::SettingsController::instance_settings_table[] =
 {
-    // var-name           var-type           default      enum-table                  init'd hidden help-text
-    // =================  ================== ===========  =========================   ====== ====== =========================================================================
-    { TSC_EXPR_PREFIX   , eSetVarTypeString , NULL      , NULL                      , false, false, "Path to a file containing expressions to be prepended to all expressions." },
-    { TSC_EXEC_LEVEL    , eSetVarTypeEnum   , "auto"    , g_execution_level_enums   , false, false, "Sets the execution level for a target." },
-    { TSC_EXEC_MODE     , eSetVarTypeEnum   , "auto"    , g_execution_mode_enums    , false, false, "Sets the execution mode for a target." },
-    { TSC_EXEC_OS_TYPE  , eSetVarTypeEnum   , "auto"    , g_execution_os_enums      , false, false, "Sets the execution OS for a target." },
-    {  NULL             , eSetVarTypeNone   , NULL      , NULL                      , false, false, NULL }
+    // var-name           var-type           default      enum  init'd hidden help-text
+    // =================  ================== ===========  ====  ====== ====== =========================================================================
+    { TSC_EXPR_PREFIX   , eSetVarTypeString , NULL      , NULL, false, false, "Path to a file containing expressions to be prepended to all expressions." },
+    { NULL              , eSetVarTypeNone   , NULL      , NULL, false, false, NULL }
 };
diff --git a/source/Target/Thread.cpp b/source/Target/Thread.cpp
index 6c1dc40..95685e9 100644
--- a/source/Target/Thread.cpp
+++ b/source/Target/Thread.cpp
@@ -1190,7 +1190,7 @@
                                                          const char *value,
                                                          const ConstString &instance_name,
                                                          const SettingEntry &entry,
-                                                         lldb::VarSetOperationType op,
+                                                         VarSetOperationType op,
                                                          Error &err,
                                                          bool pending)
 {
diff --git a/source/Target/ThreadList.cpp b/source/Target/ThreadList.cpp
index 3a54c57..408395a 100644
--- a/source/Target/ThreadList.cpp
+++ b/source/Target/ThreadList.cpp
@@ -263,7 +263,7 @@
         ThreadSP thread_sp(*pos);
         if (thread_sp->ThreadStoppedForAReason() && (thread_sp->GetResumeState () != eStateSuspended))
         {
-            const lldb::Vote vote = thread_sp->ShouldReportStop (event_ptr);
+            const Vote vote = thread_sp->ShouldReportStop (event_ptr);
             if (log)
                 log->Printf  ("%s thread 0x%4.4x: pc = 0x%16.16llx, vote = %s", 
                               __FUNCTION__,
diff --git a/source/Target/ThreadPlanStepOverRange.cpp b/source/Target/ThreadPlanStepOverRange.cpp
index c7bffb9..adade55 100644
--- a/source/Target/ThreadPlanStepOverRange.cpp
+++ b/source/Target/ThreadPlanStepOverRange.cpp
@@ -110,8 +110,8 @@
                                                        NULL, 
                                                        true, 
                                                        stop_others, 
-                                                       lldb::eVoteNo, 
-                                                       lldb::eVoteNoOpinion,
+                                                       eVoteNo, 
+                                                       eVoteNoOpinion,
                                                        0);
     }
     else if (!InSymbol())
diff --git a/source/lldb.cpp b/source/lldb.cpp
index f6a30ed..b6473c6 100644
--- a/source/lldb.cpp
+++ b/source/lldb.cpp
@@ -193,7 +193,7 @@
 }
 
 const char *
-lldb_private::GetVoteAsCString (lldb::Vote vote)
+lldb_private::GetVoteAsCString (Vote vote)
 {
     switch (vote)
     {
@@ -208,7 +208,7 @@
 
 
 const char *
-lldb_private::GetSectionTypeAsCString (lldb::SectionType sect_type)
+lldb_private::GetSectionTypeAsCString (SectionType sect_type)
 {
     switch (sect_type)
     {
@@ -247,7 +247,7 @@
 
 bool
 lldb_private::NameMatches (const char *name, 
-                           lldb::NameMatchType match_type, 
+                           NameMatchType match_type, 
                            const char *match)
 {
     if (match_type == eNameMatchIgnore)
