Index: /trunk/src/VBox/Main/include/HostUSBDeviceImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/HostUSBDeviceImpl.h	(revision 61666)
+++ /trunk/src/VBox/Main/include/HostUSBDeviceImpl.h	(revision 61667)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2006-2013 Oracle Corporation
+ * Copyright (C) 2006-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -216,5 +216,5 @@
     void i_onPhysicalDetached();
 
-    bool i_isMatch(const USBDeviceFilter::Data &aData);
+    bool i_isMatch(const USBDeviceFilter::BackupableUSBDeviceFilterData &aData);
     int i_compare(PCUSBDEVICE aDev2);
     static int i_compare(PCUSBDEVICE aDev1, PCUSBDEVICE aDev2, bool aIsAwaitingReAttach = false);
Index: /trunk/src/VBox/Main/include/USBDeviceFilterImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/USBDeviceFilterImpl.h	(revision 61666)
+++ /trunk/src/VBox/Main/include/USBDeviceFilterImpl.h	(revision 61667)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2006-2014 Oracle Corporation
+ * Copyright (C) 2006-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -19,4 +19,5 @@
 #define ____H_USBDEVICEFILTERIMPL
 
+#include <VBox/settings.h>
 #include "Matching.h"
 #include <VBox/usbfilter.h>
@@ -38,29 +39,28 @@
 public:
 
-    struct Data
+    struct BackupableUSBDeviceFilterData
     {
         typedef matching::Matchable <matching::ParsedBoolFilter> BOOLFilter;
 
-        Data() : mActive (FALSE), mMaskedIfs (0), mId (NULL) {}
-        Data (const Data &aThat) : mName (aThat.mName), mActive (aThat.mActive),
-            mRemote (aThat.mRemote), mMaskedIfs (aThat.mMaskedIfs) , mId (aThat.mId)
+        BackupableUSBDeviceFilterData() : mId (NULL) {}
+        BackupableUSBDeviceFilterData(const BackupableUSBDeviceFilterData &aThat) :
+            mRemote(aThat.mRemote),  mId(aThat.mId)
         {
-            USBFilterClone (&mUSBFilter, &aThat.mUSBFilter);
+            mData.strName = aThat.mData.strName;
+            mData.fActive = aThat.mData.fActive;
+            mData.ulMaskedInterfaces = aThat.mData.ulMaskedInterfaces;
+            USBFilterClone(&mUSBFilter, &aThat.mUSBFilter);
         }
 
-        /** The filter name. */
-        Bstr mName;
-        /** Indicates whether the filter is active or not. */
-        BOOL mActive;
         /** Remote or local matching criterion. */
         BOOLFilter mRemote;
+
         /** The filter data blob. */
         USBFILTER mUSBFilter;
 
-        /** Interface masking bit mask that should be applied to matching devices. */
-        ULONG mMaskedIfs;
-
         /** Arbitrary ID field (not used by the class itself) */
         void *mId;
+
+        settings::USBDeviceFilter mData;
     };
 
@@ -88,6 +88,6 @@
     // public methods for internal purposes only
     // (ensure there is a caller and a read lock before calling them!)
-    void *& i_getId() { return mData.data()->mId; }
-    const Data& i_getData() { return *mData.data(); }
+    void *& i_getId() { return bd->mId; }
+    const BackupableUSBDeviceFilterData& i_getData() { return *bd.data(); }
     ComObjPtr<USBDeviceFilter> i_peer() { return mPeer; }
 
@@ -133,5 +133,5 @@
     USBDeviceFilter  * const     mPeer;
 
-    Backupable<Data> mData;
+    Backupable<BackupableUSBDeviceFilterData> bd;
 
     bool m_fModified;
@@ -153,7 +153,7 @@
 public:
 
-    struct Data : public USBDeviceFilter::Data
+    struct BackupableUSBDeviceFilterData : public USBDeviceFilter::BackupableUSBDeviceFilterData
     {
-        Data() {}
+        BackupableUSBDeviceFilterData() {}
     };
 
@@ -173,7 +173,7 @@
     void i_saveSettings(settings::USBDeviceFilter &data);
 
-    void*& i_getId() { return mData.data()->mId; }
-
-    const Data& i_getData() { return *mData.data(); }
+    void*& i_getId() { return bd.data()->mId; }
+
+    const BackupableUSBDeviceFilterData& i_getData() { return *bd.data(); }
 
     // util::Lockable interface
@@ -215,5 +215,5 @@
     Host * const        mParent;
 
-    Backupable<Data>    mData;
+    Backupable<BackupableUSBDeviceFilterData>    bd;
 
     /** Used externally to indicate this filter is in the list
Index: /trunk/src/VBox/Main/src-server/HostImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/HostImpl.cpp	(revision 61666)
+++ /trunk/src/VBox/Main/src-server/HostImpl.cpp	(revision 61667)
@@ -1403,5 +1403,5 @@
     /* notify the proxy (only when the filter is active) */
     if (    m->pUSBProxyService->isActive()
-         && pFilter->i_getData().mActive)
+         && pFilter->i_getData().mData.fActive)
     {
         ComAssertRet(pFilter->i_getId() == NULL, E_FAIL);
@@ -1457,5 +1457,5 @@
 
     /* notify the proxy (only when the filter is active) */
-    if (m->pUSBProxyService->isActive() && filter->i_getData().mActive)
+    if (m->pUSBProxyService->isActive() && filter->i_getData().mData.fActive)
     {
         ComAssertRet(filter->i_getId() != NULL, E_FAIL);
@@ -1757,5 +1757,5 @@
 
         /* notify the proxy (only when the filter is active) */
-        if (pFilter->i_getData().mActive)
+        if (pFilter->i_getData().mData.fActive)
         {
             HostUSBDeviceFilter *flt = pFilter; /* resolve ambiguity */
@@ -2250,5 +2250,5 @@
         {
             // insert/remove the filter from the proxy
-            if (aFilter->i_getData().mActive)
+            if (aFilter->i_getData().mData.fActive)
             {
                 ComAssertRet(aFilter->i_getId() == NULL, E_FAIL);
@@ -2264,5 +2264,5 @@
         else
         {
-            if (aFilter->i_getData().mActive)
+            if (aFilter->i_getData().mData.fActive)
             {
                 // update the filter in the proxy
Index: /trunk/src/VBox/Main/src-server/HostUSBDeviceImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/HostUSBDeviceImpl.cpp	(revision 61666)
+++ /trunk/src/VBox/Main/src-server/HostUSBDeviceImpl.cpp	(revision 61667)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2005-2014 Oracle Corporation
+ * Copyright (C) 2005-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -946,5 +946,5 @@
  *  @note Locks this object for reading.
  */
-bool HostUSBDevice::i_isMatch(const USBDeviceFilter::Data &aData)
+bool HostUSBDevice::i_isMatch(const USBDeviceFilter::BackupableUSBDeviceFilterData &aData)
 {
     AutoCaller autoCaller(this);
@@ -953,5 +953,5 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    if (!aData.mActive)
+    if (!aData.mData.fActive)
         return false;
 
Index: /trunk/src/VBox/Main/src-server/USBDeviceFilterImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/USBDeviceFilterImpl.cpp	(revision 61666)
+++ /trunk/src/VBox/Main/src-server/USBDeviceFilterImpl.cpp	(revision 61667)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2006-2015 Oracle Corporation
+ * Copyright (C) 2006-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -110,5 +110,5 @@
             vrc = RTStrToUInt64Ex(pcszValue, &pszNext, 16, &u64);
             if (RT_SUCCESS(vrc))
-                pszNext = RTStrStripL (pszNext);
+                pszNext = RTStrStripL(pszNext);
             if (    vrc == VINF_SUCCESS
                 &&  !*pszNext)
@@ -223,12 +223,12 @@
     m_fModified = false;
 
-    mData.allocate();
-    mData->mName = data.strName;
-    mData->mActive = data.fActive;
-    mData->mMaskedIfs = 0;
+    bd.allocate();
+    bd->mData.strName = data.strName;
+    bd->mData.fActive = data.fActive;
+    bd->mData.ulMaskedInterfaces = 0;
 
     /* initialize all filters to any match using null string */
-    USBFilterInit(&mData->mUSBFilter, USBFILTERTYPE_CAPTURE);
-    mData->mRemote = NULL;
+    USBFilterInit(&bd->mUSBFilter, USBFILTERTYPE_CAPTURE);
+    bd->mRemote = NULL;
 
     mInList = false;
@@ -296,13 +296,13 @@
     m_fModified = false;
 
-    mData.allocate();
-
-    mData->mName = aName;
-    mData->mActive = FALSE;
-    mData->mMaskedIfs = 0;
+    bd.allocate();
+
+    bd->mData.strName = Utf8Str(aName);
+    bd->mData.fActive = FALSE;
+    bd->mData.ulMaskedInterfaces = 0;
 
     /* initialize all filters to any match using null string */
-    USBFilterInit (&mData->mUSBFilter, USBFILTERTYPE_CAPTURE);
-    mData->mRemote = NULL;
+    USBFilterInit(&bd->mUSBFilter, USBFILTERTYPE_CAPTURE);
+    bd->mRemote = NULL;
 
     mInList = false;
@@ -330,6 +330,6 @@
  *  reading if @a aReshare is false.
  */
-HRESULT USBDeviceFilter::init (USBDeviceFilters *aParent, USBDeviceFilter *aThat,
-                               bool aReshare /* = false */)
+HRESULT USBDeviceFilter::init(USBDeviceFilters *aParent, USBDeviceFilter *aThat,
+                              bool aReshare /* = false */)
 {
     LogFlowThisFunc(("aParent=%p, aThat=%p, aReshare=%RTbool\n",
@@ -347,5 +347,5 @@
 
     /* sanity */
-    AutoCaller thatCaller (aThat);
+    AutoCaller thatCaller(aThat);
     AssertComRCReturnRC(thatCaller.rc());
 
@@ -355,5 +355,5 @@
 
         unconst(aThat->mPeer) = this;
-        mData.attach (aThat->mData);
+        bd.attach(aThat->bd);
     }
     else
@@ -362,5 +362,5 @@
 
         AutoReadLock thatLock(aThat COMMA_LOCKVAL_SRC_POS);
-        mData.share (aThat->mData);
+        bd.share(aThat->bd);
     }
 
@@ -383,5 +383,5 @@
  *  @note Locks @a aThat object for reading.
  */
-HRESULT USBDeviceFilter::initCopy (USBDeviceFilters *aParent, USBDeviceFilter *aThat)
+HRESULT USBDeviceFilter::initCopy(USBDeviceFilters *aParent, USBDeviceFilter *aThat)
 {
     LogFlowThisFunc(("aParent=%p, aThat=%p\n", aParent, aThat));
@@ -399,14 +399,14 @@
 
     /* sanity */
-    AutoCaller thatCaller (aThat);
+    AutoCaller thatCaller(aThat);
     AssertComRCReturnRC(thatCaller.rc());
 
     AutoReadLock thatLock(aThat COMMA_LOCKVAL_SRC_POS);
-    mData.attachCopy (aThat->mData);
+    bd.attachCopy(aThat->bd);
 
     /* reset the arbitrary ID field
      * (this field is something unique that two distinct objects, even if they
      * are deep copies of each other, should not share) */
-    mData->mId = NULL;
+    bd->mId = NULL;
 
     mInList = aThat->mInList;
@@ -433,5 +433,5 @@
     mInList = false;
 
-    mData.free();
+    bd.free();
 
     unconst(mPeer) = NULL;
@@ -447,5 +447,5 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    aName = mData->mName;
+    aName = bd->mData.strName;
 
     return S_OK;
@@ -460,11 +460,11 @@
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    if (mData->mName != aName)
+    if (bd->mData.strName != aName)
     {
         m_fModified = true;
         ComObjPtr<Machine> pMachine = mParent->i_getMachine();
 
-        mData.backup();
-        mData->mName = aName;
+        bd.backup();
+        bd->mData.strName = aName;
 
         // leave the lock before informing callbacks
@@ -485,5 +485,5 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    *aActive = mData->mActive;
+    *aActive = bd->mData.fActive;
 
     return S_OK;
@@ -498,11 +498,11 @@
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    if (mData->mActive != aActive)
+    if (bd->mData.fActive != RT_BOOL(aActive))
     {
         m_fModified = true;
         ComObjPtr<Machine> pMachine = mParent->i_getMachine();
 
-        mData.backup();
-        mData->mActive = aActive;
+        bd.backup();
+        bd->mData.fActive = RT_BOOL(aActive);
 
         // leave the lock before informing callbacks
@@ -594,5 +594,5 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    aRemote = mData->mRemote.string();
+    aRemote = bd->mRemote.string();
 
     return S_OK;
@@ -607,7 +607,7 @@
     Bstr bRemote = Bstr(aRemote).raw();
 
-    if (mData->mRemote.string() != bRemote)
-    {
-        Data::BOOLFilter flt = bRemote;
+    if (bd->mRemote.string() != bRemote)
+    {
+        BackupableUSBDeviceFilterData::BOOLFilter flt = bRemote;
         ComAssertRet(!flt.isNull(), E_FAIL);
         if (!flt.isValid())
@@ -619,6 +619,6 @@
         ComObjPtr<Machine> pMachine = mParent->i_getMachine();
 
-        mData.backup();
-        mData->mRemote = flt;
+        bd.backup();
+        bd->mRemote = flt;
 
         // leave the lock before informing callbacks
@@ -639,5 +639,5 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    *aMaskedIfs = mData->mMaskedIfs;
+    *aMaskedIfs = bd->mData.ulMaskedInterfaces;
 
     return S_OK;
@@ -652,11 +652,11 @@
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    if (mData->mMaskedIfs != aMaskedIfs)
+    if (bd->mData.ulMaskedInterfaces != aMaskedIfs)
     {
         m_fModified = true;
         ComObjPtr<Machine> pMachine = mParent->i_getMachine();
 
-        mData.backup();
-        mData->mMaskedIfs = aMaskedIfs;
+        bd.backup();
+        bd->mData.ulMaskedInterfaces = aMaskedIfs;
         // leave the lock before informing callbacks
         alock.release();
@@ -678,5 +678,5 @@
 {
     AutoCaller autoCaller(this);
-    AssertComRCReturn (autoCaller.rc(), false);
+    AssertComRCReturn(autoCaller.rc(), false);
 
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
@@ -695,5 +695,5 @@
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    mData.rollback();
+    bd.rollback();
 }
 
@@ -706,9 +706,9 @@
     /* sanity */
     AutoCaller autoCaller(this);
-    AssertComRCReturnVoid (autoCaller.rc());
+    AssertComRCReturnVoid(autoCaller.rc());
 
     /* sanity too */
-    AutoCaller peerCaller (mPeer);
-    AssertComRCReturnVoid (peerCaller.rc());
+    AutoCaller peerCaller(mPeer);
+    AssertComRCReturnVoid(peerCaller.rc());
 
     /* lock both for writing since we modify both (mPeer is "master" so locked
@@ -716,11 +716,11 @@
     AutoMultiWriteLock2 alock(mPeer, this COMMA_LOCKVAL_SRC_POS);
 
-    if (mData.isBackedUp())
-    {
-        mData.commit();
+    if (bd.isBackedUp())
+    {
+        bd.commit();
         if (mPeer)
         {
             /* attach new data to the peer and reshare it */
-            mPeer->mData.attach (mData);
+            mPeer->bd.attach(bd);
         }
     }
@@ -738,9 +738,9 @@
     /* sanity */
     AutoCaller autoCaller(this);
-    AssertComRCReturnVoid (autoCaller.rc());
+    AssertComRCReturnVoid(autoCaller.rc());
 
     /* sanity too */
-    AutoCaller peerCaller (mPeer);
-    AssertComRCReturnVoid (peerCaller.rc());
+    AutoCaller peerCaller(mPeer);
+    AssertComRCReturnVoid(peerCaller.rc());
 
     /* peer is not modified, lock it for reading (mPeer is "master" so locked
@@ -749,10 +749,10 @@
     AutoWriteLock wl(this COMMA_LOCKVAL_SRC_POS);
 
-    if (mData.isShared())
-    {
-        if (!mData.isBackedUp())
-            mData.backup();
-
-        mData.commit();
+    if (bd.isShared())
+    {
+        if (!bd.isBackedUp())
+            bd.backup();
+
+        bd.commit();
     }
 
@@ -772,5 +772,5 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    i_usbFilterFieldToString(&mData->mUSBFilter, aIdx, aStr);
+    i_usbFilterFieldToString(&bd->mUSBFilter, aIdx, aStr);
     return S_OK;
 }
@@ -795,5 +795,5 @@
 
     com::Utf8Str strOld;
-    i_usbFilterFieldToString(&mData->mUSBFilter, aIdx, strOld);
+    i_usbFilterFieldToString(&bd->mUSBFilter, aIdx, strOld);
     if (strOld != strNew)
     {
@@ -801,11 +801,11 @@
         ComObjPtr<Machine> pMachine = mParent->i_getMachine();
 
-        mData.backup();
+        bd.backup();
 
         com::Utf8Str errStr;
-        HRESULT rc = i_usbFilterFieldFromString(&mData->mUSBFilter, aIdx, strNew, errStr);
+        HRESULT rc = i_usbFilterFieldFromString(&bd->mUSBFilter, aIdx, strNew, errStr);
         if (FAILED(rc))
         {
-            mData.rollback();
+            bd.rollback();
             return setError(rc, "%s", errStr.c_str());
         }
@@ -877,10 +877,10 @@
     mParent->i_addChild(this);
 
-    mData.allocate();
-    mData->mName = data.strName;
-    mData->mActive = data.fActive;
-    USBFilterInit (&mData->mUSBFilter, USBFILTERTYPE_IGNORE);
-    mData->mRemote = NULL;
-    mData->mMaskedIfs = 0;
+    bd.allocate();
+    bd->mData.strName = data.strName;
+    bd->mData.fActive = data.fActive;
+    USBFilterInit (&bd->mUSBFilter, USBFILTERTYPE_IGNORE);
+    bd->mRemote = NULL;
+    bd->mData.ulMaskedInterfaces = 0;
 
     mInList = false;
@@ -930,5 +930,5 @@
  *  @param aParent  Handle of the parent object.
  */
-HRESULT HostUSBDeviceFilter::init (Host *aParent, IN_BSTR aName)
+HRESULT HostUSBDeviceFilter::init(Host *aParent, IN_BSTR aName)
 {
     LogFlowThisFunc(("aParent=%p\n", aParent));
@@ -946,12 +946,12 @@
     mParent->i_addChild(this);
 
-    mData.allocate();
-
-    mData->mName = aName;
-    mData->mActive = FALSE;
+    bd.allocate();
+
+    bd->mData.strName = Utf8Str(aName);
+    bd->mData.fActive = FALSE;
     mInList = false;
-    USBFilterInit (&mData->mUSBFilter, USBFILTERTYPE_IGNORE);
-    mData->mRemote = NULL;
-    mData->mMaskedIfs = 0;
+    USBFilterInit(&bd->mUSBFilter, USBFILTERTYPE_IGNORE);
+    bd->mRemote = NULL;
+    bd->mData.ulMaskedInterfaces = 0;
 
     /* Confirm successful initialization */
@@ -976,5 +976,5 @@
     mInList = false;
 
-    mData.free();
+    bd.free();
 
     mParent->i_removeChild(this);
@@ -1000,5 +1000,5 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    aName = mData->mName;
+    aName = bd->mData.strName;
 
     return S_OK;
@@ -1010,12 +1010,12 @@
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    if (mData->mName != aName)
-    {
-        mData->mName = aName;
+    if (bd->mData.strName != aName)
+    {
+        bd->mData.strName = aName;
 
         /* leave the lock before informing callbacks */
         alock.release();
 
-        return mParent->i_onUSBDeviceFilterChange (this);
+        return mParent->i_onUSBDeviceFilterChange(this);
     }
 
@@ -1028,5 +1028,5 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    *aActive = mData->mActive;
+    *aActive = bd->mData.fActive;
 
     return S_OK;
@@ -1038,12 +1038,12 @@
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    if (mData->mActive != aActive)
-    {
-        mData->mActive = aActive;
+    if (bd->mData.fActive != RT_BOOL(aActive))
+    {
+        bd->mData.fActive = RT_BOOL(aActive);
 
         /* leave the lock before informing callbacks */
         alock.release();
 
-        return mParent->i_onUSBDeviceFilterChange (this, TRUE /* aActiveChanged  */);
+        return mParent->i_onUSBDeviceFilterChange(this, TRUE /* aActiveChanged  */);
     }
 
@@ -1125,5 +1125,5 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    aRemote = mData->mRemote.string();
+    aRemote = bd->mRemote.string();
 
     return S_OK;
@@ -1141,5 +1141,5 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    *aMaskedIfs = mData->mMaskedIfs;
+    *aMaskedIfs = bd->mData.ulMaskedInterfaces;
 
     return S_OK;
@@ -1159,5 +1159,5 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    switch (USBFilterGetFilterType (&mData->mUSBFilter))
+    switch (USBFilterGetFilterType(&bd->mUSBFilter))
     {
         case USBFILTERTYPE_IGNORE:   *aAction = USBDeviceFilterAction_Ignore; break;
@@ -1187,7 +1187,7 @@
                             aAction);
     }
-    if (USBFilterGetFilterType (&mData->mUSBFilter) != filterType)
-    {
-        int vrc = USBFilterSetFilterType (&mData->mUSBFilter, filterType);
+    if (USBFilterGetFilterType(&bd->mUSBFilter) != filterType)
+    {
+        int vrc = USBFilterSetFilterType(&bd->mUSBFilter, filterType);
         if (RT_FAILURE(vrc))
             return setError(E_INVALIDARG,
@@ -1198,5 +1198,5 @@
         alock.release();
 
-        return mParent->i_onUSBDeviceFilterChange (this);
+        return mParent->i_onUSBDeviceFilterChange(this);
     }
 
@@ -1218,5 +1218,5 @@
 {
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-    i_usbFilterFieldToString(&mData->mUSBFilter, aIdx, aStr);
+    i_usbFilterFieldToString(&bd->mUSBFilter, aIdx, aStr);
     return S_OK;
 }
@@ -1228,13 +1228,13 @@
 
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-    data.strName = mData->mName;
-    data.fActive = !!mData->mActive;
-    i_usbFilterFieldToString(&mData->mUSBFilter, USBFILTERIDX_VENDOR_ID, data.strVendorId);
-    i_usbFilterFieldToString(&mData->mUSBFilter, USBFILTERIDX_PRODUCT_ID, data.strProductId);
-    i_usbFilterFieldToString(&mData->mUSBFilter, USBFILTERIDX_DEVICE, data.strRevision);
-    i_usbFilterFieldToString(&mData->mUSBFilter, USBFILTERIDX_MANUFACTURER_STR, data.strManufacturer);
-    i_usbFilterFieldToString(&mData->mUSBFilter, USBFILTERIDX_PRODUCT_STR, data.strProduct);
-    i_usbFilterFieldToString(&mData->mUSBFilter, USBFILTERIDX_SERIAL_NUMBER_STR, data.strSerialNumber);
-    i_usbFilterFieldToString(&mData->mUSBFilter, USBFILTERIDX_PORT, data.strPort);
+    data.strName = bd->mData.strName;
+    data.fActive = bd->mData.fActive;
+    i_usbFilterFieldToString(&bd->mUSBFilter, USBFILTERIDX_VENDOR_ID, data.strVendorId);
+    i_usbFilterFieldToString(&bd->mUSBFilter, USBFILTERIDX_PRODUCT_ID, data.strProductId);
+    i_usbFilterFieldToString(&bd->mUSBFilter, USBFILTERIDX_DEVICE, data.strRevision);
+    i_usbFilterFieldToString(&bd->mUSBFilter, USBFILTERIDX_MANUFACTURER_STR, data.strManufacturer);
+    i_usbFilterFieldToString(&bd->mUSBFilter, USBFILTERIDX_PRODUCT_STR, data.strProduct);
+    i_usbFilterFieldToString(&bd->mUSBFilter, USBFILTERIDX_SERIAL_NUMBER_STR, data.strSerialNumber);
+    i_usbFilterFieldToString(&bd->mUSBFilter, USBFILTERIDX_PORT, data.strPort);
 
     COMGETTER(Action)(&data.action);
@@ -1255,13 +1255,13 @@
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
     Utf8Str strOld;
-    i_usbFilterFieldToString(&mData->mUSBFilter, aIdx, strOld);
+    i_usbFilterFieldToString(&bd->mUSBFilter, aIdx, strOld);
     if (strOld != aStr)
     {
-        //mData.backup();
+        //bd.backup();
         com::Utf8Str errStr;
-        HRESULT rc = USBDeviceFilter::i_usbFilterFieldFromString(&mData->mUSBFilter, aIdx, aStr, errStr);
+        HRESULT rc = USBDeviceFilter::i_usbFilterFieldFromString(&bd->mUSBFilter, aIdx, aStr, errStr);
         if (FAILED(rc))
         {
-            //mData.rollback();
+            //bd.rollback();
             return setError(rc, "%s", errStr.c_str());
         }
Index: /trunk/src/VBox/Main/src-server/USBDeviceFiltersImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/USBDeviceFiltersImpl.cpp	(revision 61666)
+++ /trunk/src/VBox/Main/src-server/USBDeviceFiltersImpl.cpp	(revision 61667)
@@ -380,5 +380,5 @@
 
     /* notify the proxy (only when it makes sense) */
-    if (pFilter->i_getData().mActive && Global::IsOnline(adep.machineState())
+    if (pFilter->i_getData().mData.fActive && Global::IsOnline(adep.machineState())
         && pFilter->i_getData().mRemote.isMatch(false))
     {
@@ -446,5 +446,5 @@
 
     /* notify the proxy (only when it makes sense) */
-    if (pFilter->i_getData().mActive && Global::IsOnline(adep.machineState())
+    if (pFilter->i_getData().mData.fActive && Global::IsOnline(adep.machineState())
         && pFilter->i_getData().mRemote.isMatch(false))
     {
@@ -542,11 +542,11 @@
     {
         AutoWriteLock filterLock(*it COMMA_LOCKVAL_SRC_POS);
-        const USBDeviceFilter::Data &filterData = (*it)->i_getData();
+        const USBDeviceFilter::BackupableUSBDeviceFilterData &filterData = (*it)->i_getData();
 
         Bstr str;
 
         settings::USBDeviceFilter f;
-        f.strName = filterData.mName;
-        f.fActive = !!filterData.mActive;
+        f.strName = filterData.mData.strName;
+        f.fActive = !!filterData.mData.fActive;
         (*it)->COMGETTER(VendorId)(str.asOutParam());
         f.strVendorId = str;
@@ -564,5 +564,5 @@
         f.strPort = str;
         f.strRemote = filterData.mRemote.string();
-        f.ulMaskedInterfaces = filterData.mMaskedIfs;
+        f.ulMaskedInterfaces = filterData.mData.ulMaskedInterfaces;
 
         data.llDeviceFilters.push_back(f);
@@ -601,5 +601,5 @@
             {
                 /* notify the proxy (only when it makes sense) */
-                if ((*it)->i_getData().mActive &&
+                if ((*it)->i_getData().mData.fActive &&
                     Global::IsOnline(adep.machineState())
                     && (*it)->i_getData().mRemote.isMatch(false))
@@ -627,5 +627,5 @@
                 {
                     /* notify the proxy (only when necessary) */
-                    if ((*it)->i_getData().mActive
+                    if ((*it)->i_getData().mData.fActive
                             && (*it)->i_getData().mRemote.isMatch(false))
                     {
@@ -839,5 +839,5 @@
             {
                 /* insert/remove the filter from the proxy */
-                if (aFilter->i_getData().mActive)
+                if (aFilter->i_getData().mData.fActive)
                 {
                     ComAssertRet(aFilter->i_getId() == NULL, E_FAIL);
@@ -854,5 +854,5 @@
         else
         {
-            if (aFilter->i_getData().mActive)
+            if (aFilter->i_getData().mData.fActive)
             {
                 /* update the filter in the proxy */
@@ -897,5 +897,5 @@
         if (aDevice->i_isMatch((*it)->i_getData()))
         {
-            *aMaskedIfs = (*it)->i_getData().mMaskedIfs;
+            *aMaskedIfs = (*it)->i_getData().mData.ulMaskedInterfaces;
             return true;
         }
@@ -995,7 +995,7 @@
     {
         AutoWriteLock filterLock(*it COMMA_LOCKVAL_SRC_POS);
-        const USBDeviceFilter::Data &aData = (*it)->i_getData();
-
-        if (!aData.mActive)
+        const USBDeviceFilter::BackupableUSBDeviceFilterData &aData = (*it)->i_getData();
+
+        if (!aData.mData.fActive)
             continue;
         if (!aData.mRemote.isMatch(remote))
@@ -1005,5 +1005,5 @@
 
         match = true;
-        *aMaskedIfs = aData.mMaskedIfs;
+        *aMaskedIfs = aData.mData.ulMaskedInterfaces;
         break;
     }
@@ -1041,5 +1041,5 @@
 
         /* notify the proxy (only if the filter is active) */
-        if (   pFilter->i_getData().mActive
+        if (   pFilter->i_getData().mData.fActive
             && pFilter->i_getData().mRemote.isMatch(false) /* and if the filter is NOT remote */
            )
Index: /trunk/src/VBox/Main/src-server/USBProxyService.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/USBProxyService.cpp	(revision 61666)
+++ /trunk/src/VBox/Main/src-server/USBProxyService.cpp	(revision 61667)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2006-2014 Oracle Corporation
+ * Copyright (C) 2006-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -745,5 +745,5 @@
     {
         AutoWriteLock filterLock(*it COMMA_LOCKVAL_SRC_POS);
-        const HostUSBDeviceFilter::Data &data = (*it)->i_getData();
+        const HostUSBDeviceFilter::BackupableUSBDeviceFilterData &data = (*it)->i_getData();
         if (aDevice->i_isMatch(data))
         {
