Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 41061)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 41062)
@@ -441,25 +441,20 @@
 }
 
-
-QWidget *VBoxGlobal::vmWindow()
-{
-    if (isVMConsoleProcess())
-    {
-        if (m_pVirtualMachine)
-            return m_pVirtualMachine->mainWindow();
-    }
-    return NULL;
-}
-
-bool VBoxGlobal::createVirtualMachine(const CSession &session)
-{
-    if (!m_pVirtualMachine && !session.isNull())
-    {
-        UIMachine *pVirtualMachine = new UIMachine(&m_pVirtualMachine, session);
-        Assert(pVirtualMachine == m_pVirtualMachine);
-        NOREF(pVirtualMachine);
-        return true;
-    }
-    return false;
+bool VBoxGlobal::startMachine(const QString &strMachineId)
+{
+    /* Some restrictions: */
+    AssertMsg(mValid, ("VBoxGlobal is invalid"));
+    AssertMsg(!m_pVirtualMachine, ("Machine already started"));
+
+    /* Create session: */
+    CSession session = vboxGlobal().openSession(strMachineId);
+    if (session.isNull())
+        return false;
+
+    /* Start virtual machine: */
+    UIMachine *pVirtualMachine = new UIMachine(&m_pVirtualMachine, session);
+    Assert(pVirtualMachine == m_pVirtualMachine);
+    Q_UNUSED(pVirtualMachine);
+    return true;
 }
 
@@ -467,4 +462,11 @@
 {
     return m_pVirtualMachine;
+}
+
+QWidget* VBoxGlobal::vmWindow()
+{
+    if (isVMConsoleProcess() && m_pVirtualMachine)
+        return m_pVirtualMachine->mainWindow();
+    return 0;
 }
 
@@ -2263,18 +2265,4 @@
 
     return session;
-}
-
-/**
- *  Starts a machine with the given ID.
- */
-bool VBoxGlobal::startMachine(const QString &strId)
-{
-    AssertReturn(mValid, false);
-
-    CSession session = vboxGlobal().openSession(strId);
-    if (session.isNull())
-        return false;
-
-    return createVirtualMachine(session);
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h	(revision 41061)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h	(revision 41062)
@@ -142,12 +142,12 @@
     UISelectorWindow &selectorWnd();
 
-    QWidget *vmWindow();
-
-    bool createVirtualMachine(const CSession &session);
+    /* VM stuff: */
+    bool startMachine(const QString &strMachineId);
     UIMachine* virtualMachine();
-
-    /* main window handle storage */
-    void setMainWindow (QWidget *aMainWindow) { mMainWindow = aMainWindow; }
-    QWidget *mainWindow() const { return mMainWindow; }
+    QWidget* vmWindow();
+
+    /* Main application window storage: */
+    void setMainWindow(QWidget *pMainWindow) { mMainWindow = pMainWindow; }
+    QWidget* mainWindow() const { return mMainWindow; }
 
     bool is3DAvailable() const { return m3DAvailable; }
@@ -598,6 +598,4 @@
     CSession openExistingSession(const QString &aId) { return openSession (aId, true); }
 
-    bool startMachine(const QString &strId);
-
     void startEnumeratingMedia();
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachine.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachine.cpp	(revision 41061)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachine.cpp	(revision 41062)
@@ -382,9 +382,9 @@
     , m_pVisualState(0)
 {
-    /* Storing self: */
+    /* Store self pointer: */
     if (m_ppThis)
         *m_ppThis = this;
 
-    /* Create UISession object: */
+    /* Create UI session: */
     m_pSession = new UISession(this, m_session);
 
@@ -406,13 +406,20 @@
     /* Save machine settings: */
     saveMachineSettings();
-    /* Erase itself pointer: */
-    *m_ppThis = 0;
-    /* Delete uisession children in backward direction: */
+
+    /* Delete visual state: */
     delete m_pVisualState;
     m_pVisualState = 0;
+
+    /* Delete UI session: */
     delete m_pSession;
     m_pSession = 0;
+
+    /* Free session finally: */
     m_session.UnlockMachine();
     m_session.detach();
+
+    /* Clear self pointer: */
+    *m_ppThis = 0;
+
     /* Quit application: */
     QApplication::quit();
