Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 77276)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 77277)
@@ -91,24 +91,25 @@
 
 /* COM includes: */
+#include "CAudioAdapter.h"
+#include "CBIOSSettings.h"
+#include "CConsole.h"
 #include "CExtPack.h"
 #include "CExtPackFile.h"
 #include "CExtPackManager.h"
+#include "CHostUSBDevice.h"
+#include "CHostVideoInputDevice.h"
 #include "CMachine.h"
-#include "CUSBDevice.h"
-#include "CUSBDeviceFilters.h"
-#include "CUSBDeviceFilter.h"
-#include "CBIOSSettings.h"
-#include "CVRDEServer.h"
-#include "CStorageController.h"
 #include "CMediumAttachment.h"
-#include "CAudioAdapter.h"
 #include "CNetworkAdapter.h"
 #include "CSerialPort.h"
+#include "CSharedFolder.h"
+#include "CSnapshot.h"
+#include "CStorageController.h"
+#include "CSystemProperties.h"
 #include "CUSBController.h"
-#include "CHostUSBDevice.h"
-#include "CHostVideoInputDevice.h"
-#include "CSharedFolder.h"
-#include "CConsole.h"
-#include "CSnapshot.h"
+#include "CUSBDevice.h"
+#include "CUSBDeviceFilter.h"
+#include "CUSBDeviceFilters.h"
+#include "CVRDEServer.h"
 
 /* Other VBox includes: */
@@ -2576,6 +2577,6 @@
 
 QUuid VBoxGlobal::openMediumWithFileOpenDialog(UIMediumDeviceType enmMediumType, QWidget *pParent,
-                                                 const QString &strDefaultFolder /* = QString() */,
-                                                 bool fUseLastFolder /* = false */)
+                                               const QString &strDefaultFolder /* = QString() */,
+                                               bool fUseLastFolder /* = false */)
 {
     /* Initialize variables: */
@@ -2586,5 +2587,5 @@
     QString strTitle;
     QString allType;
-    QString strLastFolder;
+    QString strLastFolder = defaultFolderPathForType(enmMediumType);
     switch (enmMediumType)
     {
@@ -2594,9 +2595,4 @@
             strTitle = tr("Please choose a virtual hard disk file");
             allType = tr("All virtual hard disk files (%1)");
-            strLastFolder = gEDataManager->recentFolderForHardDrives();
-            if (strLastFolder.isEmpty())
-                strLastFolder = gEDataManager->recentFolderForOpticalDisks();
-            if (strLastFolder.isEmpty())
-                strLastFolder = gEDataManager->recentFolderForFloppyDisks();
             break;
         }
@@ -2606,9 +2602,4 @@
             strTitle = tr("Please choose a virtual optical disk file");
             allType = tr("All virtual optical disk files (%1)");
-            strLastFolder = gEDataManager->recentFolderForOpticalDisks();
-            if (strLastFolder.isEmpty())
-                strLastFolder = gEDataManager->recentFolderForFloppyDisks();
-            if (strLastFolder.isEmpty())
-                strLastFolder = gEDataManager->recentFolderForHardDrives();
             break;
         }
@@ -2618,9 +2609,4 @@
             strTitle = tr("Please choose a virtual floppy disk file");
             allType = tr("All virtual floppy disk files (%1)");
-            strLastFolder = gEDataManager->recentFolderForFloppyDisks();
-            if (strLastFolder.isEmpty())
-                strLastFolder = gEDataManager->recentFolderForOpticalDisks();
-            if (strLastFolder.isEmpty())
-                strLastFolder = gEDataManager->recentFolderForHardDrives();
             break;
         }
@@ -2688,6 +2674,11 @@
 
 
-QUuid VBoxGlobal::createVisoMediumWithVisoCreator(QWidget *pParent, const QString &strFolder, const QString &strMachineName /* = QString */)
-{
+QUuid VBoxGlobal::createVisoMediumWithVisoCreator(QWidget *pParent, const QString &strDefaultFolder /* = QString */,
+                                                  const QString &strMachineName /* = QString */)
+{
+    QString strVisoSaveFolder(strDefaultFolder);
+    if (strVisoSaveFolder.isEmpty())
+        strVisoSaveFolder = defaultFolderPathForType(UIMediumDeviceType_DVD);
+
     QWidget *pDialogParent = windowManager().realParentWindow(pParent);
     QPointer<UIVisoCreator> pVisoCreator = new UIVisoCreator(pDialogParent, strMachineName);
@@ -2713,5 +2704,5 @@
         char szVisoPath[RTPATH_MAX];
         QString strFileName = QString("%1%2").arg(strVisoName).arg(".viso");
-        int vrc = RTPathJoin(szVisoPath, sizeof(szVisoPath), strFolder.toUtf8().constData(), strFileName.toUtf8().constData());
+        int vrc = RTPathJoin(szVisoPath, sizeof(szVisoPath), strDefaultFolder.toUtf8().constData(), strFileName.toUtf8().constData());
         if (RT_SUCCESS(vrc))
         {
@@ -2761,9 +2752,15 @@
 }
 
-QUuid VBoxGlobal::showCreateFloppyDiskDialog(QWidget *pParent, const QString &strMachineName, const QString &strMachineFolder)
-{
+QUuid VBoxGlobal::showCreateFloppyDiskDialog(QWidget *pParent, const QString &strDefaultFolder /* QString() */,
+                                             const QString &strMachineName /* = QString() */ )
+{
+    QString strStartPath(strDefaultFolder);
+
+    if (strStartPath.isEmpty())
+        strStartPath = defaultFolderPathForType(UIMediumDeviceType_Floppy);
+
     QWidget *pDialogParent = windowManager().realParentWindow(pParent);
 
-    UIFDCreationDialog *pDialog = new UIFDCreationDialog(pParent, strMachineFolder, strMachineName);
+    UIFDCreationDialog *pDialog = new UIFDCreationDialog(pParent, strStartPath, strMachineName);
     if (!pDialog)
         return QUuid();
@@ -2814,13 +2811,43 @@
 }
 
+QUuid VBoxGlobal::openMediumCreatorDialog(QWidget *pParent, UIMediumDeviceType  enmMediumType,
+                                          const QString &strDefaultFolder /* = QString() */, const QString &strMachineName /* = QString() */,
+                                          const QString &strMachineGuestOSTypeId /*= QString() */)
+{
+    QUuid uMediumId;
+
+    switch (enmMediumType)
+    {
+        case UIMediumDeviceType_Floppy:
+            uMediumId = showCreateFloppyDiskDialog(pParent, strDefaultFolder, strMachineName);
+            break;
+        case UIMediumDeviceType_HardDisk:
+            uMediumId = createHDWithNewHDWizard(pParent, strMachineGuestOSTypeId, strDefaultFolder, strMachineName);
+
+            break;
+        case UIMediumDeviceType_DVD:
+            uMediumId = createVisoMediumWithVisoCreator(pParent, strDefaultFolder, strMachineName);
+            break;
+        default:
+            break;
+    }
+
+    return uMediumId;
+}
+
 QUuid VBoxGlobal::createHDWithNewHDWizard(QWidget *pParent, const QString &strMachineGuestOSTypeId,
-                                          const QString &strMachineName,
-                                          const QString &strMachineFolder)
+                                          const QString &strMachineFolder /* = QString() */,
+                                          const QString &strMachineName /* = QString() */)
 {
     /* Initialize variables: */
-    const CGuestOSType comGuestOSType = virtualBox().GetGuestOSType(strMachineGuestOSTypeId);
-    QString strDiskName = findUniqueFileName(strMachineFolder, strMachineName);
+    QString strDefaultFolder(strMachineFolder);
+    if (strDefaultFolder.isEmpty())
+        strDefaultFolder = defaultFolderPathForType(UIMediumDeviceType_HardDisk);
+
+    const CGuestOSType comGuestOSType = virtualBox().GetGuestOSType(!strMachineGuestOSTypeId.isEmpty() ? strMachineGuestOSTypeId : "Other");
+    QString strDiskName = findUniqueFileName(strDefaultFolder,
+                                             !strMachineName.isEmpty() ? strMachineName : "NewVirtualDisk");
     /* Show New VD wizard: */
-    UISafePointerWizardNewVD pWizard = new UIWizardNewVD(pParent, strDiskName, strMachineFolder, comGuestOSType.GetRecommendedHDD());
+    UISafePointerWizardNewVD pWizard = new UIWizardNewVD(pParent, strDiskName, strDefaultFolder, comGuestOSType.GetRecommendedHDD());
 
     if (!pWizard)
@@ -3052,5 +3079,5 @@
 
                 else if(target.type == UIMediumTarget::UIMediumTargetType_CreateFloppyDisk)
-                    uMediumID = showCreateFloppyDiskDialog(windowManager().mainWindowShown(), comConstMachine.GetName(), strMachineFolder);
+                    uMediumID = showCreateFloppyDiskDialog(windowManager().mainWindowShown(), strMachineFolder, comConstMachine.GetName());
 
                 /* Return focus back: */
@@ -3249,4 +3276,40 @@
         default: break;
     }
+}
+
+QString VBoxGlobal::defaultFolderPathForType(UIMediumDeviceType enmMediumType)
+{
+    QString strLastFolder;
+    switch (enmMediumType)
+    {
+        case UIMediumDeviceType_HardDisk:
+            strLastFolder = gEDataManager->recentFolderForHardDrives();
+            if (strLastFolder.isEmpty())
+                strLastFolder = gEDataManager->recentFolderForOpticalDisks();
+            if (strLastFolder.isEmpty())
+                strLastFolder = gEDataManager->recentFolderForFloppyDisks();
+            break;
+        case UIMediumDeviceType_DVD:
+            strLastFolder = gEDataManager->recentFolderForOpticalDisks();
+            if (strLastFolder.isEmpty())
+                strLastFolder = gEDataManager->recentFolderForFloppyDisks();
+            if (strLastFolder.isEmpty())
+                strLastFolder = gEDataManager->recentFolderForHardDrives();
+            break;
+        case UIMediumDeviceType_Floppy:
+            strLastFolder = gEDataManager->recentFolderForFloppyDisks();
+            if (strLastFolder.isEmpty())
+                strLastFolder = gEDataManager->recentFolderForOpticalDisks();
+            if (strLastFolder.isEmpty())
+                strLastFolder = gEDataManager->recentFolderForHardDrives();
+            break;
+        default:
+            break;
+    }
+
+    if (strLastFolder.isEmpty())
+        return virtualBox().GetSystemProperties().GetDefaultMachineFolder();
+
+    return strLastFolder;
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h	(revision 77276)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h	(revision 77277)
@@ -500,18 +500,19 @@
           * @param  fUseLastFolder    Brings whether we should propose to use last used folder. */
         QUuid openMediumWithFileOpenDialog(UIMediumDeviceType enmMediumType, QWidget *pParent = 0,
-                                             const QString &strDefaultFolder = QString(), bool fUseLastFolder = true);
+                                             const QString &strDefaultFolder = QString(), bool fUseLastFolder = false);
 
         /** Creates a VISO by using the VISO creator dialog.
-          * @param  pParent    Brings the dialog parent.
-          * @param  strFolder  Brings the folder to save the VISO file.
+          * @param  pParent           Passes the dialog parent.
+          * @param  strDefaultFolder  Passes the folder to save the VISO file.
           * @param  strMachineName    Passes the name of the machine, */
-        QUuid createVisoMediumWithVisoCreator(QWidget *pParent, const QString &strFolder, const QString &strMachineName = QString());
+        QUuid createVisoMediumWithVisoCreator(QWidget *pParent, const QString &strDefaultFolder = QString(), const QString &strMachineName = QString());
 
         /** Creates and shows a dialog thru which user can create a new floppy disk a VISO using the file-open dialog.
           * @param  parent            Passes the parent of the dialog,
+          * @param  strDefaultFolder  Passes the default folder,
           * @param  strMachineName    Passes the name of the machine,
-          * @param  strMachineFolder  Passes the machine folder,
           * returns the ID of the newly created medium if successful, a null QUuid otherwise.*/
-        QUuid showCreateFloppyDiskDialog(QWidget *pParent, const QString &strMachineName, const QString &strMachineFolder);
+        QUuid showCreateFloppyDiskDialog(QWidget *pParent, const QString &strDefaultFolder = QString(),
+                                         const QString &strMachineName = QString());
 
         /** Creates and shows a UIMediumSelector dialog.
@@ -528,12 +529,26 @@
                                      const QString &strMachineGuestOSTypeId, bool fEnableCreate);
 
+        /** Creates and shows a dialog (wizard) to create a medium of type @a enmMediumType.
+          * @param  parent                   Passes the parent of the dialog,
+          * @param  enmMediumType            Passes the medium type.
+          * @param  strMachineName           Passes the name of the machine,
+          * @param  strMachineFolder         Passes the machine folder,
+          * @param  strMachineGuestOSTypeId  Passes the type ID of machine's guest os,
+          * @param  fEnableCreate            Passes whether to show/enable create action in the medium selector dialog,
+          * returns the return code of the UIMediumSelector::ReturnCode as int. In case of a medium selection
+          *         UUID of the selected medium is stored in @param outUuid.*/
+        QUuid openMediumCreatorDialog(QWidget *pParent, UIMediumDeviceType  enmMediumType,
+                                      const QString &strMachineFolder = QString(), const QString &strMachineName = QString(),
+                                      const QString &strMachineGuestOSTypeId = QString());
+
+
         /** Creates and shows a UIWizardNewVD wizard.
           * @param  parent                    Passes the parent of the wizard,
           * @param  strMachineGuestOSTypeId   Passes the string of machine's guest OS type ID,
+          * @param  strMachineFolder          Passes the machine folder,
           * @param  strMachineName            Passes the name of the machine,
-          * @param  strMachineFolder          Passes the machine folder,
           * returns the ID of the  created hard disk if successful, a null QUuid otherwise.*/
         QUuid createHDWithNewHDWizard(QWidget *pParent, const QString &strMachineGuestOSTypeId,
-                                      const QString &strMachineName, const QString &strMachineFolder);
+                                      const QString &strMachineFolder = QString(), const QString &strMachineName = QString());
 
         /** Prepares storage menu according passed parameters.
@@ -559,4 +574,9 @@
           * @param  strMediumLocation   Passes the medium location. */
         void updateRecentlyUsedMediumListAndFolder(UIMediumDeviceType enmMediumType, QString strMediumLocation);
+
+        /** Searches extra data for the recently used folder path which corresponds to @a enmMediumType. When that search fails
+            it looks for recent folder extra data for other medium types. As the last resort returns default vm folder path.
+          * @param  enmMediumType       Passes the medium type. */
+        QString defaultFolderPathForType(UIMediumDeviceType enmMediumType);
     /** @} */
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp	(revision 77276)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp	(revision 77277)
@@ -494,4 +494,5 @@
 void UIMediumManagerWidget::sltCreateMedium()
 {
+    vboxGlobal().openMediumCreatorDialog(this, currentMediumType());
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumSelector.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumSelector.cpp	(revision 77276)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumSelector.cpp	(revision 77277)
@@ -433,6 +433,5 @@
 void UIMediumSelector::sltAddMedium()
 {
-    QString strDefaultMachineFolder = vboxGlobal().virtualBox().GetSystemProperties().GetDefaultMachineFolder();
-    QUuid uMediumID = vboxGlobal().openMediumWithFileOpenDialog(m_enmMediumType, this, strDefaultMachineFolder);
+    QUuid uMediumID = vboxGlobal().openMediumWithFileOpenDialog(m_enmMediumType, this, m_strMachineFolder);
     if (uMediumID.isNull())
         return;
@@ -444,20 +443,6 @@
 void UIMediumSelector::sltCreateMedium()
 {
-    QUuid uMediumId;
-
-    switch (m_enmMediumType)
-    {
-        case UIMediumDeviceType_Floppy:
-            uMediumId = vboxGlobal().showCreateFloppyDiskDialog(this, m_strMachineName, m_strMachineFolder);
-            break;
-        case UIMediumDeviceType_HardDisk:
-            uMediumId = vboxGlobal().createHDWithNewHDWizard(this, m_strMachineGuestOSTypeId, m_strMachineName, m_strMachineFolder);
-            break;
-        case UIMediumDeviceType_DVD:
-            uMediumId = vboxGlobal().createVisoMediumWithVisoCreator(this, m_strMachineFolder, m_strMachineName);
-            break;
-        default:
-            break;
-    }
+    QUuid uMediumId = vboxGlobal().openMediumCreatorDialog(this, m_enmMediumType, m_strMachineFolder,
+                                                           m_strMachineName, m_strMachineGuestOSTypeId);
     if (!uMediumId.isNull())
     {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp	(revision 77276)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp	(revision 77277)
@@ -3083,6 +3083,5 @@
 {
     const QUuid uMediumId = vboxGlobal().createHDWithNewHDWizard(this, m_strMachineGuestOSTypeId,
-                                                                 m_strMachineName, m_strMachineSettingsFilePath);
-
+                                                                 m_strMachineSettingsFilePath, m_strMachineName);
     if (!uMediumId.isNull())
         m_pMediumIdHolder->setId(uMediumId);
