Index: /trunk/src/VBox/Main/ExtPackManagerImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/ExtPackManagerImpl.cpp	(revision 33764)
+++ /trunk/src/VBox/Main/ExtPackManagerImpl.cpp	(revision 33765)
@@ -833,4 +833,7 @@
 HRESULT ExtPackManager::init(const char *a_pszDropZoneDir, bool a_fCheckDropZone)
 {
+    AutoInitSpan autoInitSpan(this);
+    AssertReturn(autoInitSpan.isOk(), E_FAIL);
+
     /*
      * Figure some stuff out before creating the instance data.
@@ -863,37 +866,39 @@
      * that exceed the max name length in RTDIRENTRYEX.
      */
+    HRESULT hrc = S_OK;
     PRTDIR pDir;
     int vrc = RTDirOpen(&pDir, szBaseDir);
-    if (RT_FAILURE(vrc))
-        return S_OK;
-    HRESULT hrc = S_OK;
-    for (;;)
-    {
-        RTDIRENTRYEX Entry;
-        vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
-        if (RT_FAILURE(vrc))
-        {
-            AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc));
-            break;
-        }
-        if (   RTFS_IS_DIRECTORY(Entry.Info.Attr.fMode)
-            && strcmp(Entry.szName, ".")  != 0
-            && strcmp(Entry.szName, "..") != 0 )
-        {
-            /*
-             * All directories are extensions, the shall be nothing but
-             * extensions in this subdirectory.
-             */
-            ComObjPtr<ExtPack> NewExtPack;
-            HRESULT hrc2 = NewExtPack.createObject();
-            if (SUCCEEDED(hrc2))
-                hrc2 = NewExtPack->init(Entry.szName, szBaseDir);
-            if (SUCCEEDED(hrc2))
-                m->llInstalledExtPacks.push_back(NewExtPack);
-            else if (SUCCEEDED(rc))
-                hrc = hrc2;
-        }
-    }
-    RTDirClose(pDir);
+    if (RT_SUCCESS(vrc))
+    {
+        for (;;)
+        {
+            RTDIRENTRYEX Entry;
+            vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
+            if (RT_FAILURE(vrc))
+            {
+                AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc));
+                break;
+            }
+            if (   RTFS_IS_DIRECTORY(Entry.Info.Attr.fMode)
+                && strcmp(Entry.szName, ".")  != 0
+                && strcmp(Entry.szName, "..") != 0 )
+            {
+                /*
+                 * All directories are extensions, the shall be nothing but
+                 * extensions in this subdirectory.
+                 */
+                ComObjPtr<ExtPack> NewExtPack;
+                HRESULT hrc2 = NewExtPack.createObject();
+                if (SUCCEEDED(hrc2))
+                    hrc2 = NewExtPack->init(Entry.szName, szBaseDir);
+                if (SUCCEEDED(hrc2))
+                    m->llInstalledExtPacks.push_back(NewExtPack);
+                else if (SUCCEEDED(rc))
+                    hrc = hrc2;
+            }
+        }
+        RTDirClose(pDir);
+    }
+    /* else: ignore, the directory probably does not exist or something. */
 
     /*
@@ -903,4 +908,6 @@
         processDropZone();
 
+    if (SUCCEEDED(hrc))
+        autoInitSpan.setSucceeded();
     return hrc;
 }
Index: /trunk/src/VBox/Main/VirtualBoxImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/VirtualBoxImpl.cpp	(revision 33764)
+++ /trunk/src/VBox/Main/VirtualBoxImpl.cpp	(revision 33765)
@@ -64,7 +64,10 @@
 #include "DHCPServerImpl.h"
 #ifdef VBOX_WITH_RESOURCE_USAGE_API
-#include "PerformanceImpl.h"
+# include "PerformanceImpl.h"
 #endif /* VBOX_WITH_RESOURCE_USAGE_API */
 #include "EventImpl.h"
+#ifdef VBOX_WITH_EXTPACK
+# include "ExtPackManagerImpl.h"
+#endif
 
 #include "AutoCaller.h"
@@ -320,4 +323,9 @@
     EventQueue * const                  pAsyncEventQ;
     const ComObjPtr<EventSource>        pEventSource;
+
+#ifdef VBOX_WITH_EXTPACK
+    /** The extension pack manager object lives here. */
+    const ComObjPtr<ExtPackManager>     ptrExtPackManager;
+#endif
 };
 
@@ -490,4 +498,14 @@
             rc = m->pEventSource->init(static_cast<IVirtualBox*>(this));
         if (FAILED(rc)) throw rc;
+
+#ifdef VBOX_WITH_EXTPACK
+        /* extension manager */
+        rc = unconst(m->ptrExtPackManager).createObject();
+        if (SUCCEEDED(rc))
+            /** @todo Define drop zone location. */
+            rc = m->ptrExtPackManager->init(NULL /*a_pszDropZoneDir*/, false /*a_fCheckDropZone*/);
+        if (FAILED(rc))
+            throw rc;
+#endif
     }
     catch (HRESULT err)
@@ -1055,4 +1073,24 @@
 
     return S_OK;
+}
+
+STDMETHODIMP
+VirtualBox::COMGETTER(ExtensionPackManager)(IExtPackManager **aExtPackManager)
+{
+    CheckComArgOutPointerValid(aExtPackManager);
+
+    AutoCaller autoCaller(this);
+    HRESULT hrc = autoCaller.rc();
+    if (SUCCEEDED(hrc))
+    {
+#ifdef VBOX_WITH_EXTPACK
+        /* The extension pack manager is const, no need to lock. */
+        hrc = m->ptrExtPackManager.queryInterfaceTo(aExtPackManager);
+#else
+        hrc = E_NOTIMPL;
+#endif
+    }
+
+    return hrc;
 }
 
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 33764)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 33765)
@@ -1375,5 +1375,5 @@
   <interface
     name="IVirtualBox" extends="$unknown"
-    uuid="b59d8e0a-9aeb-4196-a5e9-398970ddbae5"
+    uuid="e03d6527-9b72-43b5-b87f-88f1033d3866"
     wsmap="managed"
   >
@@ -1505,5 +1505,5 @@
     <attribute name="DHCPServers" type="IDHCPServer" safearray="yes" readonly="yes">
       <desc>
-        dhcp server settings.
+        DHCP servers.
       </desc>
     </attribute>
@@ -1514,4 +1514,11 @@
       </desc>
     </attribute>
+
+    <attribute name="extensionPackManager" type="IExtPackManager" readonly="yes">
+      <desc>
+        The extension pack manager.
+      </desc>
+    </attribute>
+
 
     <method name="composeMachineFilename">
@@ -14001,5 +14008,5 @@
   <interface
     name="IExtPack" extends="$unknown"
-    uuid="1b69431b-b22f-454a-977d-7d50986defcb"
+    uuid="ab26b24e-d46c-4d09-aa44-e5092d2fe9ae"
     wsmap="suppress"
     >
@@ -14011,4 +14018,7 @@
     <attribute name="name" type="wstring" readonly="yes">
       <desc>The extension pack name.  This is unique.</desc>
+    </attribute>
+    <attribute name="description" type="wstring" readonly="yes">
+      <desc>The extension pack description.</desc>
     </attribute>
     <attribute name="version" type="wstring" readonly="yes">
Index: /trunk/src/VBox/Main/include/VirtualBoxImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/VirtualBoxImpl.h	(revision 33764)
+++ /trunk/src/VBox/Main/include/VirtualBoxImpl.h	(revision 33765)
@@ -120,4 +120,5 @@
     STDMETHOD(COMGETTER(DHCPServers))           (ComSafeArrayOut(IDHCPServer *, aDHCPServers));
     STDMETHOD(COMGETTER(EventSource))           (IEventSource ** aEventSource);
+    STDMETHOD(COMGETTER(ExtensionPackManager))  (IExtPackManager **aExtPackManager);
 
     /* IVirtualBox methods */
