Index: trunk/src/VBox/Frontends/VirtualBox/src/globals/UICommon.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/globals/UICommon.cpp	(revision 90324)
+++ trunk/src/VBox/Frontends/VirtualBox/src/globals/UICommon.cpp	(revision 90325)
@@ -4155,4 +4155,13 @@
 }
 
+void UICommon::sltHandleMachineCreated(const CMachine &comMachine)
+{
+    /* Register created machine. */
+    CVirtualBox comVBox = virtualBox();
+    comVBox.RegisterMachine(comMachine);
+    if (!comVBox.isOk())
+        msgCenter().cannotRegisterMachine(comVBox, comMachine.GetName());
+}
+
 void UICommon::sltHandleCloudMachineAdded(const QString &strShortProviderName,
                                           const QString &strProfileName,
Index: trunk/src/VBox/Frontends/VirtualBox/src/globals/UICommon.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/globals/UICommon.h	(revision 90324)
+++ trunk/src/VBox/Frontends/VirtualBox/src/globals/UICommon.h	(revision 90325)
@@ -735,4 +735,10 @@
     /** @} */
 
+    /** @name Machine related stuff.
+     * @{ */
+        /** Handles signal about machine was created. */
+        void sltHandleMachineCreated(const CMachine &comMachine);
+    /** @} */
+
     /** @name Cloud Machine related stuff.
      * @{ */
Index: trunk/src/VBox/Frontends/VirtualBox/src/notificationcenter/UINotificationObjects.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/notificationcenter/UINotificationObjects.cpp	(revision 90324)
+++ trunk/src/VBox/Frontends/VirtualBox/src/notificationcenter/UINotificationObjects.cpp	(revision 90325)
@@ -98,4 +98,49 @@
 
 /*********************************************************************************************************************************
+*   Class UINotificationProgressMachineCopy implementation.                                                                      *
+*********************************************************************************************************************************/
+
+UINotificationProgressMachineCopy::UINotificationProgressMachineCopy(const CMachine &comSource,
+                                                                     const CMachine &comTarget,
+                                                                     const KCloneMode &enmCloneMode,
+                                                                     const QVector<KCloneOptions> &options)
+    : m_comSource(comSource)
+    , m_comTarget(comTarget)
+    , m_enmCloneMode(enmCloneMode)
+    , m_options(options)
+{
+    connect(this, &UINotificationProgress::sigProgressFinished,
+            this, &UINotificationProgressMachineCopy::sltHandleProgressFinished);
+}
+
+QString UINotificationProgressMachineCopy::name() const
+{
+    return UINotificationProgress::tr("Copying machine ...");
+}
+
+QString UINotificationProgressMachineCopy::details() const
+{
+    return UINotificationProgress::tr("<b>From:</b> %1<br><b>To:</b> %2")
+                                     .arg(m_comSource.GetName(), m_comTarget.GetName());
+}
+
+CProgress UINotificationProgressMachineCopy::createProgress(COMResult &comResult)
+{
+    /* Initialize progress-wrapper: */
+    CProgress comProgress = m_comSource.CloneTo(m_comTarget, m_enmCloneMode, m_options);
+    /* Store COM result: */
+    comResult = m_comSource;
+    /* Return progress-wrapper: */
+    return comProgress;
+}
+
+void UINotificationProgressMachineCopy::sltHandleProgressFinished()
+{
+    if (m_comTarget.isNotNull() && !m_comTarget.GetId().isNull())
+        emit sigMachineCopied(m_comTarget);
+}
+
+
+/*********************************************************************************************************************************
 *   Class UINotificationProgressCloudMachineAdd implementation.                                                                  *
 *********************************************************************************************************************************/
Index: trunk/src/VBox/Frontends/VirtualBox/src/notificationcenter/UINotificationObjects.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/notificationcenter/UINotificationObjects.h	(revision 90324)
+++ trunk/src/VBox/Frontends/VirtualBox/src/notificationcenter/UINotificationObjects.h	(revision 90325)
@@ -29,4 +29,5 @@
 #include "CCloudClient.h"
 #include "CCloudMachine.h"
+#include "CMachine.h"
 #include "CMedium.h"
 #include "CVirtualSystemDescription.h"
@@ -108,4 +109,52 @@
     /** Holds the target medium options. */
     QVector<KMediumVariant>  m_variants;
+};
+
+/** UINotificationProgress extension for machine copy functionality. */
+class SHARED_LIBRARY_STUFF UINotificationProgressMachineCopy : public UINotificationProgress
+{
+    Q_OBJECT;
+
+signals:
+
+    /** Notifies listeners about @a comMachine was copied. */
+    void sigMachineCopied(const CMachine &comMachine);
+
+public:
+
+    /** Constructs medium move notification-progress.
+      * @param  comSource     Brings the machine being copied.
+      * @param  comTarget     Brings the machine being the target.
+      * @param  enmCloneMode  Brings the cloning mode.
+      * @param  options       Brings the cloning options. */
+    UINotificationProgressMachineCopy(const CMachine &comSource,
+                                      const CMachine &comTarget,
+                                      const KCloneMode &enmCloneMode,
+                                      const QVector<KCloneOptions> &options);
+
+protected:
+
+    /** Returns object name. */
+    virtual QString name() const /* override final */;
+    /** Returns object details. */
+    virtual QString details() const /* override final */;
+    /** Creates and returns started progress-wrapper. */
+    virtual CProgress createProgress(COMResult &comResult) /* override final */;
+
+private slots:
+
+    /** Handles signal about progress being finished. */
+    void sltHandleProgressFinished();
+
+private:
+
+    /** Holds the machine being copied. */
+    CMachine                m_comSource;
+    /** Holds the machine being the target. */
+    CMachine                m_comTarget;
+    /** Holds the machine cloning mode. */
+    KCloneMode              m_enmCloneMode;
+    /** Holds the target machine options. */
+    QVector<KCloneOptions>  m_options;
 };
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVM.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVM.cpp	(revision 90324)
+++ trunk/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVM.cpp	(revision 90325)
@@ -17,4 +17,7 @@
 
 /* GUI includes: */
+#include "UICommon.h"
+#include "UIMessageCenter.h"
+#include "UINotificationCenter.h"
 #include "UIWizardCloneVM.h"
 #include "UIWizardCloneVMPageBasic1.h"
@@ -22,6 +25,4 @@
 #include "UIWizardCloneVMPageBasic3.h"
 #include "UIWizardCloneVMPageExpert.h"
-#include "UICommon.h"
-#include "UIMessageCenter.h"
 
 /* COM includes: */
@@ -147,29 +148,12 @@
         options.append(KCloneOptions_Link);
 
-    /* Start cloning. */
-    CProgress progress = srcMachine.CloneTo(cloneMachine, cloneMode, options);
-    if (!srcMachine.isOk())
-    {
-        msgCenter().cannotCreateClone(srcMachine, this);
-        return false;
-    }
-
-    /* Wait until done. */
-    msgCenter().showModalProgressDialog(progress, windowTitle(), ":/progress_clone_90px.png", this);
-    if (progress.GetCanceled())
-        return false;
-    if (!progress.isOk() || progress.GetResultCode() != 0)
-    {
-        msgCenter().cannotCreateClone(progress, srcMachine.GetName(), this);
-        return false;
-    }
-
-    /* Finally register the clone machine. */
-    vbox.RegisterMachine(cloneMachine);
-    if (!vbox.isOk())
-    {
-        msgCenter().cannotRegisterMachine(vbox, cloneMachine.GetName(), this);
-        return false;
-    }
+    /* Clone VM: */
+    UINotificationProgressMachineCopy *pNotification = new UINotificationProgressMachineCopy(srcMachine,
+                                                                                             cloneMachine,
+                                                                                             cloneMode,
+                                                                                             options);
+    connect(pNotification, &UINotificationProgressMachineCopy::sigMachineCopied,
+            &uiCommon(), &UICommon::sltHandleMachineCreated);
+    notificationCenter().append(pNotification);
 
     return true;
