Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 87305)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 87306)
@@ -1866,4 +1866,67 @@
 }
 
+void UIMessageCenter::warnAboutDHCPServerIsNotEnabled(const QString &strName, QWidget *pParent /* = 0 */) const
+{
+    alert(pParent, MessageType_Error,
+          tr("Host interface <nobr><b>%1</b></nobr> is set to obtain the address "
+             "automatically but the corresponding DHCP server is not enabled.").arg(strName));
+}
+
+void UIMessageCenter::warnAboutInvalidIPv4Address(const QString &strName, QWidget *pParent /* = 0 */) const
+{
+    alert(pParent, MessageType_Error,
+          tr("Host interface <nobr><b>%1</b></nobr> does not "
+             "currently have a valid IPv4 address.").arg(strName));
+}
+
+void UIMessageCenter::warnAboutInvalidIPv4Mask(const QString &strName, QWidget *pParent /* = 0 */) const
+{
+    alert(pParent, MessageType_Error,
+          tr("Host interface <nobr><b>%1</b></nobr> does not "
+             "currently have a valid IPv4 network mask.").arg(strName));
+}
+
+void UIMessageCenter::warnAboutInvalidIPv6Address(const QString &strName, QWidget *pParent /* = 0 */) const
+{
+    alert(pParent, MessageType_Error,
+          tr("Host interface <nobr><b>%1</b></nobr> does not "
+             "currently have a valid IPv6 address.").arg(strName));
+}
+
+void UIMessageCenter::warnAboutInvalidIPv6PrefixLength(const QString &strName, QWidget *pParent /* = 0 */) const
+{
+    alert(pParent, MessageType_Error,
+          tr("Host interface <nobr><b>%1</b></nobr> does not "
+             "currently have a valid IPv6 prefix length.").arg(strName));
+}
+
+void UIMessageCenter::warnAboutInvalidDHCPServerAddress(const QString &strName, QWidget *pParent /* = 0 */) const
+{
+    alert(pParent, MessageType_Error,
+          tr("Host interface <nobr><b>%1</b></nobr> does not "
+             "currently have a valid DHCP server address.").arg(strName));
+}
+
+void UIMessageCenter::warnAboutInvalidDHCPServerMask(const QString &strName, QWidget *pParent /* = 0 */) const
+{
+    alert(pParent, MessageType_Error,
+          tr("Host interface <nobr><b>%1</b></nobr> does not "
+             "currently have a valid DHCP server mask.").arg(strName));
+}
+
+void UIMessageCenter::warnAboutInvalidDHCPServerLowerAddress(const QString &strName, QWidget *pParent /* = 0 */) const
+{
+    alert(pParent, MessageType_Error,
+          tr("Host interface <nobr><b>%1</b></nobr> does not "
+             "currently have a valid DHCP server lower address bound.").arg(strName));
+}
+
+void UIMessageCenter::warnAboutInvalidDHCPServerUpperAddress(const QString &strName, QWidget *pParent /* = 0 */) const
+{
+    alert(pParent, MessageType_Error,
+          tr("Host interface <nobr><b>%1</b></nobr> does not "
+             "currently have a valid DHCP server upper address bound.").arg(strName));
+}
+
 void UIMessageCenter::cannotAcquireNATNetworks(const CVirtualBox &comVBox, QWidget *pParent /* = 0 */) const
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h	(revision 87305)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h	(revision 87306)
@@ -394,4 +394,13 @@
     void cannotAcquireDHCPServerParameter(const CDHCPServer &comServer, QWidget *pParent = 0) const;
     void cannotSaveDHCPServerParameter(const CDHCPServer &comServer, QWidget *pParent = 0) const;
+    void warnAboutDHCPServerIsNotEnabled(const QString &strName, QWidget *pParent = 0) const;
+    void warnAboutInvalidIPv4Address(const QString &strName, QWidget *pParent = 0) const;
+    void warnAboutInvalidIPv4Mask(const QString &strName, QWidget *pParent = 0) const;
+    void warnAboutInvalidIPv6Address(const QString &strName, QWidget *pParent = 0) const;
+    void warnAboutInvalidIPv6PrefixLength(const QString &strName, QWidget *pParent = 0) const;
+    void warnAboutInvalidDHCPServerAddress(const QString &strName, QWidget *pParent = 0) const;
+    void warnAboutInvalidDHCPServerMask(const QString &strName, QWidget *pParent = 0) const;
+    void warnAboutInvalidDHCPServerLowerAddress(const QString &strName, QWidget *pParent = 0) const;
+    void warnAboutInvalidDHCPServerUpperAddress(const QString &strName, QWidget *pParent = 0) const;
     void cannotAcquireNATNetworks(const CVirtualBox &comVBox, QWidget *pParent = 0) const;
     void cannotAcquireNATNetworkParameter(const CNATNetwork &comNetwork, QWidget *pParent = 0) const;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetHostNetwork.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetHostNetwork.cpp	(revision 87305)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetHostNetwork.cpp	(revision 87306)
@@ -31,4 +31,5 @@
 #include "UIIconPool.h"
 #include "UIDetailsWidgetHostNetwork.h"
+#include "UIMessageCenter.h"
 #include "UINetworkManagerUtils.h"
 
@@ -42,16 +43,16 @@
     , m_enmEmbedding(enmEmbedding)
     , m_pTabWidget(0)
-    , m_pButtonAutomatic(0), m_pErrorPaneAutomatic(0)
-    , m_pButtonManual(0), m_pErrorPaneManual(0)
-    , m_pLabelIPv4(0), m_pEditorIPv4(0), m_pErrorPaneIPv4(0)
-    , m_pLabelNMv4(0), m_pEditorNMv4(0), m_pErrorPaneNMv4(0)
-    , m_pLabelIPv6(0), m_pEditorIPv6(0), m_pErrorPaneIPv6(0)
-    , m_pLabelNMv6(0), m_pEditorNMv6(0), m_pErrorPaneNMv6(0)
+    , m_pButtonAutomatic(0)
+    , m_pButtonManual(0)
+    , m_pLabelIPv4(0), m_pEditorIPv4(0)
+    , m_pLabelNMv4(0), m_pEditorNMv4(0)
+    , m_pLabelIPv6(0), m_pEditorIPv6(0)
+    , m_pLabelNMv6(0), m_pEditorNMv6(0)
     , m_pButtonBoxInterface(0)
     , m_pCheckBoxDHCP(0)
-    , m_pLabelDHCPAddress(0), m_pEditorDHCPAddress(0), m_pErrorPaneDHCPAddress(0)
-    , m_pLabelDHCPMask(0), m_pEditorDHCPMask(0), m_pErrorPaneDHCPMask(0)
-    , m_pLabelDHCPLowerAddress(0), m_pEditorDHCPLowerAddress(0), m_pErrorPaneDHCPLowerAddress(0)
-    , m_pLabelDHCPUpperAddress(0), m_pEditorDHCPUpperAddress(0), m_pErrorPaneDHCPUpperAddress(0)
+    , m_pLabelDHCPAddress(0), m_pEditorDHCPAddress(0)
+    , m_pLabelDHCPMask(0), m_pEditorDHCPMask(0)
+    , m_pLabelDHCPLowerAddress(0), m_pEditorDHCPLowerAddress(0)
+    , m_pLabelDHCPUpperAddress(0), m_pEditorDHCPUpperAddress(0)
     , m_pButtonBoxServer(0)
 {
@@ -69,4 +70,114 @@
     /* Load 'DHCP server' data: */
     loadDataForDHCPServer();
+}
+
+bool UIDetailsWidgetHostNetwork::revalidate() const
+{
+    /* Validate 'Interface' tab content: */
+    if (   m_newData.m_interface.m_fDHCPEnabled
+        && !m_newData.m_dhcpserver.m_fEnabled)
+    {
+        msgCenter().warnAboutDHCPServerIsNotEnabled(m_newData.m_interface.m_strName);
+        return false;
+    }
+    if (   !m_newData.m_interface.m_fDHCPEnabled
+        && !m_newData.m_interface.m_strAddress.trimmed().isEmpty()
+        && (   !RTNetIsIPv4AddrStr(m_newData.m_interface.m_strAddress.toUtf8().constData())
+            || RTNetStrIsIPv4AddrAny(m_newData.m_interface.m_strAddress.toUtf8().constData())))
+    {
+        msgCenter().warnAboutInvalidIPv4Address(m_newData.m_interface.m_strName);
+        return false;
+    }
+    if (   !m_newData.m_interface.m_fDHCPEnabled
+        && !m_newData.m_interface.m_strMask.trimmed().isEmpty()
+        && (   !RTNetIsIPv4AddrStr(m_newData.m_interface.m_strMask.toUtf8().constData())
+            || RTNetStrIsIPv4AddrAny(m_newData.m_interface.m_strMask.toUtf8().constData())))
+    {
+        msgCenter().warnAboutInvalidIPv4Mask(m_newData.m_interface.m_strName);
+        return false;
+    }
+    if (    !m_newData.m_interface.m_fDHCPEnabled
+        && m_newData.m_interface.m_fSupportedIPv6
+        && !m_newData.m_interface.m_strAddress6.trimmed().isEmpty()
+        && (   !RTNetIsIPv6AddrStr(m_newData.m_interface.m_strAddress6.toUtf8().constData())
+            || RTNetStrIsIPv6AddrAny(m_newData.m_interface.m_strAddress6.toUtf8().constData())))
+    {
+        msgCenter().warnAboutInvalidIPv6Address(m_newData.m_interface.m_strName);
+        return false;
+    }
+    bool fIsMaskPrefixLengthNumber = false;
+    const int iMaskPrefixLength = m_newData.m_interface.m_strPrefixLength6.trimmed().toInt(&fIsMaskPrefixLengthNumber);
+    if (   !m_newData.m_interface.m_fDHCPEnabled
+        && m_newData.m_interface.m_fSupportedIPv6
+        && (   !fIsMaskPrefixLengthNumber
+            || iMaskPrefixLength < 0
+            || iMaskPrefixLength > 128))
+    {
+        msgCenter().warnAboutInvalidIPv6PrefixLength(m_newData.m_interface.m_strName);
+        return false;
+    }
+
+    /* Validate 'DHCP server' tab content: */
+    if (   m_newData.m_dhcpserver.m_fEnabled
+        && (   !RTNetIsIPv4AddrStr(m_newData.m_dhcpserver.m_strAddress.toUtf8().constData())
+            || RTNetStrIsIPv4AddrAny(m_newData.m_dhcpserver.m_strAddress.toUtf8().constData())))
+    {
+        msgCenter().warnAboutInvalidDHCPServerAddress(m_newData.m_interface.m_strName);
+        return false;
+    }
+    if (   m_newData.m_dhcpserver.m_fEnabled
+        && (   !RTNetIsIPv4AddrStr(m_newData.m_dhcpserver.m_strMask.toUtf8().constData())
+            || RTNetStrIsIPv4AddrAny(m_newData.m_dhcpserver.m_strMask.toUtf8().constData())))
+    {
+        msgCenter().warnAboutInvalidDHCPServerMask(m_newData.m_interface.m_strName);
+        return false;
+    }
+    if (   m_newData.m_dhcpserver.m_fEnabled
+        && (   !RTNetIsIPv4AddrStr(m_newData.m_dhcpserver.m_strLowerAddress.toUtf8().constData())
+            || RTNetStrIsIPv4AddrAny(m_newData.m_dhcpserver.m_strLowerAddress.toUtf8().constData())))
+    {
+        msgCenter().warnAboutInvalidDHCPServerLowerAddress(m_newData.m_interface.m_strName);
+        return false;
+    }
+    if (   m_newData.m_dhcpserver.m_fEnabled
+        && (   !RTNetIsIPv4AddrStr(m_newData.m_dhcpserver.m_strUpperAddress.toUtf8().constData())
+            || RTNetStrIsIPv4AddrAny(m_newData.m_dhcpserver.m_strUpperAddress.toUtf8().constData())))
+    {
+        msgCenter().warnAboutInvalidDHCPServerUpperAddress(m_newData.m_interface.m_strName);
+        return false;
+    }
+
+    /* True by default: */
+    return true;
+}
+
+void UIDetailsWidgetHostNetwork::updateButtonStates()
+{
+//    if (m_oldData != m_newData)
+//        printf("Interface: %s, %s, %s, %s;  DHCP server: %d, %s, %s, %s, %s\n",
+//               m_newData.m_interface.m_strAddress.toUtf8().constData(),
+//               m_newData.m_interface.m_strMask.toUtf8().constData(),
+//               m_newData.m_interface.m_strAddress6.toUtf8().constData(),
+//               m_newData.m_interface.m_strPrefixLength6.toUtf8().constData(),
+//               (int)m_newData.m_dhcpserver.m_fEnabled,
+//               m_newData.m_dhcpserver.m_strAddress.toUtf8().constData(),
+//               m_newData.m_dhcpserver.m_strMask.toUtf8().constData(),
+//               m_newData.m_dhcpserver.m_strLowerAddress.toUtf8().constData(),
+//               m_newData.m_dhcpserver.m_strUpperAddress.toUtf8().constData());
+
+    /* Update 'Apply' / 'Reset' button states: */
+    if (m_pButtonBoxInterface)
+    {
+        m_pButtonBoxInterface->button(QDialogButtonBox::Cancel)->setEnabled(m_oldData != m_newData);
+        m_pButtonBoxInterface->button(QDialogButtonBox::Ok)->setEnabled(m_oldData != m_newData);
+    }
+    if (m_pButtonBoxServer)
+    {
+        m_pButtonBoxServer->button(QDialogButtonBox::Cancel)->setEnabled(m_oldData != m_newData);
+        m_pButtonBoxServer->button(QDialogButtonBox::Ok)->setEnabled(m_oldData != m_newData);
+    }
+
+    /* Notify listeners as well: */
+    emit sigDataChanged(m_oldData != m_newData);
 }
 
@@ -150,7 +261,4 @@
             setToolTip(tr("Apply Changes (%1)").arg(m_pButtonBoxServer->button(QDialogButtonBox::Ok)->shortcut().toString()));
     }
-
-    /* Retranslate validation: */
-    retranslateValidation();
 }
 
@@ -159,5 +267,4 @@
     m_newData.m_interface.m_fDHCPEnabled = fChecked;
     loadDataForInterface();
-    revalidate();
     updateButtonStates();
 }
@@ -167,5 +274,4 @@
     m_newData.m_interface.m_fDHCPEnabled = !fChecked;
     loadDataForInterface();
-    revalidate();
     updateButtonStates();
 }
@@ -174,5 +280,4 @@
 {
     m_newData.m_interface.m_strAddress = strText;
-    revalidate(m_pErrorPaneIPv4);
     updateButtonStates();
 }
@@ -181,5 +286,4 @@
 {
     m_newData.m_interface.m_strMask = strText;
-    revalidate(m_pErrorPaneNMv4);
     updateButtonStates();
 }
@@ -188,5 +292,4 @@
 {
     m_newData.m_interface.m_strAddress6 = strText;
-    revalidate(m_pErrorPaneIPv6);
     updateButtonStates();
 }
@@ -195,5 +298,4 @@
 {
     m_newData.m_interface.m_strPrefixLength6 = strText;
-    revalidate(m_pErrorPaneNMv6);
     updateButtonStates();
 }
@@ -203,5 +305,4 @@
     m_newData.m_dhcpserver.m_fEnabled = (bool)iChecked;
     loadDataForDHCPServer();
-    revalidate();
     updateButtonStates();
 }
@@ -210,5 +311,4 @@
 {
     m_newData.m_dhcpserver.m_strAddress = strText;
-    revalidate(m_pErrorPaneDHCPAddress);
     updateButtonStates();
 }
@@ -217,5 +317,4 @@
 {
     m_newData.m_dhcpserver.m_strMask = strText;
-    revalidate(m_pErrorPaneDHCPMask);
     updateButtonStates();
 }
@@ -224,5 +323,4 @@
 {
     m_newData.m_dhcpserver.m_strLowerAddress = strText;
-    revalidate(m_pErrorPaneDHCPLowerAddress);
     updateButtonStates();
 }
@@ -231,5 +329,4 @@
 {
     m_newData.m_dhcpserver.m_strUpperAddress = strText;
-    revalidate(m_pErrorPaneDHCPUpperAddress);
     updateButtonStates();
 }
@@ -314,7 +411,4 @@
 #endif
 
-            /* Get the required icon metric: */
-            const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize);
-
             /* Prepare automatic interface configuration layout: */
             QHBoxLayout *pLayoutAutomatic = new QHBoxLayout;
@@ -330,15 +424,4 @@
                             this, &UIDetailsWidgetHostNetwork::sltToggledButtonAutomatic);
                     pLayoutAutomatic->addWidget(m_pButtonAutomatic);
-                }
-                /* Prepare automatic interface configuration error pane: */
-                m_pErrorPaneAutomatic = new QLabel(pTabInterface);
-                if (m_pErrorPaneAutomatic)
-                {
-                    m_pErrorPaneAutomatic->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
-                    m_pErrorPaneAutomatic->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
-                    m_pErrorPaneAutomatic->setPixmap(UIIconPool::iconSet(":/status_error_16px.png")
-                                                     .pixmap(QSize(iIconMetric, iIconMetric)));
-
-                    pLayoutAutomatic->addWidget(m_pErrorPaneAutomatic);
                 }
 
@@ -363,15 +446,4 @@
                     pLayoutManual->addWidget(m_pButtonManual);
                 }
-                /* Prepare manual interface configuration error pane: */
-                m_pErrorPaneManual = new QLabel(pTabInterface);
-                if (m_pErrorPaneManual)
-                {
-                    m_pErrorPaneManual->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
-                    m_pErrorPaneManual->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
-                    m_pErrorPaneManual->setPixmap(UIIconPool::iconSet(":/status_error_16px.png")
-                                                  .pixmap(QSize(iIconMetric, iIconMetric)));
-
-                    pLayoutManual->addWidget(m_pErrorPaneManual);
-                }
 
                 pLayoutInterface->addLayout(pLayoutManual, 1, 0, 1, 3);
@@ -404,14 +476,4 @@
                     pLayoutIPv4->addWidget(m_pEditorIPv4);
                 }
-                /* Prepare IPv4 error pane: */
-                m_pErrorPaneIPv4 = new QLabel(pTabInterface);
-                if (m_pErrorPaneIPv4)
-                {
-                    m_pErrorPaneIPv4->setAlignment(Qt::AlignCenter);
-                    m_pErrorPaneIPv4->setPixmap(UIIconPool::iconSet(":/status_error_16px.png")
-                                                .pixmap(QSize(iIconMetric, iIconMetric)));
-
-                    pLayoutIPv4->addWidget(m_pErrorPaneIPv4);
-                }
 
                 pLayoutInterface->addLayout(pLayoutIPv4, 2, 2);
@@ -441,14 +503,4 @@
                     pLayoutNMv4->addWidget(m_pEditorNMv4);
                 }
-                /* Prepare NMv4 error pane: */
-                m_pErrorPaneNMv4 = new QLabel(pTabInterface);
-                if (m_pErrorPaneNMv4)
-                {
-                    m_pErrorPaneNMv4->setAlignment(Qt::AlignCenter);
-                    m_pErrorPaneNMv4->setPixmap(UIIconPool::iconSet(":/status_error_16px.png")
-                                                .pixmap(QSize(iIconMetric, iIconMetric)));
-
-                    pLayoutNMv4->addWidget(m_pErrorPaneNMv4);
-                }
 
                 pLayoutInterface->addLayout(pLayoutNMv4, 3, 2);
@@ -478,14 +530,4 @@
                     pLayoutIPv6->addWidget(m_pEditorIPv6);
                 }
-                /* Prepare IPv4 error pane: */
-                m_pErrorPaneIPv6 = new QLabel(pTabInterface);
-                if (m_pErrorPaneIPv6)
-                {
-                    m_pErrorPaneIPv6->setAlignment(Qt::AlignCenter);
-                    m_pErrorPaneIPv6->setPixmap(UIIconPool::iconSet(":/status_error_16px.png")
-                                                .pixmap(QSize(iIconMetric, iIconMetric)));
-
-                    pLayoutIPv6->addWidget(m_pErrorPaneIPv6);
-                }
 
                 pLayoutInterface->addLayout(pLayoutIPv6, 4, 2);
@@ -514,14 +556,4 @@
 
                     pLayoutNMv6->addWidget(m_pEditorNMv6);
-                }
-                /* Prepare NMv6 error pane: */
-                m_pErrorPaneNMv6 = new QLabel(pTabInterface);
-                if (m_pErrorPaneNMv6)
-                {
-                    m_pErrorPaneNMv6->setAlignment(Qt::AlignCenter);
-                    m_pErrorPaneNMv6->setPixmap(UIIconPool::iconSet(":/status_error_16px.png")
-                                                .pixmap(QSize(iIconMetric, iIconMetric)));
-
-                    pLayoutNMv6->addWidget(m_pErrorPaneNMv6);
                 }
 
@@ -577,7 +609,4 @@
 #endif
 
-            /* Get the required icon metric: */
-            const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize);
-
             /* Prepare DHCP server status check-box: */
             m_pCheckBoxDHCP = new QCheckBox(pTabDHCPServer);
@@ -615,14 +644,4 @@
                     pLayoutDHCPAddress->addWidget(m_pEditorDHCPAddress);
                 }
-                /* Prepare DHCP address error pane: */
-                m_pErrorPaneDHCPAddress = new QLabel(pTabDHCPServer);
-                if (m_pErrorPaneDHCPAddress)
-                {
-                    m_pErrorPaneDHCPAddress->setAlignment(Qt::AlignCenter);
-                    m_pErrorPaneDHCPAddress->setPixmap(UIIconPool::iconSet(":/status_error_16px.png")
-                                                       .pixmap(QSize(iIconMetric, iIconMetric)));
-
-                    pLayoutDHCPAddress->addWidget(m_pErrorPaneDHCPAddress);
-                }
 
                 pLayoutDHCPServer->addLayout(pLayoutDHCPAddress, 1, 2);
@@ -652,14 +671,4 @@
                     pLayoutDHCPMask->addWidget(m_pEditorDHCPMask);
                 }
-                /* Prepare DHCP mask error pane: */
-                m_pErrorPaneDHCPMask = new QLabel(pTabDHCPServer);
-                if (m_pErrorPaneDHCPMask)
-                {
-                    m_pErrorPaneDHCPMask->setAlignment(Qt::AlignCenter);
-                    m_pErrorPaneDHCPMask->setPixmap(UIIconPool::iconSet(":/status_error_16px.png")
-                                                    .pixmap(QSize(iIconMetric, iIconMetric)));
-
-                    pLayoutDHCPMask->addWidget(m_pErrorPaneDHCPMask);
-                }
 
                 pLayoutDHCPServer->addLayout(pLayoutDHCPMask, 2, 2);
@@ -689,14 +698,4 @@
                     pLayoutDHCPLowerAddress->addWidget(m_pEditorDHCPLowerAddress);
                 }
-                /* Prepare DHCP lower address error pane: */
-                m_pErrorPaneDHCPLowerAddress = new QLabel(pTabDHCPServer);
-                if (m_pErrorPaneDHCPLowerAddress)
-                {
-                    m_pErrorPaneDHCPLowerAddress->setAlignment(Qt::AlignCenter);
-                    m_pErrorPaneDHCPLowerAddress->setPixmap(UIIconPool::iconSet(":/status_error_16px.png")
-                                                            .pixmap(QSize(iIconMetric, iIconMetric)));
-
-                    pLayoutDHCPLowerAddress->addWidget(m_pErrorPaneDHCPLowerAddress);
-                }
 
                 pLayoutDHCPServer->addLayout(pLayoutDHCPLowerAddress, 3, 2);
@@ -725,14 +724,4 @@
 
                     pLayoutDHCPUpperAddress->addWidget(m_pEditorDHCPUpperAddress);
-                }
-                /* Prepare DHCP upper address error pane: */
-                m_pErrorPaneDHCPUpperAddress = new QLabel(pTabDHCPServer);
-                if (m_pErrorPaneDHCPUpperAddress)
-                {
-                    m_pErrorPaneDHCPUpperAddress->setAlignment(Qt::AlignCenter);
-                    m_pErrorPaneDHCPUpperAddress->setPixmap(UIIconPool::iconSet(":/status_error_16px.png")
-                                                            .pixmap(QSize(iIconMetric, iIconMetric)));
-
-                    pLayoutDHCPUpperAddress->addWidget(m_pErrorPaneDHCPUpperAddress);
                 }
 
@@ -886,151 +875,2 @@
     }
 }
-
-void UIDetailsWidgetHostNetwork::revalidate(QWidget *pWidget /* = 0 */)
-{
-    /* Validate 'Interface' tab content: */
-    if (m_pErrorPaneAutomatic && (!pWidget || pWidget == m_pErrorPaneAutomatic))
-    {
-        const bool fError =    m_newData.m_interface.m_fDHCPEnabled
-                            && !m_newData.m_dhcpserver.m_fEnabled;
-        m_pErrorPaneAutomatic->setVisible(fError);
-    }
-    if (m_pErrorPaneManual && (!pWidget || pWidget == m_pErrorPaneManual))
-    {
-        const bool fError = false;
-        m_pErrorPaneManual->setVisible(fError);
-    }
-    if (m_pErrorPaneIPv4 && (!pWidget || pWidget == m_pErrorPaneIPv4))
-    {
-        const bool fError =    !m_newData.m_interface.m_fDHCPEnabled
-                            && !m_newData.m_interface.m_strAddress.trimmed().isEmpty()
-                            && (   !RTNetIsIPv4AddrStr(m_newData.m_interface.m_strAddress.toUtf8().constData())
-                                || RTNetStrIsIPv4AddrAny(m_newData.m_interface.m_strAddress.toUtf8().constData()));
-        m_pErrorPaneIPv4->setVisible(fError);
-    }
-    if (m_pErrorPaneNMv4 && (!pWidget || pWidget == m_pErrorPaneNMv4))
-    {
-        const bool fError =    !m_newData.m_interface.m_fDHCPEnabled
-                            && !m_newData.m_interface.m_strMask.trimmed().isEmpty()
-                            && (   !RTNetIsIPv4AddrStr(m_newData.m_interface.m_strMask.toUtf8().constData())
-                                || RTNetStrIsIPv4AddrAny(m_newData.m_interface.m_strMask.toUtf8().constData()));
-        m_pErrorPaneNMv4->setVisible(fError);
-    }
-    if (m_pErrorPaneIPv6 && (!pWidget || pWidget == m_pErrorPaneIPv6))
-    {
-        const bool fError =    !m_newData.m_interface.m_fDHCPEnabled
-                            && m_newData.m_interface.m_fSupportedIPv6
-                            && !m_newData.m_interface.m_strAddress6.trimmed().isEmpty()
-                            && (   !RTNetIsIPv6AddrStr(m_newData.m_interface.m_strAddress6.toUtf8().constData())
-                                || RTNetStrIsIPv6AddrAny(m_newData.m_interface.m_strAddress6.toUtf8().constData()));
-        m_pErrorPaneIPv6->setVisible(fError);
-    }
-    if (m_pErrorPaneNMv6 && (!pWidget || pWidget == m_pErrorPaneNMv6))
-    {
-        bool fIsMaskPrefixLengthNumber = false;
-        const int iMaskPrefixLength = m_newData.m_interface.m_strPrefixLength6.trimmed().toInt(&fIsMaskPrefixLengthNumber);
-        const bool fError =    !m_newData.m_interface.m_fDHCPEnabled
-                            && m_newData.m_interface.m_fSupportedIPv6
-                            && (   !fIsMaskPrefixLengthNumber
-                                || iMaskPrefixLength < 0
-                                || iMaskPrefixLength > 128);
-        m_pErrorPaneNMv6->setVisible(fError);
-    }
-
-    /* Validate 'DHCP server' tab content: */
-    if (m_pErrorPaneDHCPAddress && (!pWidget || pWidget == m_pErrorPaneDHCPAddress))
-    {
-        const bool fError =    m_newData.m_dhcpserver.m_fEnabled
-                            && (   !RTNetIsIPv4AddrStr(m_newData.m_dhcpserver.m_strAddress.toUtf8().constData())
-                                || RTNetStrIsIPv4AddrAny(m_newData.m_dhcpserver.m_strAddress.toUtf8().constData()));
-        m_pErrorPaneDHCPAddress->setVisible(fError);
-    }
-    if (m_pErrorPaneDHCPMask && (!pWidget || pWidget == m_pErrorPaneDHCPMask))
-    {
-        const bool fError =    m_newData.m_dhcpserver.m_fEnabled
-                            && (   !RTNetIsIPv4AddrStr(m_newData.m_dhcpserver.m_strMask.toUtf8().constData())
-                                || RTNetStrIsIPv4AddrAny(m_newData.m_dhcpserver.m_strMask.toUtf8().constData()));
-        m_pErrorPaneDHCPMask->setVisible(fError);
-    }
-    if (m_pErrorPaneDHCPLowerAddress && (!pWidget || pWidget == m_pErrorPaneDHCPLowerAddress))
-    {
-        const bool fError =    m_newData.m_dhcpserver.m_fEnabled
-                            && (   !RTNetIsIPv4AddrStr(m_newData.m_dhcpserver.m_strLowerAddress.toUtf8().constData())
-                                || RTNetStrIsIPv4AddrAny(m_newData.m_dhcpserver.m_strLowerAddress.toUtf8().constData()));
-        m_pErrorPaneDHCPLowerAddress->setVisible(fError);
-    }
-    if (m_pErrorPaneDHCPUpperAddress && (!pWidget || pWidget == m_pErrorPaneDHCPUpperAddress))
-    {
-        const bool fError =    m_newData.m_dhcpserver.m_fEnabled
-                            && (   !RTNetIsIPv4AddrStr(m_newData.m_dhcpserver.m_strUpperAddress.toUtf8().constData())
-                                || RTNetStrIsIPv4AddrAny(m_newData.m_dhcpserver.m_strUpperAddress.toUtf8().constData()));
-        m_pErrorPaneDHCPUpperAddress->setVisible(fError);
-    }
-
-    /* Retranslate validation: */
-    retranslateValidation(pWidget);
-}
-
-void UIDetailsWidgetHostNetwork::retranslateValidation(QWidget *pWidget /* = 0 */)
-{
-    /* Translate 'Interface' tab content: */
-    if (m_pErrorPaneAutomatic && (!pWidget || pWidget == m_pErrorPaneAutomatic))
-        m_pErrorPaneAutomatic->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> is set to obtain the address automatically "
-                                             "but the corresponding DHCP server is not enabled.").arg(m_newData.m_interface.m_strName));
-    if (m_pErrorPaneIPv4 && (!pWidget || pWidget == m_pErrorPaneIPv4))
-        m_pErrorPaneIPv4->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> does not currently have a valid "
-                                        "IPv4 address.").arg(m_newData.m_interface.m_strName));
-    if (m_pErrorPaneNMv4 && (!pWidget || pWidget == m_pErrorPaneNMv4))
-        m_pErrorPaneNMv4->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> does not currently have a valid "
-                                        "IPv4 network mask.").arg(m_newData.m_interface.m_strName));
-    if (m_pErrorPaneIPv6 && (!pWidget || pWidget == m_pErrorPaneIPv6))
-        m_pErrorPaneIPv6->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> does not currently have a valid "
-                                        "IPv6 address.").arg(m_newData.m_interface.m_strName));
-    if (m_pErrorPaneNMv6 && (!pWidget || pWidget == m_pErrorPaneNMv6))
-        m_pErrorPaneNMv6->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> does not currently have a valid "
-                                        "IPv6 prefix length.").arg(m_newData.m_interface.m_strName));
-
-    /* Translate 'DHCP server' tab content: */
-    if (m_pErrorPaneDHCPAddress && (!pWidget || pWidget == m_pErrorPaneDHCPAddress))
-        m_pErrorPaneDHCPAddress->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> does not currently have a valid "
-                                               "DHCP server address.").arg(m_newData.m_interface.m_strName));
-    if (m_pErrorPaneDHCPMask && (!pWidget || pWidget == m_pErrorPaneDHCPMask))
-        m_pErrorPaneDHCPMask->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> does not currently have a valid "
-                                            "DHCP server mask.").arg(m_newData.m_interface.m_strName));
-    if (m_pErrorPaneDHCPLowerAddress && (!pWidget || pWidget == m_pErrorPaneDHCPLowerAddress))
-        m_pErrorPaneDHCPLowerAddress->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> does not currently have a valid "
-                                                    "DHCP server lower address bound.").arg(m_newData.m_interface.m_strName));
-    if (m_pErrorPaneDHCPUpperAddress && (!pWidget || pWidget == m_pErrorPaneDHCPUpperAddress))
-        m_pErrorPaneDHCPUpperAddress->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> does not currently have a valid "
-                                                    "DHCP server upper address bound.").arg(m_newData.m_interface.m_strName));
-}
-
-void UIDetailsWidgetHostNetwork::updateButtonStates()
-{
-//    if (m_oldData != m_newData)
-//        printf("Interface: %s, %s, %s, %s;  DHCP server: %d, %s, %s, %s, %s\n",
-//               m_newData.m_interface.m_strAddress.toUtf8().constData(),
-//               m_newData.m_interface.m_strMask.toUtf8().constData(),
-//               m_newData.m_interface.m_strAddress6.toUtf8().constData(),
-//               m_newData.m_interface.m_strPrefixLength6.toUtf8().constData(),
-//               (int)m_newData.m_dhcpserver.m_fEnabled,
-//               m_newData.m_dhcpserver.m_strAddress.toUtf8().constData(),
-//               m_newData.m_dhcpserver.m_strMask.toUtf8().constData(),
-//               m_newData.m_dhcpserver.m_strLowerAddress.toUtf8().constData(),
-//               m_newData.m_dhcpserver.m_strUpperAddress.toUtf8().constData());
-
-    /* Update 'Apply' / 'Reset' button states: */
-    if (m_pButtonBoxInterface)
-    {
-        m_pButtonBoxInterface->button(QDialogButtonBox::Cancel)->setEnabled(m_oldData != m_newData);
-        m_pButtonBoxInterface->button(QDialogButtonBox::Ok)->setEnabled(m_oldData != m_newData);
-    }
-    if (m_pButtonBoxServer)
-    {
-        m_pButtonBoxServer->button(QDialogButtonBox::Cancel)->setEnabled(m_oldData != m_newData);
-        m_pButtonBoxServer->button(QDialogButtonBox::Ok)->setEnabled(m_oldData != m_newData);
-    }
-
-    /* Notify listeners as well: */
-    emit sigDataChanged(m_oldData != m_newData);
-}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetHostNetwork.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetHostNetwork.h	(revision 87305)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetHostNetwork.h	(revision 87306)
@@ -191,4 +191,13 @@
     void setData(const UIDataHostNetwork &data);
 
+    /** @name Change handling stuff.
+      * @{ */
+        /** Revalidates changes for passed @a pWidget. */
+        bool revalidate() const;
+
+        /** Updates button states. */
+        void updateButtonStates();
+    /** @} */
+
 protected:
 
@@ -252,14 +261,4 @@
     /** @} */
 
-    /** @name Change handling stuff.
-      * @{ */
-        /** Revalidates changes for passed @a pWidget. */
-        void revalidate(QWidget *pWidget = 0);
-        /** Retranslates validation for passed @a pWidget. */
-        void retranslateValidation(QWidget *pWidget = 0);
-        /** Updates button states. */
-        void updateButtonStates();
-    /** @} */
-
     /** @name General variables.
       * @{ */
@@ -280,11 +279,7 @@
         /** Holds the automatic interface configuration button. */
         QRadioButton *m_pButtonAutomatic;
-        /** Holds the automatic interface configuration error pane. */
-        QLabel       *m_pErrorPaneAutomatic;
 
         /** Holds the manual interface configuration button. */
         QRadioButton *m_pButtonManual;
-        /** Holds the manual interface configuration error pane. */
-        QLabel       *m_pErrorPaneManual;
 
         /** Holds the IPv4 address label. */
@@ -292,6 +287,4 @@
         /** Holds the IPv4 address editor. */
         QILineEdit   *m_pEditorIPv4;
-        /** Holds the IPv4 address error pane. */
-        QLabel       *m_pErrorPaneIPv4;
 
         /** Holds the IPv4 network mask label. */
@@ -299,6 +292,4 @@
         /** Holds the IPv4 network mask editor. */
         QILineEdit   *m_pEditorNMv4;
-        /** Holds the IPv4 network mask error pane. */
-        QLabel       *m_pErrorPaneNMv4;
 
         /** Holds the IPv6 address label. */
@@ -306,6 +297,4 @@
         /** Holds the IPv6 address editor. */
         QILineEdit   *m_pEditorIPv6;
-        /** Holds the IPv6 address error pane. */
-        QLabel       *m_pErrorPaneIPv6;
 
         /** Holds the IPv6 network mask label. */
@@ -313,6 +302,4 @@
         /** Holds the IPv6 network mask editor. */
         QILineEdit   *m_pEditorNMv6;
-        /** Holds the IPv6 network mask error pane. */
-        QLabel       *m_pErrorPaneNMv6;
 
         /** Holds the interface button-box instance. */
@@ -329,6 +316,4 @@
         /** Holds the DHCP address editor. */
         QILineEdit *m_pEditorDHCPAddress;
-        /** Holds the DHCP address error pane. */
-        QLabel     *m_pErrorPaneDHCPAddress;
 
         /** Holds the DHCP network mask label. */
@@ -336,6 +321,4 @@
         /** Holds the DHCP network mask editor. */
         QILineEdit *m_pEditorDHCPMask;
-        /** Holds the DHCP network mask error pane. */
-        QLabel     *m_pErrorPaneDHCPMask;
 
         /** Holds the DHCP lower address label. */
@@ -343,6 +326,4 @@
         /** Holds the DHCP lower address editor. */
         QILineEdit *m_pEditorDHCPLowerAddress;
-        /** Holds the DHCP lower address error pane. */
-        QLabel     *m_pErrorPaneDHCPLowerAddress;
 
         /** Holds the DHCP upper address label. */
@@ -350,6 +331,4 @@
         /** Holds the DHCP upper address editor. */
         QILineEdit *m_pEditorDHCPUpperAddress;
-        /** Holds the DHCP upper address error pane. */
-        QLabel     *m_pErrorPaneDHCPUpperAddress;
 
         /** Holds the server button-box instance. */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetNATNetwork.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetNATNetwork.cpp	(revision 87305)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetNATNetwork.cpp	(revision 87306)
@@ -74,5 +74,5 @@
 }
 
-bool UIDetailsWidgetNATNetwork::revalidate()
+bool UIDetailsWidgetNATNetwork::revalidate() const
 {
     return m_pForwardingTableIPv4->validate() && m_pForwardingTableIPv6->validate();
Index: /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetNATNetwork.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetNATNetwork.h	(revision 87305)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetNATNetwork.h	(revision 87306)
@@ -128,5 +128,5 @@
       * @{ */
         /** Revalidates changes. */
-        bool revalidate();
+        bool revalidate() const;
 
         /** Updates button states. */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UINetworkManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UINetworkManager.cpp	(revision 87305)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UINetworkManager.cpp	(revision 87306)
@@ -882,116 +882,123 @@
     AssertMsgReturnVoid(m_pDetailsWidgetHostNetwork, ("Host network details-widget isn't created!\n"));
 
-    /* Get item data: */
-    UIDataHostNetwork oldData = *pItem;
-    UIDataHostNetwork newData = m_pDetailsWidgetHostNetwork->data();
-
-    /* Get host for further activities: */
-    CHost comHost = uiCommon().host();
-
-    /* Find corresponding interface: */
-    CHostNetworkInterface comInterface = comHost.FindHostNetworkInterfaceByName(oldData.m_interface.m_strName);
-
-    /* Show error message if necessary: */
-    if (!comHost.isOk() || comInterface.isNull())
-        msgCenter().cannotFindHostNetworkInterface(comHost, oldData.m_interface.m_strName, this);
-    else
-    {
-        /* Save automatic interface configuration: */
-        if (newData.m_interface.m_fDHCPEnabled)
-        {
-            if (   comInterface.isOk()
-                && !oldData.m_interface.m_fDHCPEnabled)
-                comInterface.EnableDynamicIPConfig();
-        }
-        /* Save manual interface configuration: */
+    /* Revalidate host network details: */
+    if (m_pDetailsWidgetHostNetwork->revalidate())
+    {
+        /* Get item data: */
+        UIDataHostNetwork oldData = *pItem;
+        UIDataHostNetwork newData = m_pDetailsWidgetHostNetwork->data();
+
+        /* Get host for further activities: */
+        CHost comHost = uiCommon().host();
+
+        /* Find corresponding interface: */
+        CHostNetworkInterface comInterface = comHost.FindHostNetworkInterfaceByName(oldData.m_interface.m_strName);
+
+        /* Show error message if necessary: */
+        if (!comHost.isOk() || comInterface.isNull())
+            msgCenter().cannotFindHostNetworkInterface(comHost, oldData.m_interface.m_strName, this);
         else
         {
-            /* Save IPv4 interface configuration: */
-            if (   comInterface.isOk()
-                && (   oldData.m_interface.m_fDHCPEnabled
-                    || newData.m_interface.m_strAddress != oldData.m_interface.m_strAddress
-                    || newData.m_interface.m_strMask != oldData.m_interface.m_strMask))
-                comInterface.EnableStaticIPConfig(newData.m_interface.m_strAddress, newData.m_interface.m_strMask);
-            /* Save IPv6 interface configuration: */
-            if (   comInterface.isOk()
-                && newData.m_interface.m_fSupportedIPv6
-                && (   oldData.m_interface.m_fDHCPEnabled
-                    || newData.m_interface.m_strAddress6 != oldData.m_interface.m_strAddress6
-                    || newData.m_interface.m_strPrefixLength6 != oldData.m_interface.m_strPrefixLength6))
-                comInterface.EnableStaticIPConfigV6(newData.m_interface.m_strAddress6, newData.m_interface.m_strPrefixLength6.toULong());
-        }
-
-        /* Show error message if necessary: */
-        if (!comInterface.isOk())
-            msgCenter().cannotSaveHostNetworkInterfaceParameter(comInterface, this);
-        else
-        {
-            /* Get network name for further activities: */
-            const QString strNetworkName = comInterface.GetNetworkName();
+            /* Save automatic interface configuration: */
+            if (newData.m_interface.m_fDHCPEnabled)
+            {
+                if (   comInterface.isOk()
+                    && !oldData.m_interface.m_fDHCPEnabled)
+                    comInterface.EnableDynamicIPConfig();
+            }
+            /* Save manual interface configuration: */
+            else
+            {
+                /* Save IPv4 interface configuration: */
+                if (   comInterface.isOk()
+                    && (   oldData.m_interface.m_fDHCPEnabled
+                        || newData.m_interface.m_strAddress != oldData.m_interface.m_strAddress
+                        || newData.m_interface.m_strMask != oldData.m_interface.m_strMask))
+                    comInterface.EnableStaticIPConfig(newData.m_interface.m_strAddress, newData.m_interface.m_strMask);
+                /* Save IPv6 interface configuration: */
+                if (   comInterface.isOk()
+                    && newData.m_interface.m_fSupportedIPv6
+                    && (   oldData.m_interface.m_fDHCPEnabled
+                        || newData.m_interface.m_strAddress6 != oldData.m_interface.m_strAddress6
+                        || newData.m_interface.m_strPrefixLength6 != oldData.m_interface.m_strPrefixLength6))
+                    comInterface.EnableStaticIPConfigV6(newData.m_interface.m_strAddress6, newData.m_interface.m_strPrefixLength6.toULong());
+            }
 
             /* Show error message if necessary: */
             if (!comInterface.isOk())
-                msgCenter().cannotAcquireHostNetworkInterfaceParameter(comInterface, this);
+                msgCenter().cannotSaveHostNetworkInterfaceParameter(comInterface, this);
             else
             {
-                /* Get VBox for further activities: */
-                CVirtualBox comVBox = uiCommon().virtualBox();
-
-                /* Find corresponding DHCP server (create if necessary): */
-                CDHCPServer comServer = comVBox.FindDHCPServerByNetworkName(strNetworkName);
-                if (!comVBox.isOk() || comServer.isNull())
-                    comServer = comVBox.CreateDHCPServer(strNetworkName);
+                /* Get network name for further activities: */
+                const QString strNetworkName = comInterface.GetNetworkName();
 
                 /* Show error message if necessary: */
-                if (!comVBox.isOk() || comServer.isNull())
-                    msgCenter().cannotCreateDHCPServer(comVBox, strNetworkName, this);
+                if (!comInterface.isOk())
+                    msgCenter().cannotAcquireHostNetworkInterfaceParameter(comInterface, this);
                 else
                 {
-                    /* Save whether DHCP server is enabled: */
-                    if (   comServer.isOk()
-                        && newData.m_dhcpserver.m_fEnabled != oldData.m_dhcpserver.m_fEnabled)
-                        comServer.SetEnabled(newData.m_dhcpserver.m_fEnabled);
-                    /* Save DHCP server configuration: */
-                    if (   comServer.isOk()
-                        && newData.m_dhcpserver.m_fEnabled
-                        && (   newData.m_dhcpserver.m_strAddress != oldData.m_dhcpserver.m_strAddress
-                            || newData.m_dhcpserver.m_strMask != oldData.m_dhcpserver.m_strMask
-                            || newData.m_dhcpserver.m_strLowerAddress != oldData.m_dhcpserver.m_strLowerAddress
-                            || newData.m_dhcpserver.m_strUpperAddress != oldData.m_dhcpserver.m_strUpperAddress))
-                        comServer.SetConfiguration(newData.m_dhcpserver.m_strAddress, newData.m_dhcpserver.m_strMask,
-                                                   newData.m_dhcpserver.m_strLowerAddress, newData.m_dhcpserver.m_strUpperAddress);
+                    /* Get VBox for further activities: */
+                    CVirtualBox comVBox = uiCommon().virtualBox();
+
+                    /* Find corresponding DHCP server (create if necessary): */
+                    CDHCPServer comServer = comVBox.FindDHCPServerByNetworkName(strNetworkName);
+                    if (!comVBox.isOk() || comServer.isNull())
+                        comServer = comVBox.CreateDHCPServer(strNetworkName);
 
                     /* Show error message if necessary: */
-                    if (!comServer.isOk())
-                        msgCenter().cannotSaveDHCPServerParameter(comServer, this);
+                    if (!comVBox.isOk() || comServer.isNull())
+                        msgCenter().cannotCreateDHCPServer(comVBox, strNetworkName, this);
+                    else
+                    {
+                        /* Save whether DHCP server is enabled: */
+                        if (   comServer.isOk()
+                            && newData.m_dhcpserver.m_fEnabled != oldData.m_dhcpserver.m_fEnabled)
+                            comServer.SetEnabled(newData.m_dhcpserver.m_fEnabled);
+                        /* Save DHCP server configuration: */
+                        if (   comServer.isOk()
+                            && newData.m_dhcpserver.m_fEnabled
+                            && (   newData.m_dhcpserver.m_strAddress != oldData.m_dhcpserver.m_strAddress
+                                || newData.m_dhcpserver.m_strMask != oldData.m_dhcpserver.m_strMask
+                                || newData.m_dhcpserver.m_strLowerAddress != oldData.m_dhcpserver.m_strLowerAddress
+                                || newData.m_dhcpserver.m_strUpperAddress != oldData.m_dhcpserver.m_strUpperAddress))
+                            comServer.SetConfiguration(newData.m_dhcpserver.m_strAddress, newData.m_dhcpserver.m_strMask,
+                                                       newData.m_dhcpserver.m_strLowerAddress, newData.m_dhcpserver.m_strUpperAddress);
+
+                        /* Show error message if necessary: */
+                        if (!comServer.isOk())
+                            msgCenter().cannotSaveDHCPServerParameter(comServer, this);
+                    }
                 }
             }
+
+            /* Find corresponding interface again (if necessary): */
+            if (!comInterface.isOk())
+            {
+                comInterface = comHost.FindHostNetworkInterfaceByName(oldData.m_interface.m_strName);
+
+                /* Show error message if necessary: */
+                if (!comHost.isOk() || comInterface.isNull())
+                    msgCenter().cannotFindHostNetworkInterface(comHost, oldData.m_interface.m_strName, this);
+            }
+
+            /* If interface is Ok now: */
+            if (comInterface.isNotNull() && comInterface.isOk())
+            {
+                /* Update interface in the tree: */
+                UIDataHostNetwork data;
+                loadHostNetwork(comInterface, data);
+                updateItemForHostNetwork(data, true, pItem);
+
+                /* Make sure current item fetched: */
+                sltHandleCurrentItemChangeHostNetwork();
+
+                /* Adjust tree-widgets: */
+                sltAdjustTreeWidgets();
+            }
         }
-
-        /* Find corresponding interface again (if necessary): */
-        if (!comInterface.isOk())
-        {
-            comInterface = comHost.FindHostNetworkInterfaceByName(oldData.m_interface.m_strName);
-
-            /* Show error message if necessary: */
-            if (!comHost.isOk() || comInterface.isNull())
-                msgCenter().cannotFindHostNetworkInterface(comHost, oldData.m_interface.m_strName, this);
-        }
-
-        /* If interface is Ok now: */
-        if (comInterface.isNotNull() && comInterface.isOk())
-        {
-            /* Update interface in the tree: */
-            UIDataHostNetwork data;
-            loadHostNetwork(comInterface, data);
-            updateItemForHostNetwork(data, true, pItem);
-
-            /* Make sure current item fetched: */
-            sltHandleCurrentItemChangeHostNetwork();
-
-            /* Adjust tree-widgets: */
-            sltAdjustTreeWidgets();
-        }
-    }
+    }
+
+    /* Make sure button states updated: */
+    m_pDetailsWidgetHostNetwork->updateButtonStates();
 }
 
