Index: /trunk/src/VBox/Main/include/AudioAdapterImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/AudioAdapterImpl.h	(revision 49873)
+++ /trunk/src/VBox/Main/include/AudioAdapterImpl.h	(revision 49874)
@@ -65,5 +65,5 @@
     const ComObjPtr<AudioAdapter> mPeer;
     struct Data;
-    Backupable<Data>    mData;
+    Data *mData;
 };
 
Index: /trunk/src/VBox/Main/include/NATEngineImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/NATEngineImpl.h	(revision 49873)
+++ /trunk/src/VBox/Main/include/NATEngineImpl.h	(revision 49874)
@@ -101,6 +101,6 @@
     HRESULT removeRedirect(const com::Utf8Str &aName);
 
-    struct  Data;
-    Backupable<Data> mData;
+    struct Data;
+    Data *mData;
     bool m_fModified;
     const ComObjPtr<NATEngine> mPeer;
Index: /trunk/src/VBox/Main/src-server/AudioAdapterImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/AudioAdapterImpl.cpp	(revision 49873)
+++ /trunk/src/VBox/Main/src-server/AudioAdapterImpl.cpp	(revision 49874)
@@ -27,10 +27,20 @@
 #include "Logging.h"
 
+struct AudioAdapterData
+{
+    AudioAdapterData() :
+        mEnabled(false),
+        mAudioController(AudioControllerType_AC97),
+        mAudioDriver(AudioDriverType_Null)
+    {}
+
+    BOOL mEnabled;
+    AudioDriverType_T mAudioDriver;
+    AudioControllerType_T mAudioController;
+};
+
 struct AudioAdapter::Data
 {
-    Data();
-        BOOL mEnabled;
-        AudioDriverType_T mAudioDriver;
-        AudioControllerType_T mAudioController;
+    Backupable<AudioAdapterData> m;
 };
 
@@ -39,5 +49,6 @@
 
 AudioAdapter::AudioAdapter()
-    : mParent(NULL)
+    : mParent(NULL),
+      mData(NULL)
 {
 }
@@ -90,6 +101,7 @@
     /* mPeer is left null */
 
-    mData.allocate();
-    mData->mAudioDriver = defaultAudioDriver;
+    mData = new Data();
+    mData->m.allocate();
+    mData->m->mAudioDriver = defaultAudioDriver;
 
     /* Confirm a successful initialization */
@@ -126,5 +138,6 @@
 
     AutoReadLock thatLock(aThat COMMA_LOCKVAL_SRC_POS);
-    mData.share (aThat->mData);
+    mData = new Data();
+    mData->m.share (aThat->mData->m);
 
     /* Confirm a successful initialization */
@@ -158,5 +171,6 @@
 
     AutoReadLock thatLock(aThat COMMA_LOCKVAL_SRC_POS);
-    mData.attachCopy (aThat->mData);
+    mData = new Data();
+    mData->m.attachCopy (aThat->mData->m);
 
     /* Confirm a successful initialization */
@@ -179,5 +193,7 @@
         return;
 
-    mData.free();
+    mData->m.free();
+    delete mData;
+    mData = NULL;
 
     unconst(mPeer) = NULL;
@@ -192,5 +208,5 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    *aEnabled = mData->mEnabled;
+    *aEnabled = mData->m->mEnabled;
 
     return S_OK;
@@ -205,8 +221,8 @@
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    if (mData->mEnabled != aEnabled)
+    if (mData->m->mEnabled != aEnabled)
     {
-        mData.backup();
-        mData->mEnabled = aEnabled;
+        mData->m.backup();
+        mData->m->mEnabled = aEnabled;
 
         alock.release();
@@ -222,5 +238,5 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    *aAudioDriver = mData->mAudioDriver;
+    *aAudioDriver = mData->m->mAudioDriver;
 
     return S_OK;
@@ -238,10 +254,10 @@
     HRESULT rc = S_OK;
 
-    if (mData->mAudioDriver != aAudioDriver)
+    if (mData->m->mAudioDriver != aAudioDriver)
     {
         if (settings::MachineConfigFile::isAudioDriverAllowedOnThisHost(aAudioDriver))
         {
-            mData.backup();
-            mData->mAudioDriver = aAudioDriver;
+            mData->m.backup();
+            mData->m->mAudioDriver = aAudioDriver;
             alock.release();
             AutoWriteLock mlock(mParent COMMA_LOCKVAL_SRC_POS);  // mParent is const, needs no locking
@@ -262,5 +278,5 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    *aAudioController = mData->mAudioController;
+    *aAudioController = mData->m->mAudioController;
 
     return S_OK;
@@ -277,5 +293,5 @@
     HRESULT rc = S_OK;
 
-    if (mData->mAudioController != aAudioController)
+    if (mData->m->mAudioController != aAudioController)
     {
         /*
@@ -288,6 +304,6 @@
             case AudioControllerType_HDA:
             {
-                mData.backup();
-                mData->mAudioController = aAudioController;
+                mData->m.backup();
+                mData->m->mAudioController = aAudioController;
                 alock.release();
                 AutoWriteLock mlock(mParent COMMA_LOCKVAL_SRC_POS);  // mParent is const, needs no locking
@@ -311,13 +327,4 @@
 // public methods only for internal purposes
 /////////////////////////////////////////////////////////////////////////////
-
-AudioAdapter::Data::Data()
-{
-    /* Generic defaults */
-    mEnabled = false;
-    mAudioController = AudioControllerType_AC97;
-    /* Driver defaults to the null audio driver */
-    mAudioDriver = AudioDriverType_Null;
-}
 
 /**
@@ -347,7 +354,7 @@
      * default to B. */
 
-    mData->mEnabled = data.fEnabled;
-    mData->mAudioController = data.controllerType;
-    mData->mAudioDriver = data.driverType;
+    mData->m->mEnabled = data.fEnabled;
+    mData->m->mAudioController = data.controllerType;
+    mData->m->mAudioDriver = data.driverType;
 
     return S_OK;
@@ -368,7 +375,7 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    data.fEnabled = !!mData->mEnabled;
-    data.controllerType = mData->mAudioController;
-    data.driverType = mData->mAudioDriver;
+    data.fEnabled = !!mData->m->mEnabled;
+    data.controllerType = mData->m->mAudioController;
+    data.driverType = mData->m->mAudioDriver;
     return S_OK;
 }
@@ -385,5 +392,5 @@
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    mData.rollback();
+    mData->m.rollback();
 }
 
@@ -406,11 +413,11 @@
     AutoMultiWriteLock2 alock(mPeer, this COMMA_LOCKVAL_SRC_POS);
 
-    if (mData.isBackedUp())
+    if (mData->m.isBackedUp())
     {
-        mData.commit();
+        mData->m.commit();
         if (mPeer)
         {
             /* attach new data to the peer and reshare it */
-            mPeer->mData.attach (mData);
+            mPeer->mData->m.attach (mData->m);
         }
     }
@@ -439,5 +446,5 @@
 
     /* this will back up current data */
-    mData.assignCopy(aThat->mData);
+    mData->m.assignCopy(aThat->mData->m);
 }
 /* vi: set tabstop=4 shiftwidth=4 expandtab: */
Index: /trunk/src/VBox/Main/src-server/NATEngineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/NATEngineImpl.cpp	(revision 49873)
+++ /trunk/src/VBox/Main/src-server/NATEngineImpl.cpp	(revision 49874)
@@ -29,7 +29,7 @@
 #include <VBox/com/array.h>
 
-struct NATEngine::Data
-{
-    Data() : mMtu(0),
+struct NATEngineData
+{
+    NATEngineData() : mMtu(0),
              mSockRcv(0),
              mSockSnd(0),
@@ -61,4 +61,8 @@
 };
 
+struct NATEngine::Data
+{
+    Backupable<NATEngineData> m;
+};
 
 
@@ -66,5 +70,5 @@
 ////////////////////////////////////////////////////////////////////////////////
 
-NATEngine::NATEngine():mParent(NULL), mAdapter(NULL){}
+NATEngine::NATEngine():mParent(NULL), mAdapter(NULL), mData(NULL) {}
 NATEngine::~NATEngine(){}
 
@@ -87,7 +91,8 @@
     autoInitSpan.setSucceeded();
     m_fModified = false;
-    mData.allocate();
-    mData->mNetwork.setNull();
-    mData->mBindIP.setNull();
+    mData = new Data();
+    mData->m.allocate();
+    mData->m->mNetwork.setNull();
+    mData->m->mBindIP.setNull();
     unconst(mParent) = aParent;
     unconst(mAdapter) = aAdapter;
@@ -106,5 +111,6 @@
     AutoReadLock thatLock(aThat COMMA_LOCKVAL_SRC_POS);
 
-    mData.share(aThat->mData);
+    mData = new Data();
+    mData->m.share(aThat->mData->m);
     NATRuleMap::iterator it;
     mNATRules.clear();
@@ -132,5 +138,6 @@
     AutoReadLock thatLock(aThat COMMA_LOCKVAL_SRC_POS);
 
-    mData.attachCopy(aThat->mData);
+    mData = new Data();
+    mData->m.attachCopy(aThat->mData->m);
     NATRuleMap::iterator it;
     mNATRules.clear();
@@ -153,5 +160,7 @@
 
     mNATRules.clear();
-    mData.free();
+    mData->m.free();
+    delete mData;
+    mData = NULL;
     unconst(mPeer) = NULL;
     unconst(mParent) = NULL;
@@ -177,5 +186,5 @@
         /* we need to check all data to see whether anything will be changed
          * after rollback */
-        mData.rollback();
+        mData->m.rollback();
     }
     m_fModified = false;
@@ -197,8 +206,8 @@
     if (m_fModified)
     {
-        mData.commit();
+        mData->m.commit();
         if (mPeer)
         {
-            mPeer->mData.attach(mData);
+            mPeer->mData->m.attach(mData->m);
             mPeer->mNATRules.clear();
             NATRuleMap::iterator it;
@@ -216,13 +225,13 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     if (aMtu)
-        *aMtu = mData->mMtu;
+        *aMtu = mData->m->mMtu;
     if (aSockSnd)
-        *aSockSnd = mData->mSockSnd;
+        *aSockSnd = mData->m->mSockSnd;
     if (aSockRcv)
-        *aSockRcv = mData->mSockRcv;
+        *aSockRcv = mData->m->mSockRcv;
     if (aTcpWndSnd)
-        *aTcpWndSnd = mData->mTcpSnd;
+        *aTcpWndSnd = mData->m->mTcpSnd;
     if (aTcpWndRcv)
-        *aTcpWndRcv = mData->mTcpRcv;
+        *aTcpWndRcv = mData->m->mTcpRcv;
 
     return S_OK;
@@ -235,17 +244,17 @@
         || aTcpWndSnd || aTcpWndRcv)
     {
-        mData.backup();
+        mData->m.backup();
         m_fModified = true;
     }
     if (aMtu)
-        mData->mMtu = aMtu;
+        mData->m->mMtu = aMtu;
     if (aSockSnd)
-        mData->mSockSnd = aSockSnd;
+        mData->m->mSockSnd = aSockSnd;
     if (aSockRcv)
-        mData->mSockRcv = aSockSnd;
+        mData->m->mSockRcv = aSockSnd;
     if (aTcpWndSnd)
-        mData->mTcpSnd = aTcpWndSnd;
+        mData->m->mTcpSnd = aTcpWndSnd;
     if (aTcpWndRcv)
-        mData->mTcpRcv = aTcpWndRcv;
+        mData->m->mTcpRcv = aTcpWndRcv;
 
     if (m_fModified)
@@ -334,5 +343,5 @@
     if (it == mNATRules.end())
         return E_INVALIDARG;
-    mData.backup();
+    mData->m.backup();
     settings::NATRule r = it->second;
     Utf8Str strHostIP = r.strHostIP;
@@ -347,5 +356,5 @@
     mParent->setModified(Machine::IsModified_NetworkAdapters);
     m_fModified = true;
-    mData.commit();
+    mData->m.commit();
     alock.release();
     mParent->onNATRedirectRuleChange(ulSlot, TRUE, Bstr(aName).raw(), proto, Bstr(strHostIP).raw(), u16HostPort, Bstr(strGuestIP).raw(), u16GuestPort);
@@ -360,22 +369,22 @@
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
     HRESULT rc = S_OK;
-    mData->mNetwork = data.strNetwork;
-    mData->mBindIP = data.strBindIP;
-    mData->mMtu = data.u32Mtu;
-    mData->mSockSnd = data.u32SockSnd;
-    mData->mTcpRcv = data.u32TcpRcv;
-    mData->mTcpSnd = data.u32TcpSnd;
+    mData->m->mNetwork = data.strNetwork;
+    mData->m->mBindIP = data.strBindIP;
+    mData->m->mMtu = data.u32Mtu;
+    mData->m->mSockSnd = data.u32SockSnd;
+    mData->m->mTcpRcv = data.u32TcpRcv;
+    mData->m->mTcpSnd = data.u32TcpSnd;
     /* TFTP */
-    mData->mTFTPPrefix = data.strTFTPPrefix;
-    mData->mTFTPBootFile = data.strTFTPBootFile;
-    mData->mTFTPNextServer = data.strTFTPNextServer;
+    mData->m->mTFTPPrefix = data.strTFTPPrefix;
+    mData->m->mTFTPBootFile = data.strTFTPBootFile;
+    mData->m->mTFTPNextServer = data.strTFTPNextServer;
     /* DNS */
-    mData->mDNSPassDomain = data.fDNSPassDomain;
-    mData->mDNSProxy = data.fDNSProxy;
-    mData->mDNSUseHostResolver = data.fDNSUseHostResolver;
+    mData->m->mDNSPassDomain = data.fDNSPassDomain;
+    mData->m->mDNSProxy = data.fDNSProxy;
+    mData->m->mDNSUseHostResolver = data.fDNSUseHostResolver;
     /* Alias */
-    mData->mAliasMode  = (data.fAliasUseSamePorts ? NATAliasMode_AliasUseSamePorts : 0);
-    mData->mAliasMode |= (data.fAliasLog          ? NATAliasMode_AliasLog          : 0);
-    mData->mAliasMode |= (data.fAliasProxyOnly    ? NATAliasMode_AliasProxyOnly    : 0);
+    mData->m->mAliasMode  = (data.fAliasUseSamePorts ? NATAliasMode_AliasUseSamePorts : 0);
+    mData->m->mAliasMode |= (data.fAliasLog          ? NATAliasMode_AliasLog          : 0);
+    mData->m->mAliasMode |= (data.fAliasProxyOnly    ? NATAliasMode_AliasProxyOnly    : 0);
     /* port forwarding */
     mNATRules.clear();
@@ -397,23 +406,23 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     HRESULT rc = S_OK;
-    data.strNetwork = mData->mNetwork;
-    data.strBindIP = mData->mBindIP;
-    data.u32Mtu = mData->mMtu;
-    data.u32SockRcv = mData->mSockRcv;
-    data.u32SockSnd = mData->mSockSnd;
-    data.u32TcpRcv = mData->mTcpRcv;
-    data.u32TcpSnd = mData->mTcpSnd;
+    data.strNetwork = mData->m->mNetwork;
+    data.strBindIP = mData->m->mBindIP;
+    data.u32Mtu = mData->m->mMtu;
+    data.u32SockRcv = mData->m->mSockRcv;
+    data.u32SockSnd = mData->m->mSockSnd;
+    data.u32TcpRcv = mData->m->mTcpRcv;
+    data.u32TcpSnd = mData->m->mTcpSnd;
     /* TFTP */
-    data.strTFTPPrefix = mData->mTFTPPrefix;
-    data.strTFTPBootFile = mData->mTFTPBootFile;
-    data.strTFTPNextServer = mData->mTFTPNextServer;
+    data.strTFTPPrefix = mData->m->mTFTPPrefix;
+    data.strTFTPBootFile = mData->m->mTFTPBootFile;
+    data.strTFTPNextServer = mData->m->mTFTPNextServer;
     /* DNS */
-    data.fDNSPassDomain = !!mData->mDNSPassDomain;
-    data.fDNSProxy = !!mData->mDNSProxy;
-    data.fDNSUseHostResolver = !!mData->mDNSUseHostResolver;
+    data.fDNSPassDomain = !!mData->m->mDNSPassDomain;
+    data.fDNSProxy = !!mData->m->mDNSProxy;
+    data.fDNSUseHostResolver = !!mData->m->mDNSUseHostResolver;
     /* Alias */
-    data.fAliasLog = !!(mData->mAliasMode & NATAliasMode_AliasLog);
-    data.fAliasProxyOnly = !!(mData->mAliasMode & NATAliasMode_AliasProxyOnly);
-    data.fAliasUseSamePorts = !!(mData->mAliasMode & NATAliasMode_AliasUseSamePorts);
+    data.fAliasLog = !!(mData->m->mAliasMode & NATAliasMode_AliasLog);
+    data.fAliasProxyOnly = !!(mData->m->mAliasMode & NATAliasMode_AliasProxyOnly);
+    data.fAliasUseSamePorts = !!(mData->m->mAliasMode & NATAliasMode_AliasUseSamePorts);
 
     for (NATRuleMap::iterator it = mNATRules.begin();
@@ -427,8 +436,8 @@
 {
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-    if (Bstr(mData->mNetwork) != aNetwork)
-    {
-        mData.backup();
-        mData->mNetwork = aNetwork;
+    if (Bstr(mData->m->mNetwork) != aNetwork)
+    {
+        mData->m.backup();
+        mData->m->mNetwork = aNetwork;
         mParent->setModified(Machine::IsModified_NetworkAdapters);
         m_fModified = true;
@@ -441,8 +450,8 @@
 {
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-    if (!mData->mNetwork.isEmpty())
-    {
-        aNetwork = mData->mNetwork;
-        Log(("Getter (this:%p) Network: %s\n", this, mData->mNetwork.c_str()));
+    if (!mData->m->mNetwork.isEmpty())
+    {
+        aNetwork = mData->m->mNetwork;
+        Log(("Getter (this:%p) Network: %s\n", this, mData->m->mNetwork.c_str()));
     }
     return S_OK;
@@ -452,8 +461,8 @@
 {
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-    if (Bstr(mData->mBindIP) != aHostIP)
-    {
-        mData.backup();
-        mData->mBindIP = aHostIP;
+    if (Bstr(mData->m->mBindIP) != aHostIP)
+    {
+        mData->m.backup();
+        mData->m->mBindIP = aHostIP;
         mParent->setModified(Machine::IsModified_NetworkAdapters);
         m_fModified = true;
@@ -466,6 +475,6 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    if (!mData->mBindIP.isEmpty())
-        aBindIP = mData->mBindIP;
+    if (!mData->m->mBindIP.isEmpty())
+        aBindIP = mData->m->mBindIP;
     return S_OK;
 }
@@ -474,8 +483,8 @@
 {
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-    if (Bstr(mData->mTFTPPrefix) != aTFTPPrefix)
-    {
-        mData.backup();
-        mData->mTFTPPrefix = aTFTPPrefix;
+    if (Bstr(mData->m->mTFTPPrefix) != aTFTPPrefix)
+    {
+        mData->m.backup();
+        mData->m->mTFTPPrefix = aTFTPPrefix;
         mParent->setModified(Machine::IsModified_NetworkAdapters);
         m_fModified = true;
@@ -489,8 +498,8 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    if (!mData->mTFTPPrefix.isEmpty())
-    {
-        aTFTPPrefix = mData->mTFTPPrefix;
-        Log(("Getter (this:%p) TFTPPrefix: %s\n", this, mData->mTFTPPrefix.c_str()));
+    if (!mData->m->mTFTPPrefix.isEmpty())
+    {
+        aTFTPPrefix = mData->m->mTFTPPrefix;
+        Log(("Getter (this:%p) TFTPPrefix: %s\n", this, mData->m->mTFTPPrefix.c_str()));
     }
     return S_OK;
@@ -500,8 +509,8 @@
 {
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-    if (Bstr(mData->mTFTPBootFile) != aTFTPBootFile)
-    {
-        mData.backup();
-        mData->mTFTPBootFile = aTFTPBootFile;
+    if (Bstr(mData->m->mTFTPBootFile) != aTFTPBootFile)
+    {
+        mData->m.backup();
+        mData->m->mTFTPBootFile = aTFTPBootFile;
         mParent->setModified(Machine::IsModified_NetworkAdapters);
         m_fModified = true;
@@ -514,8 +523,8 @@
 {
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-    if (!mData->mTFTPBootFile.isEmpty())
-    {
-        aTFTPBootFile = mData->mTFTPBootFile;
-        Log(("Getter (this:%p) BootFile: %s\n", this, mData->mTFTPBootFile.c_str()));
+    if (!mData->m->mTFTPBootFile.isEmpty())
+    {
+        aTFTPBootFile = mData->m->mTFTPBootFile;
+        Log(("Getter (this:%p) BootFile: %s\n", this, mData->m->mTFTPBootFile.c_str()));
     }
     return S_OK;
@@ -526,8 +535,8 @@
 {
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-    if (Bstr(mData->mTFTPNextServer) != aTFTPNextServer)
-    {
-        mData.backup();
-        mData->mTFTPNextServer = aTFTPNextServer;
+    if (Bstr(mData->m->mTFTPNextServer) != aTFTPNextServer)
+    {
+        mData->m.backup();
+        mData->m->mTFTPNextServer = aTFTPNextServer;
         mParent->setModified(Machine::IsModified_NetworkAdapters);
         m_fModified = true;
@@ -539,8 +548,8 @@
 {
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-    if (!mData->mTFTPNextServer.isEmpty())
-    {
-        aTFTPNextServer =  mData->mTFTPNextServer;
-        Log(("Getter (this:%p) NextServer: %s\n", this, mData->mTFTPNextServer.c_str()));
+    if (!mData->m->mTFTPNextServer.isEmpty())
+    {
+        aTFTPNextServer =  mData->m->mTFTPNextServer;
+        Log(("Getter (this:%p) NextServer: %s\n", this, mData->m->mTFTPNextServer.c_str()));
     }
     return S_OK;
@@ -552,8 +561,8 @@
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    if (mData->mDNSPassDomain != aDNSPassDomain)
-    {
-        mData.backup();
-        mData->mDNSPassDomain = aDNSPassDomain;
+    if (mData->m->mDNSPassDomain != aDNSPassDomain)
+    {
+        mData->m.backup();
+        mData->m->mDNSPassDomain = aDNSPassDomain;
         mParent->setModified(Machine::IsModified_NetworkAdapters);
         m_fModified = true;
@@ -565,5 +574,5 @@
 {
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-    *aDNSPassDomain = mData->mDNSPassDomain;
+    *aDNSPassDomain = mData->m->mDNSPassDomain;
     return S_OK;
 }
@@ -574,8 +583,8 @@
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    if (mData->mDNSProxy != aDNSProxy)
-    {
-        mData.backup();
-        mData->mDNSProxy = aDNSProxy;
+    if (mData->m->mDNSProxy != aDNSProxy)
+    {
+        mData->m.backup();
+        mData->m->mDNSProxy = aDNSProxy;
         mParent->setModified(Machine::IsModified_NetworkAdapters);
         m_fModified = true;
@@ -587,5 +596,5 @@
 {
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-    *aDNSProxy = mData->mDNSProxy;
+    *aDNSProxy = mData->m->mDNSProxy;
     return S_OK;
 }
@@ -595,5 +604,5 @@
 {
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-    *aDNSUseHostResolver = mData->mDNSUseHostResolver;
+    *aDNSUseHostResolver = mData->m->mDNSUseHostResolver;
     return S_OK;
 }
@@ -602,8 +611,8 @@
 HRESULT NATEngine::setDNSUseHostResolver(BOOL aDNSUseHostResolver)
 {
-    if (mData->mDNSUseHostResolver != aDNSUseHostResolver)
-    {
-        mData.backup();
-        mData->mDNSUseHostResolver = aDNSUseHostResolver;
+    if (mData->m->mDNSUseHostResolver != aDNSUseHostResolver)
+    {
+        mData->m.backup();
+        mData->m->mDNSUseHostResolver = aDNSUseHostResolver;
         mParent->setModified(Machine::IsModified_NetworkAdapters);
         m_fModified = true;
@@ -616,8 +625,8 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    if (mData->mAliasMode != aAliasMode)
-    {
-        mData.backup();
-        mData->mAliasMode = aAliasMode;
+    if (mData->m->mAliasMode != aAliasMode)
+    {
+        mData->m.backup();
+        mData->m->mAliasMode = aAliasMode;
         mParent->setModified(Machine::IsModified_NetworkAdapters);
         m_fModified = true;
@@ -629,6 +638,6 @@
 {
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-    *aAliasMode = mData->mAliasMode;
-    return S_OK;
-}
-
+    *aAliasMode = mData->m->mAliasMode;
+    return S_OK;
+}
+
