STDMETHODIMP SystemProperties::COMGETTER(DefaultVRDEExtPack)(BSTR *aExtPack)
{
    CheckComArgOutPointerValid(aExtPack);

    AutoCaller autoCaller(this);
    HRESULT hrc = autoCaller.rc();
    if (SUCCEEDED(hrc))
    {
        AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
        Utf8Str strExtPack(m->strDefaultVRDEExtPack);
        if (strExtPack.isNotEmpty())
        {
            if (strExtPack.equals(VBOXVRDP_KLUDGE_EXTPACK_NAME))
                hrc = S_OK;
            else
#ifdef VBOX_WITH_EXTPACK
                hrc = mParent->getExtPackManager()->checkVrdeExtPack(&strExtPack);
#else
                hrc = setError(E_FAIL, tr("The extension pack '%s' does not exist"), strExtPack.c_str());
#endif
        }
        else
        {
#ifdef VBOX_WITH_EXTPACK
            hrc = mParent->getExtPackManager()->getDefaultVrdeExtPack(&strExtPack);
#endif
            if (strExtPack.isEmpty())
            {
                /*
                 * Klugde - check if VBoxVRDP.dll/.so/.dylib is installed.
                 * This is hardcoded uglyness, sorry.
                 */
                char szPath[RTPATH_MAX];
                int vrc = RTPathAppPrivateArch(szPath, sizeof(szPath));
                if (RT_SUCCESS(vrc))
                    vrc = RTPathAppend(szPath, sizeof(szPath), "VBoxVRDP");
                if (RT_SUCCESS(vrc))
                    vrc = RTStrCat(szPath, sizeof(szPath), RTLdrGetSuff());
                if (RT_SUCCESS(vrc) && RTFileExists(szPath))
                {
                    /* Illegal extpack name, so no conflict. */
                    strExtPack = VBOXVRDP_KLUDGE_EXTPACK_NAME;
                }
            }
        }

        if (SUCCEEDED(hrc))
            strExtPack.cloneTo(aExtPack);
    }

    return S_OK;
}
STDMETHODIMP SystemProperties::COMSETTER(DefaultVRDEExtPack)(IN_BSTR aExtPack)
{
    CheckComArgNotNull(aExtPack);
    Utf8Str strExtPack(aExtPack);

    AutoCaller autoCaller(this);
    HRESULT hrc = autoCaller.rc();
    if (SUCCEEDED(hrc))
    {
        if (strExtPack.isNotEmpty())
        {
            if (strExtPack.equals(VBOXVRDP_KLUDGE_EXTPACK_NAME))
                hrc = S_OK;
            else
#ifdef VBOX_WITH_EXTPACK
                hrc = mParent->getExtPackManager()->checkVrdeExtPack(&strExtPack);
#else
                hrc = setError(E_FAIL, tr("The extension pack '%s' does not exist"), strExtPack.c_str());
#endif
        }
        if (SUCCEEDED(hrc))
        {
            AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
            hrc = setDefaultVRDEExtPack(aExtPack);
            if (SUCCEEDED(hrc))
            {
                /* VirtualBox::saveSettings() needs the VirtualBox write lock. */
                alock.release();
                AutoWriteLock vboxLock(mParent COMMA_LOCKVAL_SRC_POS);
                hrc = mParent->saveSettings();
            }
        }
    }

    return hrc;
}