Index: /trunk/src/VBox/Main/include/MediumImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MediumImpl.h	(revision 51887)
+++ /trunk/src/VBox/Main/include/MediumImpl.h	(revision 51888)
@@ -283,4 +283,6 @@
     Utf8Str i_vdError(int aVRC);
 
+    bool    i_isPropertyForFilter(const com::Utf8Str &aName);
+
     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 51887)
+++ /trunk/src/VBox/Main/src-server/MediumImpl.cpp	(revision 51888)
@@ -2197,5 +2197,6 @@
 
     settings::StringsMap::iterator it = m->mapProperties.find(aName);
-    if (!aName.startsWith("Special/"))
+    if (   !aName.startsWith("Special/")
+        && !i_isPropertyForFilter(aName))
     {
         if (it == m->mapProperties.end())
@@ -2263,4 +2264,5 @@
         Utf8Str strName(aNames[i]);
         if (   !strName.startsWith("Special/")
+            && !i_isPropertyForFilter(strName)
             && m->mapProperties.find(strName) == m->mapProperties.end())
             return setError(VBOX_E_OBJECT_NOT_FOUND,
@@ -2276,5 +2278,6 @@
         Utf8Str strValue(aValues[i]);
         settings::StringsMap::iterator it = m->mapProperties.find(strName);
-        if (!strName.startsWith("Special/"))
+        if (   !strName.startsWith("Special/")
+            && !i_isPropertyForFilter(strName))
         {
             AssertReturn(it != m->mapProperties.end(), E_FAIL);
@@ -6244,4 +6247,42 @@
 
     return devType;
+}
+
+/**
+ * Internal method which checks whether a property name is for a filter plugin.
+ */
+bool Medium::i_isPropertyForFilter(const com::Utf8Str &aName)
+{
+    /* If the name contains "/" use the part before as a filter name and lookup the filter. */
+    size_t offSlash;
+    if ((offSlash = aName.find("/", 0)) != aName.npos)
+    {
+        com::Utf8Str strFilter;
+        com::Utf8Str strKey;
+
+        HRESULT rc = strFilter.assignEx(aName, 0, offSlash);
+        if (FAILED(rc))
+            return false;
+
+        rc = strKey.assignEx(aName, offSlash + 1, aName.length() - offSlash - 1); /* Skip slash */
+        if (FAILED(rc))
+            return false;
+
+        VDFILTERINFO FilterInfo;
+        int vrc = VDFilterInfoOne(strFilter.c_str(), &FilterInfo);
+        if (RT_SUCCESS(vrc))
+        {
+            /* Check that the property exists. */
+            PCVDCONFIGINFO paConfig = FilterInfo.paConfigInfo;
+            while (paConfig->pszKey)
+            {
+                if (strKey.equals(paConfig->pszKey))
+                    return true;
+                paConfig++;
+            }
+        }
+    }
+
+    return false;
 }
 
Index: /trunk/src/VBox/Main/src-server/SystemPropertiesImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/SystemPropertiesImpl.cpp	(revision 51887)
+++ /trunk/src/VBox/Main/src-server/SystemPropertiesImpl.cpp	(revision 51888)
@@ -112,4 +112,23 @@
 
     HRESULT rc = S_OK;
+
+# ifdef VBOX_WITH_EXTPACK
+    /* Load all VD plugins from all extension packs first. */
+    /** @todo: Make generic for 4.4 (requires interface changes). */
+    static const Utf8Str strExtPackPuel("Oracle VM VirtualBox Extension Pack");
+    static const char *s_pszVDPlugin = "VDPluginCrypt";
+    if (mParent->i_getExtPackManager()->i_isExtPackUsable(strExtPackPuel.c_str()))
+    {
+        Utf8Str strPlugin;
+        rc = mParent->i_getExtPackManager()->i_getLibraryPathForExtPack(s_pszVDPlugin, &strExtPackPuel, &strPlugin);
+        if (SUCCEEDED(rc))
+        {
+            int vrc = VDPluginLoadFromFilename(strPlugin.c_str());
+            NOREF(vrc); /** @todo: Don't ignore errors. */
+        }
+        else
+            rc = S_OK; /* ignore errors */
+    }
+# endif
 
     /* Fetch info of all available hd backends. */
Index: /trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp	(revision 51887)
+++ /trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp	(revision 51888)
@@ -432,4 +432,16 @@
         unconst(m->pAutostartDb) = new AutostartDb;
 
+#ifdef VBOX_WITH_EXTPACK
+        /*
+         * Initialize extension pack manager before system properties because
+         * it is required for the VD plugins.
+         */
+        rc = unconst(m->ptrExtPackManager).createObject();
+        if (SUCCEEDED(rc))
+            rc = m->ptrExtPackManager->initExtPackManager(this, VBOXEXTPACKCTX_PER_USER_DAEMON);
+        if (FAILED(rc))
+            throw rc;
+#endif
+
         /* create the system properties object, someone may need it too */
         unconst(m->pSystemProperties).createObject();
@@ -507,13 +519,4 @@
             rc = m->pEventSource->init();
         if (FAILED(rc)) throw rc;
-
-#ifdef VBOX_WITH_EXTPACK
-        /* extension manager */
-        rc = unconst(m->ptrExtPackManager).createObject();
-        if (SUCCEEDED(rc))
-            rc = m->ptrExtPackManager->initExtPackManager(this, VBOXEXTPACKCTX_PER_USER_DAEMON);
-        if (FAILED(rc))
-            throw rc;
-#endif
     }
     catch (HRESULT err)
