Index: /trunk/include/VBox/com/ErrorInfo.h
===================================================================
--- /trunk/include/VBox/com/ErrorInfo.h	(revision 35516)
+++ /trunk/include/VBox/com/ErrorInfo.h	(revision 35517)
@@ -123,4 +123,23 @@
         init(pObj, aIID);
     }
+
+    /** Specialization for the IVirtualBoxErrorInfo smart pointer */
+    ErrorInfo (const ComPtr <IVirtualBoxErrorInfo> &aPtr)
+        : mIsBasicAvailable (false), mIsFullAvailable (false)
+        , mResultCode (S_OK)
+        { init (aPtr); }
+
+    /**
+     *  Constructs a new ErrorInfo instance from the IVirtualBoxErrorInfo
+     *  interface pointer. If this pointer is not NULL, both #isFullAvailable()
+     *  and #isBasicAvailable() will return |true|.
+     *
+     *  @param aInfo    pointer to the IVirtualBoxErrorInfo interface that
+     *                  holds error info to be fetched by this instance
+     */
+    ErrorInfo (IVirtualBoxErrorInfo *aInfo)
+        : mIsBasicAvailable (false), mIsFullAvailable (false)
+        , mResultCode (S_OK)
+        { init (aInfo); }
 
     ErrorInfo(const ErrorInfo &x)
Index: /trunk/src/VBox/Frontends/VBoxHeadless/testcase/tstHeadless.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxHeadless/testcase/tstHeadless.cpp	(revision 35516)
+++ /trunk/src/VBox/Frontends/VBoxHeadless/testcase/tstHeadless.cpp	(revision 35517)
@@ -137,8 +137,5 @@
             if (FAILED (resultCode))
             {
-                ComPtr<IVirtualBoxErrorInfo> errorInfo;
-                CHECK_ERROR_BREAK(progress,
-                                  COMGETTER(ErrorInfo) (errorInfo.asOutParam()));
-                ErrorInfo info(errorInfo, COM_IIDOF(IVirtualBoxErrorInfo));
+                ProgressErrorInfo info(progress);
                 com::GluePrintErrorInfo(info);
             }
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp	(revision 35516)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp	(revision 35517)
@@ -170,5 +170,5 @@
                 rc = machine->COMGETTER(AccessError)(accessError.asOutParam());
                 RTPrintf("Access error details:\n");
-                ErrorInfo ei(accessError, COM_IIDOF(IVirtualBoxErrorInfo));
+                ErrorInfo ei(accessError);
                 GluePrintErrorInfo(ei);
                 RTPrintf("\n");
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp	(revision 35516)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp	(revision 35517)
@@ -372,7 +372,5 @@
         if (FAILED(iRc))
         {
-            ComPtr<IVirtualBoxErrorInfo> errorInfo;
-            CHECK_ERROR_RET(progress, COMGETTER(ErrorInfo)(errorInfo.asOutParam()), 1);
-            ErrorInfo info(errorInfo, COM_IIDOF(IVirtualBoxErrorInfo));
+            ProgressErrorInfo info(progress);
             com::GluePrintErrorInfo(info);
         }
