Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 51208)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 51209)
@@ -241,4 +241,14 @@
 #endif /* VBOX_GUI_WITH_NETWORK_MANAGER */
 
+bool UIExtraDataManager::isFirstRun(const QString &strId) const
+{
+    return isFeatureAllowed(GUI_FirstRun, strId);
+}
+
+void UIExtraDataManager::setFirstRun(bool fIsFirstRun, const QString &strId)
+{
+    setExtraDataString(GUI_FirstRun, toFeatureAllowed(fIsFirstRun), strId);
+}
+
 bool UIExtraDataManager::shouldWeShowMachine(const QString &strID) const
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 51208)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 51209)
@@ -114,4 +114,9 @@
     bool shouldWeAllowApplicationUpdate() const;
 #endif /* VBOX_GUI_WITH_NETWORK_MANAGER */
+
+    /** Returns whether this machine started for the first time. */
+    bool isFirstRun(const QString &strId) const;
+    /** Defines whether this machine started for the first time. */
+    void setFirstRun(bool fIsFirstRun, const QString &strId);
 
     /** Returns whether we should show machine. */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 51208)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 51209)
@@ -1140,7 +1140,5 @@
 
         /* Is there should be First RUN Wizard? */
-        strSettings = machine.GetExtraData(GUI_FirstRun);
-        if (strSettings == "yes")
-            m_fIsFirstTimeStarted = true;
+        m_fIsFirstTimeStarted = gEDataManager->isFirstRun(vboxGlobal().managedVMUuid());
 
         /* Ignore mediums mounted at runtime? */
@@ -1188,6 +1186,6 @@
     /* Save extra-data settings: */
     {
-        /* Disable First RUN Wizard for the since now: */
-        machine.SetExtraData(GUI_FirstRun, QString());
+        /* Disable First RUN Wizard: */
+        gEDataManager->setFirstRun(false, vboxGlobal().managedVMUuid());
 
         /* Remember if guest should autoresize: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.cpp	(revision 51208)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.cpp	(revision 51209)
@@ -829,8 +829,7 @@
         }
 
-        /* Clear the "GUI_FirstRun" extra data key in case if
-         * the boot order or disk configuration were changed: */
+        /* Disable First RUN Wizard: */
         if (m_fResetFirstRunFlag)
-            m_machine.SetExtraData(GUI_FirstRun, QString::null);
+            gEDataManager->setFirstRun(false, m_strMachineId);
 
         /* Save settings finally: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVM.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVM.cpp	(revision 51208)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVM.cpp	(revision 51209)
@@ -75,6 +75,9 @@
         }
 
-        /* The FirstRun wizard is to be shown only when we don't attach any virtual hard drive or attach a new (empty) one.
-         * Selecting an existing virtual hard drive will cancel the FirstRun wizard. */
+        /* The First RUN Wizard is to be shown:
+         * 1. if we don't attach any virtual hard-drive
+         * 2. or attach a new (empty) one.
+         * Usually we are assigning extra-data values through UIExtraDataManager,
+         * but in that special case VM was not registered yet, so UIExtraDataManager is unaware of it. */
         if (field("virtualDiskId").toString().isNull() || !field("virtualDisk").value<CMedium>().isNull())
             m_machine.SetExtraData(GUI_FirstRun, "yes");
