Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 66500)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 66501)
@@ -58,4 +58,5 @@
 /* COM includes: */
 # include "CAudioAdapter.h"
+# include "CParallelPort.h"
 # include "CConsole.h"
 # include "CMachine.h"
@@ -1221,4 +1222,18 @@
           tr("Cannot save network adapter settings."),
           formatErrorInfo(comAdapter));
+}
+
+void UIMessageCenter::cannotSaveParallelSettings(const CMachine &comMachine, QWidget *pParent /* = 0 */)
+{
+    error(pParent, MessageType_Error,
+          tr("Cannot save parallel ports settings."),
+          formatErrorInfo(comMachine));
+}
+
+void UIMessageCenter::cannotSaveParallelPortSettings(const CParallelPort &comPort, QWidget *pParent /* = 0 */)
+{
+    error(pParent, MessageType_Error,
+          tr("Cannot save parallel port settings."),
+          formatErrorInfo(comPort));
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h	(revision 66500)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h	(revision 66501)
@@ -249,4 +249,6 @@
     void cannotSaveNetworkSettings(const CMachine &comMachine, QWidget *pParent = 0);
     void cannotSaveNetworkAdapterSettings(const CNetworkAdapter &comAdapter, QWidget *pParent = 0);
+    void cannotSaveParallelSettings(const CMachine &comMachine, QWidget *pParent = 0);
+    void cannotSaveParallelPortSettings(const CParallelPort &comPort, QWidget *pParent = 0);
     void cannotAttachDevice(const CMachine &machine, UIMediumType type, const QString &strLocation, const StorageSlot &storageSlot, QWidget *pParent = 0);
     bool warnAboutIncorrectPort(QWidget *pParent = 0) const;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsParallel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsParallel.cpp	(revision 66500)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsParallel.cpp	(revision 66501)
@@ -27,4 +27,5 @@
 # include "QIWidgetValidator.h"
 # include "UIMachineSettingsParallel.h"
+# include "UIMessageCenter.h"
 # include "VBoxGlobal.h"
 
@@ -409,43 +410,6 @@
     UISettingsPageMachine::fetchData(data);
 
-    /* Make sure machine is offline & parallel data was changed: */
-    if (isMachineOffline() && m_pCache->wasChanged())
-    {
-        /* For each parallel port: */
-        for (int iPort = 0; iPort < m_pTabWidget->count(); ++iPort)
-        {
-            /* Get old parallel data from the cache: */
-            const UIDataSettingsMachineParallelPort &oldPortData = m_pCache->base().m_ports.at(iPort);
-            /* Get new parallel data from the cache: */
-            const UIDataSettingsMachineParallelPort &newPortData = m_pCache->data().m_ports.at(iPort);
-
-            /* Make sure port data was changed: */
-            if (newPortData != oldPortData)
-            {
-                /* Check if port still valid: */
-                CParallelPort comPort = m_machine.GetParallelPort(iPort);
-                /* Store new adapter data: */
-                if (!comPort.isNull())
-                {
-                    /* Whether the port is enabled: */
-                    if (   comPort.isOk()
-                        && newPortData.m_fPortEnabled != oldPortData.m_fPortEnabled)
-                        comPort.SetEnabled(newPortData.m_fPortEnabled);
-                    /* Port IRQ: */
-                    if (   comPort.isOk()
-                        && newPortData.m_uIRQ != oldPortData.m_uIRQ)
-                        comPort.SetIRQ(newPortData.m_uIRQ);
-                    /* Port IO base: */
-                    if (   comPort.isOk()
-                        && newPortData.m_uIOBase != oldPortData.m_uIOBase)
-                        comPort.SetIOBase(newPortData.m_uIOBase);
-                    /* Port path: */
-                    if (   comPort.isOk()
-                        && newPortData.m_strPath != oldPortData.m_strPath)
-                        comPort.SetPath(newPortData.m_strPath);
-                }
-            }
-        }
-    }
+    /* Update parallel data and failing state: */
+    setFailed(!saveParallelData());
 
     /* Upload machine to data: */
@@ -589,4 +553,74 @@
 }
 
+bool UIMachineSettingsParallelPage::saveParallelData()
+{
+    /* Prepare result: */
+    bool fSuccess = true;
+    /* Save parallel settings from the cache: */
+    if (fSuccess && isMachineInValidMode() && m_pCache->wasChanged())
+    {
+        /* For each port: */
+        for (int iSlot = 0; fSuccess && iSlot < m_pTabWidget->count(); ++iSlot)
+            fSuccess = savePortData(iSlot);
+    }
+    /* Return result: */
+    return fSuccess;
+}
+
+bool UIMachineSettingsParallelPage::savePortData(int iPort)
+{
+    /* Prepare result: */
+    bool fSuccess = true;
+    /* Save adapter settings from the cache: */
+    if (fSuccess)
+    {
+        /* Get old parallel data from the cache: */
+        const UIDataSettingsMachineParallelPort &oldPortData = m_pCache->base().m_ports.at(iPort);
+        /* Get new parallel data from the cache: */
+        const UIDataSettingsMachineParallelPort &newPortData = m_pCache->data().m_ports.at(iPort);
+
+        /* Make sure port data was changed: */
+        if (newPortData != oldPortData)
+        {
+            /* Get parallel port for further activities: */
+            CParallelPort comPort = m_machine.GetParallelPort(iPort);
+            fSuccess = m_machine.isOk() && comPort.isNotNull();
+            /* Show error message if necessary: */
+            if (!fSuccess)
+                msgCenter().cannotSaveParallelSettings(m_machine, this);
+
+            /* Save whether the port is enabled: */
+            if (fSuccess && isMachineOffline() && newPortData.m_fPortEnabled != oldPortData.m_fPortEnabled)
+            {
+                comPort.SetEnabled(newPortData.m_fPortEnabled);
+                fSuccess = comPort.isOk();
+            }
+            /* Save port IRQ: */
+            if (fSuccess && isMachineOffline() && newPortData.m_uIRQ != oldPortData.m_uIRQ)
+            {
+                comPort.SetIRQ(newPortData.m_uIRQ);
+                fSuccess = comPort.isOk();
+            }
+            /* Save port IO base: */
+            if (fSuccess && isMachineOffline() && newPortData.m_uIOBase != oldPortData.m_uIOBase)
+            {
+                comPort.SetIOBase(newPortData.m_uIOBase);
+                fSuccess = comPort.isOk();
+            }
+            /* Save port path: */
+            if (fSuccess && isMachineOffline() && newPortData.m_strPath != oldPortData.m_strPath)
+            {
+                comPort.SetPath(newPortData.m_strPath);
+                fSuccess = comPort.isOk();
+            }
+            /* Show error message if necessary: */
+            if (!fSuccess)
+                msgCenter().cannotSaveParallelPortSettings(comPort, this);
+        }
+    }
+    /* Return result: */
+    return fSuccess;
+}
+
 # include "UIMachineSettingsParallel.moc"
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsParallel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsParallel.h	(revision 66500)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsParallel.h	(revision 66501)
@@ -77,4 +77,9 @@
     void cleanup();
 
+    /** Saves existing parallel data from the cache. */
+    bool saveParallelData();
+    /** Saves existing port data from the cache. */
+    bool savePortData(int iPort);
+
     /** Holds the tab-widget instance. */
     QITabWidget *m_pTabWidget;
