Index: /trunk/src/VBox/Main/include/MediumImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MediumImpl.h	(revision 55871)
+++ /trunk/src/VBox/Main/include/MediumImpl.h	(revision 55872)
@@ -312,4 +312,7 @@
     bool    i_isPropertyForFilter(const com::Utf8Str &aName);
 
+    HRESULT i_getFilterProperties(std::vector<com::Utf8Str> &aReturnNames,
+                                  std::vector<com::Utf8Str> &aReturnValues);
+
     static DECLCALLBACK(void) i_vdErrorCall(void *pvUser, int rc, RT_SRC_POS_DECL,
                                             const char *pszFormat, va_list va);
Index: /trunk/src/VBox/Main/src-server/MediumImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/MediumImpl.cpp	(revision 55871)
+++ /trunk/src/VBox/Main/src-server/MediumImpl.cpp	(revision 55872)
@@ -5950,4 +5950,39 @@
 
     return it->second;
+}
+
+/**
+ * Returns all filter related properties.
+ *
+ * @returns COM status code.
+ * @param   aReturnNames    Where to store the properties names on success.
+ * @param   aReturnValues   Where to store the properties values on success.
+ */
+HRESULT Medium::i_getFilterProperties(std::vector<com::Utf8Str> &aReturnNames,
+                                      std::vector<com::Utf8Str> &aReturnValues)
+{
+    std::vector<com::Utf8Str> aPropNames;
+    std::vector<com::Utf8Str> aPropValues;
+    HRESULT hrc = getProperties(Utf8Str(""), aPropNames, aPropValues);
+
+    if (SUCCEEDED(hrc))
+    {
+        unsigned cReturnSize = 0;
+        aReturnNames.resize(0);
+        aReturnValues.resize(0);
+        for (unsigned idx = 0; idx < aPropNames.size(); idx++)
+        {
+            if (i_isPropertyForFilter(aPropNames[idx]))
+            {
+                aReturnNames.resize(cReturnSize + 1);
+                aReturnValues.resize(cReturnSize + 1);
+                aReturnNames[cReturnSize] = aPropNames[idx];
+                aReturnValues[cReturnSize] = aPropValues[idx];
+                cReturnSize++;
+            }
+        }
+    }
+
+    return hrc;
 }
 
@@ -8320,13 +8355,33 @@
     }
 
-    // now, at the end of this task (always asynchronous), save the settings
+    /* Copy any filter related settings over to the target. */
     if (SUCCEEDED(mrc))
     {
-        // save the settings
-        i_markRegistriesModified();
-        /* collect multiple errors */
-        eik.restore();
-        m->pVirtualBox->i_saveModifiedRegistries();
-        eik.fetch();
+        /* Copy any filter related settings over. */
+        ComObjPtr<Medium> pBase = i_getBase();
+        ComObjPtr<Medium> pTargetBase = pTarget->i_getBase();
+        std::vector<com::Utf8Str> aFilterPropNames;
+        std::vector<com::Utf8Str> aFilterPropValues;
+        mrc = pBase->i_getFilterProperties(aFilterPropNames, aFilterPropValues);
+        if (SUCCEEDED(mrc))
+        {
+            /* Go through the properties and add them to the target medium. */
+            for (unsigned idx = 0; idx < aFilterPropNames.size(); idx++)
+            {
+                mrc = pTargetBase->i_setPropertyDirect(aFilterPropNames[idx], aFilterPropValues[idx]);
+                if (FAILED(mrc)) break;
+            }
+
+            // now, at the end of this task (always asynchronous), save the settings
+            if (SUCCEEDED(mrc))
+            {
+                // save the settings
+                i_markRegistriesModified();
+                /* collect multiple errors */
+                eik.restore();
+                m->pVirtualBox->i_saveModifiedRegistries();
+                eik.fetch();
+            }
+        }
     }
 
