Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIVMDesktop.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIVMDesktop.cpp	(revision 37570)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIVMDesktop.cpp	(revision 37571)
@@ -127,4 +127,5 @@
         setCurrentIndex(indexOf(m_pErrBox));
     }
+
 signals:
 
@@ -163,4 +164,6 @@
     void createTextPage();
     void createErrPage();
+
+    static QString summarizeGenericProperties(const CNetworkAdapter &adapter);
 
     /* Private member vars */
@@ -461,4 +464,95 @@
     vboxGlobal().virtualBox().SetExtraDataStringList(VBoxDefs::GUI_DetailsPageBoxes,
                                                      boxes);
+}
+
+void UIDetailsPagePrivate::retranslateUi()
+{
+    if (m_pErrLabel)
+        m_pErrLabel->setText(tr(
+            "The selected virtual machine is <i>inaccessible</i>. Please "
+            "inspect the error message shown below and press the "
+            "<b>Refresh</b> button if you want to repeat the accessibility "
+            "check:"));
+
+    if (mRefreshAction && mRefreshButton)
+    {
+        mRefreshButton->setText(mRefreshAction->text());
+        mRefreshButton->setIcon(mRefreshAction->icon());
+        mRefreshButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+    }
+
+    /* General */
+    {
+        m_secBoxes.value(GeneralSec)->setTitle(tr("General", "details report"));
+        m_actions.value(GeneralSec)->setText(m_secBoxes.value(GeneralSec)->title());
+    }
+
+    /* System */
+    {
+        m_secBoxes.value(SystemSec)->setTitle(tr("System", "details report"));
+        m_actions.value(SystemSec)->setText(m_secBoxes.value(SystemSec)->title());
+    }
+
+    /* Preview */
+    {
+        m_secBoxes.value(PreviewSec)->setTitle(tr("Preview", "details report"));
+        m_actions.value(PreviewSec)->setText(m_secBoxes.value(PreviewSec)->title());
+    }
+
+    /* Display */
+    {
+        m_secBoxes.value(DisplaySec)->setTitle(tr("Display", "details report"));
+        m_actions.value(DisplaySec)->setText(m_secBoxes.value(DisplaySec)->title());
+    }
+
+    /* Storage */
+    {
+        m_secBoxes.value(StorageSec)->setTitle(tr("Storage", "details report"));
+        m_actions.value(StorageSec)->setText(m_secBoxes.value(StorageSec)->title());
+    }
+
+    /* Audio */
+    {
+        m_secBoxes.value(AudioSec)->setTitle(tr("Audio", "details report"));
+        m_actions.value(AudioSec)->setText(m_secBoxes.value(AudioSec)->title());
+    }
+
+    /* Network */
+    {
+        m_secBoxes.value(NetworkSec)->setTitle(tr("Network", "details report"));
+        m_actions.value(NetworkSec)->setText(m_secBoxes.value(NetworkSec)->title());
+    }
+
+    /* Serial Ports */
+    {
+        m_secBoxes.value(SerialPortsSec)->setTitle(tr("Serial Ports", "details report"));
+        m_actions.value(SerialPortsSec)->setText(m_secBoxes.value(SerialPortsSec)->title());
+    }
+
+#ifdef VBOX_WITH_PARALLEL_PORTS
+    /* Parallel Ports */
+    {
+        m_secBoxes.value(ParallelPortsSec)->setTitle(tr("Parallel Ports", "details report"));
+        m_actions.value(ParallelPortsSec)->setText(m_secBoxes.value(ParallelPortsSec)->title());
+    }
+#endif /* VBOX_WITH_PARALLEL_PORTS */
+
+    /* USB */
+    {
+        m_secBoxes.value(USBSec)->setTitle(tr("USB", "details report"));
+        m_actions.value(USBSec)->setText(m_secBoxes.value(USBSec)->title());
+    }
+
+    /* Shared Folders */
+    {
+        m_secBoxes.value(SharedFoldersSec)->setTitle(tr("Shared Folders", "details report"));
+        m_actions.value(SharedFoldersSec)->setText(m_secBoxes.value(SharedFoldersSec)->title());
+    }
+
+    /* Description */
+    {
+        m_secBoxes.value(DescriptionSec)->setTitle(tr("Description", "details report"));
+        m_actions.value(DescriptionSec)->setText(m_secBoxes.value(DescriptionSec)->title());
+    }
 }
 
@@ -716,24 +810,4 @@
 }
 
-/**
- * Return a text summary of the properties of a generic network adapter
- */
-QString summarizeGenericProperties(const CNetworkAdapter &adapter)
-{
-    QVector<QString> names;
-    QVector<QString> props;
-    props = adapter.GetProperties(QString(), names); // all properties, please
-
-    QString result;
-    for (int i = 0; i < names.size(); i++)
-    {
-        result += names[i] + "=" + props[i];
-        if (i != names.size() - 1)
-            result += ", ";
-    }
-
-    return result;
-}
-
 void UIDetailsPagePrivate::sltUpdateNetwork()
 {
@@ -1088,93 +1162,21 @@
 }
 
-void UIDetailsPagePrivate::retranslateUi()
-{
-    if (m_pErrLabel)
-        m_pErrLabel->setText(tr(
-            "The selected virtual machine is <i>inaccessible</i>. Please "
-            "inspect the error message shown below and press the "
-            "<b>Refresh</b> button if you want to repeat the accessibility "
-            "check:"));
-
-    if (mRefreshAction && mRefreshButton)
-    {
-        mRefreshButton->setText(mRefreshAction->text());
-        mRefreshButton->setIcon(mRefreshAction->icon());
-        mRefreshButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
-    }
-
-    /* General */
-    {
-        m_secBoxes.value(GeneralSec)->setTitle(tr("General", "details report"));
-        m_actions.value(GeneralSec)->setText(m_secBoxes.value(GeneralSec)->title());
-    }
-
-    /* System */
-    {
-        m_secBoxes.value(SystemSec)->setTitle(tr("System", "details report"));
-        m_actions.value(SystemSec)->setText(m_secBoxes.value(SystemSec)->title());
-    }
-
-    /* Preview */
-    {
-        m_secBoxes.value(PreviewSec)->setTitle(tr("Preview", "details report"));
-        m_actions.value(PreviewSec)->setText(m_secBoxes.value(PreviewSec)->title());
-    }
-
-    /* Display */
-    {
-        m_secBoxes.value(DisplaySec)->setTitle(tr("Display", "details report"));
-        m_actions.value(DisplaySec)->setText(m_secBoxes.value(DisplaySec)->title());
-    }
-
-    /* Storage */
-    {
-        m_secBoxes.value(StorageSec)->setTitle(tr("Storage", "details report"));
-        m_actions.value(StorageSec)->setText(m_secBoxes.value(StorageSec)->title());
-    }
-
-    /* Audio */
-    {
-        m_secBoxes.value(AudioSec)->setTitle(tr("Audio", "details report"));
-        m_actions.value(AudioSec)->setText(m_secBoxes.value(AudioSec)->title());
-    }
-
-    /* Network */
-    {
-        m_secBoxes.value(NetworkSec)->setTitle(tr("Network", "details report"));
-        m_actions.value(NetworkSec)->setText(m_secBoxes.value(NetworkSec)->title());
-    }
-
-    /* Serial Ports */
-    {
-        m_secBoxes.value(SerialPortsSec)->setTitle(tr("Serial Ports", "details report"));
-        m_actions.value(SerialPortsSec)->setText(m_secBoxes.value(SerialPortsSec)->title());
-    }
-
-#ifdef VBOX_WITH_PARALLEL_PORTS
-    /* Parallel Ports */
-    {
-        m_secBoxes.value(ParallelPortsSec)->setTitle(tr("Parallel Ports", "details report"));
-        m_actions.value(ParallelPortsSec)->setText(m_secBoxes.value(ParallelPortsSec)->title());
-    }
-#endif /* VBOX_WITH_PARALLEL_PORTS */
-
-    /* USB */
-    {
-        m_secBoxes.value(USBSec)->setTitle(tr("USB", "details report"));
-        m_actions.value(USBSec)->setText(m_secBoxes.value(USBSec)->title());
-    }
-
-    /* Shared Folders */
-    {
-        m_secBoxes.value(SharedFoldersSec)->setTitle(tr("Shared Folders", "details report"));
-        m_actions.value(SharedFoldersSec)->setText(m_secBoxes.value(SharedFoldersSec)->title());
-    }
-
-    /* Description */
-    {
-        m_secBoxes.value(DescriptionSec)->setTitle(tr("Description", "details report"));
-        m_actions.value(DescriptionSec)->setText(m_secBoxes.value(DescriptionSec)->title());
-    }
+/**
+ *  Return a text summary of the properties of a generic network adapter
+ */
+/* static */
+QString UIDetailsPagePrivate::summarizeGenericProperties(const CNetworkAdapter &adapter)
+{
+    QVector<QString> names;
+    QVector<QString> props;
+    props = adapter.GetProperties(QString(), names);
+    QString strResult;
+    for (int i = 0; i < names.size(); ++i)
+    {
+        strResult += names[i] + "=" + props[i];
+        if (i < names.size() - 1)
+            strResult += ", ";
+    }
+    return strResult;
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp	(revision 37570)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp	(revision 37571)
@@ -80,7 +80,9 @@
     m_pPromiscuousModeLabel->setEnabled(m_pParent->isMachineInValidMode() &&
                                         attachmentType() != KNetworkAttachmentType_Null &&
+                                        attachmentType() != KNetworkAttachmentType_Generic &&
                                         attachmentType() != KNetworkAttachmentType_NAT);
     m_pPromiscuousModeCombo->setEnabled(m_pParent->isMachineInValidMode() &&
                                         attachmentType() != KNetworkAttachmentType_Null &&
+                                        attachmentType() != KNetworkAttachmentType_Generic &&
                                         attachmentType() != KNetworkAttachmentType_NAT);
     m_pMACLabel->setEnabled(m_pParent->isMachineOffline());
@@ -141,4 +143,5 @@
     /* Other options: */
     m_pMACEditor->setText(adapterData.m_strMACAddress);
+    m_pGenericPropertiesTextEdit->setText(adapterData.m_strGenericProperties);
     m_pCableConnectedCheckBox->setChecked(adapterData.m_fCableConnected);
 
@@ -174,4 +177,5 @@
         case KNetworkAttachmentType_Generic:
             adapterData.m_strGenericDriver = alternativeName();
+            adapterData.m_strGenericProperties = m_pGenericPropertiesTextEdit->toPlainText();
             break;
         default:
@@ -335,6 +339,8 @@
                                     attachmentType() != KNetworkAttachmentType_NAT);
     m_pPromiscuousModeLabel->setEnabled(attachmentType() != KNetworkAttachmentType_Null &&
+                                        attachmentType() != KNetworkAttachmentType_Generic &&
                                         attachmentType() != KNetworkAttachmentType_NAT);
     m_pPromiscuousModeCombo->setEnabled(attachmentType() != KNetworkAttachmentType_Null &&
+                                        attachmentType() != KNetworkAttachmentType_Generic &&
                                         attachmentType() != KNetworkAttachmentType_NAT);
 
@@ -416,4 +422,10 @@
     sltUpdateAlternativeName();
 
+    /* Update visibility of "generic" properties editor: */
+    m_pGenericPropertiesLabel->setVisible(attachmentType() == KNetworkAttachmentType_Generic &&
+                                          m_pAdvancedArrow->isExpanded());
+    m_pGenericPropertiesTextEdit->setVisible(attachmentType() == KNetworkAttachmentType_Generic &&
+                                             m_pAdvancedArrow->isExpanded());
+
     /* Update Forwarding rules button availability: */
     m_pPortForwardingButton->setEnabled(attachmentType() == KNetworkAttachmentType_NAT);
@@ -489,4 +501,8 @@
     m_pPromiscuousModeLabel->setVisible(m_pAdvancedArrow->isExpanded());
     m_pPromiscuousModeCombo->setVisible(m_pAdvancedArrow->isExpanded());
+    m_pGenericPropertiesLabel->setVisible(attachmentType() == KNetworkAttachmentType_Generic &&
+                                          m_pAdvancedArrow->isExpanded());
+    m_pGenericPropertiesTextEdit->setVisible(attachmentType() == KNetworkAttachmentType_Generic &&
+                                             m_pAdvancedArrow->isExpanded());
     m_pMACLabel->setVisible(m_pAdvancedArrow->isExpanded());
     m_pMACEditor->setVisible(m_pAdvancedArrow->isExpanded());
@@ -774,4 +790,5 @@
             adapterData.m_promiscuousMode = adapter.GetPromiscModePolicy();
             adapterData.m_strMACAddress = adapter.GetMACAddress();
+            adapterData.m_strGenericProperties = summarizeGenericProperties(adapter);
             adapterData.m_fCableConnected = adapter.GetCableConnected();
 
@@ -898,4 +915,5 @@
                             case KNetworkAttachmentType_Generic:
                                 adapter.SetGenericDriver(adapterData.m_strGenericDriver);
+                                updateGenericProperties(adapter, adapterData.m_strGenericProperties);
                                 break;
                             default:
@@ -987,2 +1005,55 @@
 }
 
+/* static */
+QString UIMachineSettingsNetworkPage::summarizeGenericProperties(const CNetworkAdapter &adapter)
+{
+    /* Prepare formatted string: */
+    QVector<QString> names;
+    QVector<QString> props;
+    props = adapter.GetProperties(QString(), names);
+    QString strResult;
+    /* Load generic properties: */
+    for (int i = 0; i < names.size(); ++i)
+    {
+        strResult += names[i] + "=" + props[i];
+        if (i < names.size() - 1)
+          strResult += "\n";
+    }
+    /* Return formatted string: */
+    return strResult;
+}
+
+/* static */
+void UIMachineSettingsNetworkPage::updateGenericProperties(CNetworkAdapter &adapter, const QString &strPropText)
+{
+    /* Parse new properties: */
+    QStringList newProps = strPropText.split("\n");
+    QHash<QString, QString> hash;
+
+    /* Save new properties: */
+    for (int i = 0; i < newProps.size(); ++i)
+    {
+        QString strLine = newProps[i];
+        int iSplitPos = strLine.indexOf("=");
+        if (iSplitPos)
+        {
+            QString strKey = strLine.left(iSplitPos);
+            QString strVal = strLine.mid(iSplitPos+1);
+            adapter.SetProperty(strKey, strVal);
+            hash[strKey] = strVal;
+        }
+    }
+
+    /* Removing deleted properties: */
+    QVector<QString> names;
+    QVector<QString> props;
+    props = adapter.GetProperties(QString(), names);
+    for (int i = 0; i < names.size(); ++i)
+    {
+        QString strName = names[i];
+        QString strValue = props[i];
+        if (strValue != hash[strName])
+            adapter.SetProperty(strName, hash[strName]);
+    }
+}
+
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.h	(revision 37570)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.h	(revision 37571)
@@ -44,4 +44,5 @@
         , m_strHostInterfaceName(QString())
         , m_strGenericDriver(QString())
+        , m_strGenericProperties(QString())
         , m_strMACAddress(QString())
         , m_fCableConnected(false)
@@ -59,4 +60,5 @@
                (m_strHostInterfaceName == other.m_strHostInterfaceName) &&
                (m_strGenericDriver == other.m_strGenericDriver) &&
+               (m_strGenericProperties == other.m_strGenericProperties) &&
                (m_strMACAddress == other.m_strMACAddress) &&
                (m_fCableConnected == other.m_fCableConnected) &&
@@ -76,4 +78,5 @@
     QString m_strHostInterfaceName;
     QString m_strGenericDriver;
+    QString m_strGenericProperties;
     QString m_strMACAddress;
     bool m_fCableConnected;
@@ -195,4 +198,7 @@
     void polishPage();
 
+    static QString summarizeGenericProperties(const CNetworkAdapter &adapter);
+    static void updateGenericProperties(CNetworkAdapter &adapter, const QString &strPropText);
+
     QIWidgetValidator *m_pValidator;
     QITabWidget *m_pTwAdapters;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.ui
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.ui	(revision 37570)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.ui	(revision 37571)
@@ -233,5 +233,22 @@
        </widget>
       </item>
+      <item row="6" column="0">
+       <widget class="QLabel" name="m_pGenericPropertiesLabel">
+        <property name="text">
+         <string>Generic Properties:</string>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignTop</set>
+        </property>
+       </widget>
+      </item>
       <item row="6" column="1" colspan="3">
+       <widget class="QTextEdit" name="m_pGenericPropertiesTextEdit">
+        <property name="whatsThis">
+         <string>Allows to specify the generic properties passed to the generic driver.&lt;br&gt;Please use &lt;b&gt;shift-enter&lt;/b&gt; to insert a new line.</string>
+        </property>
+       </widget>
+      </item>
+      <item row="7" column="1" colspan="3">
        <widget class="QCheckBox" name="m_pCableConnectedCheckBox">
         <property name="whatsThis">
@@ -243,5 +260,5 @@
        </widget>
       </item>
-      <item row="7" column="1">
+      <item row="8" column="1">
        <widget class="QPushButton" name="m_pPortForwardingButton">
         <property name="whatsThis">
@@ -253,5 +270,5 @@
        </widget>
       </item>
-      <item row="8" column="0" colspan="4">
+      <item row="9" column="0" colspan="4">
        <spacer name="m_pVerticalSpacer">
         <property name="orientation">
