Index: /trunk/src/VBox/Devices/Network/DevE1000.cpp
===================================================================
--- /trunk/src/VBox/Devices/Network/DevE1000.cpp	(revision 24019)
+++ /trunk/src/VBox/Devices/Network/DevE1000.cpp	(revision 24020)
@@ -576,4 +576,14 @@
             eeprom.write(u32Wires);
         }
+
+        int load(PSSMHANDLE pSSM)
+        {
+            return eeprom.load(pSSM);
+        }
+
+        void save(PSSMHANDLE pSSM)
+        {
+            eeprom.save(pSSM);
+        }
 #endif /* IN_RING3 */
 };
@@ -860,5 +870,5 @@
     RTGCPHYS    addrMMReg;
     /** MAC address obtained from the configuration. */
-    RTMAC       macAddress;
+    RTMAC       macConfigured;
     /** Base port of I/O space region. */
     RTIOPORT    addrIOPort;
@@ -4413,5 +4423,5 @@
 static void e1kSaveConfig(E1KSTATE *pState, PSSMHANDLE pSSM)
 {
-    SSMR3PutMem(pSSM, &pState->macAddress, sizeof(pState->macAddress));
+    SSMR3PutMem(pSSM, &pState->macConfigured, sizeof(pState->macConfigured));
     SSMR3PutU32(pSSM, pState->eChip);
 }
@@ -4487,4 +4497,5 @@
 #if 0 /** @todo FIXME: enable when bumping the version. */
     e1kSaveConfig(pState, pSSM);
+    pState->eeprom.save(pSSM);
 #endif
     e1kDumpState(pState);
@@ -4576,10 +4587,10 @@
     {
         /* config checks */
-        RTMAC macAddress;
-        rc = SSMR3GetMem(pSSM, &macAddress, sizeof(macAddress));
+        RTMAC macConfigured;
+        rc = SSMR3GetMem(pSSM, &macConfigured, sizeof(macConfigured));
         AssertRCReturn(rc, rc);
-        if (   memcmp(&macAddress, &pState->macAddress, sizeof(macAddress))
+        if (   memcmp(&macConfigured, &pState->macConfigured, sizeof(macConfigured))
             && (uPass == 0 || !PDMDevHlpVMTeleportedAndNotFullyResumedYet(pDevIns)) )
-            LogRel(("%s: The mac address differs: config=%RTmac saved=%RTmac\n", INSTANCE(pState), &pState->macAddress, &macAddress));
+            LogRel(("%s: The mac address differs: config=%RTmac saved=%RTmac\n", INSTANCE(pState), &pState->macConfigured, &macConfigured));
 
         E1KCHIP eChip;
@@ -4595,4 +4606,9 @@
     if (uPass == SSM_PASS_FINAL)
     {
+        if (uVersion > E1K_SAVEDSTATE_VERSION_VBOX_30)
+        {
+            rc = pState->eeprom.load(pSSM);
+            AssertRCReturn(rc, rc);
+        }
         /* the state */
         SSMR3GetMem(pSSM, &pState->auRegs, sizeof(pState->auRegs));
@@ -4794,6 +4810,6 @@
 
     /* Get config params */
-    rc = CFGMR3QueryBytes(pCfgHandle, "MAC", pState->macAddress.au8,
-                          sizeof(pState->macAddress.au8));
+    rc = CFGMR3QueryBytes(pCfgHandle, "MAC", pState->macConfigured.au8,
+                          sizeof(pState->macConfigured.au8));
     if (RT_FAILURE(rc))
         return PDMDEV_SET_ERROR(pDevIns, rc,
@@ -4867,5 +4883,5 @@
 
     /* Initialize the EEPROM */
-    pState->eeprom.init(pState->macAddress);
+    pState->eeprom.init(pState->macConfigured);
 
     /* Initialize internal PHY */
Index: /trunk/src/VBox/Devices/Network/DevEEPROM.cpp
===================================================================
--- /trunk/src/VBox/Devices/Network/DevEEPROM.cpp	(revision 24019)
+++ /trunk/src/VBox/Devices/Network/DevEEPROM.cpp	(revision 24020)
@@ -22,4 +22,5 @@
 #define LOG_GROUP LOG_GROUP_DEV_E1000   /// @todo Add a EEPROM logging group.
 #include <VBox/log.h>
+#include <VBox/pdmdev.h>
 #include <iprt/string.h>
 #include "DevEEPROM.h"
@@ -243,2 +244,43 @@
 }
 
+void EEPROM93C46::save(PSSMHANDLE pSSM)
+{
+    SSMR3PutU8(  pSSM, EEPROM93C46_SAVEDSTATE_VERSION);
+    SSMR3PutU8(  pSSM, m_eState);
+    SSMR3PutU8(  pSSM, m_eOp);
+    SSMR3PutBool(pSSM, m_fWriteEnabled);
+    SSMR3PutU32( pSSM, m_u32InternalWires);
+    SSMR3PutU16( pSSM, m_u16Word);
+    SSMR3PutU16( pSSM, m_u16Mask);
+    SSMR3PutU16( pSSM, m_u16Addr);
+    SSMR3PutMem( pSSM, m_au16Data, sizeof(m_au16Data));
+}
+
+int EEPROM93C46::load(PSSMHANDLE pSSM)
+{
+    int rc = VINF_SUCCESS;
+    uint8_t uVersion = 0;
+
+    rc = SSMR3GetU8(pSSM, &uVersion);
+    AssertRCReturn(rc, rc);
+    if (uVersion != EEPROM93C46_SAVEDSTATE_VERSION)
+        return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION;
+
+    rc = SSMR3GetU8(  pSSM, (uint8_t*)&m_eState);
+    AssertRCReturn(rc, rc);
+    rc = SSMR3GetU8(  pSSM, (uint8_t*)&m_eOp);
+    AssertRCReturn(rc, rc);
+    rc = SSMR3GetBool(pSSM, &m_fWriteEnabled);
+    AssertRCReturn(rc, rc);
+    rc = SSMR3GetU32( pSSM, &m_u32InternalWires);
+    AssertRCReturn(rc, rc);
+    rc = SSMR3GetU16( pSSM, &m_u16Word);
+    AssertRCReturn(rc, rc);
+    rc = SSMR3GetU16( pSSM, &m_u16Mask);
+    AssertRCReturn(rc, rc);
+    rc = SSMR3GetU16( pSSM, &m_u16Addr);
+    AssertRCReturn(rc, rc);
+    rc = SSMR3GetMem( pSSM, m_au16Data, sizeof(m_au16Data));
+
+    return rc;
+}
Index: /trunk/src/VBox/Devices/Network/DevEEPROM.h
===================================================================
--- /trunk/src/VBox/Devices/Network/DevEEPROM.h	(revision 24019)
+++ /trunk/src/VBox/Devices/Network/DevEEPROM.h	(revision 24020)
@@ -22,4 +22,7 @@
 /* Interface */
 #include <iprt/types.h>
+
+/** The current Saved state version. */
+#define EEPROM93C46_SAVEDSTATE_VERSION 1
 
 /**
@@ -70,4 +73,6 @@
 
     /** @todo save and load methods */
+    void save(PSSMHANDLE pSSM);
+    int  load(PSSMHANDLE pSSM);
 
     /** Actual content of EEPROM */
Index: /trunk/src/VBox/Devices/testcase/tstDeviceStructSizeGC.cpp
===================================================================
--- /trunk/src/VBox/Devices/testcase/tstDeviceStructSizeGC.cpp	(revision 24019)
+++ /trunk/src/VBox/Devices/testcase/tstDeviceStructSizeGC.cpp	(revision 24020)
@@ -1278,5 +1278,5 @@
     GEN_CHECK_OFF(E1KSTATE, hTxSem);
     GEN_CHECK_OFF(E1KSTATE, addrMMReg);
-    GEN_CHECK_OFF(E1KSTATE, macAddress);
+    GEN_CHECK_OFF(E1KSTATE, macConfigured);
     GEN_CHECK_OFF(E1KSTATE, addrIOPort);
     GEN_CHECK_OFF(E1KSTATE, pciDevice);
