Index: /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 66680)
+++ /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 66681)
@@ -175,4 +175,5 @@
 	./src/extradata \
 	./src/globals \
+	./src/hostnetwork \
 	./src/medium \
 	./src/objects \
@@ -340,4 +341,6 @@
 	src/globals/VBoxGlobal.h \
 	src/globals/VBoxUtils.h \
+	src/hostnetwork/UIHostNetworkDetailsDialog.h \
+	src/hostnetwork/UIHostNetworkManager.h \
 	src/medium/UIMediumEnumerator.h \
 	src/medium/UIMediumManager.h \
@@ -640,4 +643,6 @@
 	src/globals/UIThreadPool.cpp \
 	src/globals/VBoxGlobal.cpp \
+	src/hostnetwork/UIHostNetworkDetailsDialog.cpp \
+	src/hostnetwork/UIHostNetworkManager.cpp \
 	src/medium/UIMediumDefs.cpp \
 	src/medium/UIMedium.cpp \
Index: /trunk/src/VBox/Frontends/VirtualBox/VirtualBox1.qrc
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/VirtualBox1.qrc	(revision 66680)
+++ /trunk/src/VBox/Frontends/VirtualBox/VirtualBox1.qrc	(revision 66681)
@@ -3,4 +3,6 @@
         <file alias="add_host_iface_16px.png">images/add_host_iface_16px.png</file>
         <file alias="add_host_iface_disabled_16px.png">images/add_host_iface_disabled_16px.png</file>
+        <file alias="add_host_iface_22px.png">images/add_host_iface_22px.png</file>
+        <file alias="add_host_iface_disabled_22px.png">images/add_host_iface_disabled_22px.png</file>
         <file alias="adjust_win_size_16px.png">images/adjust_win_size_16px.png</file>
         <file alias="adjust_win_size_disabled_16px.png">images/adjust_win_size_disabled_16px.png</file>
@@ -84,4 +86,6 @@
         <file alias="edit_host_iface_16px.png">images/edit_host_iface_16px.png</file>
         <file alias="edit_host_iface_disabled_16px.png">images/edit_host_iface_disabled_16px.png</file>
+        <file alias="edit_host_iface_22px.png">images/edit_host_iface_22px.png</file>
+        <file alias="edit_host_iface_disabled_22px.png">images/edit_host_iface_disabled_22px.png</file>
         <file alias="eraser_16px.png">images/eraser_16px.png</file>
         <file alias="exit_16px.png">images/exit_16px.png</file>
@@ -165,4 +169,6 @@
         <file alias="help_button_normal_mac_22px.png">images/help_button_normal_mac_22px.png</file>
         <file alias="help_button_pressed_mac_22px.png">images/help_button_pressed_mac_22px.png</file>
+        <file alias="host_iface_manager_16px.png">images/host_iface_manager_16px.png</file>
+        <file alias="host_iface_manager_32px.png">images/host_iface_manager_32px.png</file>
         <file alias="hostkey_16px.png">images/hostkey_16px.png</file>
         <file alias="hostkey_24px.png">images/hostkey_24px.png</file>
Index: /trunk/src/VBox/Frontends/VirtualBox/VirtualBox1_hidpi.qrc
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/VirtualBox1_hidpi.qrc	(revision 66680)
+++ /trunk/src/VBox/Frontends/VirtualBox/VirtualBox1_hidpi.qrc	(revision 66681)
@@ -3,4 +3,6 @@
         <file alias="add_host_iface_16px_hidpi.png">images/hidpi/add_host_iface_16px_hidpi.png</file>
         <file alias="add_host_iface_disabled_16px_hidpi.png">images/hidpi/add_host_iface_disabled_16px_hidpi.png</file>
+        <file alias="add_host_iface_22px_hidpi.png">images/hidpi/add_host_iface_22px_hidpi.png</file>
+        <file alias="add_host_iface_disabled_22px_hidpi.png">images/hidpi/add_host_iface_disabled_22px_hidpi.png</file>
         <file alias="adjust_win_size_16px_hidpi.png">images/hidpi/adjust_win_size_16px_hidpi.png</file>
         <file alias="adjust_win_size_disabled_16px_hidpi.png">images/hidpi/adjust_win_size_disabled_16px_hidpi.png</file>
@@ -84,4 +86,6 @@
         <file alias="edit_host_iface_16px_hidpi.png">images/hidpi/edit_host_iface_16px_hidpi.png</file>
         <file alias="edit_host_iface_disabled_16px_hidpi.png">images/hidpi/edit_host_iface_disabled_16px_hidpi.png</file>
+        <file alias="edit_host_iface_22px_hidpi.png">images/hidpi/edit_host_iface_22px_hidpi.png</file>
+        <file alias="edit_host_iface_disabled_22px_hidpi.png">images/hidpi/edit_host_iface_disabled_22px_hidpi.png</file>
         <file alias="eraser_16px_hidpi.png">images/hidpi/eraser_16px_hidpi.png</file>
         <file alias="exit_16px_hidpi.png">images/hidpi/exit_16px_hidpi.png</file>
@@ -165,4 +169,6 @@
         <file alias="help_button_normal_mac_22px_hidpi.png">images/hidpi/help_button_normal_mac_22px_hidpi.png</file>
         <file alias="help_button_pressed_mac_22px_hidpi.png">images/hidpi/help_button_pressed_mac_22px_hidpi.png</file>
+        <file alias="host_iface_manager_16px_hidpi.png">images/hidpi/host_iface_manager_16px_hidpi.png</file>
+        <file alias="host_iface_manager_32px_hidpi.png">images/hidpi/host_iface_manager_32px_hidpi.png</file>
         <file alias="hostkey_16px_hidpi.png">images/hidpi/hostkey_16px_hidpi.png</file>
         <file alias="hostkey_24px_hidpi.png">images/hidpi/hostkey_24px_hidpi.png</file>
Index: /trunk/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc	(revision 66680)
+++ /trunk/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc	(revision 66681)
@@ -75,4 +75,6 @@
         <file alias="remove_host_iface_16px.png">images/remove_host_iface_16px.png</file>
         <file alias="remove_host_iface_disabled_16px.png">images/remove_host_iface_disabled_16px.png</file>
+        <file alias="remove_host_iface_22px.png">images/remove_host_iface_22px.png</file>
+        <file alias="remove_host_iface_disabled_22px.png">images/remove_host_iface_disabled_22px.png</file>
         <file alias="reset_warnings_16px.png">images/reset_warnings_16px.png</file>
         <file alias="restore_16px.png">images/restore_16px.png</file>
Index: /trunk/src/VBox/Frontends/VirtualBox/VirtualBox2_hidpi.qrc
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/VirtualBox2_hidpi.qrc	(revision 66680)
+++ /trunk/src/VBox/Frontends/VirtualBox/VirtualBox2_hidpi.qrc	(revision 66681)
@@ -84,4 +84,6 @@
         <file alias="remove_host_iface_16px_hidpi.png">images/hidpi/remove_host_iface_16px_hidpi.png</file>
         <file alias="remove_host_iface_disabled_16px_hidpi.png">images/hidpi/remove_host_iface_disabled_16px_hidpi.png</file>
+        <file alias="remove_host_iface_22px_hidpi.png">images/hidpi/remove_host_iface_22px_hidpi.png</file>
+        <file alias="remove_host_iface_disabled_22px_hidpi.png">images/hidpi/remove_host_iface_disabled_22px_hidpi.png</file>
         <file alias="reset_warnings_16px_hidpi.png">images/hidpi/reset_warnings_16px_hidpi.png</file>
         <file alias="restore_16px_hidpi.png">images/hidpi/restore_16px_hidpi.png</file>
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 66680)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 66681)
@@ -986,22 +986,4 @@
 }
 
-bool UIMessageCenter::confirmHostOnlyInterfaceRemoval(const QString &strName, QWidget *pParent /* = 0 */) const
-{
-    return questionBinary(pParent, MessageType_Question,
-                          tr("<p>Deleting this host-only network will remove "
-                             "the host-only interface this network is based on. Do you want to "
-                             "remove the (host-only network) interface <nobr><b>%1</b>?</nobr></p>"
-                             "<p><b>Note:</b> this interface may be in use by one or more "
-                             "virtual network adapters belonging to one of your VMs. "
-                             "After it is removed, these adapters will no longer be usable until "
-                             "you correct their settings by either choosing a different interface "
-                             "name or a different adapter attachment type.</p>")
-                             .arg(strName),
-                          0 /* auto-confirm id */,
-                          tr("Remove") /* ok button text */,
-                          QString() /* cancel button text */,
-                          false /* ok button by default? */);
-}
-
 void UIMessageCenter::cannotCreateNATNetwork(const CVirtualBox &vbox, QWidget *pParent /* = 0*/)
 {
@@ -1017,50 +999,4 @@
              .arg(strNetworkName),
           formatErrorInfo(vbox));
-}
-
-void UIMessageCenter::cannotCreateDHCPServer(const CVirtualBox &comVBox, const QString &strInterfaceName, QWidget *pParent /* = 0 */) const
-{
-    error(pParent, MessageType_Error,
-          tr("Failed to create a DHCP server for the network interface <b>%1</b>.")
-             .arg(strInterfaceName),
-          formatErrorInfo(comVBox));
-}
-
-void UIMessageCenter::cannotRemoveDHCPServer(const CVirtualBox &comVBox, const QString &strInterfaceName, QWidget *pParent /* = 0 */) const
-{
-    error(pParent, MessageType_Error,
-          tr("Failed to remove the DHCP server for the network interface <b>%1</b>.")
-             .arg(strInterfaceName),
-          formatErrorInfo(comVBox));
-}
-
-void UIMessageCenter::cannotCreateHostNetworkInterface(const CHost &comHost, QWidget *pParent /* = 0 */) const
-{
-    error(pParent, MessageType_Error,
-          tr("Failed to create a host network interface."),
-          formatErrorInfo(comHost));
-}
-
-void UIMessageCenter::cannotCreateHostNetworkInterface(const CProgress &comProgress, QWidget *pParent /* = 0 */) const
-{
-    error(pParent, MessageType_Error,
-          tr("Failed to create a host network interface."),
-          formatErrorInfo(comProgress));
-}
-
-void UIMessageCenter::cannotRemoveHostNetworkInterface(const CHost &comHost, const QString &strInterfaceName, QWidget *pParent /* = 0 */) const
-{
-    error(pParent, MessageType_Error,
-          tr("Failed to remove the host network interface <b>%1</b>.")
-             .arg(strInterfaceName),
-          formatErrorInfo(comHost));
-}
-
-void UIMessageCenter::cannotRemoveHostNetworkInterface(const CProgress &comProgress, const QString &strInterfaceName, QWidget *pParent /* = 0 */) const
-{
-    error(pParent, MessageType_Error,
-          tr("Failed to remove the host network interface <b>%1</b>.")
-             .arg(strInterfaceName),
-          formatErrorInfo(comProgress));
 }
 
@@ -1459,4 +1395,111 @@
     error(pParent, MessageType_Error,
           tr("Failed to close the disk image file <nobr><b>%1</b></nobr>.").arg(medium.location()), formatErrorInfo(rc));
+}
+
+bool UIMessageCenter::confirmHostOnlyInterfaceRemoval(const QString &strName, QWidget *pParent /* = 0 */) const
+{
+    return questionBinary(pParent, MessageType_Question,
+                          tr("<p>Deleting this host-only network will remove "
+                             "the host-only interface this network is based on. Do you want to "
+                             "remove the (host-only network) interface <nobr><b>%1</b>?</nobr></p>"
+                             "<p><b>Note:</b> this interface may be in use by one or more "
+                             "virtual network adapters belonging to one of your VMs. "
+                             "After it is removed, these adapters will no longer be usable until "
+                             "you correct their settings by either choosing a different interface "
+                             "name or a different adapter attachment type.</p>")
+                             .arg(strName),
+                          0 /* auto-confirm id */,
+                          tr("Remove") /* ok button text */,
+                          QString() /* cancel button text */,
+                          false /* ok button by default? */);
+}
+
+void UIMessageCenter::cannotAcquireHostNetworkInterfaces(const CHost &comHost, QWidget *pParent /* = 0 */) const
+{
+    error(pParent, MessageType_Error,
+          tr("Failed to acquire host network interfaces."),
+          formatErrorInfo(comHost));
+}
+
+void UIMessageCenter::cannotFindHostNetworkInterface(const CHost &comHost, const QString &strInterfaceName, QWidget *pParent /* = 0 */) const
+{
+    error(pParent, MessageType_Error,
+          tr("Unable to find the host network interface <b>%1</b>.")
+             .arg(strInterfaceName),
+          formatErrorInfo(comHost));
+}
+
+void UIMessageCenter::cannotCreateHostNetworkInterface(const CHost &comHost, QWidget *pParent /* = 0 */) const
+{
+    error(pParent, MessageType_Error,
+          tr("Failed to create a host network interface."),
+          formatErrorInfo(comHost));
+}
+
+void UIMessageCenter::cannotCreateHostNetworkInterface(const CProgress &progress, QWidget *pParent /* = 0 */) const
+{
+    error(pParent, MessageType_Error,
+          tr("Failed to create a host network interface."),
+          formatErrorInfo(progress));
+}
+
+void UIMessageCenter::cannotRemoveHostNetworkInterface(const CHost &comHost, const QString &strInterfaceName, QWidget *pParent /* = 0 */) const
+{
+    error(pParent, MessageType_Error,
+          tr("Failed to remove the host network interface <b>%1</b>.")
+             .arg(strInterfaceName),
+          formatErrorInfo(comHost));
+}
+
+void UIMessageCenter::cannotRemoveHostNetworkInterface(const CProgress &progress, const QString &strInterfaceName, QWidget *pParent /* = 0 */) const
+{
+    error(pParent, MessageType_Error,
+          tr("Failed to remove the host network interface <b>%1</b>.")
+             .arg(strInterfaceName),
+          formatErrorInfo(progress));
+}
+
+void UIMessageCenter::cannotAcquireHostNetworkInterfaceParameter(const CHostNetworkInterface &comInterface, QWidget *pParent /* = 0 */) const
+{
+    error(pParent, MessageType_Error,
+          tr("Failed to acquire host network interface parameter."),
+          formatErrorInfo(comInterface));
+}
+
+void UIMessageCenter::cannotSaveHostNetworkInterfaceParameter(const CHostNetworkInterface &comInterface, QWidget *pParent /* = 0 */) const
+{
+    error(pParent, MessageType_Error,
+          tr("Failed to save host network interface parameter."),
+          formatErrorInfo(comInterface));
+}
+
+void UIMessageCenter::cannotCreateDHCPServer(const CVirtualBox &comVBox, const QString &strInterfaceName, QWidget *pParent /* = 0 */) const
+{
+    error(pParent, MessageType_Error,
+          tr("Failed to create a DHCP server for the network interface <b>%1</b>.")
+             .arg(strInterfaceName),
+          formatErrorInfo(comVBox));
+}
+
+void UIMessageCenter::cannotRemoveDHCPServer(const CVirtualBox &comVBox, const QString &strInterfaceName, QWidget *pParent /* = 0 */) const
+{
+    error(pParent, MessageType_Error,
+          tr("Failed to remove the DHCP server for the network interface <b>%1</b>.")
+             .arg(strInterfaceName),
+          formatErrorInfo(comVBox));
+}
+
+void UIMessageCenter::cannotAcquireDHCPServerParameter(const CDHCPServer &comServer, QWidget *pParent /* = 0 */) const
+{
+    error(pParent, MessageType_Error,
+          tr("Failed to acquire DHCP server parameter."),
+          formatErrorInfo(comServer));
+}
+
+void UIMessageCenter::cannotSaveDHCPServerParameter(const CDHCPServer &comServer, QWidget *pParent /* = 0 */) const
+{
+    error(pParent, MessageType_Error,
+          tr("Failed to save DHCP server parameter."),
+          formatErrorInfo(comServer));
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h	(revision 66680)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h	(revision 66681)
@@ -219,13 +219,6 @@
     /* API: Global settings warnings: */
     bool confirmNATNetworkRemoval(const QString &strName, QWidget *pParent = 0) const;
-    bool confirmHostOnlyInterfaceRemoval(const QString &strName, QWidget *pParent = 0) const;
     void cannotCreateNATNetwork(const CVirtualBox &vbox, QWidget *pParent = 0);
     void cannotRemoveNATNetwork(const CVirtualBox &vbox, const QString &strNetworkName, QWidget *pParent = 0);
-    void cannotCreateDHCPServer(const CVirtualBox &comVBox, const QString &strInterfaceName, QWidget *pParent = 0) const;
-    void cannotRemoveDHCPServer(const CVirtualBox &comVBox, const QString &strInterfaceName, QWidget *pParent = 0) const;
-    void cannotCreateHostNetworkInterface(const CHost &comHost, QWidget *pParent = 0) const;
-    void cannotCreateHostNetworkInterface(const CProgress &comProgress, QWidget *pParent = 0) const;
-    void cannotRemoveHostNetworkInterface(const CHost &comHost, const QString &strInterfaceName, QWidget *pParent = 0) const;
-    void cannotRemoveHostNetworkInterface(const CProgress &comProgress, const QString &strInterfaceName, QWidget *pParent = 0) const;
     void cannotSetSystemProperties(const CSystemProperties &properties, QWidget *pParent = 0) const;
 
@@ -258,4 +251,19 @@
     void cannotOpenMedium(const CVirtualBox &vbox, UIMediumType type, const QString &strLocation, QWidget *pParent = 0) const;
     void cannotCloseMedium(const UIMedium &medium, const COMResult &rc, QWidget *pParent = 0) const;
+
+    /* API: Host Network Manager warnings: */
+    bool confirmHostOnlyInterfaceRemoval(const QString &strName, QWidget *pParent = 0) const;
+    void cannotAcquireHostNetworkInterfaces(const CHost &comHost, QWidget *pParent = 0) const;
+    void cannotFindHostNetworkInterface(const CHost &comHost, const QString &strInterfaceName, QWidget *pParent = 0) const;
+    void cannotCreateHostNetworkInterface(const CHost &comHost, QWidget *pParent = 0) const;
+    void cannotCreateHostNetworkInterface(const CProgress &progress, QWidget *pParent = 0) const;
+    void cannotRemoveHostNetworkInterface(const CHost &comHost, const QString &strInterfaceName, QWidget *pParent = 0) const;
+    void cannotRemoveHostNetworkInterface(const CProgress &progress, const QString &strInterfaceName, QWidget *pParent = 0) const;
+    void cannotAcquireHostNetworkInterfaceParameter(const CHostNetworkInterface &comInterface, QWidget *pParent = 0) const;
+    void cannotSaveHostNetworkInterfaceParameter(const CHostNetworkInterface &comInterface, QWidget *pParent = 0) const;
+    void cannotCreateDHCPServer(const CVirtualBox &comVBox, const QString &strInterfaceName, QWidget *pParent = 0) const;
+    void cannotRemoveDHCPServer(const CVirtualBox &comVBox, const QString &strInterfaceName, QWidget *pParent = 0) const;
+    void cannotAcquireDHCPServerParameter(const CDHCPServer &comServer, QWidget *pParent = 0) const;
+    void cannotSaveDHCPServerParameter(const CDHCPServer &comServer, QWidget *pParent = 0) const;
 
     /* API: Wizards warnings: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkDetailsDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkDetailsDialog.cpp	(revision 66681)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkDetailsDialog.cpp	(revision 66681)
@@ -0,0 +1,486 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIHostNetworkDetailsDialog class implementation.
+ */
+
+/*
+ * Copyright (C) 2009-2016 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifdef VBOX_WITH_PRECOMPILED_HEADERS
+# include <precomp.h>
+#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+/* Qt includes: */
+# include <QCheckBox>
+# include <QLabel>
+# include <QRegExpValidator>
+
+/* GUI includes: */
+# include "QIDialogButtonBox.h"
+# include "QILineEdit.h"
+# include "UIGlobalSettingsNetwork.h"
+# include "UIHostNetworkDetailsDialog.h"
+# include "UIIconPool.h"
+
+#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+
+UIHostNetworkDetailsDialog::UIHostNetworkDetailsDialog(QWidget *pParent, UIDataHostNetwork &data)
+    : QIWithRetranslateUI2<QIDialog>(pParent)
+    , m_data(data)
+{
+    /* Prepare: */
+    prepare();
+}
+
+void UIHostNetworkDetailsDialog::retranslateUi()
+{
+    /* Translate this: */
+    setWindowTitle(tr("Host Network Details"));
+
+    /* Translate tab-widget: */
+    m_pTabWidget->setTabText(0, tr("&Adapter"));
+    m_pTabWidget->setTabText(1, tr("&DHCP Server"));
+
+    /* Translate 'Interface' tab content: */
+    m_pLabelIPv4->setText(tr("&IPv4 Address:"));
+    m_pEditorIPv4->setToolTip(tr("Holds the host IPv4 address for this adapter."));
+    m_pLabelNMv4->setText(tr("IPv4 Network &Mask:"));
+    m_pEditorNMv4->setToolTip(tr("Holds the host IPv4 network mask for this adapter."));
+    m_pLabelIPv6->setText(tr("I&Pv6 Address:"));
+    m_pEditorIPv6->setToolTip(tr("Holds the host IPv6 address for this adapter if IPv6 is supported."));
+    m_pLabelNMv6->setText(tr("IPv6 Network Mask &Length:"));
+    m_pEditorNMv6->setToolTip(tr("Holds the host IPv6 network mask prefix length for this adapter if IPv6 is supported."));
+
+    /* Translate 'DHCP server' tab content: */
+    m_pCheckBoxDHCP->setText(tr("&Enable Server"));
+    m_pCheckBoxDHCP->setToolTip(tr("When checked, the DHCP Server will be enabled for this network on machine start-up."));
+    m_pLabelDHCPAddress->setText(tr("Server Add&ress:"));
+    m_pEditorDHCPAddress->setToolTip(tr("Holds the address of the DHCP server servicing the network associated with this host-only adapter."));
+    m_pLabelDHCPMask->setText(tr("Server &Mask:"));
+    m_pEditorDHCPMask->setToolTip(tr("Holds the network mask of the DHCP server servicing the network associated with this host-only adapter."));
+    m_pLabelDHCPLowerAddress->setText(tr("&Lower Address Bound:"));
+    m_pEditorDHCPLowerAddress->setToolTip(tr("Holds the lower address bound offered by the DHCP server servicing the network associated with this host-only adapter."));
+    m_pLabelDHCPUpperAddress->setText(tr("&Upper Address Bound:"));
+    m_pEditorDHCPUpperAddress->setToolTip(tr("Holds the upper address bound offered by the DHCP server servicing the network associated with this host-only adapter."));
+}
+
+void UIHostNetworkDetailsDialog::accept()
+{
+    /* Save before accept: */
+    save();
+
+    /* Call to base-class: */
+    QIDialog::accept();
+}
+
+void UIHostNetworkDetailsDialog::prepare()
+{
+    /* Prepare this: */
+    prepareThis();
+
+    /* Apply language settings: */
+    retranslateUi();
+
+    /* Load: */
+    load();
+}
+
+void UIHostNetworkDetailsDialog::prepareThis()
+{
+    /* Apply window icons: */
+    setWindowIcon(UIIconPool::iconSetFull(":/edit_host_iface_22px.png", ":/edit_host_iface_16px.png"));
+
+    /* Create layout: */
+    QVBoxLayout *pLayout = new QVBoxLayout(this);
+    AssertPtrReturnVoid(pLayout);
+    {
+        /* Prepare tab-widget: */
+        prepareTabWidget();
+        /* Prepare button-box: */
+        prepareButtonBox();
+    }
+}
+
+void UIHostNetworkDetailsDialog::prepareTabWidget()
+{
+    /* Create tab-widget: */
+    m_pTabWidget = new QITabWidget;
+    AssertPtrReturnVoid(m_pTabWidget);
+    {
+        /* Prepare 'Interface' tab: */
+        prepareTabInterface();
+        /* Prepare 'DHCP server' tab: */
+        prepareTabDHCPServer();
+        /* Add into layout: */
+        layout()->addWidget(m_pTabWidget);
+    }
+}
+
+void UIHostNetworkDetailsDialog::prepareTabInterface()
+{
+    /* Create 'Interface' tab: */
+    QWidget *pTabInterface = new QWidget;
+    AssertPtrReturnVoid(pTabInterface);
+    {
+        /* Create 'Interface' layout: */
+        QGridLayout *pLayoutInterface = new QGridLayout(pTabInterface);
+        AssertPtrReturnVoid(pLayoutInterface);
+        {
+            /* Create IPv4 address label: */
+            m_pLabelIPv4 = new QLabel;
+            AssertPtrReturnVoid(m_pLabelIPv4);
+            {
+                /* Configure label: */
+                m_pLabelIPv4->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
+                /* Add into layout: */
+                pLayoutInterface->addWidget(m_pLabelIPv4, 0, 0);
+            }
+            /* Create IPv4 address editor: */
+            m_pEditorIPv4 = new QILineEdit;
+            AssertPtrReturnVoid(m_pEditorIPv4);
+            {
+                /* Configure editor: */
+                m_pLabelIPv4->setBuddy(m_pEditorIPv4);
+                /* Add into layout: */
+                pLayoutInterface->addWidget(m_pEditorIPv4, 0, 1);
+            }
+            /* Create IPv4 network mask label: */
+            m_pLabelNMv4 = new QLabel;
+            AssertPtrReturnVoid(m_pLabelNMv4);
+            {
+                /* Configure label: */
+                m_pLabelNMv4->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
+                /* Add into layout: */
+                pLayoutInterface->addWidget(m_pLabelNMv4, 1, 0);
+            }
+            /* Create IPv4 network mask editor: */
+            m_pEditorNMv4 = new QILineEdit;
+            AssertPtrReturnVoid(m_pEditorNMv4);
+            {
+                /* Configure editor: */
+                m_pLabelNMv4->setBuddy(m_pEditorNMv4);
+                /* Add into layout: */
+                pLayoutInterface->addWidget(m_pEditorNMv4, 1, 1);
+            }
+            /* Create IPv6 address label: */
+            m_pLabelIPv6 = new QLabel;
+            AssertPtrReturnVoid(m_pLabelIPv6);
+            {
+                /* Configure label: */
+                m_pLabelIPv6->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
+                /* Add into layout: */
+                pLayoutInterface->addWidget(m_pLabelIPv6, 2, 0);
+            }
+            /* Create IPv6 address editor: */
+            m_pEditorIPv6 = new QILineEdit;
+            AssertPtrReturnVoid(m_pEditorIPv6);
+            {
+                /* Configure editor: */
+                m_pLabelIPv6->setBuddy(m_pEditorIPv6);
+                m_pEditorIPv6->setFixedWidthByText(QString().fill('X', 32) + QString().fill(':', 7));
+                /* Add into layout: */
+                pLayoutInterface->addWidget(m_pEditorIPv6, 2, 1);
+            }
+            /* Create IPv6 network mask label: */
+            m_pLabelNMv6 = new QLabel;
+            AssertPtrReturnVoid(m_pLabelNMv6);
+            {
+                /* Configure label: */
+                m_pLabelNMv6->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
+                /* Add into layout: */
+                pLayoutInterface->addWidget(m_pLabelNMv6, 3, 0);
+            }
+            /* Create IPv6 network mask editor: */
+            m_pEditorNMv6 = new QILineEdit;
+            AssertPtrReturnVoid(m_pEditorNMv6);
+            {
+                /* Configure editor: */
+                m_pLabelNMv6->setBuddy(m_pEditorNMv6);
+                /* Add into layout: */
+                pLayoutInterface->addWidget(m_pEditorNMv6, 3, 1);
+            }
+            /* Create stretch: */
+            QSpacerItem *pSpacer1 = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
+            AssertPtrReturnVoid(pSpacer1);
+            {
+                /* Add into layout: */
+                pLayoutInterface->addItem(pSpacer1, 4, 0, 1, 2);
+            }
+        }
+        /* Add to tab-widget: */
+        m_pTabWidget->addTab(pTabInterface, QString());
+    }
+}
+
+void UIHostNetworkDetailsDialog::prepareTabDHCPServer()
+{
+    /* Create 'DHCP server' tab: */
+    QWidget *pTabDHCPServer = new QWidget;
+    AssertPtrReturnVoid(pTabDHCPServer);
+    {
+        /* Create 'DHCP server' layout: */
+        QGridLayout *pLayoutDHCPServer = new QGridLayout(pTabDHCPServer);
+        AssertPtrReturnVoid(pLayoutDHCPServer);
+        {
+            /* Create DHCP server status check-box: */
+            m_pCheckBoxDHCP = new QCheckBox;
+            AssertPtrReturnVoid(m_pCheckBoxDHCP);
+            {
+                /* Configure check-box: */
+                connect(m_pCheckBoxDHCP, SIGNAL(stateChanged(int)), this, SLOT(sltDhcpServerStatusChanged()));
+                /* Add into layout: */
+                pLayoutDHCPServer->addWidget(m_pCheckBoxDHCP, 0, 0, 1, 3);
+            }
+            /* Create DHCP address label: */
+            m_pLabelDHCPAddress = new QLabel;
+            AssertPtrReturnVoid(m_pLabelDHCPAddress);
+            {
+                /* Configure label: */
+                m_pLabelDHCPAddress->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
+                /* Add into layout: */
+                pLayoutDHCPServer->addWidget(m_pLabelDHCPAddress, 1, 1);
+            }
+            /* Create DHCP address editor: */
+            m_pEditorDHCPAddress = new QILineEdit;
+            AssertPtrReturnVoid(m_pEditorDHCPAddress);
+            {
+                /* Configure editor: */
+                m_pLabelDHCPAddress->setBuddy(m_pEditorDHCPAddress);
+                /* Add into layout: */
+                pLayoutDHCPServer->addWidget(m_pEditorDHCPAddress, 1, 2);
+            }
+            /* Create DHCP network mask label: */
+            m_pLabelDHCPMask = new QLabel;
+            AssertPtrReturnVoid(m_pLabelDHCPMask);
+            {
+                /* Configure label: */
+                m_pLabelDHCPMask->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
+                /* Add into layout: */
+                pLayoutDHCPServer->addWidget(m_pLabelDHCPMask, 2, 1);
+            }
+            /* Create DHCP network mask editor: */
+            m_pEditorDHCPMask = new QILineEdit;
+            AssertPtrReturnVoid(m_pEditorDHCPMask);
+            {
+                /* Configure editor: */
+                m_pLabelDHCPMask->setBuddy(m_pEditorDHCPMask);
+                /* Add into layout: */
+                pLayoutDHCPServer->addWidget(m_pEditorDHCPMask, 2, 2);
+            }
+            /* Create DHCP lower address label: */
+            m_pLabelDHCPLowerAddress = new QLabel;
+            AssertPtrReturnVoid(m_pLabelDHCPLowerAddress);
+            {
+                /* Configure label: */
+                m_pLabelDHCPLowerAddress->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
+                /* Add into layout: */
+                pLayoutDHCPServer->addWidget(m_pLabelDHCPLowerAddress, 3, 1);
+            }
+            /* Create DHCP lower address editor: */
+            m_pEditorDHCPLowerAddress = new QILineEdit;
+            AssertPtrReturnVoid(m_pEditorDHCPLowerAddress);
+            {
+                /* Configure editor: */
+                m_pLabelDHCPLowerAddress->setBuddy(m_pEditorDHCPLowerAddress);
+                /* Add into layout: */
+                pLayoutDHCPServer->addWidget(m_pEditorDHCPLowerAddress, 3, 2);
+            }
+            /* Create DHCP upper address label: */
+            m_pLabelDHCPUpperAddress = new QLabel;
+            AssertPtrReturnVoid(m_pLabelDHCPUpperAddress);
+            {
+                /* Configure label: */
+                m_pLabelDHCPUpperAddress->setAlignment(Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter);
+                /* Add into layout: */
+                pLayoutDHCPServer->addWidget(m_pLabelDHCPUpperAddress, 4, 1);
+            }
+            /* Create DHCP upper address editor: */
+            m_pEditorDHCPUpperAddress = new QILineEdit;
+            AssertPtrReturnVoid(m_pEditorDHCPUpperAddress);
+            {
+                /* Configure editor: */
+                m_pLabelDHCPUpperAddress->setBuddy(m_pEditorDHCPUpperAddress);
+                /* Add into layout: */
+                pLayoutDHCPServer->addWidget(m_pEditorDHCPUpperAddress, 4, 2);
+            }
+            /* Create indent: */
+            QStyleOption options;
+            options.initFrom(m_pCheckBoxDHCP);
+            const int iWidth2 = m_pCheckBoxDHCP->style()->pixelMetric(QStyle::PM_IndicatorWidth, &options, m_pCheckBoxDHCP) +
+                                m_pCheckBoxDHCP->style()->pixelMetric(QStyle::PM_CheckBoxLabelSpacing, &options, m_pCheckBoxDHCP) -
+                                pLayoutDHCPServer->spacing() - 1;
+            QSpacerItem *pSpacer2 = new QSpacerItem(iWidth2, 0, QSizePolicy::Fixed, QSizePolicy::Expanding);
+            AssertPtrReturnVoid(pSpacer2);
+            {
+                /* Add into layout: */
+                pLayoutDHCPServer->addItem(pSpacer2, 1, 0, 4);
+            }
+            /* Create stretch: */
+            QSpacerItem *pSpacer3 = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
+            AssertPtrReturnVoid(pSpacer3);
+            {
+                /* Add into layout: */
+                pLayoutDHCPServer->addItem(pSpacer3, 5, 0, 1, 3);
+            }
+        }
+        /* Add to tab-widget: */
+        m_pTabWidget->addTab(pTabDHCPServer, QString());
+    }
+}
+
+void UIHostNetworkDetailsDialog::prepareButtonBox()
+{
+    /* Create dialog button-box: */
+    QIDialogButtonBox *pButtonBox = new QIDialogButtonBox;
+    AssertPtrReturnVoid(pButtonBox);
+    {
+        /* Configure button-box: */
+        pButtonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
+        connect(pButtonBox, SIGNAL(accepted()), this, SLOT(accept()));
+        connect(pButtonBox, SIGNAL(rejected()), this, SLOT(reject()));
+        /* Add button-box into layout: */
+        layout()->addWidget(pButtonBox);
+    }
+}
+
+void UIHostNetworkDetailsDialog::load()
+{
+    /* Load 'Interface' data: */
+    loadDataForInterface();
+
+    /* Load 'DHCP server' data: */
+    m_pCheckBoxDHCP->setChecked(m_data.m_dhcpserver.m_fDhcpServerEnabled);
+    loadDataForDHCPServer();
+}
+
+void UIHostNetworkDetailsDialog::loadDataForInterface()
+{
+    /* IPv4 fields: */
+    m_pEditorIPv4->setText(m_data.m_interface.m_strInterfaceAddress);
+    m_pEditorNMv4->setText(m_data.m_interface.m_strInterfaceMask);
+
+    /* IPv6 fields: */
+    const bool fIsIpv6Supported = m_data.m_interface.m_fIpv6Supported;
+    m_pLabelIPv6->setEnabled(fIsIpv6Supported);
+    m_pLabelNMv6->setEnabled(fIsIpv6Supported);
+    m_pEditorIPv6->setEnabled(fIsIpv6Supported);
+    m_pEditorNMv6->setEnabled(fIsIpv6Supported);
+    if (fIsIpv6Supported)
+    {
+        /* Load old values: */
+        m_pEditorIPv6->setText(m_data.m_interface.m_strInterfaceAddress6);
+        m_pEditorNMv6->setText(m_data.m_interface.m_strInterfaceMaskLength6);
+    }
+}
+
+void UIHostNetworkDetailsDialog::loadDataForDHCPServer()
+{
+    /* DHCP server fields: */
+    const bool fIsManual = m_pCheckBoxDHCP->isChecked();
+    m_pLabelDHCPAddress->setEnabled(fIsManual);
+    m_pLabelDHCPMask->setEnabled(fIsManual);
+    m_pLabelDHCPLowerAddress->setEnabled(fIsManual);
+    m_pLabelDHCPUpperAddress->setEnabled(fIsManual);
+    m_pEditorDHCPAddress->setEnabled(fIsManual);
+    m_pEditorDHCPMask->setEnabled(fIsManual);
+    m_pEditorDHCPLowerAddress->setEnabled(fIsManual);
+    m_pEditorDHCPUpperAddress->setEnabled(fIsManual);
+    if (fIsManual)
+    {
+        /* Load old values: */
+        m_pEditorDHCPAddress->setText(m_data.m_dhcpserver.m_strDhcpServerAddress);
+        m_pEditorDHCPMask->setText(m_data.m_dhcpserver.m_strDhcpServerMask);
+        m_pEditorDHCPLowerAddress->setText(m_data.m_dhcpserver.m_strDhcpLowerAddress);
+        m_pEditorDHCPUpperAddress->setText(m_data.m_dhcpserver.m_strDhcpUpperAddress);
+
+        /* Invent default values where necessary: */
+        const quint32 uAddr = ipv4FromQStringToQuint32(m_data.m_interface.m_strInterfaceAddress);
+        const quint32 uMask = ipv4FromQStringToQuint32(m_data.m_interface.m_strInterfaceMask);
+        const quint32 uProp = uAddr & uMask;
+        const QString strMask = ipv4FromQuint32ToQString(uMask);
+        const QString strProp = ipv4FromQuint32ToQString(uProp);
+        //printf("Proposal is = %s x %s\n",
+        //       strProp.toUtf8().constData(),
+        //       strMask.toUtf8().constData());
+        if (   m_data.m_dhcpserver.m_strDhcpServerAddress.isEmpty()
+            || m_data.m_dhcpserver.m_strDhcpServerAddress == "0.0.0.0")
+            m_pEditorDHCPAddress->setText(strProp);
+        if (   m_data.m_dhcpserver.m_strDhcpServerMask.isEmpty()
+            || m_data.m_dhcpserver.m_strDhcpServerMask == "0.0.0.0")
+            m_pEditorDHCPMask->setText(strMask);
+        if (   m_data.m_dhcpserver.m_strDhcpLowerAddress.isEmpty()
+            || m_data.m_dhcpserver.m_strDhcpLowerAddress == "0.0.0.0")
+            m_pEditorDHCPLowerAddress->setText(strProp);
+        if (   m_data.m_dhcpserver.m_strDhcpUpperAddress.isEmpty()
+            || m_data.m_dhcpserver.m_strDhcpUpperAddress == "0.0.0.0")
+            m_pEditorDHCPUpperAddress->setText(strProp);
+    }
+    else
+    {
+        m_pEditorDHCPAddress->clear();
+        m_pEditorDHCPMask->clear();
+        m_pEditorDHCPLowerAddress->clear();
+        m_pEditorDHCPUpperAddress->clear();
+    }
+}
+
+void UIHostNetworkDetailsDialog::save()
+{
+    /* Interface data: */
+    m_data.m_interface.m_strInterfaceAddress = m_pEditorIPv4->text();
+    m_data.m_interface.m_strInterfaceMask = m_pEditorNMv4->text();
+    if (m_data.m_interface.m_fIpv6Supported)
+    {
+        m_data.m_interface.m_strInterfaceAddress6 = m_pEditorIPv6->text();
+        m_data.m_interface.m_strInterfaceMaskLength6 = m_pEditorNMv6->text();
+    }
+
+    /* Server data: */
+    m_data.m_dhcpserver.m_fDhcpServerEnabled = m_pCheckBoxDHCP->isChecked();
+    if (m_data.m_dhcpserver.m_fDhcpServerEnabled)
+    {
+        m_data.m_dhcpserver.m_strDhcpServerAddress = m_pEditorDHCPAddress->text();
+        m_data.m_dhcpserver.m_strDhcpServerMask = m_pEditorDHCPMask->text();
+        m_data.m_dhcpserver.m_strDhcpLowerAddress = m_pEditorDHCPLowerAddress->text();
+        m_data.m_dhcpserver.m_strDhcpUpperAddress = m_pEditorDHCPUpperAddress->text();
+    }
+}
+
+/* static */
+quint32 UIHostNetworkDetailsDialog::ipv4FromQStringToQuint32(const QString &strAddress)
+{
+    quint32 uAddress = 0;
+    foreach (const QString &strPart, strAddress.split('.'))
+    {
+        uAddress = uAddress << 8;
+        bool fOk = false;
+        uint uPart = strPart.toUInt(&fOk);
+        if (fOk)
+            uAddress += uPart;
+    }
+    return uAddress;
+}
+
+/* static */
+QString UIHostNetworkDetailsDialog::ipv4FromQuint32ToQString(quint32 uAddress)
+{
+    QStringList address;
+    while (uAddress)
+    {
+        uint uPart = uAddress & 0xFF;
+        address.prepend(QString::number(uPart));
+        uAddress = uAddress >> 8;
+    }
+    return address.join('.');
+}
+
Index: /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkDetailsDialog.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkDetailsDialog.h	(revision 66681)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkDetailsDialog.h	(revision 66681)
@@ -0,0 +1,263 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIHostNetworkDetailsDialog class declaration.
+ */
+
+/*
+ * Copyright (C) 2009-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef __UIHostNetworkDetailsDialog_h__
+#define __UIHostNetworkDetailsDialog_h__
+
+/* GUI includes: */
+#include "QIDialog.h"
+#include "QIWithRetranslateUI.h"
+
+/* Forward declarations: */
+class QCheckBox;
+class QLabel;
+class QILineEdit;
+class QITabWidget;
+
+
+/** Host Network Manager: Host Network Interface data structure. */
+struct UIDataHostNetworkInterface
+{
+    /** Constructs data. */
+    UIDataHostNetworkInterface()
+        : m_strName(QString())
+        , m_strInterfaceAddress(QString())
+        , m_strInterfaceMask(QString())
+        , m_fIpv6Supported(false)
+        , m_strInterfaceAddress6(QString())
+        , m_strInterfaceMaskLength6(QString())
+    {}
+
+    /** Returns whether the @a other passed data is equal to this one. */
+    bool equal(const UIDataHostNetworkInterface &other) const
+    {
+        return true
+               && (m_strName == other.m_strName)
+               && (m_strInterfaceAddress == other.m_strInterfaceAddress)
+               && (m_strInterfaceMask == other.m_strInterfaceMask)
+               && (m_fIpv6Supported == other.m_fIpv6Supported)
+               && (m_strInterfaceAddress6 == other.m_strInterfaceAddress6)
+               && (m_strInterfaceMaskLength6 == other.m_strInterfaceMaskLength6)
+               ;
+    }
+
+    /** Returns whether the @a other passed data is equal to this one. */
+    bool operator==(const UIDataHostNetworkInterface &other) const { return equal(other); }
+    /** Returns whether the @a other passed data is different from this one. */
+    bool operator!=(const UIDataHostNetworkInterface &other) const { return !equal(other); }
+
+    /** Holds host interface name. */
+    QString m_strName;
+    /** Holds IPv4 interface address. */
+    QString m_strInterfaceAddress;
+    /** Holds IPv4 interface mask. */
+    QString m_strInterfaceMask;
+    /** Holds whether IPv6 protocol supported. */
+    bool m_fIpv6Supported;
+    /** Holds IPv6 interface address. */
+    QString m_strInterfaceAddress6;
+    /** Holds IPv6 interface mask length. */
+    QString m_strInterfaceMaskLength6;
+};
+
+
+/** Host Network Manager: DHCP Server data structure. */
+struct UIDataDHCPServer
+{
+    /** Constructs data. */
+    UIDataDHCPServer()
+        : m_fDhcpServerEnabled(false)
+        , m_strDhcpServerAddress(QString())
+        , m_strDhcpServerMask(QString())
+        , m_strDhcpLowerAddress(QString())
+        , m_strDhcpUpperAddress(QString())
+    {}
+
+    /** Returns whether the @a other passed data is equal to this one. */
+    bool equal(const UIDataDHCPServer &other) const
+    {
+        return true
+               && (m_fDhcpServerEnabled == other.m_fDhcpServerEnabled)
+               && (m_strDhcpServerAddress == other.m_strDhcpServerAddress)
+               && (m_strDhcpServerMask == other.m_strDhcpServerMask)
+               && (m_strDhcpLowerAddress == other.m_strDhcpLowerAddress)
+               && (m_strDhcpUpperAddress == other.m_strDhcpUpperAddress)
+               ;
+    }
+
+    /** Returns whether the @a other passed data is equal to this one. */
+    bool operator==(const UIDataDHCPServer &other) const { return equal(other); }
+    /** Returns whether the @a other passed data is different from this one. */
+    bool operator!=(const UIDataDHCPServer &other) const { return !equal(other); }
+
+    /** Holds whether DHCP server enabled. */
+    bool m_fDhcpServerEnabled;
+    /** Holds DHCP server address. */
+    QString m_strDhcpServerAddress;
+    /** Holds DHCP server mask. */
+    QString m_strDhcpServerMask;
+    /** Holds DHCP server lower address. */
+    QString m_strDhcpLowerAddress;
+    /** Holds DHCP server upper address. */
+    QString m_strDhcpUpperAddress;
+};
+
+
+/** Host Network Manager: Host network data structure. */
+struct UIDataHostNetwork
+{
+    /** Constructs data. */
+    UIDataHostNetwork()
+        : m_interface(UIDataHostNetworkInterface())
+        , m_dhcpserver(UIDataDHCPServer())
+    {}
+
+    /** Returns whether the @a other passed data is equal to this one. */
+    bool equal(const UIDataHostNetwork &other) const
+    {
+        return true
+               && (m_interface == other.m_interface)
+               && (m_dhcpserver == other.m_dhcpserver)
+               ;
+    }
+
+    /** Returns whether the @a other passed data is equal to this one. */
+    bool operator==(const UIDataHostNetwork &other) const { return equal(other); }
+    /** Returns whether the @a other passed data is different from this one. */
+    bool operator!=(const UIDataHostNetwork &other) const { return !equal(other); }
+
+    /** Holds the interface data. */
+    UIDataHostNetworkInterface m_interface;
+    /** Holds the DHCP server data. */
+    UIDataDHCPServer m_dhcpserver;
+};
+
+
+/** Host Network Manager: Host network details dialog. */
+class UIHostNetworkDetailsDialog : public QIWithRetranslateUI2<QIDialog>
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs host network details dialog for the passed @a pParent and @a data. */
+    UIHostNetworkDetailsDialog(QWidget *pParent, UIDataHostNetwork &data);
+
+protected:
+
+    /** Handles translation event. */
+    virtual void retranslateUi() /* override */;
+
+private slots:
+
+    /** Handles DHCP server status change. */
+    void sltDhcpServerStatusChanged() { loadDataForDHCPServer(); }
+
+    /** Accepts dialog changes. */
+    void accept();
+
+private:
+
+    /** @name Prepare/cleanup cascade.
+     * @{ */
+        /** Prepares all. */
+        void prepare();
+        /** Prepares this. */
+        void prepareThis();
+        /** Prepares tab-widget. */
+        void prepareTabWidget();
+        /** Prepares 'Interface' tab. */
+        void prepareTabInterface();
+        /** Prepares 'DHCP server' tab. */
+        void prepareTabDHCPServer();
+        /** Prepares button-box. */
+        void prepareButtonBox();
+    /** @} */
+
+    /** @name Loading/saving stuff.
+     * @{ */
+        /** Loads data. */
+        void load();
+        /** Loads interface data. */
+        void loadDataForInterface();
+        /** Loads server data. */
+        void loadDataForDHCPServer();
+        /** Saves data. */
+        void save();
+    /** @} */
+
+    /** @name Helpers.
+     * @{ */
+        /** Converts IPv4 address from QString to quint32. */
+        static quint32 ipv4FromQStringToQuint32(const QString &strAddress);
+        /** Converts IPv4 address from quint32 to QString. */
+        static QString ipv4FromQuint32ToQString(quint32 uAddress);
+    /** @} */
+
+    /** @name General variables.
+     * @{ */
+        /** Holds the external data reference. */
+        UIDataHostNetwork &m_data;
+        /** Holds the tab-widget. */
+        QITabWidget *m_pTabWidget;
+    /** @} */
+
+    /** @name Interface variables.
+     * @{ */
+        /** Holds the IPv4 address label. */
+        QLabel      *m_pLabelIPv4;
+        /** Holds the IPv4 address editor. */
+        QILineEdit  *m_pEditorIPv4;
+        /** Holds the IPv4 network mask label. */
+        QLabel      *m_pLabelNMv4;
+        /** Holds the IPv4 network mask editor. */
+        QILineEdit  *m_pEditorNMv4;
+        /** Holds the IPv6 address label. */
+        QLabel      *m_pLabelIPv6;
+        /** Holds the IPv6 address editor. */
+        QILineEdit  *m_pEditorIPv6;
+        /** Holds the IPv6 network mask label. */
+        QLabel      *m_pLabelNMv6;
+        /** Holds the IPv6 network mask editor. */
+        QILineEdit  *m_pEditorNMv6;
+    /** @} */
+
+    /** @name DHCP server variables.
+     * @{ */
+        /** Holds the DHCP server status chack-box. */
+        QCheckBox   *m_pCheckBoxDHCP;
+        /** Holds the DHCP address label. */
+        QLabel      *m_pLabelDHCPAddress;
+        /** Holds the DHCP address editor. */
+        QILineEdit  *m_pEditorDHCPAddress;
+        /** Holds the DHCP network mask label. */
+        QLabel      *m_pLabelDHCPMask;
+        /** Holds the DHCP network mask editor. */
+        QILineEdit  *m_pEditorDHCPMask;
+        /** Holds the DHCP lower address label. */
+        QLabel      *m_pLabelDHCPLowerAddress;
+        /** Holds the DHCP lower address editor. */
+        QILineEdit  *m_pEditorDHCPLowerAddress;
+        /** Holds the DHCP upper address label. */
+        QLabel      *m_pLabelDHCPUpperAddress;
+        /** Holds the DHCP upper address editor. */
+        QILineEdit  *m_pEditorDHCPUpperAddress;
+    /** @} */
+};
+
+#endif /* __UIHostNetworkDetailsDialog_h__ */
+
Index: /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.cpp	(revision 66681)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.cpp	(revision 66681)
@@ -0,0 +1,803 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIHostNetworkManager class implementation.
+ */
+
+/*
+ * Copyright (C) 2009-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifdef VBOX_WITH_PRECOMPILED_HEADERS
+# include <precomp.h>
+#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+/* Qt includes: */
+# include <QHeaderView>
+# include <QMenuBar>
+# include <QPushButton>
+
+/* GUI includes: */
+# include "QIDialogButtonBox.h"
+# include "QITreeWidget.h"
+# include "UIIconPool.h"
+# include "UIMessageCenter.h"
+# include "UIHostNetworkDetailsDialog.h"
+# include "UIHostNetworkManager.h"
+# include "UIToolBar.h"
+# ifdef VBOX_WS_MAC
+#  include "UIWindowMenuManager.h"
+# endif /* VBOX_WS_MAC */
+# include "VBoxGlobal.h"
+
+/* COM includes: */
+# include "CDHCPServer.h"
+# include "CHost.h"
+# include "CHostNetworkInterface.h"
+
+/* Other VBox includes: */
+# include <iprt/cidr.h>
+
+#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+
+/** Host Network Manager: Tree-widget item. */
+class UIItemHostNetwork : public QITreeWidgetItem, public UIDataHostNetwork
+{
+public:
+
+    /** Updates item fields from data. */
+    void updateFields();
+
+    /** Returns item name. */
+    QString name() const { return m_interface.m_strName; }
+};
+
+
+/*********************************************************************************************************************************
+*   Class UIItemHostNetwork implementation.                                                                                      *
+*********************************************************************************************************************************/
+
+void UIItemHostNetwork::updateFields()
+{
+    /* Compose item name/tool-tip: */
+    setText(0, m_interface.m_strName);
+    const QString strTable("<table cellspacing=5>%1</table>");
+    const QString strHeader("<tr><td><nobr>%1:&nbsp;</nobr></td><td><nobr>%2</nobr></td></tr>");
+    const QString strSubHeader("<tr><td><nobr>&nbsp;&nbsp;%1:&nbsp;</nobr></td><td><nobr>%2</nobr></td></tr>");
+    QString strToolTip;
+
+    /* Interface information: */
+    strToolTip += strHeader.arg(UIHostNetworkManager::tr("Adapter"))
+                           .arg(UIHostNetworkManager::tr("Manually configured", "interface"));
+    strToolTip += strSubHeader.arg(UIHostNetworkManager::tr("IPv4 Address"))
+                              .arg(m_interface.m_strInterfaceAddress.isEmpty() ?
+                                   UIHostNetworkManager::tr ("Not set", "address") :
+                                   m_interface.m_strInterfaceAddress) +
+                  strSubHeader.arg(UIHostNetworkManager::tr("IPv4 Network Mask"))
+                              .arg(m_interface.m_strInterfaceMask.isEmpty() ?
+                                   UIHostNetworkManager::tr ("Not set", "mask") :
+                                   m_interface.m_strInterfaceMask);
+    if (m_interface.m_fIpv6Supported)
+    {
+        strToolTip += strSubHeader.arg(UIHostNetworkManager::tr("IPv6 Address"))
+                                  .arg(m_interface.m_strInterfaceAddress6.isEmpty() ?
+                                       UIHostNetworkManager::tr("Not set", "address") :
+                                       m_interface.m_strInterfaceAddress6) +
+                      strSubHeader.arg(UIHostNetworkManager::tr("IPv6 Network Mask Length"))
+                                  .arg(m_interface.m_strInterfaceMaskLength6.isEmpty() ?
+                                       UIHostNetworkManager::tr("Not set", "length") :
+                                       m_interface.m_strInterfaceMaskLength6);
+    }
+
+    /* DHCP server information: */
+    strToolTip += strHeader.arg(UIHostNetworkManager::tr("DHCP Server"))
+                           .arg(m_dhcpserver.m_fDhcpServerEnabled ?
+                                UIHostNetworkManager::tr("Enabled", "server") :
+                                UIHostNetworkManager::tr("Disabled", "server"));
+    if (m_dhcpserver.m_fDhcpServerEnabled)
+    {
+        strToolTip += strSubHeader.arg(UIHostNetworkManager::tr("Address"))
+                                  .arg(m_dhcpserver.m_strDhcpServerAddress.isEmpty() ?
+                                       UIHostNetworkManager::tr("Not set", "address") :
+                                       m_dhcpserver.m_strDhcpServerAddress) +
+                      strSubHeader.arg(UIHostNetworkManager::tr("Network Mask"))
+                                  .arg(m_dhcpserver.m_strDhcpServerMask.isEmpty() ?
+                                       UIHostNetworkManager::tr("Not set", "mask") :
+                                       m_dhcpserver.m_strDhcpServerMask) +
+                      strSubHeader.arg(UIHostNetworkManager::tr("Lower Bound"))
+                                  .arg(m_dhcpserver.m_strDhcpLowerAddress.isEmpty() ?
+                                       UIHostNetworkManager::tr("Not set", "bound") :
+                                       m_dhcpserver.m_strDhcpLowerAddress) +
+                      strSubHeader.arg(UIHostNetworkManager::tr("Upper Bound"))
+                                  .arg(m_dhcpserver.m_strDhcpUpperAddress.isEmpty() ?
+                                       UIHostNetworkManager::tr("Not set", "bound") :
+                                       m_dhcpserver.m_strDhcpUpperAddress);
+    }
+
+    /* Assign tool-tip finally: */
+    setToolTip(0, strTable.arg(strToolTip));
+}
+
+
+/*********************************************************************************************************************************
+*   Class UIHostNetworkManager implementation.                                                                                   *
+*********************************************************************************************************************************/
+
+/* static */
+UIHostNetworkManager *UIHostNetworkManager::s_pInstance = 0;
+UIHostNetworkManager *UIHostNetworkManager::instance() { return s_pInstance; }
+
+UIHostNetworkManager::UIHostNetworkManager(QWidget *pCenterWidget)
+    : m_pPseudoParentWidget(pCenterWidget)
+    , m_pToolBar(0)
+    , m_pMenu(0)
+    , m_pActionAdd(0)
+    , m_pActionEdit(0)
+    , m_pActionRemove(0)
+    , m_pTreeWidget(0)
+    , m_pButtonBox(0)
+{
+    /* Prepare instance: */
+    s_pInstance = this;
+
+    /* Prepare: */
+    prepare();
+}
+
+UIHostNetworkManager::~UIHostNetworkManager()
+{
+    /* Cleanup: */
+    cleanup();
+
+    /* Cleanup instance: */
+    s_pInstance = 0;
+}
+
+/* static */
+void UIHostNetworkManager::showModeless(QWidget *pCenterWidget /* = 0 */)
+{
+    /* Create instance if not yet created: */
+    if (!s_pInstance)
+        new UIHostNetworkManager(pCenterWidget);
+
+    /* Show instance: */
+    s_pInstance->show();
+    s_pInstance->setWindowState(s_pInstance->windowState() & ~Qt::WindowMinimized);
+    s_pInstance->activateWindow();
+}
+
+void UIHostNetworkManager::retranslateUi()
+{
+    /* Translate window title: */
+    setWindowTitle(tr("Host Network Manager"));
+
+    /* Translate menu: */
+    if (m_pMenu)
+        m_pMenu->setTitle(QApplication::translate("UIActionPool", "&File"));
+
+    /* Translate actions: */
+    if (m_pActionAdd)
+    {
+        m_pActionAdd->setText(tr("&Create"));
+        m_pActionAdd->setToolTip(tr("Create Host-only Network (%1)").arg(m_pActionAdd->shortcut().toString()));
+        m_pActionAdd->setStatusTip(tr("Creates new host-only network."));
+    }
+    if (m_pActionEdit)
+    {
+        m_pActionEdit->setText(tr("&Modify..."));
+        m_pActionEdit->setToolTip(tr("Modify Host-only Network (%1)").arg(m_pActionEdit->shortcut().toString()));
+        m_pActionEdit->setStatusTip(tr("Modifies selected host-only network."));
+    }
+    if (m_pActionRemove)
+    {
+        m_pActionRemove->setText(tr("&Remove..."));
+        m_pActionRemove->setToolTip(tr("Remove Host-only Network (%1)").arg(m_pActionRemove->shortcut().toString()));
+        m_pActionRemove->setStatusTip(tr("Removes selected host-only network."));
+    }
+
+    /* Adjust tool-bar: */
+#ifdef VBOX_WS_MAC
+    // WORKAROUND:
+    // There is a bug in Qt Cocoa which result in showing a "more arrow" when
+    // the necessary size of the toolbar is increased. Also for some languages
+    // the with doesn't match if the text increase. So manually adjust the size
+    // after changing the text.
+    if (m_pToolBar)
+        m_pToolBar->updateLayout();
+#endif
+}
+
+void UIHostNetworkManager::sltAddHostNetwork()
+{
+    /* Get host for further activities: */
+    CHost comHost = vboxGlobal().host();
+
+    /* Create interface: */
+    CHostNetworkInterface comInterface;
+    CProgress progress = comHost.CreateHostOnlyNetworkInterface(comInterface);
+
+    /* Show error message if necessary: */
+    if (!comHost.isOk() || progress.isNull())
+        msgCenter().cannotCreateHostNetworkInterface(comHost, this);
+    else
+    {
+        /* Show interface creation progress: */
+        msgCenter().showModalProgressDialog(progress, tr("Networking"), ":/progress_network_interface_90px.png", this, 0);
+
+        /* Show error message if necessary: */
+        if (!progress.isOk() || progress.GetResultCode() != 0)
+            msgCenter().cannotCreateHostNetworkInterface(progress, this);
+        else
+        {
+            /* Get network name for further activities: */
+            const QString strNetworkName = comInterface.GetNetworkName();
+
+            /* Show error message if necessary: */
+            if (!comInterface.isOk())
+                msgCenter().cannotAcquireHostNetworkInterfaceParameter(comInterface, this);
+            else
+            {
+                /* Get VBox for further activities: */
+                CVirtualBox comVBox = vboxGlobal().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 (!comVBox.isOk() || comServer.isNull())
+                    msgCenter().cannotCreateDHCPServer(comVBox, strNetworkName, this);
+            }
+
+            /* Add interface to the tree: */
+            UIDataHostNetwork data;
+            loadHostNetwork(comInterface, data);
+            createItemForNetworkHost(data, true);
+
+            /* Sort list by the 1st column: */
+            m_pTreeWidget->sortByColumn(0, Qt::AscendingOrder);
+        }
+    }
+}
+
+void UIHostNetworkManager::sltEditHostNetwork()
+{
+    /* Get network item: */
+    UIItemHostNetwork *pItem = static_cast<UIItemHostNetwork*>(m_pTreeWidget->currentItem());
+    AssertMsgReturnVoid(pItem, ("Current item must not be null!\n"));
+
+    /* Get item data: */
+    UIDataHostNetwork oldData = *pItem;
+    UIDataHostNetwork newData = oldData;
+
+    /* Show details dialog: */
+    UIHostNetworkDetailsDialog details(this, newData);
+    if (details.exec() != QDialog::Accepted)
+        return;
+
+    /* Get host for further activities: */
+    CHost comHost = vboxGlobal().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()
+            && (   newData.m_interface.m_strInterfaceAddress != oldData.m_interface.m_strInterfaceAddress
+                || newData.m_interface.m_strInterfaceMask != oldData.m_interface.m_strInterfaceMask))
+            comInterface.EnableStaticIPConfig(newData.m_interface.m_strInterfaceAddress, newData.m_interface.m_strInterfaceMask);
+        /* Save IPv6 interface configuration: */
+        if (   comInterface.isOk()
+            && newData.m_interface.m_fIpv6Supported
+            && (   newData.m_interface.m_strInterfaceAddress6 != oldData.m_interface.m_strInterfaceAddress6
+                || newData.m_interface.m_strInterfaceMaskLength6 != oldData.m_interface.m_strInterfaceMaskLength6))
+            comInterface.EnableStaticIPConfigV6(newData.m_interface.m_strInterfaceAddress6, newData.m_interface.m_strInterfaceMaskLength6.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();
+
+            /* Show error message if necessary: */
+            if (!comInterface.isOk())
+                msgCenter().cannotAcquireHostNetworkInterfaceParameter(comInterface, this);
+            else
+            {
+                /* Get VBox for further activities: */
+                CVirtualBox comVBox = vboxGlobal().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 (!comVBox.isOk() || comServer.isNull())
+                    msgCenter().cannotCreateDHCPServer(comVBox, strNetworkName, this);
+                else
+                {
+                    /* Save whether DHCP server is enabled: */
+                    if (   comServer.isOk()
+                        && newData.m_dhcpserver.m_fDhcpServerEnabled != oldData.m_dhcpserver.m_fDhcpServerEnabled)
+                        comServer.SetEnabled(newData.m_dhcpserver.m_fDhcpServerEnabled);
+                    /* Save DHCP server configuration: */
+                    if (   comServer.isOk()
+                        && newData.m_dhcpserver.m_fDhcpServerEnabled
+                        && (   newData.m_dhcpserver.m_strDhcpServerAddress != oldData.m_dhcpserver.m_strDhcpServerAddress
+                            || newData.m_dhcpserver.m_strDhcpServerMask != oldData.m_dhcpserver.m_strDhcpServerMask
+                            || newData.m_dhcpserver.m_strDhcpLowerAddress != oldData.m_dhcpserver.m_strDhcpLowerAddress
+                            || newData.m_dhcpserver.m_strDhcpUpperAddress != oldData.m_dhcpserver.m_strDhcpUpperAddress))
+                        comServer.SetConfiguration(newData.m_dhcpserver.m_strDhcpServerAddress, newData.m_dhcpserver.m_strDhcpServerMask,
+                                                   newData.m_dhcpserver.m_strDhcpLowerAddress, newData.m_dhcpserver.m_strDhcpUpperAddress);
+
+                    /* Show error message if necessary: */
+                    if (!comServer.isOk())
+                        msgCenter().cannotSaveDHCPServerParameter(comServer, this);
+                }
+            }
+        }
+
+        /* Update interface in the tree: */
+        UIDataHostNetwork data;
+        loadHostNetwork(comInterface, data);
+        updateItemForNetworkHost(data, true, pItem);
+    }
+}
+
+void UIHostNetworkManager::sltRemoveHostNetwork()
+{
+    /* Get network item: */
+    UIItemHostNetwork *pItem = static_cast<UIItemHostNetwork*>(m_pTreeWidget->currentItem());
+    AssertMsgReturnVoid(pItem, ("Current item must not be null!\n"));
+
+    /* Get interface name: */
+    const QString strInterfaceName(pItem->name());
+
+    /* Confirm host network removal: */
+    if (!msgCenter().confirmHostOnlyInterfaceRemoval(strInterfaceName, this))
+        return;
+
+    /* Get host for further activities: */
+    CHost comHost = vboxGlobal().host();
+
+    /* Find corresponding interface: */
+    const CHostNetworkInterface &comInterface = comHost.FindHostNetworkInterfaceByName(strInterfaceName);
+
+    /* Show error message if necessary: */
+    if (!comHost.isOk() || comInterface.isNull())
+        msgCenter().cannotFindHostNetworkInterface(comHost, strInterfaceName, this);
+    else
+    {
+        /* Get network name for further activities: */
+        QString strNetworkName;
+        if (comInterface.isOk())
+            strNetworkName = comInterface.GetNetworkName();
+        /* Get interface id for further activities: */
+        QString strInterfaceId;
+        if (comInterface.isOk())
+            strInterfaceId = comInterface.GetId();
+
+        /* Show error message if necessary: */
+        if (!comInterface.isOk())
+            msgCenter().cannotAcquireHostNetworkInterfaceParameter(comInterface, this);
+        else
+        {
+            /* Get VBox for further activities: */
+            CVirtualBox comVBox = vboxGlobal().virtualBox();
+
+            /* Find corresponding DHCP server: */
+            const CDHCPServer &comServer = comVBox.FindDHCPServerByNetworkName(strNetworkName);
+            if (comVBox.isOk() && comServer.isNotNull())
+            {
+                /* Remove server if any: */
+                comVBox.RemoveDHCPServer(comServer);
+
+                /* Show error message if necessary: */
+                if (!comVBox.isOk())
+                    msgCenter().cannotRemoveDHCPServer(comVBox, strInterfaceName, this);
+            }
+
+            /* Remove interface finally: */
+            CProgress progress = comHost.RemoveHostOnlyNetworkInterface(strInterfaceId);
+
+            /* Show error message if necessary: */
+            if (!comHost.isOk() || progress.isNull())
+                msgCenter().cannotRemoveHostNetworkInterface(comHost, strInterfaceName, this);
+            else
+            {
+                /* Show interface removal progress: */
+                msgCenter().showModalProgressDialog(progress, tr("Networking"), ":/progress_network_interface_90px.png", this, 0);
+
+                /* Show error message if necessary: */
+                if (!progress.isOk() || progress.GetResultCode() != 0)
+                    return msgCenter().cannotRemoveHostNetworkInterface(progress, strInterfaceName, this);
+                else
+                {
+                    /* Remove interface from the tree: */
+                    delete pItem;
+                }
+            }
+        }
+    }
+}
+
+void UIHostNetworkManager::sltHandleCurrentItemChange()
+{
+    /* Get network item: */
+    UIItemHostNetwork *pItem = static_cast<UIItemHostNetwork*>(m_pTreeWidget->currentItem());
+
+    /* Update actions availability: */
+    m_pActionRemove->setEnabled(pItem);
+    m_pActionEdit->setEnabled(pItem);
+}
+
+void UIHostNetworkManager::sltHandleContextMenuRequest(const QPoint &pos)
+{
+    /* Compose temporary context-menu: */
+    QMenu menu;
+    if (m_pTreeWidget->itemAt(pos))
+    {
+        menu.addAction(m_pActionEdit);
+        menu.addAction(m_pActionRemove);
+    }
+    else
+    {
+        menu.addAction(m_pActionAdd);
+    }
+    /* And show it: */
+    menu.exec(m_pTreeWidget->mapToGlobal(pos));
+}
+
+void UIHostNetworkManager::prepare()
+{
+    /* Prepare this: */
+    prepareThis();
+
+    /* Apply language settings: */
+    retranslateUi();
+
+    /* Center according pseudo-parent widget: */
+    VBoxGlobal::centerWidget(this, m_pPseudoParentWidget, false);
+
+    /* Load host networks: */
+    loadHostNetworks();
+}
+
+void UIHostNetworkManager::prepareThis()
+{
+    /* Initial size: */
+    resize(620, 460);
+
+    /* Dialog should delete itself on 'close': */
+    setAttribute(Qt::WA_DeleteOnClose);
+    /* And no need to count it as important for application.
+     * This way it will NOT be taken into account
+     * when other top-level windows will be closed: */
+    setAttribute(Qt::WA_QuitOnClose, false);
+
+    /* Apply window icons: */
+    setWindowIcon(UIIconPool::iconSetFull(":/host_iface_manager_32px.png", ":/host_iface_manager_16px.png"));
+
+    /* Prepare actions: */
+    prepareActions();
+    /* Prepare central-widget: */
+    prepareCentralWidget();
+}
+
+void UIHostNetworkManager::prepareActions()
+{
+    /* Create 'Add' action: */
+    m_pActionAdd = new QAction(this);
+    AssertPtrReturnVoid(m_pActionAdd);
+    {
+        /* Configure 'Add' action: */
+        m_pActionAdd->setShortcut(QKeySequence("Ctrl+A"));
+        m_pActionAdd->setIcon(UIIconPool::iconSetFull(":/add_host_iface_22px.png",
+                                                      ":/add_host_iface_16px.png",
+                                                      ":/add_host_iface_disabled_22px.png",
+                                                      ":/add_host_iface_disabled_16px.png"));
+        connect(m_pActionAdd, SIGNAL(triggered()), this, SLOT(sltAddHostNetwork()));
+    }
+
+    /* Create 'Edit' action: */
+    m_pActionEdit = new QAction(this);
+    AssertPtrReturnVoid(m_pActionEdit);
+    {
+        /* Configure 'Edit' action: */
+        m_pActionEdit->setShortcut(QKeySequence("Ctrl+Space"));
+        m_pActionEdit->setIcon(UIIconPool::iconSetFull(":/edit_host_iface_22px.png",
+                                                       ":/edit_host_iface_16px.png",
+                                                       ":/edit_host_iface_disabled_22px.png",
+                                                       ":/edit_host_iface_disabled_16px.png"));
+        connect(m_pActionEdit, SIGNAL(triggered()), this, SLOT(sltEditHostNetwork()));
+    }
+
+    /* Create 'Remove' action: */
+    m_pActionRemove = new QAction(this);
+    AssertPtrReturnVoid(m_pActionRemove);
+    {
+        /* Configure 'Remove' action: */
+        m_pActionRemove->setShortcut(QKeySequence("Del"));
+        m_pActionRemove->setIcon(UIIconPool::iconSetFull(":/remove_host_iface_22px.png",
+                                                         ":/remove_host_iface_16px.png",
+                                                         ":/remove_host_iface_disabled_22px.png",
+                                                         ":/remove_host_iface_disabled_16px.png"));
+        connect(m_pActionRemove, SIGNAL(triggered()), this, SLOT(sltRemoveHostNetwork()));
+    }
+
+    /* Prepare menu-bar: */
+    prepareMenuBar();
+}
+
+void UIHostNetworkManager::prepareMenuBar()
+{
+    /* Create 'File' menu: */
+    m_pMenu = menuBar()->addMenu(QString());
+    AssertPtrReturnVoid(m_pMenu);
+    {
+        /* Configure 'File' menu: */
+        m_pMenu->addAction(m_pActionAdd);
+        m_pMenu->addAction(m_pActionEdit);
+        m_pMenu->addAction(m_pActionRemove);
+    }
+
+#ifdef VBOX_WS_MAC
+    /* Prepare 'Window' menu: */
+    AssertPtrReturnVoid(gpWindowMenuManager);
+    menuBar()->addMenu(gpWindowMenuManager->createMenu(this));
+    gpWindowMenuManager->addWindow(this);
+#endif
+}
+
+void UIHostNetworkManager::prepareCentralWidget()
+{
+    /* Create central-widget: */
+    setCentralWidget(new QWidget);
+    AssertPtrReturnVoid(centralWidget());
+    {
+        /* Create main-layout: */
+        new QVBoxLayout(centralWidget());
+        AssertPtrReturnVoid(centralWidget()->layout());
+        {
+            /* Prepare tool-bar: */
+            prepareToolBar();
+            /* Prepare tree-widget: */
+            prepareTreeWidget();
+            /* Prepare button-box: */
+            prepareButtonBox();
+        }
+    }
+}
+
+void UIHostNetworkManager::prepareToolBar()
+{
+    /* Create tool-bar: */
+    m_pToolBar = new UIToolBar;
+    AssertPtrReturnVoid(m_pToolBar);
+    {
+        /* Configure tool-bar: */
+        const QStyle *pStyle = QApplication::style();
+        const int iIconMetric = (int)(pStyle->pixelMetric(QStyle::PM_SmallIconSize) * 1.375);
+        m_pToolBar->setIconSize(QSize(iIconMetric, iIconMetric));
+        m_pToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+        m_pToolBar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
+        /* Add tool-bar actions: */
+        if (m_pActionAdd)
+            m_pToolBar->addAction(m_pActionAdd);
+        if (m_pActionEdit)
+            m_pToolBar->addAction(m_pActionEdit);
+        if (m_pActionRemove)
+            m_pToolBar->addAction(m_pActionRemove);
+        /* Integrate tool-bar into dialog: */
+        QVBoxLayout *pMainLayout = qobject_cast<QVBoxLayout*>(centralWidget()->layout());
+#ifdef VBOX_WS_MAC
+        /* Enable unified tool-bars on macOS: */
+        addToolBar(m_pToolBar);
+        m_pToolBar->enableMacToolbar();
+        /* Special spacing on macOS: */
+        pMainLayout->setSpacing(10);
+#else
+        /* Add tool-bar into layout: */
+        pMainLayout->insertWidget(0, m_pToolBar);
+        /* Set spacing/margin like in the selector window: */
+        pMainLayout->setSpacing(5);
+        pMainLayout->setContentsMargins(5, 5, 5, 5);
+#endif
+    }
+}
+
+void UIHostNetworkManager::prepareTreeWidget()
+{
+    /* Create tree-widget: */
+    m_pTreeWidget = new QITreeWidget;
+    AssertPtrReturnVoid(m_pTreeWidget);
+    {
+        /* Configure tree-widget: */
+        m_pTreeWidget->header()->hide();
+        m_pTreeWidget->setRootIsDecorated(false);
+        m_pTreeWidget->setAlternatingRowColors(true);
+        m_pTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
+        m_pTreeWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+        m_pTreeWidget->sortItems(0, Qt::AscendingOrder);
+        connect(m_pTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
+                this, SLOT(sltHandleCurrentItemChange()));
+        connect(m_pTreeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)),
+                this, SLOT(sltEditHostNetwork()));
+        connect(m_pTreeWidget, SIGNAL(customContextMenuRequested(const QPoint &)),
+                this, SLOT(sltHandleContextMenuRequest(const QPoint &)));
+        /* Add tree-widget into layout: */
+        QVBoxLayout *pMainLayout = qobject_cast<QVBoxLayout*>(centralWidget()->layout());
+        pMainLayout->addWidget(m_pTreeWidget);
+    }
+}
+
+void UIHostNetworkManager::prepareButtonBox()
+{
+    /* Create button-box: */
+    m_pButtonBox = new QIDialogButtonBox;
+    AssertPtrReturnVoid(m_pButtonBox);
+    {
+        /* Configure button-box: */
+        m_pButtonBox->setStandardButtons(QDialogButtonBox::Help | QDialogButtonBox::Close);
+        m_pButtonBox->button(QDialogButtonBox::Close)->setShortcut(Qt::Key_Escape);
+        connect(m_pButtonBox, SIGNAL(helpRequested()), &msgCenter(), SLOT(sltShowHelpHelpDialog()));
+        connect(m_pButtonBox, SIGNAL(rejected()), this, SLOT(close()));
+        /* Add button-box into layout: */
+        QVBoxLayout *pMainLayout = qobject_cast<QVBoxLayout*>(centralWidget()->layout());
+        pMainLayout->addWidget(m_pButtonBox);
+    }
+}
+
+void UIHostNetworkManager::cleanupMenuBar()
+{
+#ifdef VBOX_WS_MAC
+    /* Cleanup 'Window' menu: */
+    AssertPtrReturnVoid(gpWindowMenuManager);
+    gpWindowMenuManager->removeWindow(this);
+    gpWindowMenuManager->destroyMenu(this);
+#endif
+}
+
+void UIHostNetworkManager::cleanup()
+{
+    /* Cleanup menu-bar: */
+    cleanupMenuBar();
+}
+
+void UIHostNetworkManager::loadHostNetworks()
+{
+    /* Clear tree first of all: */
+    m_pTreeWidget->clear();
+
+    /* Get host for further activities: */
+    const CHost comHost = vboxGlobal().host();
+
+    /* Get interfaces for further activities: */
+    const QVector<CHostNetworkInterface> interfaces = comHost.GetNetworkInterfaces();
+
+    /* Show error message if necessary: */
+    if (!comHost.isOk())
+        msgCenter().cannotAcquireHostNetworkInterfaces(comHost, this);
+    else
+    {
+        /* For each host-only interface => load it to the tree: */
+        foreach (const CHostNetworkInterface &comInterface, interfaces)
+            if (comInterface.GetInterfaceType() == KHostNetworkInterfaceType_HostOnly)
+            {
+                UIDataHostNetwork data;
+                loadHostNetwork(comInterface, data);
+                createItemForNetworkHost(data, false);
+            }
+
+        /* Sort list by the 1st column: */
+        m_pTreeWidget->sortByColumn(0, Qt::AscendingOrder);
+        /* Choose the 1st item as current initially: */
+        m_pTreeWidget->setCurrentItem(m_pTreeWidget->topLevelItem(0));
+        sltHandleCurrentItemChange();
+    }
+}
+
+void UIHostNetworkManager::loadHostNetwork(const CHostNetworkInterface &comInterface, UIDataHostNetwork &data)
+{
+    /* Gather interface settings: */
+    if (comInterface.isOk())
+        data.m_interface.m_strName = comInterface.GetName();
+    if (comInterface.isOk())
+        data.m_interface.m_strInterfaceAddress = comInterface.GetIPAddress();
+    if (comInterface.isOk())
+        data.m_interface.m_strInterfaceMask = comInterface.GetNetworkMask();
+    if (comInterface.isOk())
+        data.m_interface.m_fIpv6Supported = comInterface.GetIPV6Supported();
+    if (comInterface.isOk())
+        data.m_interface.m_strInterfaceAddress6 = comInterface.GetIPV6Address();
+    if (comInterface.isOk())
+        data.m_interface.m_strInterfaceMaskLength6 = QString::number(comInterface.GetIPV6NetworkMaskPrefixLength());
+
+    /* Get host interface network name for further activities: */
+    QString strNetworkName;
+    if (comInterface.isOk())
+        strNetworkName = comInterface.GetNetworkName();
+
+    /* Show error message if necessary: */
+    if (!comInterface.isOk())
+        msgCenter().cannotAcquireHostNetworkInterfaceParameter(comInterface, this);
+
+    /* Get VBox for further activities: */
+    CVirtualBox comVBox = vboxGlobal().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 (!comVBox.isOk() || comServer.isNull())
+        msgCenter().cannotCreateDHCPServer(comVBox, strNetworkName, this);
+    else
+    {
+        /* Gather DHCP server settings: */
+        if (comServer.isOk())
+            data.m_dhcpserver.m_fDhcpServerEnabled = comServer.GetEnabled();
+        if (comServer.isOk())
+            data.m_dhcpserver.m_strDhcpServerAddress = comServer.GetIPAddress();
+        if (comServer.isOk())
+            data.m_dhcpserver.m_strDhcpServerMask = comServer.GetNetworkMask();
+        if (comServer.isOk())
+            data.m_dhcpserver.m_strDhcpLowerAddress = comServer.GetLowerIP();
+        if (comServer.isOk())
+            data.m_dhcpserver.m_strDhcpUpperAddress = comServer.GetUpperIP();
+
+        /* Show error message if necessary: */
+        if (!comServer.isOk())
+            return msgCenter().cannotAcquireDHCPServerParameter(comServer, this);
+    }
+}
+
+void UIHostNetworkManager::createItemForNetworkHost(const UIDataHostNetwork &data, bool fChooseItem)
+{
+    /* Create new item: */
+    UIItemHostNetwork *pItem = new UIItemHostNetwork;
+    AssertPtrReturnVoid(pItem);
+    {
+        /* Configure item: */
+        pItem->UIDataHostNetwork::operator=(data);
+        pItem->updateFields();
+        /* Add item to the tree: */
+        m_pTreeWidget->addTopLevelItem(pItem);
+        /* And choose it as current if necessary: */
+        if (fChooseItem)
+            m_pTreeWidget->setCurrentItem(pItem);
+    }
+}
+
+void UIHostNetworkManager::updateItemForNetworkHost(const UIDataHostNetwork &data, bool fChooseItem, UIItemHostNetwork *pItem)
+{
+    /* Update passed item: */
+    AssertPtrReturnVoid(pItem);
+    {
+        /* Configure item: */
+        pItem->UIDataHostNetwork::operator=(data);
+        pItem->updateFields();
+        /* And choose it as current if necessary: */
+        if (fChooseItem)
+            m_pTreeWidget->setCurrentItem(pItem);
+    }
+}
+
Index: /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.h	(revision 66681)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.h	(revision 66681)
@@ -0,0 +1,159 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIHostNetworkManager class declaration.
+ */
+
+/*
+ * Copyright (C) 2009-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___UIHostNetworkManager_h___
+#define ___UIHostNetworkManager_h___
+
+/* Qt includes: */
+#include <QMainWindow>
+
+/* GUI includes: */
+#include "QIWithRetranslateUI.h"
+
+/* Forward declarations: */
+class CHostNetworkInterface;
+class QIDialogButtonBox;
+class QITreeWidget;
+class UIItemHostNetwork;
+class UIToolBar;
+struct UIDataHostNetwork;
+
+
+/** Host Network Manager dialog. */
+class UIHostNetworkManager : public QIWithRetranslateUI<QMainWindow>
+{
+    Q_OBJECT;
+
+    /** Constructs Host Network Manager dialog.
+      * @param  pCenterWidget  Brings the pseudo-parent widget to center according to. */
+    UIHostNetworkManager(QWidget *pCenterWidget);
+    /** Destructs Host Network Manager dialog. */
+    ~UIHostNetworkManager();
+
+public:
+
+    /** Returns Host Network Manager singleton instance. */
+    static UIHostNetworkManager *instance();
+    /** Shows Host Network Manager singleton instance, creates new if necessary. */
+    static void showModeless(QWidget *pCenterWidget);
+
+protected:
+
+    /** Handles translation event. */
+    virtual void retranslateUi() /* override */;
+
+private slots:
+
+    /** @name Menu/action stuff.
+     * @{ */
+        /** Handles command to add host network. */
+        void sltAddHostNetwork();
+        /** Handles command to edit host network. */
+        void sltEditHostNetwork();
+        /** Handles command to remove host network. */
+        void sltRemoveHostNetwork();
+    /** @} */
+
+    /** @name Tree-widget stuff.
+     * @{ */
+        /** Handles host network tree current item change. */
+        void sltHandleCurrentItemChange();
+        /** Handles context menu request for @a position of host network tree. */
+        void sltHandleContextMenuRequest(const QPoint &position);
+    /** @} */
+
+private:
+
+    /** @name Prepare/cleanup cascade.
+     * @{ */
+        /** Prepares all. */
+        void prepare();
+        /** Prepares this. */
+        void prepareThis();
+        /** Prepares actions. */
+        void prepareActions();
+        /** Prepares menu-bar. */
+        void prepareMenuBar();
+        /** Prepares central-widget. */
+        void prepareCentralWidget();
+        /** Prepares tool-bar. */
+        void prepareToolBar();
+        /** Prepares tree-widget. */
+        void prepareTreeWidget();
+        /** Prepares button-box. */
+        void prepareButtonBox();
+
+        /** Cleanup menu-bar. */
+        void cleanupMenuBar();
+        /** Cleanups all. */
+        void cleanup();
+    /** @} */
+
+    /** @name Loading stuff.
+     * @{ */
+        /** Loads host networks. */
+        void loadHostNetworks();
+        /** Loads host @a comInterface data to passed @a data container. */
+        void loadHostNetwork(const CHostNetworkInterface &comInterface, UIDataHostNetwork &data);
+    /** @} */
+
+    /** @name Tree-widget stuff.
+     * @{ */
+        /** Creates a new tree-widget item on the basis of passed @a data, @a fChooseItem if requested. */
+        void createItemForNetworkHost(const UIDataHostNetwork &data, bool fChooseItem);
+        /** Updates the passed tree-widget item on the basis of passed @a data, @a fChooseItem if requested. */
+        void updateItemForNetworkHost(const UIDataHostNetwork &data, bool fChooseItem, UIItemHostNetwork *pItem);
+    /** @} */
+
+    /** @name General variables.
+     * @{ */
+        /** Holds the Host Network Manager singleton instance. */
+        static UIHostNetworkManager *s_pInstance;
+
+        /** Widget to center UIMediumManager according. */
+        QWidget *m_pPseudoParentWidget;
+    /** @} */
+
+    /** @name Tool-bar and menu variables.
+     * @{ */
+        /** Holds the tool-bar instance. */
+        UIToolBar *m_pToolBar;
+        /** Holds menu-bar menu object instance. */
+        QMenu     *m_pMenu;
+        /** Holds the Add action instance. */
+        QAction   *m_pActionAdd;
+        /** Holds the Edit action instance. */
+        QAction   *m_pActionEdit;
+        /** Holds the Remove action instance. */
+        QAction   *m_pActionRemove;
+    /** @} */
+
+    /** @name Tree-widget variables.
+     * @{ */
+        /** Holds the tree-widget instance. */
+        QITreeWidget *m_pTreeWidget;
+    /** @} */
+
+    /** @name Button-box variables.
+     * @{ */
+        /** Holds the dialog button-box instance. */
+        QIDialogButtonBox *m_pButtonBox;
+    /** @} */
+};
+
+#endif /* !___UIHostNetworkManager_h___ */
+
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.cpp	(revision 66680)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.cpp	(revision 66681)
@@ -83,4 +83,32 @@
         setName(QApplication::translate("UIActionPool", "&Virtual Media Manager..."));
         setStatusTip(QApplication::translate("UIActionPool", "Display the Virtual Media Manager window"));
+    }
+};
+
+class UIActionSimpleHostNetworkManagerDialog : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    UIActionSimpleHostNetworkManagerDialog(UIActionPool *pParent)
+        : UIActionSimple(pParent, ":/host_iface_manager_16px.png") {}
+
+protected:
+
+    QString shortcutExtraDataID() const
+    {
+        return QString("HostNetworkManager");
+    }
+
+    QKeySequence defaultShortcut(UIActionPoolType) const
+    {
+        return QKeySequence("Ctrl+T");
+    }
+
+    void retranslateUi()
+    {
+        setName(QApplication::translate("UIActionPool", "&Host Network Manager..."));
+        setStatusTip(QApplication::translate("UIActionPool", "Display the Host Network Manager window"));
     }
 };
@@ -1035,4 +1063,5 @@
     m_pool[UIActionIndexST_M_File] = new UIActionMenuFile(this);
     m_pool[UIActionIndexST_M_File_S_ShowVirtualMediumManager] = new UIActionSimpleVirtualMediumManagerDialog(this);
+    m_pool[UIActionIndexST_M_File_S_ShowHostNetworkManager] = new UIActionSimpleHostNetworkManagerDialog(this);
     m_pool[UIActionIndexST_M_File_S_ImportAppliance] = new UIActionSimpleImportApplianceWizard(this);
     m_pool[UIActionIndexST_M_File_S_ExportAppliance] = new UIActionSimpleExportApplianceWizard(this);
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.h	(revision 66680)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.h	(revision 66681)
@@ -34,4 +34,5 @@
     UIActionIndexST_M_File = UIActionIndex_Max + 1,
     UIActionIndexST_M_File_S_ShowVirtualMediumManager,
+    UIActionIndexST_M_File_S_ShowHostNetworkManager,
     UIActionIndexST_M_File_S_ImportAppliance,
     UIActionIndexST_M_File_S_ExportAppliance,
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp	(revision 66680)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp	(revision 66681)
@@ -50,4 +50,5 @@
 # include "UIDesktopPane.h"
 # include "UIVirtualBoxEventHandler.h"
+# include "UIHostNetworkManager.h"
 # include "UIMediumManager.h"
 # include "UIMedium.h"
@@ -426,4 +427,10 @@
 }
 
+void UISelectorWindow::sltOpenHostNetworkManagerWindow()
+{
+    /* Show modeless Host Network Manager: */
+    UIHostNetworkManager::showModeless(this);
+}
+
 void UISelectorWindow::sltOpenImportApplianceWizard(const QString &strFileName /* = QString() */)
 {
@@ -1371,4 +1378,6 @@
     /* 'Show Virtual Medium Manager' action goes to 'File' menu: */
     pMenu->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowVirtualMediumManager));
+    /* 'Show Host Network Manager' action goes to 'File' menu: */
+    pMenu->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowHostNetworkManager));
 
 #else /* !VBOX_WS_MAC */
@@ -1388,4 +1397,5 @@
 #  endif /* VBOX_GUI_WITH_EXTRADATA_MANAGER_UI */
     addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowVirtualMediumManager));
+    addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowHostNetworkManager));
 #  ifdef VBOX_GUI_WITH_NETWORK_MANAGER
     addAction(actionPool()->action(UIActionIndex_M_Application_S_NetworkAccessManager));
@@ -1412,4 +1422,6 @@
     /* 'Show Virtual Medium Manager' action goes to 'File' menu: */
     pMenu->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowVirtualMediumManager));
+    /* 'Show Host Network Manager' action goes to 'File' menu: */
+    pMenu->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowHostNetworkManager));
 # ifdef VBOX_GUI_WITH_NETWORK_MANAGER
     /* 'Network Access Manager' action goes to 'File' menu: */
@@ -1813,4 +1825,5 @@
     /* 'File' menu connections: */
     connect(actionPool()->action(UIActionIndexST_M_File_S_ShowVirtualMediumManager), SIGNAL(triggered()), this, SLOT(sltOpenVirtualMediumManagerWindow()));
+    connect(actionPool()->action(UIActionIndexST_M_File_S_ShowHostNetworkManager), SIGNAL(triggered()), this, SLOT(sltOpenHostNetworkManagerWindow()));
     connect(actionPool()->action(UIActionIndexST_M_File_S_ImportAppliance), SIGNAL(triggered()), this, SLOT(sltOpenImportApplianceWizard()));
     connect(actionPool()->action(UIActionIndexST_M_File_S_ExportAppliance), SIGNAL(triggered()), this, SLOT(sltOpenExportApplianceWizard()));
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.h	(revision 66680)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.h	(revision 66681)
@@ -124,4 +124,6 @@
         /** Handles call to open Virtual Medium Manager window. */
         void sltOpenVirtualMediumManagerWindow();
+        /** Handles call to open Host Network Manager window. */
+        void sltOpenHostNetworkManagerWindow();
         /** Handles call to open Import Appliance wizard.
           * @param strFileName can bring the name of file to import appliance from. */
