Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 71631)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 71632)
@@ -841,4 +841,21 @@
                           "confirmStartMultipleMachines" /* auto-confirm id */);
 }
+
+void UIMessageCenter::cannotMoveMachine(const CMachine &machine, QWidget *pParent /* = 0 */) const
+{
+    error(pParent, MessageType_Error,
+          tr("Failed to move the virtual machine <b>%1</b>.")
+          .arg(CMachine(machine).GetName()),
+          UIErrorString::formatErrorInfo(machine));
+}
+
+void UIMessageCenter::cannotMoveMachine(const CProgress &progress, const QString &strMachineName, QWidget *pParent /* = 0 */) const
+{
+    error(pParent, MessageType_Error,
+          tr("Failed to move the virtual machine <b>%1</b>.")
+          .arg(strMachineName),
+          UIErrorString::formatErrorInfo(progress));
+}
+
 
 int UIMessageCenter::confirmSnapshotRestoring(const QString &strSnapshotName, bool fAlsoCreateNewSnapshot) const
@@ -2808,3 +2825,2 @@
     return iResultCode;
 }
-
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h	(revision 71631)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h	(revision 71632)
@@ -282,4 +282,6 @@
     void cannotPowerDownMachine(const CProgress &progress, const QString &strMachineName) const;
     bool confirmStartMultipleMachines(const QString &strNames) const;
+    void cannotMoveMachine(const CMachine &machine, QWidget *pParent = 0) const;
+    void cannotMoveMachine(const CProgress &progress, const QString &strMachineName, QWidget *pParent = 0) const;
 
     /* API: Snapshot warnings: */
@@ -536,3 +538,2 @@
 
 #endif /* !___UIMessageCenter_h___ */
-
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.cpp	(revision 71631)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.cpp	(revision 71632)
@@ -653,4 +653,38 @@
         setName(QApplication::translate("UIActionPool", "Cl&one..."));
         setStatusTip(QApplication::translate("UIActionPool", "Clone selected virtual machine"));
+    }
+};
+
+/** Simple action extension, used as 'Perform Move Machine' action class. */
+class UIActionSimpleSelectorMachinePerformMove : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionSimpleSelectorMachinePerformMove(UIActionPool *pParent)
+        : UIActionSimple(pParent, ":/vm_clone_16px.png", ":/vm_clone_disabled_16px.png")
+    {}
+
+protected:
+
+    /** Returns shortcut extra-data ID. */
+    virtual QString shortcutExtraDataID() const /* override */
+    {
+        return QString("MoveVM");
+    }
+
+    /** Returns default shortcut. */
+    virtual QKeySequence defaultShortcut(UIActionPoolType) const /* override */
+    {
+        return QKeySequence("Ctrl+M");
+    }
+
+    /** Handles translation event. */
+    virtual void retranslateUi() /* override */
+    {
+        setName(QApplication::translate("UIActionPool", "&Move..."));
+        setStatusTip(QApplication::translate("UIActionPool", "Move selected virtual machine"));
     }
 };
@@ -1571,4 +1605,5 @@
     m_pool[UIActionIndexST_M_Machine_S_Settings] = new UIActionSimpleSelectorMachineShowSettings(this);
     m_pool[UIActionIndexST_M_Machine_S_Clone] = new UIActionSimpleSelectorMachinePerformClone(this);
+    m_pool[UIActionIndexST_M_Machine_S_Move] = new UIActionSimpleSelectorMachinePerformMove(this);
     m_pool[UIActionIndexST_M_Machine_S_Remove] = new UIActionSimpleSelectorMachinePerformRemove(this);
     m_pool[UIActionIndexST_M_Machine_S_AddGroup] = new UIActionSimpleSelectorMachinePerformGroup(this);
@@ -1640,3 +1675,2 @@
 
 #include "UIActionPoolSelector.moc"
-
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.h	(revision 71631)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.h	(revision 71632)
@@ -74,4 +74,5 @@
     UIActionIndexST_M_Machine_S_Settings,
     UIActionIndexST_M_Machine_S_Clone,
+    UIActionIndexST_M_Machine_S_Move,
     UIActionIndexST_M_Machine_S_Remove,
     UIActionIndexST_M_Machine_S_AddGroup,
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp	(revision 71631)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp	(revision 71632)
@@ -671,5 +671,5 @@
 }
 
-void UISelectorWindow::sltOpenCloneMachineWizard()
+void UISelectorWindow::sltOpenCLonemachinewizard()
 {
     /* Get current item: */
@@ -691,4 +691,42 @@
     /* Unlock the action allowing further calls: */
     actionPool()->action(UIActionIndexST_M_Machine_S_Clone)->setEnabled(true);
+}
+
+void UISelectorWindow::sltPerformMoveMachine()
+{
+    UIVMItem *pItem = currentItem();
+    AssertMsgReturnVoid(pItem, ("Current item should be selected!\n"));
+
+    /* Open a session thru which we will modify the machine: */
+    CSession session = vboxGlobal().openSession(pItem->id(), KLockType_Write);
+    if (session.isNull())
+        return;
+
+    /* Get session machine: */
+    CMachine machine = session.GetMachine();
+    AssertMsgReturnVoid(!machine.isNull(), ("Invalid Machine!\n"));
+
+    /* Open a file dialog for the user to select a destination folder. Start with the default machine folder: */
+    CVirtualBox vbox = vboxGlobal().virtualBox();
+    QString strBaseFolder = vbox.GetSystemProperties().GetDefaultMachineFolder();
+    QString strTitle = tr("Select a destination folder to move the selected virtual machine");
+    QString strDestinationFolder = QIFileDialog::getExistingDirectory(strBaseFolder, this, strTitle);
+    if (strDestinationFolder.isEmpty())
+    {
+        session.UnlockMachine();
+        return;
+    }
+    CProgress progress = machine.MoveTo(strDestinationFolder, "basic");
+
+    if (machine.isOk())
+    {
+        /* Show machine move progress: */
+        msgCenter().showModalProgressDialog(progress, machine.GetName(), ":/progress_clone_90px.png");
+        if (!progress.isOk() || progress.GetResultCode() != 0)
+            msgCenter().cannotMoveMachine(progress, machine.GetName());
+    }
+    else
+        msgCenter().cannotMoveMachine(machine);
+    session.UnlockMachine();
 }
 
@@ -1662,4 +1700,5 @@
     addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Settings));
     addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Clone));
+    addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Move));
     addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Remove));
     addAction(actionPool()->action(UIActionIndexST_M_Machine_S_AddGroup));
@@ -1680,4 +1719,5 @@
     pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Settings));
     pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Clone));
+    pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Move));
     pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Remove));
     pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_AddGroup));
@@ -1702,4 +1742,5 @@
                      << actionPool()->action(UIActionIndexST_M_Machine_S_Settings)
                      << actionPool()->action(UIActionIndexST_M_Machine_S_Clone)
+                     << actionPool()->action(UIActionIndexST_M_Machine_S_Move)
                      << actionPool()->action(UIActionIndexST_M_Machine_S_Remove)
                      << actionPool()->action(UIActionIndexST_M_Machine_S_AddGroup)
@@ -2070,4 +2111,5 @@
     connect(actionPool()->action(UIActionIndexST_M_Machine_S_Settings), SIGNAL(triggered()), this, SLOT(sltOpenMachineSettingsDialog()));
     connect(actionPool()->action(UIActionIndexST_M_Machine_S_Clone), SIGNAL(triggered()), this, SLOT(sltOpenCloneMachineWizard()));
+    connect(actionPool()->action(UIActionIndexST_M_Machine_S_Move), SIGNAL(triggered()), this, SLOT(sltPerformMoveMachine()));
     connect(actionPool()->action(UIActionIndexST_M_Machine_M_StartOrShow), SIGNAL(triggered()), this, SLOT(sltPerformStartOrShowMachine()));
     connect(actionPool()->action(UIActionIndexST_M_Machine_T_Pause), SIGNAL(toggled(bool)), this, SLOT(sltPerformPauseOrResumeMachine(bool)));
@@ -2365,4 +2407,5 @@
     actionPool()->action(UIActionIndexST_M_Machine_S_Settings)->setEnabled(isActionEnabled(UIActionIndexST_M_Machine_S_Settings, items));
     actionPool()->action(UIActionIndexST_M_Machine_S_Clone)->setEnabled(isActionEnabled(UIActionIndexST_M_Machine_S_Clone, items));
+    actionPool()->action(UIActionIndexST_M_Machine_S_Move)->setEnabled(isActionEnabled(UIActionIndexST_M_Machine_S_Move, items));
     actionPool()->action(UIActionIndexST_M_Machine_S_Remove)->setEnabled(isActionEnabled(UIActionIndexST_M_Machine_S_Remove, items));
     actionPool()->action(UIActionIndexST_M_Machine_S_AddGroup)->setEnabled(isActionEnabled(UIActionIndexST_M_Machine_S_AddGroup, items));
@@ -2476,4 +2519,5 @@
         }
         case UIActionIndexST_M_Machine_S_Clone:
+        case UIActionIndexST_M_Machine_S_Move:
         {
             return !m_pPaneChooser->isGroupSavingInProgress() &&
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.h	(revision 71631)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.h	(revision 71632)
@@ -157,4 +157,6 @@
         /** Handles call to open Clone Machine wizard. */
         void sltOpenCloneMachineWizard();
+        /** Handles the Move Machine action. */
+        void sltPerformMoveMachine();
         /** Handles call to start or show machine. */
         void sltPerformStartOrShowMachine();
@@ -387,3 +389,2 @@
 
 #endif /* !___UISelectorWindow_h___ */
-
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.cpp	(revision 71631)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.cpp	(revision 71632)
@@ -1269,4 +1269,5 @@
     m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Settings));
     m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Clone));
+    m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Move));
     m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Remove));
     m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_AddGroup));
@@ -2239,3 +2240,2 @@
     COMBase::CleanupCOM();
 }
-
