Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 87311)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 87312)
@@ -1973,4 +1973,28 @@
 }
 
+void UIMessageCenter::warnAboutNoNameSpecified(const QString &strName, QWidget *pParent /* = 0 */)
+{
+    alert(pParent, MessageType_Error,
+          tr("No new name specified for the NAT network previously called <b>%1</b>.").arg(strName));
+}
+
+void UIMessageCenter::warnAboutNameAlreadyBusy(const QString &strName, QWidget *pParent /* = 0 */)
+{
+    alert(pParent, MessageType_Error,
+          tr("The name <b>%1</b> is being used for several NAT networks.").arg(strName));
+}
+
+void UIMessageCenter::warnAboutNoCIDRSpecified(const QString &strName, QWidget *pParent /* = 0 */)
+{
+    alert(pParent, MessageType_Error,
+          tr("No CIDR specified for the NAT network <b>%1</b>.").arg(strName));
+}
+
+void UIMessageCenter::warnAboutInvalidCIDRSpecified(const QString &strCIDR, const QString &strName, QWidget *pParent /* = 0 */)
+{
+    alert(pParent, MessageType_Error,
+          tr("Invalid CIDR specified (<i>%1</i>) for the NAT network <b>%2</b>.").arg(strCIDR, strName));
+}
+
 void UIMessageCenter::cannotAcquireCloudProviderManager(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 87311)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h	(revision 87312)
@@ -409,4 +409,8 @@
     void cannotFindNATNetwork(const CVirtualBox &comVBox, const QString &strNetworkName, QWidget *pParent = 0) const;
     void cannotRemoveNATNetwork(const CVirtualBox &comVBox, const QString &strNetworkName, QWidget *pParent = 0) const;
+    void warnAboutNoNameSpecified(const QString &strName, QWidget *pParent = 0);
+    void warnAboutNameAlreadyBusy(const QString &strName, QWidget *pParent = 0);
+    void warnAboutNoCIDRSpecified(const QString &strName, QWidget *pParent = 0);
+    void warnAboutInvalidCIDRSpecified(const QString &strCIDR, const QString &strName, QWidget *pParent = 0);
 
     /* API: Cloud Profile Manager warnings: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetNATNetwork.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetNATNetwork.cpp	(revision 87311)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetNATNetwork.cpp	(revision 87312)
@@ -31,4 +31,5 @@
 #include "UIIconPool.h"
 #include "UIDetailsWidgetNATNetwork.h"
+#include "UIMessageCenter.h"
 #include "UINetworkManagerUtils.h"
 
@@ -61,9 +62,12 @@
 }
 
-void UIDetailsWidgetNATNetwork::setData(const UIDataNATNetwork &data, bool fHoldPosition /* = false */)
+void UIDetailsWidgetNATNetwork::setData(const UIDataNATNetwork &data,
+                                        const QStringList &busyNames /* = QStringList() */,
+                                        bool fHoldPosition /* = false */)
 {
     /* Cache old/new data: */
     m_oldData = data;
     m_newData = m_oldData;
+    m_busyNames = busyNames;
     m_fHoldPosition = fHoldPosition;
 
@@ -76,4 +80,39 @@
 bool UIDetailsWidgetNATNetwork::revalidate() const
 {
+    /* Make sure network name isn't empty: */
+    if (m_newData.m_strName.isEmpty())
+    {
+        msgCenter().warnAboutNoNameSpecified(m_oldData.m_strName);
+        return false;
+    }
+    else
+    {
+        /* Make sure item names are unique: */
+        if (m_busyNames.contains(m_newData.m_strName))
+        {
+            msgCenter().warnAboutNameAlreadyBusy(m_newData.m_strName);
+            return false;
+        }
+    }
+
+    /* Make sure network CIDR isn't empty: */
+    if (m_newData.m_strCIDR.isEmpty())
+    {
+        msgCenter().warnAboutNoCIDRSpecified(m_newData.m_strName);
+        return false;
+    }
+    else
+    {
+        /* Make sure network CIDR is valid: */
+        RTNETADDRIPV4 network, mask;
+        const int rc = RTCidrStrToIPv4(m_newData.m_strCIDR.toUtf8().constData(), &network, &mask);
+        if (RT_FAILURE(rc))
+        {
+            msgCenter().warnAboutInvalidCIDRSpecified(m_newData.m_strCIDR, m_newData.m_strName);
+            return false;
+        }
+    }
+
+    /* Validate 'Forwarding' tab content: */
     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 87311)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetNATNetwork.h	(revision 87312)
@@ -121,7 +121,11 @@
     const UIDataNATNetwork &data() const { return m_newData; }
     /** Defines the host network @a data.
+      * @param  busyNames      Holds the list of names busy by other
+      *                        NAT networks.
       * @param  fHoldPosition  Holds whether we should try to keep
       *                        port forwarding rule position intact. */
-    void setData(const UIDataNATNetwork &data, bool fHoldPosition = false);
+    void setData(const UIDataNATNetwork &data,
+                 const QStringList &busyNames = QStringList(),
+                 bool fHoldPosition = false);
 
     /** @name Change handling stuff.
@@ -237,4 +241,7 @@
         /** Holds the 'Forwarding' button-box instance. */
         QIDialogButtonBox     *m_pButtonBoxForwarding;
+        /** Holds the list of names busy by other
+          * NAT networks. */
+        QStringList            m_busyNames;
         /** Holds whether we should try to keep
           * port forwarding rule position intact. */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UINetworkManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UINetworkManager.cpp	(revision 87311)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UINetworkManager.cpp	(revision 87312)
@@ -1069,5 +1069,9 @@
     /* If there is an item => update details data: */
     if (pItem)
-        m_pDetailsWidgetNATNetwork->setData(*pItem, fHoldPosition);
+    {
+        QStringList busyNamesForItem = busyNames();
+        busyNamesForItem.removeAll(pItem->name());
+        m_pDetailsWidgetNATNetwork->setData(*pItem, busyNamesForItem, fHoldPosition);
+    }
     /* Otherwise => clear details: */
     else
@@ -1737,4 +1741,17 @@
 }
 
+QStringList UINetworkManagerWidget::busyNames() const
+{
+    QStringList names;
+    for (int i = 0; i < m_pTreeWidgetNATNetwork->topLevelItemCount(); ++i)
+    {
+        UIItemNATNetwork *pItem = qobject_cast<UIItemNATNetwork*>(m_pTreeWidgetNATNetwork->childItem(i));
+        const QString strItemName(pItem->name());
+        if (!strItemName.isEmpty() && !names.contains(strItemName))
+            names << strItemName;
+    }
+    return names;
+}
+
 
 /*********************************************************************************************************************************
Index: /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UINetworkManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UINetworkManager.h	(revision 87311)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UINetworkManager.h	(revision 87312)
@@ -208,4 +208,7 @@
         /** Updates passed NAT network tree-widget item on the basis of passed @a data, @a fChooseItem if requested. */
         void updateItemForNATNetwork(const UIDataNATNetwork &data, bool fChooseItem, UIItemNATNetwork *pItem);
+
+        /** Returns a list of busy NAT network names. */
+        QStringList busyNames() const;
     /** @} */
 
