Index: trunk/src/VBox/Main/ConsoleImpl2.cpp
===================================================================
--- trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 5743)
+++ trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 5755)
@@ -831,6 +831,10 @@
      * Network adapters
      */
-    rc = CFGMR3InsertNode(pDevices, "pcnet", &pDev);                                RC_CHECK();
-    //rc = CFGMR3InsertNode(pDevices, "ne2000", &pDev);                               RC_CHECK();
+    PCFGMNODE pDevPCNet = NULL;          /* PCNet-type devices */
+    rc = CFGMR3InsertNode(pDevices, "pcnet", &pDevPCNet);                           RC_CHECK();
+#ifdef VBOX_WITH_E1000
+    PCFGMNODE pDevE1000 = NULL;          /* E1000-type devices */
+    rc = CFGMR3InsertNode(pDevices, "e1000", &pDevE1000);                           RC_CHECK();
+#endif
     for (ULONG ulInstance = 0; ulInstance < SchemaDefs::NetworkAdapterCount; ulInstance++)
     {
@@ -841,4 +845,26 @@
         if (!fEnabled)
             continue;
+
+        /*
+        * The virtual hardware type. Create appropriate device first.
+        */
+        NetworkAdapterType_T adapterType;
+        hrc = networkAdapter->COMGETTER(AdapterType)(&adapterType);                 H();
+        switch (adapterType)
+        {
+            case NetworkAdapterType_NetworkAdapterAm79C970A:
+            case NetworkAdapterType_NetworkAdapterAm79C973:
+                pDev = pDevPCNet;
+                break;
+#ifdef VBOX_WITH_E1000
+            case NetworkAdapterType_NetworkAdapter82540EM:
+                pDev = pDevE1000;
+                break;
+#endif
+            default:
+                AssertMsgFailed(("Invalid network adapter type '%d' for slot '%d'",
+                                 adapterType, ulInstance));
+                return VERR_GENERAL_FAILURE;
+        }
 
         char szInstance[4]; Assert(ulInstance <= 999);
@@ -855,8 +881,6 @@
 
         /*
-         * The virtual hardware type.
-         */
-        NetworkAdapterType_T adapterType;
-        hrc = networkAdapter->COMGETTER(AdapterType)(&adapterType);                 H();
+        * The virtual hardware type. PCNet supports two types.
+        */
         switch (adapterType)
         {
@@ -867,8 +891,4 @@
                 rc = CFGMR3InsertInteger(pCfg, "Am79C973", 1);                      RC_CHECK();
                 break;
-            default:
-                AssertMsgFailed(("Invalid network adapter type '%d' for slot '%d'",
-                                 adapterType, ulInstance));
-                return VERR_GENERAL_FAILURE;
         }
 
Index: trunk/src/VBox/Main/MachineImpl.cpp
===================================================================
--- trunk/src/VBox/Main/MachineImpl.cpp	(revision 5743)
+++ trunk/src/VBox/Main/MachineImpl.cpp	(revision 5755)
@@ -4690,4 +4690,8 @@
             else if (adapterType.compare(Bstr("Am79C973")) == 0)
                 mNetworkAdapters [slot]->COMSETTER(AdapterType)(NetworkAdapterType_NetworkAdapterAm79C973);
+#ifdef VBOX_WITH_E1000
+            else if (adapterType.compare(Bstr("82540EM")) == 0)
+                mNetworkAdapters [slot]->COMSETTER(AdapterType)(NetworkAdapterType_NetworkAdapter82540EM);
+#endif
             else
                 ComAssertBreak (0, rc = E_FAIL);
Index: trunk/src/VBox/Main/Makefile.kmk
===================================================================
--- trunk/src/VBox/Main/Makefile.kmk	(revision 5743)
+++ trunk/src/VBox/Main/Makefile.kmk	(revision 5755)
@@ -22,4 +22,5 @@
 ifndef VBOX_OSE
 SUBDIRS_AFTER += webservice
+DEFS	      += VBOX_WITH_E1000
 endif
 
Index: trunk/src/VBox/Main/NetworkAdapterImpl.cpp
===================================================================
--- trunk/src/VBox/Main/NetworkAdapterImpl.cpp	(revision 5743)
+++ trunk/src/VBox/Main/NetworkAdapterImpl.cpp	(revision 5755)
@@ -201,4 +201,7 @@
         case NetworkAdapterType_NetworkAdapterAm79C970A:
         case NetworkAdapterType_NetworkAdapterAm79C973:
+#ifdef VBOX_WITH_E1000
+        case NetworkAdapterType_NetworkAdapter82540EM:
+#endif
             break;
         default:
Index: trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 5743)
+++ trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 5755)
@@ -7371,4 +7371,5 @@
     <const name="NetworkAdapterAm79C970A"        value="1"/>
     <const name="NetworkAdapterAm79C973"         value="2"/>
+    <const name="NetworkAdapter82540EM"          value="3"/>
   </enum>
 
Index: trunk/src/VBox/Main/xml/VirtualBox-settings-common.xsd
===================================================================
--- trunk/src/VBox/Main/xml/VirtualBox-settings-common.xsd	(revision 5743)
+++ trunk/src/VBox/Main/xml/VirtualBox-settings-common.xsd	(revision 5755)
@@ -171,4 +171,5 @@
     <xsd:enumeration value="Am79C970A"/>
     <xsd:enumeration value="Am79C973"/>
+    <xsd:enumeration value="82540EM"/>
   </xsd:restriction>
 </xsd:simpleType>
