Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 54793)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 54794)
@@ -46,7 +46,8 @@
 # include "UIActionPool.h"
 # include "UIConverter.h"
+# include "UISettingsDefs.h"
+# include "UIMessageCenter.h"
 # ifdef DEBUG
 #  include "VBoxUtils.h"
-#  include "UIMessageCenter.h"
 #  include "UIVirtualBoxEventHandler.h"
 #  include "UIIconPool.h"
@@ -76,4 +77,5 @@
 /* Namespaces: */
 using namespace UIExtraDataDefs;
+using namespace UISettingsDefs;
 
 
@@ -1913,4 +1915,6 @@
         /* Update global extra-data: */
         vbox.SetExtraData(strKey, strValue);
+        if (!vbox.isOk())
+            msgCenter().cannotSetExtraData(vbox, strKey, strValue);
     }
     /* Machine extra-data: */
@@ -1919,8 +1923,24 @@
         /* Search for corresponding machine: */
         CVirtualBox vbox = vboxGlobal().virtualBox();
-        CMachine machine = vbox.FindMachine(strID);
+        const CMachine machine = vbox.FindMachine(strID);
         AssertReturnVoid(vbox.isOk() && !machine.isNull());
+        /* Check the configuration access-level: */
+        const KMachineState machineState = machine.GetState();
+        const KSessionState sessionState = machine.GetSessionState();
+        const ConfigurationAccessLevel cLevel = configurationAccessLevel(sessionState, machineState);
+        /* Prepare machine session: */
+        CSession session;
+        if (cLevel == ConfigurationAccessLevel_Full)
+            session = vboxGlobal().openSession(strID);
+        else
+            session = vboxGlobal().openExistingSession(strID);
+        AssertReturnVoid(!session.isNull());
+        /* Get machine from that session: */
+        CMachine sessionMachine = session.GetMachine();
         /* Update machine extra-data: */
-        machine.SetExtraData(strKey, strValue);
+        sessionMachine.SetExtraData(strKey, strValue);
+        if (!sessionMachine.isOk())
+            msgCenter().cannotSetExtraData(sessionMachine, strKey, strValue);
+        session.UnlockMachine();
     }
 }
@@ -1944,5 +1964,5 @@
 }
 
-void UIExtraDataManager::setExtraDataStringList(const QString &strKey, const QStringList &strValue, const QString &strID /* = GlobalID */)
+void UIExtraDataManager::setExtraDataStringList(const QString &strKey, const QStringList &value, const QString &strID /* = GlobalID */)
 {
     /* Make sure VBoxSVC is available: */
@@ -1958,5 +1978,5 @@
 
     /* [Re]cache passed value: */
-    data[strKey] = strValue.join(",");
+    data[strKey] = value.join(",");
 
     /* Global extra-data: */
@@ -1966,5 +1986,7 @@
         CVirtualBox vbox = vboxGlobal().virtualBox();
         /* Update global extra-data: */
-        vbox.SetExtraDataStringList(strKey, strValue);
+        vbox.SetExtraDataStringList(strKey, value);
+        if (!vbox.isOk())
+            msgCenter().cannotSetExtraData(vbox, strKey, value.join(","));
     }
     /* Machine extra-data: */
@@ -1973,8 +1995,24 @@
         /* Search for corresponding machine: */
         CVirtualBox vbox = vboxGlobal().virtualBox();
-        CMachine machine = vbox.FindMachine(strID);
+        const CMachine machine = vbox.FindMachine(strID);
         AssertReturnVoid(vbox.isOk() && !machine.isNull());
+        /* Check the configuration access-level: */
+        const KMachineState machineState = machine.GetState();
+        const KSessionState sessionState = machine.GetSessionState();
+        const ConfigurationAccessLevel cLevel = configurationAccessLevel(sessionState, machineState);
+        /* Prepare machine session: */
+        CSession session;
+        if (cLevel == ConfigurationAccessLevel_Full)
+            session = vboxGlobal().openSession(strID);
+        else
+            session = vboxGlobal().openExistingSession(strID);
+        AssertReturnVoid(!session.isNull());
+        /* Get machine from that session: */
+        CMachine sessionMachine = session.GetMachine();
         /* Update machine extra-data: */
-        machine.SetExtraDataStringList(strKey, strValue);
+        sessionMachine.SetExtraDataStringList(strKey, value);
+        if (!sessionMachine.isOk())
+            msgCenter().cannotSetExtraData(sessionMachine, strKey, value.join(","));
+        session.UnlockMachine();
     }
 }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 54793)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 54794)
@@ -124,7 +124,7 @@
           * If valid @a strID is set => applies to machine extra-data, otherwise => to global one. */
         QStringList extraDataStringList(const QString &strKey, const QString &strID = GlobalID);
-        /** Defines extra-data value corresponding to passed @a strKey as strValue.
+        /** Defines extra-data value corresponding to passed @a strKey as value.
           * If valid @a strID is set => applies to machine extra-data, otherwise => to global one. */
-        void setExtraDataStringList(const QString &strKey, const QStringList &strValue, const QString &strID = GlobalID);
+        void setExtraDataStringList(const QString &strKey, const QStringList &value, const QString &strID = GlobalID);
     /** @} */
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 54793)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 54794)
@@ -514,4 +514,20 @@
              "Make sure your desktop environment can properly handle URLs of this type.")
              .arg(strUrl));
+}
+
+void UIMessageCenter::cannotSetExtraData(const CVirtualBox &vbox, const QString &strKey, const QString &strValue)
+{
+    error(0, MessageType_Error,
+          tr("Failed to set the global VirtualBox extra data for key <i>%1</i> to value <i>{%2}</i>.")
+             .arg(strKey, strValue),
+          formatErrorInfo(vbox));
+}
+
+void UIMessageCenter::cannotSetExtraData(const CMachine &machine, const QString &strKey, const QString &strValue)
+{
+    error(0, MessageType_Error,
+          tr("Failed to set the extra data for key <i>%1</i> of machine <i>%2</i> to value <i>{%3}</i>.")
+             .arg(strKey, CMachine(machine).GetName(), strValue),
+          formatErrorInfo(machine));
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h	(revision 54793)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h	(revision 54794)
@@ -171,4 +171,6 @@
     void cannotGetMediaAccessibility(const UIMedium &medium) const;
     void cannotOpenURL(const QString &strUrl) const;
+    void cannotSetExtraData(const CVirtualBox &vbox, const QString &strKey, const QString &strValue);
+    void cannotSetExtraData(const CMachine &machine, const QString &strKey, const QString &strValue);
 
     /* API: Selector warnings: */
