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"},
