Index: /trunk/include/VBox/HostServices/VBoxClipboardSvc.h
===================================================================
--- /trunk/include/VBox/HostServices/VBoxClipboardSvc.h	(revision 81285)
+++ /trunk/include/VBox/HostServices/VBoxClipboardSvc.h	(revision 81286)
@@ -83,22 +83,35 @@
 
 /*
+ * The Shared Clipboard file transfer mode (bit field).
+ */
+/** Shared Clipboard file transfers are disabled. */
+#define VBOX_SHCL_TRANSFER_MODE_DISABLED     UINT32_C(0)
+/** Shared Clipboard file transfers are enabled. */
+#define VBOX_SHCL_TRANSFER_MODE_ENABLED      RT_BIT(0)
+/** Shared Clipboard file transfer mode valid mask. */
+#define VBOX_SHCL_TRANSFER_MODE_VALID_MASK   UINT32_C(0x1)
+
+/*
  * The service functions which are callable by host.
  */
 /** Sets the current Shared Clipboard operation mode. */
 #define VBOX_SHCL_HOST_FN_SET_MODE           1
+/** Sets the current Shared Clipboard (file) transfers mode.
+ *  Operates on the VBOX_SHCL_TRANSFERS_ defines. */
+#define VBOX_SHCL_HOST_FN_SET_TRANSFER_MODE  2
 /** Run headless on the host, i.e. do not touch the host clipboard. */
-#define VBOX_SHCL_HOST_FN_SET_HEADLESS       2
+#define VBOX_SHCL_HOST_FN_SET_HEADLESS       3
 /** Reports cancellation of the current operation to the guest. */
-#define VBOX_SHCL_HOST_FN_CANCEL             3
+#define VBOX_SHCL_HOST_FN_CANCEL             4
 /** Reports an error to the guest. */
-#define VBOX_SHCL_HOST_FN_ERROR              4
+#define VBOX_SHCL_HOST_FN_ERROR              5
 /** Reports that a new clipboard area has been registered. */
-#define VBOX_SHCL_HOST_FN_AREA_REGISTER      5
+#define VBOX_SHCL_HOST_FN_AREA_REGISTER      6
 /** Reports that a clipboard area has been unregistered. */
-#define VBOX_SHCL_HOST_FN_AREA_UNREGISTER    6
+#define VBOX_SHCL_HOST_FN_AREA_UNREGISTER    7
 /** Reports that a client (host / guest) has attached to a clipboard area. */
-#define VBOX_SHCL_HOST_FN_AREA_ATTACH        7
+#define VBOX_SHCL_HOST_FN_AREA_ATTACH        8
 /** Reports that a client (host / guest) has detached from a clipboard area. */
-#define VBOX_SHCL_HOST_FN_AREA_DETACH        8
+#define VBOX_SHCL_HOST_FN_AREA_DETACH        9
 
 /**
Index: /trunk/include/VBox/settings.h
===================================================================
--- /trunk/include/VBox/settings.h	(revision 81285)
+++ /trunk/include/VBox/settings.h	(revision 81286)
@@ -1116,5 +1116,8 @@
     // clever reason <Hardware> is where they are in the XML....
     SharedFoldersList   llSharedFolders;
+
     ClipboardMode_T     clipboardMode;
+    bool                fClipboardFileTransfersEnabled;
+
     DnDMode_T           dndMode;
 
Index: /trunk/src/VBox/GuestHost/SharedClipboard/clipboard-common.cpp
===================================================================
--- /trunk/src/VBox/GuestHost/SharedClipboard/clipboard-common.cpp	(revision 81285)
+++ /trunk/src/VBox/GuestHost/SharedClipboard/clipboard-common.cpp	(revision 81286)
@@ -825,4 +825,5 @@
     {
         RT_CASE_RET_STR(VBOX_SHCL_HOST_FN_SET_MODE);
+        RT_CASE_RET_STR(VBOX_SHCL_HOST_FN_SET_TRANSFER_MODE);
         RT_CASE_RET_STR(VBOX_SHCL_HOST_FN_SET_HEADLESS);
         RT_CASE_RET_STR(VBOX_SHCL_HOST_FN_CANCEL);
Index: /trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-internal.h
===================================================================
--- /trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-internal.h	(revision 81285)
+++ /trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-internal.h	(revision 81286)
@@ -197,4 +197,5 @@
 
 # ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
+int shclSvcTransferModeSet(uint32_t fMode);
 int shclSvcTransferStart(PSHCLCLIENT pClient, SHCLTRANSFERDIR enmDir, SHCLSOURCE enmSource, PSHCLTRANSFER *ppTransfer);
 int shclSvcTransferStop(PSHCLCLIENT pClient, PSHCLTRANSFER pTransfer);
Index: /trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-transfers.cpp
===================================================================
--- /trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-transfers.cpp	(revision 81285)
+++ /trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-transfers.cpp	(revision 81286)
@@ -40,6 +40,8 @@
 *   Externals                                                                                                                    *
 *********************************************************************************************************************************/
-extern SHCLEXTSTATE g_ExtState;
-extern PVBOXHGCMSVCHELPERS g_pHelpers;
+extern uint32_t             g_fTransferMode;
+extern SHCLEXTSTATE         g_ExtState;
+extern PVBOXHGCMSVCHELPERS  g_pHelpers;
+extern ClipboardClientMap   g_mapClients;
 extern ClipboardClientQueue g_listClientsDeferred;
 
@@ -2186,2 +2188,34 @@
 }
 
+/**
+ * Sets the host service's (file) transfer mode.
+ *
+ * @returns VBox status code.
+ * @param   uMode               Transfer mode to set.
+ */
+int shclSvcTransferModeSet(uint32_t fMode)
+{
+    AssertReturn(!(fMode & ~VBOX_SHCL_TRANSFER_MODE_VALID_MASK), VERR_INVALID_FLAGS);
+
+    g_fTransferMode = fMode;
+
+    LogRel2(("Shared Clipboard: Transfer mode set to 0x%x\n", g_fTransferMode));
+
+    /* If file transfers are being disabled, make sure to also reset (destroy) all pending transfers. */
+    if (g_fTransferMode == VBOX_SHCL_TRANSFER_MODE_DISABLED)
+    {
+        ClipboardClientMap::const_iterator itClient = g_mapClients.begin();
+        while (itClient != g_mapClients.end())
+        {
+            PSHCLCLIENT pClient = itClient->second;
+            AssertPtr(pClient);
+
+            shclSvcClientTransfersReset(pClient);
+
+            ++itClient;
+        }
+    }
+
+    LogFlowFuncLeaveRC(VINF_SUCCESS);
+    return VINF_SUCCESS;
+}
Index: /trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc.cpp
===================================================================
--- /trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc.cpp	(revision 81285)
+++ /trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc.cpp	(revision 81286)
@@ -235,5 +235,10 @@
 
 static RTCRITSECT g_CritSect;
-static uint32_t g_uMode;
+/** Global Shared Clipboard mode. */
+static uint32_t g_uMode  = VBOX_SHCL_MODE_OFF;
+#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
+/** Global Shared Clipboard (file) transfer mode. */
+uint32_t g_fTransferMode = VBOX_SHCL_TRANSFER_MODE_DISABLED;
+#endif
 
 /** Is the clipboard running in headless mode? */
@@ -1537,5 +1542,10 @@
         {
 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
-            rc = shclSvcTransferHandler(pClient, callHandle, u32Function, cParms, paParms, tsArrival);
+            if (g_fTransferMode & VBOX_SHCL_TRANSFER_MODE_ENABLED)
+            {
+                rc = shclSvcTransferHandler(pClient, callHandle, u32Function, cParms, paParms, tsArrival);
+            }
+            else
+                rc = VERR_ACCESS_DENIED;
 #else
             rc = VERR_NOT_IMPLEMENTED;
@@ -1637,4 +1647,21 @@
         }
 
+#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
+        case VBOX_SHCL_HOST_FN_SET_TRANSFER_MODE:
+        {
+            if (cParms != 1)
+            {
+                rc = VERR_INVALID_PARAMETER;
+            }
+            else
+            {
+                uint32_t u32TransferMode;
+                rc = HGCMSvcGetU32(&paParms[0], &u32TransferMode);
+                if (RT_SUCCESS(rc))
+                    rc = shclSvcTransferModeSet(u32TransferMode);
+            }
+            break;
+        }
+#endif
         case VBOX_SHCL_HOST_FN_SET_HEADLESS:
         {
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 81285)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 81286)
@@ -5853,5 +5853,5 @@
   <interface
     name="IMachine" extends="$unknown"
-    uuid="13a7c7cb-02fd-4962-a578-5660a5035776"
+    uuid="0020076B-00D0-494E-0023-C293000086A7"
     wsmap="managed"
     wrap-hint-server-addinterfaces="IInternalMachineControl"
@@ -6404,4 +6404,13 @@
         Synchronization mode between the host OS clipboard
         and the guest OS clipboard.
+      </desc>
+    </attribute>
+
+    <attribute name="clipboardFileTransfersEnabled" type="boolean">
+      <desc>
+        Sets or retrieves whether clipboard file transfers are allowed or not.
+
+        When set to @a true, clipboard file transfers between supported
+        host and guest OSes are allowed.
       </desc>
     </attribute>
@@ -21775,4 +21784,13 @@
       <param name="clipboardMode" type="ClipboardMode" dir="in">
         <desc>The new shared clipboard mode.</desc>
+      </param>
+    </method>
+
+    <method name="onClipboardFileTransferModeChange">
+      <desc>
+        Notification when the shared clipboard file transfers mode changes.
+      </desc>
+      <param name="enabled" type="boolean" dir="in">
+        <desc>Flag whether clipboard file transfers are allowed or not.</desc>
       </param>
     </method>
@@ -24082,7 +24100,12 @@
       </desc>
     </const>
+    <const name="OnClipboardFileTransferModeChanged" value="104">
+      <desc>
+        See <link to="IClipboardFileTransferModeChangedEvent">IClipboardFileTransferModeChangedEvent</link>.
+      </desc>
+    </const>
     <!-- End event marker -->
     <!-- @todo rename to 'End' as it is exclusive (we use 'last' to be inclusive). -->
-    <const name="Last" value="104">
+    <const name="Last" value="105">
       <desc>
         Must be last event, used for iterations and structures relying on numerical event values.
@@ -24903,4 +24926,19 @@
       <desc>
         The new clipboard mode.
+      </desc>
+    </attribute>
+  </interface>
+
+  <interface
+    name="IClipboardFileTransferModeChangedEvent" extends="IEvent"
+    uuid="00391758-00B1-4E9D-0000-11FA00F9D583"
+    wsmap="managed" autogen="VBoxEvent" id="OnClipboardFileTransferModeChanged"
+    >
+    <desc>
+      Notification when the shared clipboard file transfer mode changes.
+    </desc>
+    <attribute name="enabled" type="boolean" readonly="yes">
+      <desc>
+        Whether file transfers are allowed or not.
       </desc>
     </attribute>
Index: /trunk/src/VBox/Main/include/ConsoleImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/ConsoleImpl.h	(revision 81285)
+++ /trunk/src/VBox/Main/include/ConsoleImpl.h	(revision 81286)
@@ -190,4 +190,5 @@
     HRESULT i_onCPUExecutionCapChange(ULONG aExecutionCap);
     HRESULT i_onClipboardModeChange(ClipboardMode_T aClipboardMode);
+    HRESULT i_onClipboardFileTransferModeChange(bool aEnabled);
     HRESULT i_onDnDModeChange(DnDMode_T aDnDMode);
     HRESULT i_onVRDEServerChange(BOOL aRestart);
@@ -773,4 +774,5 @@
 
     int i_changeClipboardMode(ClipboardMode_T aClipboardMode);
+    int i_changeClipboardFileTransferMode(bool aEnabled);
     int i_changeDnDMode(DnDMode_T aDnDMode);
 
Index: /trunk/src/VBox/Main/include/MachineImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineImpl.h	(revision 81285)
+++ /trunk/src/VBox/Main/include/MachineImpl.h	(revision 81286)
@@ -311,4 +311,6 @@
 
         ClipboardMode_T     mClipboardMode;
+        BOOL                mClipboardFileTransfersEnabled;
+
         DnDMode_T           mDnDMode;
 
@@ -528,4 +530,5 @@
     virtual HRESULT i_onVMProcessPriorityChange(VMProcPriority_T /* aPriority */) { return S_OK; }
     virtual HRESULT i_onClipboardModeChange(ClipboardMode_T /* aClipboardMode */) { return S_OK; }
+    virtual HRESULT i_onClipboardFileTransferModeChange(BOOL /* aEnable */) { return S_OK; }
     virtual HRESULT i_onDnDModeChange(DnDMode_T /* aDnDMode */) { return S_OK; }
     virtual HRESULT i_onBandwidthGroupChange(IBandwidthGroup * /* aBandwidthGroup */) { return S_OK; }
@@ -929,4 +932,6 @@
     HRESULT getClipboardMode(ClipboardMode_T *aClipboardMode);
     HRESULT setClipboardMode(ClipboardMode_T aClipboardMode);
+    HRESULT getClipboardFileTransfersEnabled(BOOL *aEnabled);
+    HRESULT setClipboardFileTransfersEnabled(BOOL aEnabled);
     HRESULT getDnDMode(DnDMode_T *aDnDMode);
     HRESULT setDnDMode(DnDMode_T aDnDMode);
@@ -1345,4 +1350,5 @@
     HRESULT i_onSharedFolderChange();
     HRESULT i_onClipboardModeChange(ClipboardMode_T aClipboardMode);
+    HRESULT i_onClipboardFileTransferModeChange(BOOL aEnable);
     HRESULT i_onDnDModeChange(DnDMode_T aDnDMode);
     HRESULT i_onBandwidthGroupChange(IBandwidthGroup *aBandwidthGroup);
Index: /trunk/src/VBox/Main/include/SessionImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/SessionImpl.h	(revision 81285)
+++ /trunk/src/VBox/Main/include/SessionImpl.h	(revision 81286)
@@ -101,4 +101,5 @@
     HRESULT onVMProcessPriorityChange(VMProcPriority_T priority);
     HRESULT onClipboardModeChange(ClipboardMode_T aClipboardMode);
+    HRESULT onClipboardFileTransferModeChange(BOOL aEnabled);
     HRESULT onDnDModeChange(DnDMode_T aDndMode);
     HRESULT onCPUChange(ULONG aCpu,
Index: /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp	(revision 81285)
+++ /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp	(revision 81286)
@@ -5374,4 +5374,48 @@
         alock.release();
         fireClipboardModeChangedEvent(mEventSource, aClipboardMode);
+    }
+
+    LogFlowThisFunc(("Leaving rc=%#x\n", rc));
+    return rc;
+}
+
+/**
+ * Called by IInternalSessionControl::OnClipboardFileTransferModeChange().
+ *
+ * @note Locks this object for writing.
+ */
+HRESULT Console::i_onClipboardFileTransferModeChange(bool aEnabled)
+{
+    LogFlowThisFunc(("\n"));
+
+    AutoCaller autoCaller(this);
+    AssertComRCReturnRC(autoCaller.rc());
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    HRESULT rc = S_OK;
+
+    /* don't trigger the change if the VM isn't running */
+    SafeVMPtrQuiet ptrVM(this);
+    if (ptrVM.isOk())
+    {
+        if (   mMachineState == MachineState_Running
+            || mMachineState == MachineState_Teleporting
+            || mMachineState == MachineState_LiveSnapshotting)
+        {
+            int vrc = i_changeClipboardFileTransferMode(aEnabled);
+            if (RT_FAILURE(vrc))
+                rc = E_FAIL; /** @todo r=andy Set error info here? */
+        }
+        else
+            rc = i_setInvalidMachineStateError();
+        ptrVM.release();
+    }
+
+    /* notify console callbacks on success */
+    if (SUCCEEDED(rc))
+    {
+        alock.release();
+        fireClipboardFileTransferModeChangedEvent(mEventSource, aEnabled ? TRUE : FALSE);
     }
 
@@ -9285,4 +9329,33 @@
 
 /**
+ * Changes the clipboard file transfer mode.
+ *
+ * @returns VBox status code.
+ * @param   aEnabled    Whether clipboard file transfers are enabled or not.
+ */
+int Console::i_changeClipboardFileTransferMode(bool aEnabled)
+{
+#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
+    VMMDev *pVMMDev = m_pVMMDev;
+    AssertPtrReturn(pVMMDev, VERR_INVALID_POINTER);
+
+    VBOXHGCMSVCPARM parm;
+    RT_ZERO(parm);
+
+    parm.type     = VBOX_HGCM_SVC_PARM_32BIT;
+    parm.u.uint32 = aEnabled ? VBOX_SHCL_TRANSFER_MODE_ENABLED : VBOX_SHCL_TRANSFER_MODE_DISABLED;
+
+    int vrc = pVMMDev->hgcmHostCall("VBoxSharedClipboard", VBOX_SHCL_HOST_FN_SET_TRANSFER_MODE, 1 /* cParms */, &parm);
+    if (RT_FAILURE(vrc))
+        LogRel(("Shared Clipboard: Error changing file transfer mode: %Rrc\n", vrc));
+
+    return vrc;
+#else
+    RT_NOREF(aEnabled);
+    return VERR_NOT_IMPLEMENTED;
+#endif
+}
+
+/**
  * Changes the drag and drop mode.
  *
Index: /trunk/src/VBox/Main/src-client/SessionImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/SessionImpl.cpp	(revision 81285)
+++ /trunk/src/VBox/Main/src-client/SessionImpl.cpp	(revision 81286)
@@ -811,4 +811,21 @@
 }
 
+HRESULT Session::onClipboardFileTransferModeChange(BOOL aEnabled)
+{
+    LogFlowThisFunc(("\n"));
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+    AssertReturn(mState == SessionState_Locked, VBOX_E_INVALID_VM_STATE);
+    AssertReturn(mType == SessionType_WriteLock, VBOX_E_INVALID_OBJECT_STATE);
+#ifndef VBOX_COM_INPROC_API_CLIENT
+    AssertReturn(mConsole, VBOX_E_INVALID_OBJECT_STATE);
+
+    return mConsole->i_onClipboardFileTransferModeChange(RT_BOOL(aEnabled));
+#else
+    RT_NOREF(aEnabled);
+    return S_OK;
+#endif
+}
+
 HRESULT Session::onDnDModeChange(DnDMode_T aDndMode)
 {
Index: /trunk/src/VBox/Main/src-server/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 81285)
+++ /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 81286)
@@ -86,4 +86,8 @@
 # include <VBox/HostServices/GuestPropertySvc.h>
 # include <VBox/com/array.h>
+#endif
+
+#ifdef VBOX_WITH_SHARED_CLIPBOARD
+# include <VBox/HostServices/VBoxClipboardSvc.h>
 #endif
 
@@ -214,5 +218,7 @@
         mBootOrder[i] = DeviceType_Null;
 
-    mClipboardMode = ClipboardMode_Disabled;
+    mClipboardMode                 = ClipboardMode_Disabled;
+    mClipboardFileTransfersEnabled = FALSE;
+
     mDnDMode = DnDMode_Disabled;
 
@@ -2734,4 +2740,35 @@
 }
 
+HRESULT Machine::getClipboardFileTransfersEnabled(BOOL *aEnabled)
+{
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aEnabled = mHWData->mClipboardFileTransfersEnabled;
+
+    return S_OK;
+}
+
+HRESULT Machine::setClipboardFileTransfersEnabled(BOOL aEnabled)
+{
+    HRESULT rc = S_OK;
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    alock.release();
+    rc = i_onClipboardFileTransferModeChange(aEnabled);
+    alock.acquire();
+    if (FAILED(rc)) return rc;
+
+    i_setModified(IsModified_MachineData);
+    mHWData.backup();
+    mHWData->mClipboardFileTransfersEnabled = aEnabled;
+
+    /** Save settings if online - @todo why is this required? -- @bugref{6818} */
+    if (Global::IsOnline(mData->mMachineState))
+        i_saveSettings(NULL);
+
+    return S_OK;
+}
+
 HRESULT Machine::getDnDMode(DnDMode_T *aDnDMode)
 {
@@ -8981,5 +9018,6 @@
 
         // Clipboard
-        mHWData->mClipboardMode = data.clipboardMode;
+        mHWData->mClipboardMode                 = data.clipboardMode;
+        mHWData->mClipboardFileTransfersEnabled = data.fClipboardFileTransfersEnabled ? TRUE : FALSE;
 
         // drag'n'drop
@@ -10284,5 +10322,6 @@
 
         // clipboard
-        data.clipboardMode = mHWData->mClipboardMode;
+        data.clipboardMode                  = mHWData->mClipboardMode;
+        data.fClipboardFileTransfersEnabled = RT_BOOL(mHWData->mClipboardFileTransfersEnabled);
 
         // drag'n'drop
@@ -14266,4 +14305,28 @@
  * @note Locks this object for reading.
  */
+HRESULT SessionMachine::i_onClipboardFileTransferModeChange(BOOL aEnable)
+{
+    LogFlowThisFunc(("\n"));
+
+    AutoCaller autoCaller(this);
+    AssertComRCReturnRC(autoCaller.rc());
+
+    ComPtr<IInternalSessionControl> directControl;
+    {
+        AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+        if (mData->mSession.mLockType == LockType_VM)
+            directControl = mData->mSession.mDirectControl;
+    }
+
+    /* ignore notifications sent after #OnSessionEnd() is called */
+    if (!directControl)
+        return S_OK;
+
+    return directControl->OnClipboardFileTransferModeChange(aEnable);
+}
+
+/**
+ * @note Locks this object for reading.
+ */
 HRESULT SessionMachine::i_onDnDModeChange(DnDMode_T aDnDMode)
 {
Index: /trunk/src/VBox/Main/xml/Settings.cpp
===================================================================
--- /trunk/src/VBox/Main/xml/Settings.cpp	(revision 81285)
+++ /trunk/src/VBox/Main/xml/Settings.cpp	(revision 81286)
@@ -3234,4 +3234,5 @@
     fEmulatedUSBCardReader(false),
     clipboardMode(ClipboardMode_Disabled),
+    fClipboardFileTransfersEnabled(false),
     dndMode(DnDMode_Disabled),
     ulMemoryBalloonSize(0),
@@ -3327,66 +3328,67 @@
 {
     return (this == &h)
-        || (   strVersion                == h.strVersion
-            && uuid                      == h.uuid
-            && fHardwareVirt             == h.fHardwareVirt
-            && fNestedPaging             == h.fNestedPaging
-            && fLargePages               == h.fLargePages
-            && fVPID                     == h.fVPID
-            && fUnrestrictedExecution    == h.fUnrestrictedExecution
-            && fHardwareVirtForce        == h.fHardwareVirtForce
-            && fUseNativeApi             == h.fUseNativeApi
-            && fPAE                      == h.fPAE
-            && enmLongMode               == h.enmLongMode
-            && fTripleFaultReset         == h.fTripleFaultReset
-            && fAPIC                     == h.fAPIC
-            && fX2APIC                   == h.fX2APIC
-            && fIBPBOnVMExit             == h.fIBPBOnVMExit
-            && fIBPBOnVMEntry            == h.fIBPBOnVMEntry
-            && fSpecCtrl                 == h.fSpecCtrl
-            && fSpecCtrlByHost           == h.fSpecCtrlByHost
-            && fL1DFlushOnSched          == h.fL1DFlushOnSched
-            && fL1DFlushOnVMEntry        == h.fL1DFlushOnVMEntry
-            && fMDSClearOnSched          == h.fMDSClearOnSched
-            && fMDSClearOnVMEntry        == h.fMDSClearOnVMEntry
-            && fNestedHWVirt             == h.fNestedHWVirt
-            && cCPUs                     == h.cCPUs
-            && fCpuHotPlug               == h.fCpuHotPlug
-            && ulCpuExecutionCap         == h.ulCpuExecutionCap
-            && uCpuIdPortabilityLevel    == h.uCpuIdPortabilityLevel
-            && strCpuProfile             == h.strCpuProfile
-            && fHPETEnabled              == h.fHPETEnabled
-            && llCpus                    == h.llCpus
-            && llCpuIdLeafs              == h.llCpuIdLeafs
-            && ulMemorySizeMB            == h.ulMemorySizeMB
-            && mapBootOrder              == h.mapBootOrder
-            && graphicsControllerType    == h.graphicsControllerType
-            && ulVRAMSizeMB              == h.ulVRAMSizeMB
-            && cMonitors                 == h.cMonitors
-            && fAccelerate3D             == h.fAccelerate3D
-            && fAccelerate2DVideo        == h.fAccelerate2DVideo
-            && firmwareType              == h.firmwareType
-            && pointingHIDType           == h.pointingHIDType
-            && keyboardHIDType           == h.keyboardHIDType
-            && chipsetType               == h.chipsetType
-            && paravirtProvider          == h.paravirtProvider
-            && strParavirtDebug          == h.strParavirtDebug
-            && fEmulatedUSBCardReader    == h.fEmulatedUSBCardReader
-            && vrdeSettings              == h.vrdeSettings
-            && biosSettings              == h.biosSettings
-            && usbSettings               == h.usbSettings
-            && llNetworkAdapters         == h.llNetworkAdapters
-            && llSerialPorts             == h.llSerialPorts
-            && llParallelPorts           == h.llParallelPorts
-            && audioAdapter              == h.audioAdapter
-            && storage                   == h.storage
-            && llSharedFolders           == h.llSharedFolders
-            && clipboardMode             == h.clipboardMode
-            && dndMode                   == h.dndMode
-            && ulMemoryBalloonSize       == h.ulMemoryBalloonSize
-            && fPageFusionEnabled        == h.fPageFusionEnabled
-            && llGuestProperties         == h.llGuestProperties
-            && ioSettings                == h.ioSettings
-            && pciAttachments            == h.pciAttachments
-            && strDefaultFrontend        == h.strDefaultFrontend);
+        || (   strVersion                     == h.strVersion
+            && uuid                           == h.uuid
+            && fHardwareVirt                  == h.fHardwareVirt
+            && fNestedPaging                  == h.fNestedPaging
+            && fLargePages                    == h.fLargePages
+            && fVPID                          == h.fVPID
+            && fUnrestrictedExecution         == h.fUnrestrictedExecution
+            && fHardwareVirtForce             == h.fHardwareVirtForce
+            && fUseNativeApi                  == h.fUseNativeApi
+            && fPAE                           == h.fPAE
+            && enmLongMode                    == h.enmLongMode
+            && fTripleFaultReset              == h.fTripleFaultReset
+            && fAPIC                          == h.fAPIC
+            && fX2APIC                        == h.fX2APIC
+            && fIBPBOnVMExit                  == h.fIBPBOnVMExit
+            && fIBPBOnVMEntry                 == h.fIBPBOnVMEntry
+            && fSpecCtrl                      == h.fSpecCtrl
+            && fSpecCtrlByHost                == h.fSpecCtrlByHost
+            && fL1DFlushOnSched               == h.fL1DFlushOnSched
+            && fL1DFlushOnVMEntry             == h.fL1DFlushOnVMEntry
+            && fMDSClearOnSched               == h.fMDSClearOnSched
+            && fMDSClearOnVMEntry             == h.fMDSClearOnVMEntry
+            && fNestedHWVirt                  == h.fNestedHWVirt
+            && cCPUs                          == h.cCPUs
+            && fCpuHotPlug                    == h.fCpuHotPlug
+            && ulCpuExecutionCap              == h.ulCpuExecutionCap
+            && uCpuIdPortabilityLevel         == h.uCpuIdPortabilityLevel
+            && strCpuProfile                  == h.strCpuProfile
+            && fHPETEnabled                   == h.fHPETEnabled
+            && llCpus                         == h.llCpus
+            && llCpuIdLeafs                   == h.llCpuIdLeafs
+            && ulMemorySizeMB                 == h.ulMemorySizeMB
+            && mapBootOrder                   == h.mapBootOrder
+            && graphicsControllerType         == h.graphicsControllerType
+            && ulVRAMSizeMB                   == h.ulVRAMSizeMB
+            && cMonitors                      == h.cMonitors
+            && fAccelerate3D                  == h.fAccelerate3D
+            && fAccelerate2DVideo             == h.fAccelerate2DVideo
+            && firmwareType                   == h.firmwareType
+            && pointingHIDType                == h.pointingHIDType
+            && keyboardHIDType                == h.keyboardHIDType
+            && chipsetType                    == h.chipsetType
+            && paravirtProvider               == h.paravirtProvider
+            && strParavirtDebug               == h.strParavirtDebug
+            && fEmulatedUSBCardReader         == h.fEmulatedUSBCardReader
+            && vrdeSettings                   == h.vrdeSettings
+            && biosSettings                   == h.biosSettings
+            && usbSettings                    == h.usbSettings
+            && llNetworkAdapters              == h.llNetworkAdapters
+            && llSerialPorts                  == h.llSerialPorts
+            && llParallelPorts                == h.llParallelPorts
+            && audioAdapter                   == h.audioAdapter
+            && storage                        == h.storage
+            && llSharedFolders                == h.llSharedFolders
+            && clipboardMode                  == h.clipboardMode
+            && fClipboardFileTransfersEnabled == h.fClipboardFileTransfersEnabled
+            && dndMode                        == h.dndMode
+            && ulMemoryBalloonSize            == h.ulMemoryBalloonSize
+            && fPageFusionEnabled             == h.fPageFusionEnabled
+            && llGuestProperties              == h.llGuestProperties
+            && ioSettings                     == h.ioSettings
+            && pciAttachments                 == h.pciAttachments
+            && strDefaultFrontend             == h.strDefaultFrontend);
 }
 
@@ -4888,4 +4890,6 @@
                     throw ConfigFileError(this, pelmHwChild, N_("Invalid value '%s' in Clipboard/@mode attribute"), strTemp.c_str());
             }
+
+            pelmHwChild->getAttributeValue("fileTransfersEnabled", hw.fClipboardFileTransfersEnabled);
         }
         else if (pelmHwChild->nameEquals("DragAndDrop"))
@@ -6661,16 +6665,22 @@
     }
 
-    if (hw.clipboardMode != ClipboardMode_Disabled)
-    {
-        xml::ElementNode *pelmClip = pelmHardware->createChild("Clipboard");
-        const char *pcszClip;
-        switch (hw.clipboardMode)
-        {
-            default: /*case ClipboardMode_Disabled:*/ pcszClip = "Disabled"; break;
-            case ClipboardMode_HostToGuest: pcszClip = "HostToGuest"; break;
-            case ClipboardMode_GuestToHost: pcszClip = "GuestToHost"; break;
-            case ClipboardMode_Bidirectional: pcszClip = "Bidirectional"; break;
-        }
-        pelmClip->setAttribute("mode", pcszClip);
+    xml::ElementNode *pelmClip = pelmHardware->createChild("Clipboard");
+    if (pelmClip)
+    {
+        if (hw.clipboardMode != ClipboardMode_Disabled)
+        {
+            const char *pcszClip;
+            switch (hw.clipboardMode)
+            {
+                default: /*case ClipboardMode_Disabled:*/ pcszClip = "Disabled"; break;
+                case ClipboardMode_HostToGuest: pcszClip = "HostToGuest"; break;
+                case ClipboardMode_GuestToHost: pcszClip = "GuestToHost"; break;
+                case ClipboardMode_Bidirectional: pcszClip = "Bidirectional"; break;
+            }
+            pelmClip->setAttribute("mode", pcszClip);
+        }
+
+        if (hw.fClipboardFileTransfersEnabled)
+            pelmClip->setAttribute("fileTransfersEnabled", hw.fClipboardFileTransfersEnabled);
     }
 
