diff --git a/lldb/include/lldb/Core/Highlighter.h b/lldb/include/lldb/Core/Highlighter.h
index 58ecd37..fd3ac33 100644
--- a/lldb/include/lldb/Core/Highlighter.h
+++ b/lldb/include/lldb/Core/Highlighter.h
@@ -13,6 +13,7 @@
 #include <utility>
 #include <vector>
 
+#include "lldb/Core/PluginManager.h"
 #include "lldb/Utility/Stream.h"
 #include "lldb/lldb-enumerations.h"
 #include "llvm/ADT/StringRef.h"
@@ -88,7 +89,7 @@
 };
 
 /// Annotates source code with color attributes.
-class Highlighter {
+class Highlighter : public PluginInterface {
 public:
   Highlighter() = default;
   virtual ~Highlighter() = default;
@@ -122,23 +123,11 @@
                         llvm::StringRef previous_lines = "") const;
 };
 
-/// A default highlighter that only highlights the user cursor, but doesn't
-/// do any other highlighting.
-class DefaultHighlighter : public Highlighter {
-public:
-  llvm::StringRef GetName() const override { return "none"; }
-
-  void Highlight(const HighlightStyle &options, llvm::StringRef line,
-                 std::optional<size_t> cursor_pos,
-                 llvm::StringRef previous_lines, Stream &s) const override;
-};
-
 /// Manages the available highlighters.
 class HighlighterManager {
-  DefaultHighlighter m_default;
-
 public:
   /// Queries all known highlighter for one that can highlight some source code.
+  ///
   /// \param language_type
   ///     The language type that the caller thinks the source code was given in.
   /// \param path
@@ -149,9 +138,35 @@
   ///     empty highlighter that does nothing.
   const Highlighter &getHighlighterFor(lldb::LanguageType language_type,
                                        llvm::StringRef path) const;
-  const Highlighter &getDefaultHighlighter() const { return m_default; }
+
+private:
+  mutable std::mutex m_mutex;
+  mutable llvm::DenseMap<lldb::LanguageType, std::unique_ptr<Highlighter>>
+      m_highlighters;
 };
 
 } // namespace lldb_private
 
+namespace llvm {
+
+/// DenseMapInfo implementation.
+/// \{
+template <> struct DenseMapInfo<lldb::LanguageType> {
+  static inline lldb::LanguageType getEmptyKey() {
+    return lldb::eNumLanguageTypes;
+  }
+  static inline lldb::LanguageType getTombstoneKey() {
+    return lldb::eNumLanguageTypes;
+  }
+  static unsigned getHashValue(lldb::LanguageType language_type) {
+    return static_cast<unsigned>(language_type);
+  }
+  static bool isEqual(lldb::LanguageType LHS, lldb::LanguageType RHS) {
+    return LHS == RHS;
+  }
+};
+/// \}
+
+} // namespace llvm
+
 #endif // LLDB_CORE_HIGHLIGHTER_H
diff --git a/lldb/include/lldb/Core/PluginManager.h b/lldb/include/lldb/Core/PluginManager.h
index ab2ca58..4d116f5 100644
--- a/lldb/include/lldb/Core/PluginManager.h
+++ b/lldb/include/lldb/Core/PluginManager.h
@@ -620,6 +620,15 @@
 
   static LanguageSet GetREPLAllTypeSystemSupportedLanguages();
 
+  // Higlhighter
+  static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
+                             HighlighterCreateInstance create_callback);
+
+  static bool UnregisterPlugin(HighlighterCreateInstance create_callback);
+
+  static HighlighterCreateInstance
+  GetHighlighterCreateCallbackAtIndex(uint32_t idx);
+
   // Some plug-ins might register a DebuggerInitializeCallback callback when
   // registering the plug-in. After a new Debugger instance is created, this
   // DebuggerInitialize function will get called. This allows plug-ins to
diff --git a/lldb/include/lldb/Target/Language.h b/lldb/include/lldb/Target/Language.h
index d59ea9f..4b8d4ea 100644
--- a/lldb/include/lldb/Target/Language.h
+++ b/lldb/include/lldb/Target/Language.h
@@ -180,8 +180,6 @@
 
   virtual bool IsSourceFile(llvm::StringRef file_path) const = 0;
 
-  virtual const Highlighter *GetHighlighter() const { return nullptr; }
-
   virtual lldb::TypeCategoryImplSP GetFormatters();
 
   virtual HardcodedFormatters::HardcodedFormatFinder GetHardcodedFormats();
diff --git a/lldb/include/lldb/lldb-private-interfaces.h b/lldb/include/lldb/lldb-private-interfaces.h
index dbd81b0..a87e017 100644
--- a/lldb/include/lldb/lldb-private-interfaces.h
+++ b/lldb/include/lldb/lldb-private-interfaces.h
@@ -27,6 +27,7 @@
 namespace lldb_private {
 class ScriptedInterfaceUsages;
 struct ScriptedFrameProviderDescriptor;
+class Highlighter;
 typedef lldb::ABISP (*ABICreateInstance)(lldb::ProcessSP process_sp,
                                          const ArchSpec &arch);
 typedef std::unique_ptr<Architecture> (*ArchitectureCreateInstance)(
@@ -136,6 +137,8 @@
                                            const char *repl_options);
 typedef bool (*ScriptedInterfaceCreateInstance)(lldb::ScriptLanguage language,
                                                 ScriptedInterfaceUsages usages);
+
+typedef Highlighter *(*HighlighterCreateInstance)(lldb::LanguageType language);
 typedef int (*ComparisonFunction)(const void *, const void *);
 typedef void (*DebuggerInitializeCallback)(Debugger &debugger);
 /// Trace
diff --git a/lldb/source/Core/Highlighter.cpp b/lldb/source/Core/Highlighter.cpp
index f49b778..abb6d3f 100644
--- a/lldb/source/Core/Highlighter.cpp
+++ b/lldb/source/Core/Highlighter.cpp
@@ -26,30 +26,6 @@
   m_suffix = FormatAnsiTerminalCodes(suffix);
 }
 
-void DefaultHighlighter::Highlight(const HighlightStyle &options,
-                                   llvm::StringRef line,
-                                   std::optional<size_t> cursor_pos,
-                                   llvm::StringRef previous_lines,
-                                   Stream &s) const {
-  // If we don't have a valid cursor, then we just print the line as-is.
-  if (!cursor_pos || *cursor_pos >= line.size()) {
-    s << line;
-    return;
-  }
-
-  // If we have a valid cursor, we have to apply the 'selected' style around
-  // the character below the cursor.
-
-  // Split the line around the character which is below the cursor.
-  size_t column = *cursor_pos;
-  // Print the characters before the cursor.
-  s << line.substr(0, column);
-  // Print the selected character with the defined color codes.
-  options.selected.Apply(s, line.substr(column, 1));
-  // Print the rest of the line.
-  s << line.substr(column + 1U);
-}
-
 static HighlightStyle::ColorStyle GetColor(const char *c) {
   return HighlightStyle::ColorStyle(c, "${ansi.normal}");
 }
@@ -65,10 +41,27 @@
 const Highlighter &
 HighlighterManager::getHighlighterFor(lldb::LanguageType language_type,
                                       llvm::StringRef path) const {
-  Language *language = lldb_private::Language::FindPlugin(language_type, path);
-  if (language && language->GetHighlighter())
-    return *language->GetHighlighter();
-  return m_default;
+  // The language may be able to provide a language type based on the path.
+  if (Language *language =
+          lldb_private::Language::FindPlugin(language_type, path))
+    language_type = language->GetLanguageType();
+
+  std::lock_guard<std::mutex> guard(m_mutex);
+  auto it = m_highlighters.find(language_type);
+  if (it != m_highlighters.end())
+    return *it->second;
+
+  uint32_t idx = 0;
+  while (HighlighterCreateInstance create_instance =
+             PluginManager::GetHighlighterCreateCallbackAtIndex(idx++)) {
+    if (Highlighter *highlighter = create_instance(language_type))
+      m_highlighters.try_emplace(language_type,
+                                 std::unique_ptr<Highlighter>(highlighter));
+  }
+
+  assert(m_highlighters.contains(language_type) &&
+         "we should always find the default highlighter");
+  return *m_highlighters[language_type];
 }
 
 std::string Highlighter::Highlight(const HighlightStyle &options,
diff --git a/lldb/source/Core/PluginManager.cpp b/lldb/source/Core/PluginManager.cpp
index 835837e..64130d7 100644
--- a/lldb/source/Core/PluginManager.cpp
+++ b/lldb/source/Core/PluginManager.cpp
@@ -1985,6 +1985,39 @@
   return all;
 }
 
+#pragma mark Highlighter
+
+struct HighlighterInstance : public PluginInstance<HighlighterCreateInstance> {
+  HighlighterInstance(llvm::StringRef name, llvm::StringRef description,
+                      CallbackType create_callback)
+      : PluginInstance<HighlighterCreateInstance>(name, description,
+                                                  create_callback) {}
+};
+
+typedef PluginInstances<HighlighterInstance> HighlighterInstances;
+
+static HighlighterInstances &GetHighlighterInstances() {
+  static HighlighterInstances g_instances;
+  return g_instances;
+}
+
+bool PluginManager::RegisterPlugin(llvm::StringRef name,
+                                   llvm::StringRef description,
+                                   HighlighterCreateInstance create_callback) {
+  return GetHighlighterInstances().RegisterPlugin(name, description,
+                                                  create_callback);
+}
+
+bool PluginManager::UnregisterPlugin(
+    HighlighterCreateInstance create_callback) {
+  return GetHighlighterInstances().UnregisterPlugin(create_callback);
+}
+
+HighlighterCreateInstance
+PluginManager::GetHighlighterCreateCallbackAtIndex(uint32_t idx) {
+  return GetHighlighterInstances().GetCallbackAtIndex(idx);
+}
+
 #pragma mark PluginManager
 
 void PluginManager::DebuggerInitialize(Debugger &debugger) {
diff --git a/lldb/source/Plugins/CMakeLists.txt b/lldb/source/Plugins/CMakeLists.txt
index b6878b2..bfc3d5e 100644
--- a/lldb/source/Plugins/CMakeLists.txt
+++ b/lldb/source/Plugins/CMakeLists.txt
@@ -3,6 +3,7 @@
 add_subdirectory(Disassembler)
 add_subdirectory(DynamicLoader)
 add_subdirectory(ExpressionParser)
+add_subdirectory(Highlighter)
 add_subdirectory(Instruction)
 add_subdirectory(InstrumentationRuntime)
 add_subdirectory(JITLoader)
diff --git a/lldb/source/Plugins/Highlighter/CMakeLists.txt b/lldb/source/Plugins/Highlighter/CMakeLists.txt
new file mode 100644
index 0000000..8803386
--- /dev/null
+++ b/lldb/source/Plugins/Highlighter/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_subdirectory(Clang)
+add_subdirectory(Default)
diff --git a/lldb/source/Plugins/Language/ClangCommon/CMakeLists.txt b/lldb/source/Plugins/Highlighter/Clang/CMakeLists.txt
similarity index 65%
rename from lldb/source/Plugins/Language/ClangCommon/CMakeLists.txt
rename to lldb/source/Plugins/Highlighter/Clang/CMakeLists.txt
index 470dbc2..b723844 100644
--- a/lldb/source/Plugins/Language/ClangCommon/CMakeLists.txt
+++ b/lldb/source/Plugins/Highlighter/Clang/CMakeLists.txt
@@ -1,4 +1,4 @@
-add_lldb_library(lldbPluginClangCommon
+add_lldb_library(lldbPluginHighlighterClang PLUGIN
   ClangHighlighter.cpp
 
   LINK_COMPONENTS
diff --git a/lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp b/lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.cpp
similarity index 93%
rename from lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp
rename to lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.cpp
index 9cb5ea3..7480d9d 100644
--- a/lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp
+++ b/lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.cpp
@@ -8,6 +8,7 @@
 
 #include "ClangHighlighter.h"
 
+#include "lldb/Core/PluginManager.h"
 #include "lldb/Host/FileSystem.h"
 #include "lldb/Target/Language.h"
 #include "lldb/Utility/AnsiTerminal.h"
@@ -20,6 +21,8 @@
 #include "llvm/Support/MemoryBuffer.h"
 #include <optional>
 
+LLDB_PLUGIN_DEFINE_ADV(ClangHighlighter, HighlighterClang)
+
 using namespace lldb_private;
 
 bool ClangHighlighter::isKeyword(llvm::StringRef token) const {
@@ -255,3 +258,18 @@
     assert(false && "We couldn't find the user line in the input file?");
   }
 }
+
+Highlighter *ClangHighlighter::CreateInstance(lldb::LanguageType language) {
+  if (Language::LanguageIsCFamily(language))
+    return new ClangHighlighter();
+  return nullptr;
+}
+
+void ClangHighlighter::Initialize() {
+  PluginManager::RegisterPlugin(GetPluginNameStatic(), GetPluginNameStatic(),
+                                CreateInstance);
+}
+
+void ClangHighlighter::Terminate() {
+  PluginManager::UnregisterPlugin(CreateInstance);
+}
diff --git a/lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.h b/lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.h
similarity index 72%
rename from lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.h
rename to lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.h
index 20bb095..51a0461 100644
--- a/lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.h
+++ b/lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.h
@@ -6,8 +6,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLDB_SOURCE_PLUGINS_LANGUAGE_CLANGCOMMON_CLANGHIGHLIGHTER_H
-#define LLDB_SOURCE_PLUGINS_LANGUAGE_CLANGCOMMON_CLANGHIGHLIGHTER_H
+#ifndef LLDB_SOURCE_PLUGINS_HIGHLIGHTER_CLANGHIGHLIGHTER_H
+#define LLDB_SOURCE_PLUGINS_HIGHLIGHTER_CLANGHIGHLIGHTER_H
 
 #include "lldb/Utility/Stream.h"
 #include "llvm/ADT/StringSet.h"
@@ -31,8 +31,16 @@
   /// Returns true if the given string represents a keywords in any Clang
   /// supported language.
   bool isKeyword(llvm::StringRef token) const;
+
+  static Highlighter *CreateInstance(lldb::LanguageType language);
+
+  static void Terminate();
+  static void Initialize();
+
+  static llvm::StringRef GetPluginNameStatic() { return "Clang Highlighter"; }
+  llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
 };
 
 } // namespace lldb_private
 
-#endif // LLDB_SOURCE_PLUGINS_LANGUAGE_CLANGCOMMON_CLANGHIGHLIGHTER_H
+#endif
diff --git a/lldb/source/Plugins/Highlighter/Default/CMakeLists.txt b/lldb/source/Plugins/Highlighter/Default/CMakeLists.txt
new file mode 100644
index 0000000..31bbfdc
--- /dev/null
+++ b/lldb/source/Plugins/Highlighter/Default/CMakeLists.txt
@@ -0,0 +1,9 @@
+add_lldb_library(lldbPluginHighlighterDefault PLUGIN
+  DefaultHighlighter.cpp
+
+  LINK_COMPONENTS
+    Support
+  LINK_LIBS
+    lldbCore
+    lldbUtility
+)
diff --git a/lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.cpp b/lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.cpp
new file mode 100644
index 0000000..baef8f6
--- /dev/null
+++ b/lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.cpp
@@ -0,0 +1,50 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "DefaultHighlighter.h"
+
+LLDB_PLUGIN_DEFINE_ADV(DefaultHighlighter, HighlighterDefault)
+
+using namespace lldb_private;
+
+void DefaultHighlighter::Highlight(const HighlightStyle &options,
+                                   llvm::StringRef line,
+                                   std::optional<size_t> cursor_pos,
+                                   llvm::StringRef previous_lines,
+                                   Stream &s) const {
+  // If we don't have a valid cursor, then we just print the line as-is.
+  if (!cursor_pos || *cursor_pos >= line.size()) {
+    s << line;
+    return;
+  }
+
+  // If we have a valid cursor, we have to apply the 'selected' style around
+  // the character below the cursor.
+
+  // Split the line around the character which is below the cursor.
+  size_t column = *cursor_pos;
+  // Print the characters before the cursor.
+  s << line.substr(0, column);
+  // Print the selected character with the defined color codes.
+  options.selected.Apply(s, line.substr(column, 1));
+  // Print the rest of the line.
+  s << line.substr(column + 1U);
+}
+
+Highlighter *DefaultHighlighter::CreateInstance(lldb::LanguageType language) {
+  return new DefaultHighlighter();
+}
+
+void DefaultHighlighter::Initialize() {
+  PluginManager::RegisterPlugin(GetPluginNameStatic(), GetPluginNameStatic(),
+                                CreateInstance);
+}
+
+void DefaultHighlighter::Terminate() {
+  PluginManager::UnregisterPlugin(CreateInstance);
+}
diff --git a/lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.h b/lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.h
new file mode 100644
index 0000000..ad8776a
--- /dev/null
+++ b/lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.h
@@ -0,0 +1,37 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SOURCE_PLUGINS_HIGHLIGHTER_DEFAULTHIGHLIGHTER_H
+#define LLDB_SOURCE_PLUGINS_HIGHLIGHTER_DEFAULTHIGHLIGHTER_H
+
+#include "lldb/Core/Highlighter.h"
+
+namespace lldb_private {
+
+/// A default highlighter that only highlights the user cursor, but doesn't
+/// do any other highlighting.
+class DefaultHighlighter : public Highlighter {
+public:
+  llvm::StringRef GetName() const override { return "none"; }
+
+  void Highlight(const HighlightStyle &options, llvm::StringRef line,
+                 std::optional<size_t> cursor_pos,
+                 llvm::StringRef previous_lines, Stream &s) const override;
+
+  static Highlighter *CreateInstance(lldb::LanguageType language);
+
+  static void Terminate();
+  static void Initialize();
+
+  static llvm::StringRef GetPluginNameStatic() { return "Default Highlighter"; }
+  llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
+};
+
+} // namespace lldb_private
+
+#endif
diff --git a/lldb/source/Plugins/Language/CMakeLists.txt b/lldb/source/Plugins/Language/CMakeLists.txt
index b432dd3..6367ab9 100644
--- a/lldb/source/Plugins/Language/CMakeLists.txt
+++ b/lldb/source/Plugins/Language/CMakeLists.txt
@@ -4,7 +4,6 @@
   TypeSystem
 )
 
-add_subdirectory(ClangCommon)
 add_subdirectory(CPlusPlus)
 add_subdirectory(ObjC)
 add_subdirectory(ObjCPlusPlus)
diff --git a/lldb/source/Plugins/Language/CPlusPlus/CMakeLists.txt b/lldb/source/Plugins/Language/CPlusPlus/CMakeLists.txt
index 79c0cc1..08b3490 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/CMakeLists.txt
+++ b/lldb/source/Plugins/Language/CPlusPlus/CMakeLists.txt
@@ -56,7 +56,6 @@
     lldbTarget
     lldbUtility
     lldbValueObject
-    lldbPluginClangCommon
     lldbPluginCPPRuntime
     lldbPluginTypeSystemClang
 )
diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h
index b547234..53fae3f 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h
+++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h
@@ -14,7 +14,6 @@
 
 #include "llvm/ADT/StringRef.h"
 
-#include "Plugins/Language/ClangCommon/ClangHighlighter.h"
 #include "lldb/Target/Language.h"
 #include "lldb/Utility/ConstString.h"
 #include "lldb/lldb-private.h"
@@ -22,8 +21,6 @@
 namespace lldb_private {
 
 class CPlusPlusLanguage : public Language {
-  ClangHighlighter m_highlighter;
-
 public:
   class CxxMethodName : public Language::MethodName {
   public:
@@ -81,8 +78,6 @@
 
   bool IsSourceFile(llvm::StringRef file_path) const override;
 
-  const Highlighter *GetHighlighter() const override { return &m_highlighter; }
-
   // Static Functions
   static void Initialize();
 
diff --git a/lldb/source/Plugins/Language/ObjC/CMakeLists.txt b/lldb/source/Plugins/Language/ObjC/CMakeLists.txt
index b9fc5ce..5e554b2 100644
--- a/lldb/source/Plugins/Language/ObjC/CMakeLists.txt
+++ b/lldb/source/Plugins/Language/ObjC/CMakeLists.txt
@@ -22,7 +22,6 @@
     lldbUtility
     lldbValueObject
     lldbPluginAppleObjCRuntime
-    lldbPluginClangCommon
     lldbPluginTypeSystemClang
   CLANG_LIBS
     clangAST
diff --git a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.h b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.h
index ced6bd3..cee80ed 100644
--- a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.h
+++ b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.h
@@ -12,7 +12,6 @@
 #include <cstring>
 #include <vector>
 
-#include "Plugins/Language/ClangCommon/ClangHighlighter.h"
 #include "lldb/Target/Language.h"
 #include "lldb/Utility/ConstString.h"
 #include "lldb/lldb-private.h"
@@ -20,8 +19,6 @@
 namespace lldb_private {
 
 class ObjCLanguage : public Language {
-  ClangHighlighter m_highlighter;
-
 public:
   class ObjCMethodName {
   public:
@@ -164,8 +161,6 @@
 
   bool IsSourceFile(llvm::StringRef file_path) const override;
 
-  const Highlighter *GetHighlighter() const override { return &m_highlighter; }
-
   // Static Functions
   static void Initialize();
 
diff --git a/lldb/source/Plugins/Language/ObjCPlusPlus/CMakeLists.txt b/lldb/source/Plugins/Language/ObjCPlusPlus/CMakeLists.txt
index 1aa5cc1..3f7249e 100644
--- a/lldb/source/Plugins/Language/ObjCPlusPlus/CMakeLists.txt
+++ b/lldb/source/Plugins/Language/ObjCPlusPlus/CMakeLists.txt
@@ -4,5 +4,4 @@
   LINK_LIBS
     lldbCore
     lldbTarget
-    lldbPluginClangCommon
 )
diff --git a/lldb/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h b/lldb/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h
index 229dffe..ab45acd 100644
--- a/lldb/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h
+++ b/lldb/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h
@@ -9,15 +9,12 @@
 #ifndef LLDB_SOURCE_PLUGINS_LANGUAGE_OBJCPLUSPLUS_OBJCPLUSPLUSLANGUAGE_H
 #define LLDB_SOURCE_PLUGINS_LANGUAGE_OBJCPLUSPLUS_OBJCPLUSPLUSLANGUAGE_H
 
-#include "Plugins/Language/ClangCommon/ClangHighlighter.h"
 #include "lldb/Target/Language.h"
 #include "lldb/lldb-private.h"
 
 namespace lldb_private {
 
 class ObjCPlusPlusLanguage : public Language {
-  ClangHighlighter m_highlighter;
-
 public:
   ObjCPlusPlusLanguage() = default;
 
@@ -33,8 +30,6 @@
 
   bool IsSourceFile(llvm::StringRef file_path) const override;
 
-  const Highlighter *GetHighlighter() const override { return &m_highlighter; }
-
   // Static Functions
   static void Initialize();
 
diff --git a/lldb/source/Plugins/REPL/Clang/CMakeLists.txt b/lldb/source/Plugins/REPL/Clang/CMakeLists.txt
index 3a7e188..c020ab8 100644
--- a/lldb/source/Plugins/REPL/Clang/CMakeLists.txt
+++ b/lldb/source/Plugins/REPL/Clang/CMakeLists.txt
@@ -10,7 +10,6 @@
     lldbSymbol
     lldbTarget
     lldbUtility
-    lldbPluginClangCommon
     lldbPluginCPPRuntime
     lldbPluginTypeSystemClang
 )
diff --git a/lldb/unittests/CMakeLists.txt b/lldb/unittests/CMakeLists.txt
index 194dd42..76d8b73 100644
--- a/lldb/unittests/CMakeLists.txt
+++ b/lldb/unittests/CMakeLists.txt
@@ -64,6 +64,7 @@
 add_subdirectory(Disassembler)
 add_subdirectory(Editline)
 add_subdirectory(Expression)
+add_subdirectory(Highlighter)
 add_subdirectory(Host)
 add_subdirectory(Instruction)
 add_subdirectory(Interpreter)
diff --git a/lldb/unittests/Language/Highlighting/CMakeLists.txt b/lldb/unittests/Highlighter/CMakeLists.txt
similarity index 71%
rename from lldb/unittests/Language/Highlighting/CMakeLists.txt
rename to lldb/unittests/Highlighter/CMakeLists.txt
index 576f8df..255f7bc 100644
--- a/lldb/unittests/Language/Highlighting/CMakeLists.txt
+++ b/lldb/unittests/Highlighter/CMakeLists.txt
@@ -2,7 +2,9 @@
   HighlighterTest.cpp
 
   LINK_LIBS
+    lldbPluginHighlighterDefault
+    lldbPluginHighlighterClang
     lldbPluginCPlusPlusLanguage
     lldbPluginObjCLanguage
     lldbPluginObjCPlusPlusLanguage
-  )
+)
diff --git a/lldb/unittests/Language/Highlighting/HighlighterTest.cpp b/lldb/unittests/Highlighter/HighlighterTest.cpp
similarity index 95%
rename from lldb/unittests/Language/Highlighting/HighlighterTest.cpp
rename to lldb/unittests/Highlighter/HighlighterTest.cpp
index 150b356..6c0c569 100644
--- a/lldb/unittests/Language/Highlighting/HighlighterTest.cpp
+++ b/lldb/unittests/Highlighter/HighlighterTest.cpp
@@ -8,12 +8,14 @@
 
 #include "gtest/gtest.h"
 
-#include "lldb/Core/Highlighter.h"
-#include "lldb/Host/FileSystem.h"
-
+#include "Plugins/Highlighter/Clang/ClangHighlighter.h"
+#include "Plugins/Highlighter/Default/DefaultHighlighter.h"
 #include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h"
 #include "Plugins/Language/ObjC/ObjCLanguage.h"
 #include "Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h"
+#include "lldb/Core/Highlighter.h"
+#include "lldb/Host/FileSystem.h"
+
 #include "TestingSupport/SubsystemRAII.h"
 #include <optional>
 
@@ -21,8 +23,10 @@
 
 namespace {
 class HighlighterTest : public testing::Test {
-  SubsystemRAII<FileSystem, CPlusPlusLanguage, ObjCLanguage,
-                ObjCPlusPlusLanguage>
+  // We need the language plugins for detecting the language based on the
+  // filename.
+  SubsystemRAII<FileSystem, ClangHighlighter, DefaultHighlighter,
+                CPlusPlusLanguage, ObjCLanguage, ObjCPlusPlusLanguage>
       subsystems;
 };
 } // namespace
@@ -88,7 +92,8 @@
 highlightDefault(llvm::StringRef code, HighlightStyle style,
                  std::optional<size_t> cursor = std::optional<size_t>()) {
   HighlighterManager mgr;
-  return mgr.getDefaultHighlighter().Highlight(style, code, cursor);
+  return mgr.getHighlighterFor(lldb::LanguageType::eLanguageTypeUnknown, "")
+      .Highlight(style, code, cursor);
 }
 
 TEST_F(HighlighterTest, DefaultHighlighter) {
diff --git a/lldb/unittests/Language/CMakeLists.txt b/lldb/unittests/Language/CMakeLists.txt
index 6f17356..a0bdc62 100644
--- a/lldb/unittests/Language/CMakeLists.txt
+++ b/lldb/unittests/Language/CMakeLists.txt
@@ -1,4 +1,3 @@
 add_subdirectory(CPlusPlus)
 add_subdirectory(CLanguages)
-add_subdirectory(Highlighting)
 add_subdirectory(ObjC)
