Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 55882)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 55883)
@@ -17164,5 +17164,5 @@
   <interface
     name="IMachineDebugger" extends="$unknown"
-    uuid="5e4534dc-21b8-4f6b-8a08-eef50e1a0aa1"
+    uuid="b08d5aa9-4e35-3a17-2e4d-61948b590989"
     wsmap="managed"
     >
@@ -17345,4 +17345,21 @@
       <param name="bytes" type="octet" safearray="yes" dir="in">
         <desc>The bytes to write.</desc>
+      </param>
+    </method>
+
+    <method name="loadPlugIn">
+      <desc> Loads a DBGF plug-in. </desc>
+      <param name="name" type="wstring" dir="in">
+        <desc>The plug-in name or DLL. Special name 'all' loads all installed plug-ins.</desc>
+      </param>
+      <param name="plugInName" type="wstring" dir="return">
+        <desc>The name of the loaded plug-in.</desc>
+      </param>
+    </method>
+
+    <method name="unloadPlugIn">
+      <desc>Unloads a DBGF plug-in.</desc>
+      <param name="name" type="wstring" dir="in">
+        <desc>The plug-in name or DLL. Special name 'all' unloads all plug-ins.</desc>
       </param>
     </method>
Index: /trunk/src/VBox/Main/include/MachineDebuggerImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineDebuggerImpl.h	(revision 55882)
+++ /trunk/src/VBox/Main/include/MachineDebuggerImpl.h	(revision 55883)
@@ -1,11 +1,9 @@
 /* $Id$ */
-
 /** @file
- *
  * VirtualBox COM class implementation
  */
 
 /*
- * Copyright (C) 2006-2012 Oracle Corporation
+ * Copyright (C) 2006-2015 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -105,4 +103,7 @@
                                ULONG aSize,
                                const std::vector<BYTE> &aBytes);
+    HRESULT loadPlugIn(const com::Utf8Str &aName,
+                       com::Utf8Str &aPlugInName);
+    HRESULT unloadPlugIn(const com::Utf8Str &aName);
     HRESULT detectOS(com::Utf8Str &aOs);
     HRESULT getRegister(ULONG aCpuId,
Index: /trunk/src/VBox/Main/src-client/MachineDebuggerImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/MachineDebuggerImpl.cpp	(revision 55882)
+++ /trunk/src/VBox/Main/src-client/MachineDebuggerImpl.cpp	(revision 55883)
@@ -1069,10 +1069,8 @@
 }
 
-HRESULT MachineDebugger::detectOS(com::Utf8Str &aOs)
-{
-    LogFlowThisFunc(("\n"));
-
+HRESULT MachineDebugger::loadPlugIn(const com::Utf8Str &aName, com::Utf8Str &aPlugInName)
+{
     /*
-     * Do the autocaller and lock bits.
+     * Lock the debugger and get the VM pointer
      */
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
@@ -1084,5 +1082,90 @@
          * Do the job and try convert the name.
          */
-/** @todo automatically load the DBGC plugins or this is a waste of time. */
+        if (aName.equals("all"))
+        {
+            DBGFR3PlugInLoadAll(ptrVM.rawUVM());
+            try
+            {
+                aPlugInName = "all";
+                hrc = S_OK;
+            }
+            catch (std::bad_alloc)
+            {
+                hrc = E_OUTOFMEMORY;
+            }
+        }
+        else
+        {
+            RTERRINFOSTATIC ErrInfo;
+            char            szName[80];
+            int vrc = DBGFR3PlugInLoad(ptrVM.rawUVM(), aName.c_str(), szName, sizeof(szName), RTErrInfoInitStatic(&ErrInfo));
+            if (RT_SUCCESS(vrc))
+            {
+                try
+                {
+                    aPlugInName = "all";
+                    hrc = S_OK;
+                }
+                catch (std::bad_alloc)
+                {
+                    hrc = E_OUTOFMEMORY;
+                }
+            }
+            else
+                hrc = setErrorVrc(vrc, "%s", ErrInfo.szMsg);
+        }
+    }
+    return hrc;
+
+}
+
+HRESULT MachineDebugger::unloadPlugIn(const com::Utf8Str &aName)
+{
+    /*
+     * Lock the debugger and get the VM pointer
+     */
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+    Console::SafeVMPtr ptrVM(mParent);
+    HRESULT hrc = ptrVM.rc();
+    if (SUCCEEDED(hrc))
+    {
+        /*
+         * Do the job and try convert the name.
+         */
+        if (aName.equals("all"))
+        {
+            DBGFR3PlugInUnloadAll(ptrVM.rawUVM());
+            hrc = S_OK;
+        }
+        else
+        {
+            int vrc = DBGFR3PlugInUnload(ptrVM.rawUVM(), aName.c_str());
+            if (RT_SUCCESS(vrc))
+                hrc = S_OK;
+            else if (vrc == VERR_NOT_FOUND)
+                hrc = setErrorBoth(E_FAIL, vrc, "Plug-in '%s' was not found", aName.c_str());
+            else
+                hrc = setErrorVrc(vrc, "Error unloading '%s': %Rrc", aName.c_str(), vrc);
+        }
+    }
+    return hrc;
+
+}
+
+HRESULT MachineDebugger::detectOS(com::Utf8Str &aOs)
+{
+    LogFlowThisFunc(("\n"));
+
+    /*
+     * Lock the debugger and get the VM pointer
+     */
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+    Console::SafeVMPtr ptrVM(mParent);
+    HRESULT hrc = ptrVM.rc();
+    if (SUCCEEDED(hrc))
+    {
+        /*
+         * Do the job.
+         */
         char szName[64];
         int vrc = DBGFR3OSDetect(ptrVM.rawUVM(), szName, sizeof(szName));
@@ -1091,6 +1174,5 @@
             try
             {
-                Bstr bstrName(szName);
-                aOs = Utf8Str(bstrName);
+                aOs = szName;
             }
             catch (std::bad_alloc)
