Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/UIToolPaneMachine.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/UIToolPaneMachine.cpp	(revision 99216)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/UIToolPaneMachine.cpp	(revision 99218)
@@ -342,7 +342,10 @@
 bool UIToolPaneMachine::isCurrentStateItemSelected() const
 {
-    if (!m_pPaneSnapshots)
-        return false;
-    return m_pPaneSnapshots->isCurrentStateItemSelected();
+    return m_pPaneSnapshots ? m_pPaneSnapshots->isCurrentStateItemSelected() : false;
+}
+
+QUuid UIToolPaneMachine::currentSnapshotId()
+{
+    return m_pPaneSnapshots ? m_pPaneSnapshots->currentSnapshotId() : QUuid();
 }
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/UIToolPaneMachine.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/UIToolPaneMachine.h	(revision 99216)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/UIToolPaneMachine.h	(revision 99218)
@@ -33,4 +33,5 @@
 
 /* Qt includes: */
+#include <QUuid>
 #include <QWidget>
 
@@ -108,4 +109,7 @@
     bool isCurrentStateItemSelected() const;
 
+    /** Returns currently selected snapshot ID if any. */
+    QUuid currentSnapshotId();
+
     /** Returns the help keyword of the current tool's widget. */
     QString currentHelpKeyword() const;
Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.cpp	(revision 99216)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.cpp	(revision 99218)
@@ -470,4 +470,5 @@
     , m_pWidget(0)
     , m_iGeometrySaveTimerId(-1)
+    , m_fSnapshotCloneByDefault(false)
     , m_fImportFromOCI(false)
     , m_fExportToOCI(false)
@@ -990,4 +991,32 @@
                 m_wizards[enmType] = new UIWizardNewVM(this, actionPool(), m_pWidget->fullGroupName(), m_strISOFilePath);
                 break;
+            case WizardType_CloneVM:
+            {
+                UIVirtualMachineItem *pItem = currentItem();
+                UIVirtualMachineItemLocal *pItemLocal = pItem ? pItem->toLocal() : 0;
+                CMachine comMachine = pItemLocal ? pItemLocal->machine() : CMachine();
+                CSnapshot comSnapshot;
+                if (m_fSnapshotCloneByDefault)
+                {
+                    const QUuid uId = m_pWidget->currentSnapshotId();
+                    if (!uId.isNull() && comMachine.isNotNull())
+                    {
+                        printf("Looking for snapshot with ID = {%s}\n", uId.toString().toUtf8().constData());
+                        comSnapshot = comMachine.FindSnapshot(uId.toString());
+                        if (comSnapshot.isNotNull())
+                        {
+                            printf("Snapshot found, acquiring machine ..\n");
+                            const CMachine comSnapshotMachine = comSnapshot.GetMachine();
+                            if (comSnapshotMachine.isNotNull())
+                                comMachine = comSnapshotMachine;
+                        }
+                    }
+                }
+                m_wizards[enmType] = new UIWizardCloneVM(this,
+                                                         comMachine,
+                                                         pItemLocal->groups().value(0),
+                                                         comSnapshot);
+                break;
+            }
             case WizardType_ExportAppliance:
                 m_wizards[enmType] = new UIWizardExportApp(this, m_names, m_fExportToOCI);
@@ -1169,19 +1198,13 @@
 void UIVirtualBoxManager::sltOpenCloneMachineWizard()
 {
-    /* Get current item: */
-    UIVirtualMachineItem *pItem = currentItem();
-    AssertMsgReturnVoid(pItem, ("Current item should be selected!\n"));
-    /* Make sure current item is local one: */
-    UIVirtualMachineItemLocal *pItemLocal = pItem->toLocal();
-    AssertMsgReturnVoid(pItemLocal, ("Current item should be local one!\n"));
-
-    /* Use the "safe way" to open stack of Mac OS X Sheets: */
-    QWidget *pWizardParent = windowManager().realParentWindow(this);
-    const QStringList &machineGroupNames = pItemLocal->groups();
-    const QString strGroup = !machineGroupNames.isEmpty() ? machineGroupNames.at(0) : QString();
-    QPointer<UINativeWizard> pWizard = new UIWizardCloneVM(pWizardParent, pItemLocal->machine(), strGroup, CSnapshot());
-    windowManager().registerNewParent(pWizard, pWizardParent);
-    pWizard->exec();
-    delete pWizard;
+    /* Configure wizard variables: */
+    m_fSnapshotCloneByDefault = false;
+    QAction *pAction = qobject_cast<QAction*>(sender());
+    if (   pAction
+        && pAction == actionPool()->action(UIActionIndexMN_M_Snapshot_S_Clone))
+        m_fSnapshotCloneByDefault = true;
+
+    /* Open Clone VM Wizard: */
+    sltOpenWizard(WizardType_CloneVM);
 }
 
@@ -2327,4 +2350,6 @@
     connect(actionPool()->action(UIActionIndexMN_M_Machine_S_Clone), &UIAction::triggered,
             this, &UIVirtualBoxManager::sltOpenCloneMachineWizard);
+    connect(actionPool()->action(UIActionIndexMN_M_Snapshot_S_Clone), &UIAction::triggered,
+            this, &UIVirtualBoxManager::sltOpenCloneMachineWizard);
     connect(actionPool()->action(UIActionIndexMN_M_Machine_S_Move), &UIAction::triggered,
             this, &UIVirtualBoxManager::sltPerformMachineMove);
Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.h	(revision 99216)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.h	(revision 99218)
@@ -525,4 +525,7 @@
     QString  m_strISOFilePath;
 
+    /** Holds whether snapshot clone should be done by clone VM wizard. */
+    bool  m_fSnapshotCloneByDefault;
+
     /** Holds whether OCI importing should be started by default. */
     bool     m_fImportFromOCI;
Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.cpp	(revision 99216)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.cpp	(revision 99218)
@@ -274,4 +274,9 @@
 {
     return m_pPaneToolsMachine->isCurrentStateItemSelected();
+}
+
+QUuid UIVirtualBoxManagerWidget::currentSnapshotId()
+{
+    return m_pPaneToolsMachine->currentSnapshotId();
 }
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.h	(revision 99216)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.h	(revision 99218)
@@ -33,4 +33,5 @@
 
 /* Qt includes: */
+#include <QUuid>
 #include <QWidget>
 
@@ -214,4 +215,7 @@
         /** Returns whether current-state item of Snapshot pane is selected. */
         bool isCurrentStateItemSelected() const;
+
+        /** Returns currently selected snapshot ID if any. */
+        QUuid currentSnapshotId();
     /** @} */
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/snapshots/UISnapshotPane.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/snapshots/UISnapshotPane.cpp	(revision 99216)
+++ trunk/src/VBox/Frontends/VirtualBox/src/snapshots/UISnapshotPane.cpp	(revision 99218)
@@ -63,4 +63,5 @@
 /* COM includes: */
 #include "CConsole.h"
+#include "CSnapshot.h"
 
 
@@ -585,4 +586,11 @@
     UISnapshotItem *pSnapshotItem = UISnapshotItem::toSnapshotItem(m_pSnapshotTree->currentItem());
     return m_currentStateItems.values().contains(pSnapshotItem);
+}
+
+QUuid UISnapshotPane::currentSnapshotId()
+{
+    UISnapshotItem *pSnapshotItem = UISnapshotItem::toSnapshotItem(m_pSnapshotTree->currentItem());
+    CSnapshot comSnapshot = pSnapshotItem ? pSnapshotItem->snapshot() : CSnapshot();
+    return comSnapshot.isNotNull() ? comSnapshot.GetId() : QUuid();
 }
 
@@ -1303,6 +1311,4 @@
     connect(m_pActionPool->action(UIActionIndexMN_M_Snapshot_T_Properties), &UIAction::toggled,
             this, &UISnapshotPane::sltToggleSnapshotDetailsVisibility);
-    connect(m_pActionPool->action(UIActionIndexMN_M_Snapshot_S_Clone), &UIAction::triggered,
-            this, &UISnapshotPane::sltCloneSnapshot);
 }
 
@@ -1739,30 +1745,4 @@
 }
 
-void UISnapshotPane::cloneSnapshot()
-{
-    /* Acquire "current snapshot" item: */
-    const UISnapshotItem *pSnapshotItem = UISnapshotItem::toSnapshotItem(m_pSnapshotTree->currentItem());
-    AssertReturnVoid(pSnapshotItem);
-
-    /* Get desired machine/snapshot: */
-    CMachine comMachine;
-    CSnapshot comSnapshot;
-    if (pSnapshotItem->isCurrentStateItem())
-        comMachine = pSnapshotItem->machine();
-    else
-    {
-        comSnapshot = pSnapshotItem->snapshot();
-        AssertReturnVoid(!comSnapshot.isNull());
-        comMachine = comSnapshot.GetMachine();
-    }
-    AssertReturnVoid(!comMachine.isNull());
-
-    /* Show Clone VM wizard: */
-    QPointer<UINativeWizard> pWizard = new UIWizardCloneVM(this, comMachine, QString(), comSnapshot);
-    pWizard->exec();
-    if (pWizard)
-        delete pWizard;
-}
-
 void UISnapshotPane::adjustTreeWidget()
 {
Index: trunk/src/VBox/Frontends/VirtualBox/src/snapshots/UISnapshotPane.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/snapshots/UISnapshotPane.h	(revision 99216)
+++ trunk/src/VBox/Frontends/VirtualBox/src/snapshots/UISnapshotPane.h	(revision 99218)
@@ -32,4 +32,7 @@
 #endif
 
+/* Qt includes: */
+#include <QUuid>
+
 /* GUI includes: */
 #include "QIWithRetranslateUI.h"
@@ -37,4 +40,5 @@
 
 /* COM includes: */
+#include "COMEnums.h"
 #include "CMachine.h"
 
@@ -52,4 +56,5 @@
 class UISnapshotTree;
 class UIVirtualMachineItem;
+class CSnapshot;
 
 
@@ -90,4 +95,7 @@
     /** Returns whether "current state" item selected. */
     bool isCurrentStateItemSelected() const;
+
+    /** Returns currently selected snapshot ID if any. */
+    QUuid currentSnapshotId();
 
 protected:
@@ -145,6 +153,4 @@
         /** Handles command to apply snapshot details changes. */
         void sltApplySnapshotDetailsChanges();
-        /** Proposes to clone the snapshot. */
-        void sltCloneSnapshot() { cloneSnapshot(); }
     /** @} */
 
@@ -202,6 +208,4 @@
         /** Proposes to restore the snapshot. */
         bool restoreSnapshot(bool fAutomatically = false);
-        /** Proposes to clone the snapshot. */
-        void cloneSnapshot();
     /** @} */
 
