Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManage.h
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManage.h	(revision 44027)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManage.h	(revision 44028)
@@ -199,5 +199,5 @@
                       ComPtr<ISnapshot> &currentSnapshot,
                       VMINFO_DETAILS details,
-                      const com::Bstr &prefix = "",
+                      const com::Utf8Str &prefix = "",
                       int level = 0);
 int handleShowVMInfo(HandlerArg *a);
@@ -231,11 +231,8 @@
 
 /* VBoxManageDisk.cpp */
-HRESULT findMedium(HandlerArg *a, const char *pszFilenameOrUuid,
-                   DeviceType_T enmDevType, bool fSilent,
-                   ComPtr<IMedium> &pMedium);
-HRESULT findOrOpenMedium(HandlerArg *a, const char *pszFilenameOrUuid,
-                         DeviceType_T enmDevType, AccessMode_T enmAccessMode,
-                         ComPtr<IMedium> &pMedium, bool fForceNewUuidOnOpen,
-                         bool *pfWasUnknown);
+HRESULT openMedium(HandlerArg *a, const char *pszFilenameOrUuid,
+                   DeviceType_T enmDevType, AccessMode_T enmAccessMode,
+                   ComPtr<IMedium> &pMedium, bool fForceNewUuidOnOpen,
+                   bool fSilent);
 int handleCreateHardDisk(HandlerArg *a);
 int handleModifyHardDisk(HandlerArg *a);
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp	(revision 44027)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp	(revision 44028)
@@ -149,7 +149,8 @@
 }
 
-HRESULT findMedium(HandlerArg *a, const char *pszFilenameOrUuid,
-                   DeviceType_T enmDevType, bool fSilent,
-                   ComPtr<IMedium> &pMedium)
+HRESULT openMedium(HandlerArg *a, const char *pszFilenameOrUuid,
+                   DeviceType_T enmDevType, AccessMode_T enmAccessMode,
+                   ComPtr<IMedium> &pMedium, bool fForceNewUuidOnOpen,
+                   bool fSilent)
 {
     HRESULT rc;
@@ -171,57 +172,16 @@
 
     if (!fSilent)
-        CHECK_ERROR(a->virtualBox, OpenMedium(Bstr(pszFilenameOrUuid).raw(), 
-                                   enmDevType, 
-                                   AccessMode_ReadWrite, 
-                                   /*fForceNewUidOnOpen */ false, 
-                                   pMedium.asOutParam()));
-    else
-        rc = a->virtualBox->OpenMedium(Bstr(pszFilenameOrUuid).raw(), 
-                                       enmDevType, 
-                                       AccessMode_ReadWrite,
-                                       /*fForceNewUidOnOpen */ false,
-                                       pMedium.asOutParam());
-    return rc;
-}
-
-HRESULT findOrOpenMedium(HandlerArg *a, const char *pszFilenameOrUuid,
-                         DeviceType_T enmDevType, AccessMode_T enmAccessMode,
-                         ComPtr<IMedium> &pMedium, bool fForceNewUuidOnOpen,
-                         bool *pfWasUnknown)
-{
-    HRESULT rc;
-    bool fWasUnknown = false;
-    Guid id(pszFilenameOrUuid);
-    char szFilenameAbs[RTPATH_MAX] = "";
-
-    /* If it is no UUID, convert the filename to an absolute one. */
-    if (id.isEmpty())
-    {
-        int irc = RTPathAbs(pszFilenameOrUuid, szFilenameAbs, sizeof(szFilenameAbs));
-        if (RT_FAILURE(irc))
-        {
-            RTMsgError("Cannot convert filename \"%s\" to absolute path", pszFilenameOrUuid);
-            return E_FAIL;
-        }
-        pszFilenameOrUuid = szFilenameAbs;
-    }
-
-    rc = a->virtualBox->OpenMedium(Bstr(pszFilenameOrUuid).raw(), 
-                                   enmDevType,
-                                   enmAccessMode,
-                                   /*fForceNewUidOnOpen */ false,
-                                   pMedium.asOutParam());
-    /* If the medium is unknown try to open it. */
-    if (!pMedium)
-    {
         CHECK_ERROR(a->virtualBox, OpenMedium(Bstr(pszFilenameOrUuid).raw(),
-                                              enmDevType, enmAccessMode,
+                                              enmDevType,
+                                              enmAccessMode,
                                               fForceNewUuidOnOpen,
                                               pMedium.asOutParam()));
-        if (SUCCEEDED(rc))
-            fWasUnknown = true;
-    }
-    if (RT_VALID_PTR(pfWasUnknown))
-        *pfWasUnknown = fWasUnknown;
+    else
+        rc = a->virtualBox->OpenMedium(Bstr(pszFilenameOrUuid).raw(),
+                                       enmDevType,
+                                       enmAccessMode,
+                                       fForceNewUuidOnOpen,
+                                       pMedium.asOutParam());
+
     return rc;
 }
@@ -344,5 +304,4 @@
 
     /* check the outcome */
-    bool fUnknownParent = false;
     ComPtr<IMedium> parentHardDisk;
     if (fBase)
@@ -373,7 +332,7 @@
                 format = pszExt;
         }
-        rc = findOrOpenMedium(a, diffparent, DeviceType_HardDisk, AccessMode_ReadWrite,
-                              parentHardDisk, false /* fForceNewUuidOnOpen */,
-                              &fUnknownParent);
+        rc = openMedium(a, diffparent, DeviceType_HardDisk,
+                        AccessMode_ReadWrite, parentHardDisk,
+                        false /* fForceNewUuidOnOpen */, false /* fSilent */);
         if (FAILED(rc))
             return 1;
@@ -431,6 +390,4 @@
 
         CHECK_ERROR(hardDisk, Close());
-        if (!fBase && fUnknownParent)
-            CHECK_ERROR(parentHardDisk, Close());
     }
     return SUCCEEDED(rc) ? 0 : 1;
@@ -463,5 +420,4 @@
     uint64_t cbResize = 0;
     const char *FilenameOrUuid = NULL;
-    bool unknown = false;
 
     int c;
@@ -533,11 +489,8 @@
         return errorSyntax(USAGE_MODIFYHD, "No operation specified");
 
-    /* Depending on the operation the medium must be in the registry or
-     * may be opened on demand. */
-    if (fModifyDiskType || fModifyAutoReset)
-        rc = findMedium(a, FilenameOrUuid, DeviceType_HardDisk, false /* fSilent */, hardDisk);
-    else
-        rc = findOrOpenMedium(a, FilenameOrUuid, DeviceType_HardDisk, AccessMode_ReadWrite,
-                              hardDisk, false /* fForceNewUuidOnOpen */, &unknown);
+    /* Always open the medium if necessary, there is no other way. */
+    rc = openMedium(a, FilenameOrUuid, DeviceType_HardDisk,
+                    AccessMode_ReadWrite, hardDisk,
+                    false /* fForceNewUuidOnOpen */, false /* fSilent */);
     if (FAILED(rc))
         return 1;
@@ -597,7 +550,4 @@
         }
     }
-
-    if (unknown)
-        hardDisk->Close();
 
     return SUCCEEDED(rc) ? 0 : 1;
@@ -692,9 +642,8 @@
     ComPtr<IMedium> srcDisk;
     ComPtr<IMedium> dstDisk;
-    bool fSrcUnknown = false;
-    bool fDstUnknown = false;
-
-    rc = findOrOpenMedium(a, pszSrc, DeviceType_HardDisk, AccessMode_ReadOnly,
-                          srcDisk, false /* fForceNewUuidOnOpen */, &fSrcUnknown);
+
+    rc = openMedium(a, pszSrc, DeviceType_HardDisk, AccessMode_ReadOnly,
+                    srcDisk, false /* fForceNewUuidOnOpen */,
+                    false /* fSilent */);
     if (FAILED(rc))
         return 1;
@@ -705,6 +654,8 @@
         if (fExisting)
         {
-            rc = findOrOpenMedium(a, pszDst, DeviceType_HardDisk, AccessMode_ReadWrite,
-                                  dstDisk, false /* fForceNewUuidOnOpen */, &fDstUnknown);
+            rc = openMedium(a, pszDst, DeviceType_HardDisk,
+                            AccessMode_ReadWrite, dstDisk,
+                            false /* fForceNewUuidOnOpen */,
+                            false /* fSilent */);
             if (FAILED(rc))
                 break;
@@ -723,5 +674,4 @@
             if (FAILED(rc))
                 break;
-            fDstUnknown = true;
         }
 
@@ -739,15 +689,4 @@
     }
     while (0);
-
-    if (fDstUnknown && !dstDisk.isNull())
-    {
-        /* forget the created clone */
-        dstDisk->Close();
-    }
-    if (fSrcUnknown)
-    {
-        /* close the unknown hard disk to forget it again */
-        srcDisk->Close();
-    }
 
     return SUCCEEDED(rc) ? 0 : 1;
@@ -986,8 +925,8 @@
 
     ComPtr<IMedium> hardDisk;
-    bool unknown = false;
-
-    rc = findOrOpenMedium(a, FilenameOrUuid, DeviceType_HardDisk, AccessMode_ReadOnly,
-                          hardDisk, false /* fForceNewUuidOnOpen */, &unknown);
+
+    rc = openMedium(a, FilenameOrUuid, DeviceType_HardDisk,
+                    AccessMode_ReadOnly, hardDisk,
+                    false /* fForceNewUuidOnOpen */, false /* fSilent */);
     if (FAILED(rc))
         return 1;
@@ -1089,23 +1028,20 @@
         /// @todo also dump config parameters (iSCSI)
 
-        if (!unknown)
-        {
-            com::SafeArray<BSTR> machineIds;
-            hardDisk->COMGETTER(MachineIds)(ComSafeArrayAsOutParam(machineIds));
-            for (size_t j = 0; j < machineIds.size(); ++ j)
-            {
-                ComPtr<IMachine> machine;
-                CHECK_ERROR(a->virtualBox, FindMachine(machineIds[j], machine.asOutParam()));
-                ASSERT(machine);
-                Bstr name;
-                machine->COMGETTER(Name)(name.asOutParam());
-                machine->COMGETTER(Id)(uuid.asOutParam());
-                RTPrintf("%s%ls (UUID: %ls)\n",
-                         j == 0 ? "In use by VMs:        " : "                      ",
-                         name.raw(), machineIds[j]);
-            }
-            /// @todo NEWMEDIA check usage in snapshots too
-            /// @todo NEWMEDIA also list children
-        }
+        com::SafeArray<BSTR> machineIds;
+        hardDisk->COMGETTER(MachineIds)(ComSafeArrayAsOutParam(machineIds));
+        for (size_t j = 0; j < machineIds.size(); ++ j)
+        {
+            ComPtr<IMachine> machine;
+            CHECK_ERROR(a->virtualBox, FindMachine(machineIds[j], machine.asOutParam()));
+            ASSERT(machine);
+            Bstr name;
+            machine->COMGETTER(Name)(name.asOutParam());
+            machine->COMGETTER(Id)(uuid.asOutParam());
+            RTPrintf("%s%ls (UUID: %ls)\n",
+                     j == 0 ? "In use by VMs:        " : "                      ",
+                     name.raw(), machineIds[j]);
+        }
+        /// @todo NEWMEDIA check usage in snapshots too
+        /// @todo NEWMEDIA also list children
 
         Bstr loc;
@@ -1122,10 +1058,4 @@
     }
     while (0);
-
-    if (unknown)
-    {
-        /* close the unknown hard disk to forget it again */
-        hardDisk->Close();
-    }
 
     return SUCCEEDED(rc) ? 0 : 1;
@@ -1217,9 +1147,15 @@
 
     if (cmd == CMD_DISK)
-        rc = findMedium(a, FilenameOrUuid, DeviceType_HardDisk, false /* fSilent */, medium);
+        rc = openMedium(a, FilenameOrUuid, DeviceType_HardDisk,
+                        AccessMode_ReadWrite, medium,
+                        false /* fForceNewUuidOnOpen */, false /* fSilent */);
     else if (cmd == CMD_DVD)
-        rc = findMedium(a, FilenameOrUuid, DeviceType_DVD, false /* fSilent */, medium);
+        rc = openMedium(a, FilenameOrUuid, DeviceType_DVD,
+                        AccessMode_ReadOnly, medium,
+                        false /* fForceNewUuidOnOpen */, false /* fSilent */);
     else if (cmd == CMD_FLOPPY)
-        rc = findMedium(a, FilenameOrUuid, DeviceType_Floppy, false /* fSilent */, medium);
+        rc = openMedium(a, FilenameOrUuid, DeviceType_Floppy,
+                        AccessMode_ReadWrite, medium,
+                        false /* fForceNewUuidOnOpen */, false /* fSilent */);
 
     if (SUCCEEDED(rc) && medium)
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp	(revision 44027)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp	(revision 44028)
@@ -51,5 +51,5 @@
                       ComPtr<ISnapshot> &currentSnapshot,
                       VMINFO_DETAILS details,
-                      const Bstr &prefix /* = ""*/,
+                      const Utf8Str &prefix /* = ""*/,
                       int level /*= 0*/)
 {
@@ -57,21 +57,33 @@
     Bstr name;
     Bstr uuid;
-    CHECK_ERROR2_RET(rootSnapshot,COMGETTER(Name)(name.asOutParam()), hrcCheck);
-    CHECK_ERROR2_RET(rootSnapshot,COMGETTER(Id)(uuid.asOutParam()), hrcCheck);
+    Bstr description;
+    CHECK_ERROR2_RET(rootSnapshot, COMGETTER(Name)(name.asOutParam()), hrcCheck);
+    CHECK_ERROR2_RET(rootSnapshot, COMGETTER(Id)(uuid.asOutParam()), hrcCheck);
+    CHECK_ERROR2_RET(rootSnapshot, COMGETTER(Description)(description.asOutParam()), hrcCheck);
+    bool fCurrent = (rootSnapshot == currentSnapshot);
     if (details == VMINFO_MACHINEREADABLE)
     {
         /* print with hierarchical numbering */
-        RTPrintf("SnapshotName%ls=\"%ls\"\n", prefix.raw(), name.raw());
-        RTPrintf("SnapshotUUID%ls=\"%s\"\n", prefix.raw(), Utf8Str(uuid).c_str());
+        RTPrintf("SnapshotName%s=\"%ls\"\n", prefix.c_str(), name.raw());
+        RTPrintf("SnapshotUUID%s=\"%s\"\n", prefix.c_str(), Utf8Str(uuid).c_str());
+        if (!description.isEmpty())
+            RTPrintf("SnapshotDescription%s=\"%ls\"\n", prefix.c_str(), description.raw());
+        if (fCurrent)
+        {
+            RTPrintf("CurrentSnapshotName=\"%ls\"\n", name.raw());
+            RTPrintf("CurrentSnapshotUUID=\"%s\"\n", Utf8Str(uuid).c_str());
+            RTPrintf("CurrentSnapshotNode=\"SnapshotName%s\"\n", prefix.c_str());
+        }
     }
     else
     {
         /* print with indentation */
-        bool fCurrent = (rootSnapshot == currentSnapshot);
-        RTPrintf("   %lsName: %ls (UUID: %s)%s\n",
-                 prefix.raw(),
+        RTPrintf("   %sName: %ls (UUID: %s)%s\n",
+                 prefix.c_str(),
                  name.raw(),
                  Utf8Str(uuid).c_str(),
                  (fCurrent) ? " *" : "");
+        if (!description.isEmpty())
+            RTPrintf("   %sDescription:\n%ls\n", prefix.c_str(), description.raw());
     }
 
@@ -87,10 +99,10 @@
             if (snapshot)
             {
-                Bstr newPrefix;
+                Utf8Str newPrefix;
                 if (details == VMINFO_MACHINEREADABLE)
-                    newPrefix = Utf8StrFmt("%ls-%d", prefix.raw(), index + 1);
+                    newPrefix = Utf8StrFmt("%s-%d", prefix.c_str(), index + 1);
                 else
                 {
-                    newPrefix = Utf8StrFmt("%ls   ", prefix.raw());
+                    newPrefix = Utf8StrFmt("%s   ", prefix.c_str());
                 }
 
@@ -2285,5 +2297,4 @@
     }
 
-
     if (details != VMINFO_MACHINEREADABLE)
         RTPrintf("Guest:\n\n");
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp	(revision 44027)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp	(revision 44028)
@@ -770,7 +770,8 @@
                 {
                     ComPtr<IMedium> hardDisk;
-                    rc = findOrOpenMedium(a, ValueUnion.psz, DeviceType_HardDisk,
-                                          AccessMode_ReadWrite, hardDisk,
-                                          false /* fForceNewUuidOnOpen */, NULL);
+                    rc = openMedium(a, ValueUnion.psz, DeviceType_HardDisk,
+                                    AccessMode_ReadWrite, hardDisk,
+                                    false /* fForceNewUuidOnOpen */,
+                                    false /* fSilent */);
                     if (FAILED(rc))
                         break;
@@ -855,7 +856,8 @@
                 {
                     ComPtr<IMedium> hardDisk;
-                    rc = findOrOpenMedium(a, ValueUnion.psz, DeviceType_HardDisk,
-                                          AccessMode_ReadWrite, hardDisk,
-                                          false /* fForceNewUuidOnOpen */, NULL);
+                    rc = openMedium(a, ValueUnion.psz, DeviceType_HardDisk,
+                                    AccessMode_ReadWrite, hardDisk,
+                                    false /* fForceNewUuidOnOpen */,
+                                    false /* fSilent */);
                     if (FAILED(rc))
                         break;
@@ -983,7 +985,8 @@
                 else
                 {
-                    rc = findOrOpenMedium(a, ValueUnion.psz, DeviceType_DVD,
-                                          AccessMode_ReadOnly, dvdMedium,
-                                          false /* fForceNewUuidOnOpen */, NULL);
+                    rc = openMedium(a, ValueUnion.psz, DeviceType_DVD,
+                                    AccessMode_ReadOnly, dvdMedium,
+                                    false /* fForceNewUuidOnOpen */,
+                                    false /* fSilent */);
                     if (FAILED(rc))
                         break;
@@ -1047,7 +1050,8 @@
                     else
                     {
-                        rc = findOrOpenMedium(a, ValueUnion.psz, DeviceType_Floppy,
-                                              AccessMode_ReadWrite, floppyMedium,
-                                              false /* fForceNewUuidOnOpen */, NULL);
+                        rc = openMedium(a, ValueUnion.psz, DeviceType_Floppy,
+                                        AccessMode_ReadWrite, floppyMedium,
+                                        false /* fForceNewUuidOnOpen */,
+                                        false /* fSilent */);
                         if (FAILED(rc))
                             break;
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageStorageController.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageStorageController.cpp	(revision 44027)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageStorageController.cpp	(revision 44028)
@@ -484,6 +484,9 @@
                         {
                             ComPtr<IMedium> pExistingMedium;
-                            rc = findMedium(a, pszMedium, deviceType, true /* fSilent */,
-                                            pExistingMedium);
+                            rc = openMedium(a, pszMedium, deviceType,
+                                            AccessMode_ReadWrite,
+                                            pExistingMedium,
+                                            false /* fForceNewUuidOnOpen */,
+                                            true /* fSilent */);
                             if (SUCCEEDED(rc) && pExistingMedium)
                             {
@@ -638,7 +641,7 @@
                 {
                     Bstr bstrMedium(pszMedium);
-                    rc = findOrOpenMedium(a, pszMedium, devTypeRequested,
-                                          AccessMode_ReadWrite, pMedium2Mount,
-                                          fSetNewUuid, NULL);
+                    rc = openMedium(a, pszMedium, devTypeRequested,
+                                    AccessMode_ReadWrite, pMedium2Mount,
+                                    fSetNewUuid, false /* fSilent */);
                     if (FAILED(rc) || !pMedium2Mount)
                         throw Utf8StrFmt("Invalid UUID or filename \"%s\"", pszMedium);
