Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 53327)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 53328)
@@ -1117,4 +1117,12 @@
           tr("The current port forwarding rules are not valid. "
              "Rule names should be unique."));
+    return false;
+}
+
+bool UIMessageCenter::warnAboutRulesConflict(QWidget *pParent /* = 0 */) const
+{
+    alert(pParent, MessageType_Error,
+          tr("The current port forwarding rules are not valid. "
+             "Few rules have same host ports and conflicting IP addresses."));
     return false;
 }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h	(revision 53327)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h	(revision 53328)
@@ -232,4 +232,5 @@
     bool warnAboutIncorrectPort(QWidget *pParent = 0) const;
     bool warnAboutNameShouldBeUnique(QWidget *pParent = 0) const;
+    bool warnAboutRulesConflict(QWidget *pParent = 0) const;
     bool confirmCancelingPortForwardingDialog(QWidget *pParent = 0) const;
     void cannotCreateSharedFolder(const CMachine &machine, const QString &strName, const QString &strPath, QWidget *pParent = 0);
Index: /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp	(revision 53327)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp	(revision 53328)
@@ -30,4 +30,5 @@
 # include <QLineEdit>
 # include <QSpinBox>
+# include <QHostAddress>
 
 /* GUI includes: */
@@ -692,4 +693,5 @@
     /* Validate table: */
     QSet<QString> usedNames;
+    QMap<int, QString> rules;
     for (int i = 0; i < m_pModel->rowCount(); ++i)
     {
@@ -705,4 +707,18 @@
         else
             return msgCenter().warnAboutNameShouldBeUnique(window());
+
+        /* Make sure rules are not in conflict: */
+        const ushort iHostPort = m_pModel->data(m_pModel->index(i, UIPortForwardingModel::UIPortForwardingDataType_HostPort), Qt::EditRole).value<PortData>().value();
+        const QString strHostAddressNew = m_pModel->data(m_pModel->index(i, UIPortForwardingModel::UIPortForwardingDataType_HostIp), Qt::EditRole).value<IpData>();
+        if (rules.contains(iHostPort))
+        {
+            const QString strHostAddressOld = rules.value(iHostPort);
+            if (   strHostAddressNew == strHostAddressOld
+                || strHostAddressNew.isEmpty() || QHostAddress(strHostAddressNew).isNull()
+                || strHostAddressOld.isEmpty() || QHostAddress(strHostAddressOld).isNull())
+                return msgCenter().warnAboutRulesConflict(window());
+        }
+        else
+            rules[iHostPort] = strHostAddressNew;
     }
     /* True by default: */
