diff --git a/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.addin b/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.addin
index c7143dbb8d..42f941260f 100644
--- a/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.addin
+++ b/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.addin
@@ -149,4 +149,8 @@
+
+
+
+
diff --git a/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj b/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj
index ab07982060..147c39d4e5 100644
--- a/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj
+++ b/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj
@@ -111,6 +111,7 @@
Code
+
diff --git a/src/AddIns/Debugger/Debugger.AddIn/Pads/ClassBrowserSupport.cs b/src/AddIns/Debugger/Debugger.AddIn/Pads/ClassBrowserSupport.cs
new file mode 100644
index 0000000000..d4b76afdaf
--- /dev/null
+++ b/src/AddIns/Debugger/Debugger.AddIn/Pads/ClassBrowserSupport.cs
@@ -0,0 +1,149 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.IO;
+using Debugger;
+using ICSharpCode.NRefactory;
+using ICSharpCode.NRefactory.TypeSystem;
+using ICSharpCode.SharpDevelop.Dom;
+using ICSharpCode.SharpDevelop.Dom.ClassBrowser;
+using System.Linq;
+
+namespace ICSharpCode.SharpDevelop.Gui.Pads
+{
+ ///
+ /// Description of ClassBrowserSupport.
+ ///
+ public static class ClassBrowserSupport
+ {
+ public static void Attach(Debugger.Process process)
+ {
+ var classBrowser = SD.GetService();
+ classBrowser.SpecialNodes.Add(new DebuggerProcessTreeNode(process));
+ }
+
+ public static void Detach(Debugger.Process process)
+ {
+ var classBrowser = SD.GetService();
+ var nodes = classBrowser.SpecialNodes
+ .Where(n => n.Model == process)
+ .ToArray();
+ foreach (var node in nodes) {
+ classBrowser.SpecialNodes.Remove(node);
+ }
+ }
+ }
+
+ class DebuggerTreeNodesFactory : ITreeNodeFactory
+ {
+ public Type GetSupportedType(object model)
+ {
+ if (model is Debugger.Process)
+ return typeof(Debugger.Process);
+ if (model is Debugger.Module)
+ return typeof(Debugger.Module);
+ return null;
+ }
+
+ public ICSharpCode.TreeView.SharpTreeNode CreateTreeNode(object model)
+ {
+ if (model is Debugger.Process)
+ return new DebuggerProcessTreeNode((Debugger.Process)model);
+ if (model is Debugger.Module)
+ return new DebuggerModuleTreeNode((Debugger.Module)model);
+ return null;
+ }
+ }
+
+ class DebuggerProcessTreeNode : ModelCollectionTreeNode
+ {
+ Debugger.Process process;
+ IMutableModelCollection modules;
+
+ public DebuggerProcessTreeNode(Debugger.Process process)
+ {
+ if (process == null)
+ throw new ArgumentNullException("process");
+ this.process = process;
+ this.modules = new SimpleModelCollection(this.process.Modules);
+ this.process.ModuleLoaded += ModuleLoaded;
+ this.process.ModuleUnloaded += ModuleUnloaded;
+ }
+
+ void ModuleLoaded(object sender, ModuleEventArgs e)
+ {
+ modules.Add(e.Module);
+ }
+
+ void ModuleUnloaded(object sender, ModuleEventArgs e)
+ {
+ modules.Remove(e.Module);
+ }
+
+ protected override object GetModel()
+ {
+ return process;
+ }
+
+ protected override IModelCollection