Index: /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h	(revision 75426)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h	(revision 75427)
@@ -89,4 +89,15 @@
 template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::MenuWindowActionType>();
 #endif /* VBOX_WS_MAC */
+template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral>();
+template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem>();
+template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay>();
+template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage>();
+template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio>();
+template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork>();
+template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial>();
+template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb>();
+template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders>();
+template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface>();
+template<> SHARED_LIBRARY_STUFF bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription>();
 template<> SHARED_LIBRARY_STUFF bool canConvert<UIToolType>();
 template<> SHARED_LIBRARY_STUFF bool canConvert<UIVisualStateType>();
@@ -164,4 +175,26 @@
 template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::MenuWindowActionType fromInternalString<UIExtraDataMetaDefs::MenuWindowActionType>(const QString &strMenuWindowActionType);
 #endif /* VBOX_WS_MAC */
+template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral &enmDetailsElementOptionTypeGeneral);
+template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral>(const QString &strDetailsElementOptionTypeGeneral);
+template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeSystem &enmDetailsElementOptionTypeSystem);
+template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeSystem fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem>(const QString &strDetailsElementOptionTypeSystem);
+template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay &enmDetailsElementOptionTypeDisplay);
+template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay>(const QString &strDetailsElementOptionTypeDisplay);
+template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeStorage &enmDetailsElementOptionTypeStorage);
+template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeStorage fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage>(const QString &strDetailsElementOptionTypeStorage);
+template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeAudio &enmDetailsElementOptionTypeAudio);
+template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeAudio fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio>(const QString &strDetailsElementOptionTypeAudio);
+template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork &enmDetailsElementOptionTypeNetwork);
+template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork>(const QString &strDetailsElementOptionTypeNetwork);
+template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeSerial &enmDetailsElementOptionTypeSerial);
+template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeSerial fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial>(const QString &strDetailsElementOptionTypeSerial);
+template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeUsb &enmDetailsElementOptionTypeUsb);
+template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeUsb fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb>(const QString &strDetailsElementOptionTypeUsb);
+template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders &enmDetailsElementOptionTypeSharedFolders);
+template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders>(const QString &strDetailsElementOptionTypeSharedFolders);
+template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface &enmDetailsElementOptionTypeUserInterface);
+template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface>(const QString &strDetailsElementOptionTypeUserInterface);
+template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeDescription &enmDetailsElementOptionTypeDescription);
+template<> SHARED_LIBRARY_STUFF UIExtraDataMetaDefs::DetailsElementOptionTypeDescription fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription>(const QString &strDetailsElementOptionTypeDescription);
 template<> SHARED_LIBRARY_STUFF QString toInternalString(const UIToolType &enmToolType);
 template<> SHARED_LIBRARY_STUFF UIToolType fromInternalString<UIToolType>(const QString &strToolType);
Index: /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp	(revision 75426)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp	(revision 75427)
@@ -53,4 +53,15 @@
 template<> bool canConvert<UIExtraDataMetaDefs::MenuWindowActionType>() { return true; }
 #endif /* VBOX_WS_MAC */
+template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral>() { return true; }
+template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem>() { return true; }
+template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay>() { return true; }
+template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage>() { return true; }
+template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio>() { return true; }
+template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork>() { return true; }
+template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial>() { return true; }
+template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb>() { return true; }
+template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders>() { return true; }
+template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface>() { return true; }
+template<> bool canConvert<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription>() { return true; }
 template<> bool canConvert<UIToolType>() { return true; }
 template<> bool canConvert<UIVisualStateType>() { return true; }
@@ -870,4 +881,394 @@
 #endif /* VBOX_WS_MAC */
 
+/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral: */
+template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral &enmDetailsElementOptionTypeGeneral)
+{
+    QString strResult;
+    switch (enmDetailsElementOptionTypeGeneral)
+    {
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Name:     strResult = "Name"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_OS:       strResult = "OS"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Location: strResult = "Location"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Groups:   strResult = "Groups"; break;
+        default:
+        {
+            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeGeneral));
+            break;
+        }
+    }
+    return strResult;
+}
+
+/* UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral <= QString: */
+template<> UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral>(const QString &strDetailsElementOptionTypeGeneral)
+{
+    /* Here we have some fancy stuff allowing us
+     * to search through the keys using 'case-insensitive' rule: */
+    QStringList keys;   QList<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral> values;
+    keys << "Name";     values << UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Name;
+    keys << "OS";       values << UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_OS;
+    keys << "Location"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Location;
+    keys << "Groups";   values << UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Groups;
+    /* Invalid type for unknown words: */
+    if (!keys.contains(strDetailsElementOptionTypeGeneral, Qt::CaseInsensitive))
+        return UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Invalid;
+    /* Corresponding type for known words: */
+    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeGeneral, Qt::CaseInsensitive)));
+}
+
+/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeSystem: */
+template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeSystem &enmDetailsElementOptionTypeSystem)
+{
+    QString strResult;
+    switch (enmDetailsElementOptionTypeSystem)
+    {
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_RAM:             strResult = "RAM"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_CPUCount:        strResult = "CPUCount"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_CPUExecutionCap: strResult = "CPUExecutionCap"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_BootOrder:       strResult = "BootOrder"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_ChipsetType:     strResult = "ChipsetType"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Firmware:        strResult = "Firmware"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Acceleration:    strResult = "Acceleration"; break;
+        default:
+        {
+            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeSystem));
+            break;
+        }
+    }
+    return strResult;
+}
+
+/* UIExtraDataMetaDefs::DetailsElementOptionTypeSystem <= QString: */
+template<> UIExtraDataMetaDefs::DetailsElementOptionTypeSystem fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem>(const QString &strDetailsElementOptionTypeSystem)
+{
+    /* Here we have some fancy stuff allowing us
+     * to search through the keys using 'case-insensitive' rule: */
+    QStringList keys;          QList<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem> values;
+    keys << "RAM";             values << UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_RAM;
+    keys << "CPUCount";        values << UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_CPUCount;
+    keys << "CPUExecutionCap"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_CPUExecutionCap;
+    keys << "BootOrder";       values << UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_BootOrder;
+    keys << "ChipsetType";     values << UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_ChipsetType;
+    keys << "Firmware";        values << UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Firmware;
+    keys << "Acceleration";    values << UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Acceleration;
+    /* Invalid type for unknown words: */
+    if (!keys.contains(strDetailsElementOptionTypeSystem, Qt::CaseInsensitive))
+        return UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Invalid;
+    /* Corresponding type for known words: */
+    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeSystem, Qt::CaseInsensitive)));
+}
+
+/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay: */
+template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay &enmDetailsElementOptionTypeDisplay)
+{
+    QString strResult;
+    switch (enmDetailsElementOptionTypeDisplay)
+    {
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_VRAM:         strResult = "VRAM"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_ScreenCount:  strResult = "ScreenCount"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_ScaleFactor:  strResult = "ScaleFactor"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Acceleration: strResult = "Acceleration"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_VRDE:         strResult = "VRDE"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Recording:    strResult = "Recording"; break;
+        default:
+        {
+            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeDisplay));
+            break;
+        }
+    }
+    return strResult;
+}
+
+/* UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay <= QString: */
+template<> UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay>(const QString &strDetailsElementOptionTypeDisplay)
+{
+    /* Here we have some fancy stuff allowing us
+     * to search through the keys using 'case-insensitive' rule: */
+    QStringList keys;       QList<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay> values;
+    keys << "VRAM";         values << UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_VRAM;
+    keys << "ScreenCount";  values << UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_ScreenCount;
+    keys << "ScaleFactor";  values << UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_ScaleFactor;
+    keys << "Acceleration"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Acceleration;
+    keys << "VRDE";         values << UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_VRDE;
+    keys << "Recording";    values << UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Recording;
+    /* Invalid type for unknown words: */
+    if (!keys.contains(strDetailsElementOptionTypeDisplay, Qt::CaseInsensitive))
+        return UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Invalid;
+    /* Corresponding type for known words: */
+    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeDisplay, Qt::CaseInsensitive)));
+}
+
+/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeStorage: */
+template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeStorage &enmDetailsElementOptionTypeStorage)
+{
+    QString strResult;
+    switch (enmDetailsElementOptionTypeStorage)
+    {
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_HardDisks:      strResult = "HardDisks"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_OpticalDevices: strResult = "OpticalDevices"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_FloppyDevices:  strResult = "FloppyDevices"; break;
+        default:
+        {
+            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeStorage));
+            break;
+        }
+    }
+    return strResult;
+}
+
+/* UIExtraDataMetaDefs::DetailsElementOptionTypeStorage <= QString: */
+template<> UIExtraDataMetaDefs::DetailsElementOptionTypeStorage fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage>(const QString &strDetailsElementOptionTypeStorage)
+{
+    /* Here we have some fancy stuff allowing us
+     * to search through the keys using 'case-insensitive' rule: */
+    QStringList keys;         QList<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage> values;
+    keys << "HardDisks";      values << UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_HardDisks;
+    keys << "OpticalDevices"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_OpticalDevices;
+    keys << "FloppyDevices";  values << UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_FloppyDevices;
+    /* Invalid type for unknown words: */
+    if (!keys.contains(strDetailsElementOptionTypeStorage, Qt::CaseInsensitive))
+        return UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_Invalid;
+    /* Corresponding type for known words: */
+    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeStorage, Qt::CaseInsensitive)));
+}
+
+/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeAudio: */
+template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeAudio &enmDetailsElementOptionTypeAudio)
+{
+    QString strResult;
+    switch (enmDetailsElementOptionTypeAudio)
+    {
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Driver:     strResult = "Driver"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Controller: strResult = "Controller"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_IO:         strResult = "IO"; break;
+        default:
+        {
+            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeAudio));
+            break;
+        }
+    }
+    return strResult;
+}
+
+/* UIExtraDataMetaDefs::DetailsElementOptionTypeAudio <= QString: */
+template<> UIExtraDataMetaDefs::DetailsElementOptionTypeAudio fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio>(const QString &strDetailsElementOptionTypeAudio)
+{
+    /* Here we have some fancy stuff allowing us
+     * to search through the keys using 'case-insensitive' rule: */
+    QStringList keys;     QList<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio> values;
+    keys << "Driver";     values << UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Driver;
+    keys << "Controller"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Controller;
+    keys << "IO";         values << UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_IO;
+    /* Invalid type for unknown words: */
+    if (!keys.contains(strDetailsElementOptionTypeAudio, Qt::CaseInsensitive))
+        return UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Invalid;
+    /* Corresponding type for known words: */
+    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeAudio, Qt::CaseInsensitive)));
+}
+
+/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork: */
+template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork &enmDetailsElementOptionTypeNetwork)
+{
+    QString strResult;
+    switch (enmDetailsElementOptionTypeNetwork)
+    {
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_NotAttached:     strResult = "NotAttached"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_NAT:             strResult = "NAT"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_BridgetAdapter:  strResult = "BridgetAdapter"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_InternalNetwork: strResult = "InternalNetwork"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_HostOnlyAdapter: strResult = "HostOnlyAdapter"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_GenericDriver:   strResult = "GenericDriver"; break;
+        default:
+        {
+            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeNetwork));
+            break;
+        }
+    }
+    return strResult;
+}
+
+/* UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork <= QString: */
+template<> UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork>(const QString &strDetailsElementOptionTypeNetwork)
+{
+    /* Here we have some fancy stuff allowing us
+     * to search through the keys using 'case-insensitive' rule: */
+    QStringList keys;          QList<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork> values;
+    keys << "NotAttached";     values << UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_NotAttached;
+    keys << "NAT";             values << UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_NAT;
+    keys << "BridgetAdapter";  values << UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_BridgetAdapter;
+    keys << "InternalNetwork"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_InternalNetwork;
+    keys << "HostOnlyAdapter"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_HostOnlyAdapter;
+    keys << "GenericDriver";   values << UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_GenericDriver;
+    /* Invalid type for unknown words: */
+    if (!keys.contains(strDetailsElementOptionTypeNetwork, Qt::CaseInsensitive))
+        return UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_Invalid;
+    /* Corresponding type for known words: */
+    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeNetwork, Qt::CaseInsensitive)));
+}
+
+/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeSerial: */
+template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeSerial &enmDetailsElementOptionTypeSerial)
+{
+    QString strResult;
+    switch (enmDetailsElementOptionTypeSerial)
+    {
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Disconnected: strResult = "Disconnected"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_HostPipe:     strResult = "HostPipe"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_HostDevice:   strResult = "HostDevice"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_RawFile:      strResult = "RawFile"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_TCP:          strResult = "TCP"; break;
+        default:
+        {
+            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeSerial));
+            break;
+        }
+    }
+    return strResult;
+}
+
+/* UIExtraDataMetaDefs::DetailsElementOptionTypeSerial <= QString: */
+template<> UIExtraDataMetaDefs::DetailsElementOptionTypeSerial fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial>(const QString &strDetailsElementOptionTypeSerial)
+{
+    /* Here we have some fancy stuff allowing us
+     * to search through the keys using 'case-insensitive' rule: */
+    QStringList keys;       QList<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial> values;
+    keys << "Disconnected"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Disconnected;
+    keys << "HostPipe";     values << UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_HostPipe;
+    keys << "HostDevice";   values << UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_HostDevice;
+    keys << "RawFile";      values << UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_RawFile;
+    keys << "TCP";          values << UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_TCP;
+    /* Invalid type for unknown words: */
+    if (!keys.contains(strDetailsElementOptionTypeSerial, Qt::CaseInsensitive))
+        return UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Invalid;
+    /* Corresponding type for known words: */
+    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeSerial, Qt::CaseInsensitive)));
+}
+
+/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeUsb: */
+template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeUsb &enmDetailsElementOptionTypeUsb)
+{
+    QString strResult;
+    switch (enmDetailsElementOptionTypeUsb)
+    {
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Controller:    strResult = "Controller"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_DeviceFilters: strResult = "DeviceFilters"; break;
+        default:
+        {
+            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeUsb));
+            break;
+        }
+    }
+    return strResult;
+}
+
+/* UIExtraDataMetaDefs::DetailsElementOptionTypeUsb <= QString: */
+template<> UIExtraDataMetaDefs::DetailsElementOptionTypeUsb fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb>(const QString &strDetailsElementOptionTypeUsb)
+{
+    /* Here we have some fancy stuff allowing us
+     * to search through the keys using 'case-insensitive' rule: */
+    QStringList keys;        QList<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb> values;
+    keys << "Controller";    values << UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Controller;
+    keys << "DeviceFilters"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_DeviceFilters;
+    /* Invalid type for unknown words: */
+    if (!keys.contains(strDetailsElementOptionTypeUsb, Qt::CaseInsensitive))
+        return UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Invalid;
+    /* Corresponding type for known words: */
+    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeUsb, Qt::CaseInsensitive)));
+}
+
+/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders: */
+template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders &enmDetailsElementOptionTypeSharedFolders)
+{
+    QString strResult;
+    switch (enmDetailsElementOptionTypeSharedFolders)
+    {
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Summary: strResult = "Summary"; break;
+        default:
+        {
+            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeSharedFolders));
+            break;
+        }
+    }
+    return strResult;
+}
+
+/* UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders <= QString: */
+template<> UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders>(const QString &strDetailsElementOptionTypeSharedFolders)
+{
+    /* Here we have some fancy stuff allowing us
+     * to search through the keys using 'case-insensitive' rule: */
+    QStringList keys;  QList<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders> values;
+    keys << "Summary"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Summary;
+    /* Invalid type for unknown words: */
+    if (!keys.contains(strDetailsElementOptionTypeSharedFolders, Qt::CaseInsensitive))
+        return UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Invalid;
+    /* Corresponding type for known words: */
+    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeSharedFolders, Qt::CaseInsensitive)));
+}
+
+/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface: */
+template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface &enmDetailsElementOptionTypeUserInterface)
+{
+    QString strResult;
+    switch (enmDetailsElementOptionTypeUserInterface)
+    {
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_MenuBar:     strResult = "MenuBar"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_StatusBar:   strResult = "StatusBar"; break;
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_MiniToolbar: strResult = "MiniToolbar"; break;
+        default:
+        {
+            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeUserInterface));
+            break;
+        }
+    }
+    return strResult;
+}
+
+/* UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface <= QString: */
+template<> UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface>(const QString &strDetailsElementOptionTypeUserInterface)
+{
+    /* Here we have some fancy stuff allowing us
+     * to search through the keys using 'case-insensitive' rule: */
+    QStringList keys;      QList<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface> values;
+    keys << "MenuBar";     values << UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_MenuBar;
+    keys << "StatusBar";   values << UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_StatusBar;
+    keys << "MiniToolbar"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_MiniToolbar;
+    /* Invalid type for unknown words: */
+    if (!keys.contains(strDetailsElementOptionTypeUserInterface, Qt::CaseInsensitive))
+        return UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_Invalid;
+    /* Corresponding type for known words: */
+    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeUserInterface, Qt::CaseInsensitive)));
+}
+
+/* QString <= UIExtraDataMetaDefs::DetailsElementOptionTypeDescription: */
+template<> QString toInternalString(const UIExtraDataMetaDefs::DetailsElementOptionTypeDescription &enmDetailsElementOptionTypeDescription)
+{
+    QString strResult;
+    switch (enmDetailsElementOptionTypeDescription)
+    {
+        case UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Summary: strResult = "Summary"; break;
+        default:
+        {
+            AssertMsgFailed(("No text for details element option type=%d", enmDetailsElementOptionTypeDescription));
+            break;
+        }
+    }
+    return strResult;
+}
+
+/* UIExtraDataMetaDefs::DetailsElementOptionTypeDescription <= QString: */
+template<> UIExtraDataMetaDefs::DetailsElementOptionTypeDescription fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription>(const QString &strDetailsElementOptionTypeDescription)
+{
+    /* Here we have some fancy stuff allowing us
+     * to search through the keys using 'case-insensitive' rule: */
+    QStringList keys;  QList<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription> values;
+    keys << "Summary"; values << UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Summary;
+    /* Invalid type for unknown words: */
+    if (!keys.contains(strDetailsElementOptionTypeDescription, Qt::CaseInsensitive))
+        return UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Invalid;
+    /* Corresponding type for known words: */
+    return values.at(keys.indexOf(QRegExp(strDetailsElementOptionTypeDescription, Qt::CaseInsensitive)));
+}
+
 /* QString <= UIToolType: */
 template<> QString toInternalString(const UIToolType &enmToolType)
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 75426)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 75427)
@@ -417,4 +417,6 @@
 {
     Q_OBJECT;
+
+    /* Menu related stuff: */
     Q_ENUMS(MenuType);
     Q_ENUMS(MenuApplicationActionType);
@@ -430,4 +432,17 @@
     Q_ENUMS(MenuWindowActionType);
 #endif
+
+    /* Details pane related stuff: */
+    Q_ENUMS(DetailsElementOptionTypeGeneral);
+    Q_ENUMS(DetailsElementOptionTypeSystem);
+    Q_ENUMS(DetailsElementOptionTypeDisplay);
+    Q_ENUMS(DetailsElementOptionTypeStorage);
+    Q_ENUMS(DetailsElementOptionTypeAudio);
+    Q_ENUMS(DetailsElementOptionTypeNetwork);
+    Q_ENUMS(DetailsElementOptionTypeSerial);
+    Q_ENUMS(DetailsElementOptionTypeUsb);
+    Q_ENUMS(DetailsElementOptionTypeSharedFolders);
+    Q_ENUMS(DetailsElementOptionTypeUserInterface);
+    Q_ENUMS(DetailsElementOptionTypeDescription);
 
 public:
@@ -602,4 +617,123 @@
     };
 #endif /* VBOX_WS_MAC */
+
+
+    /** VirtualBox Manager UI: Details element: "General" option types. */
+    enum DetailsElementOptionTypeGeneral
+    {
+        DetailsElementOptionTypeGeneral_Invalid  = 0,
+        DetailsElementOptionTypeGeneral_Name     = RT_BIT(0),
+        DetailsElementOptionTypeGeneral_OS       = RT_BIT(1),
+        DetailsElementOptionTypeGeneral_Location = RT_BIT(2),
+        DetailsElementOptionTypeGeneral_Groups   = RT_BIT(3),
+        DetailsElementOptionTypeGeneral_Default  = 0xFFFF
+    };
+
+    /** VirtualBox Manager UI: Details element: "System" option types. */
+    enum DetailsElementOptionTypeSystem
+    {
+        DetailsElementOptionTypeSystem_Invalid         = 0,
+        DetailsElementOptionTypeSystem_RAM             = RT_BIT(0),
+        DetailsElementOptionTypeSystem_CPUCount        = RT_BIT(1),
+        DetailsElementOptionTypeSystem_CPUExecutionCap = RT_BIT(2),
+        DetailsElementOptionTypeSystem_BootOrder       = RT_BIT(3),
+        DetailsElementOptionTypeSystem_ChipsetType     = RT_BIT(4),
+        DetailsElementOptionTypeSystem_Firmware        = RT_BIT(5),
+        DetailsElementOptionTypeSystem_Acceleration    = RT_BIT(6),
+        DetailsElementOptionTypeSystem_Default         = 0xFFFF
+    };
+
+    /** VirtualBox Manager UI: Details element: "Display" option types. */
+    enum DetailsElementOptionTypeDisplay
+    {
+        DetailsElementOptionTypeDisplay_Invalid      = 0,
+        DetailsElementOptionTypeDisplay_VRAM         = RT_BIT(0),
+        DetailsElementOptionTypeDisplay_ScreenCount  = RT_BIT(1),
+        DetailsElementOptionTypeDisplay_ScaleFactor  = RT_BIT(2),
+        DetailsElementOptionTypeDisplay_Acceleration = RT_BIT(3),
+        DetailsElementOptionTypeDisplay_VRDE         = RT_BIT(4),
+        DetailsElementOptionTypeDisplay_Recording    = RT_BIT(5),
+        DetailsElementOptionTypeDisplay_Default      = 0xFFFF
+    };
+
+    /** VirtualBox Manager UI: Details element: "Storage" option types. */
+    enum DetailsElementOptionTypeStorage
+    {
+        DetailsElementOptionTypeStorage_Invalid        = 0,
+        DetailsElementOptionTypeStorage_HardDisks      = RT_BIT(0),
+        DetailsElementOptionTypeStorage_OpticalDevices = RT_BIT(1),
+        DetailsElementOptionTypeStorage_FloppyDevices  = RT_BIT(2),
+        DetailsElementOptionTypeStorage_Default        = 0xFFFF
+    };
+
+    /** VirtualBox Manager UI: Details element: "Audio" option types. */
+    enum DetailsElementOptionTypeAudio
+    {
+        DetailsElementOptionTypeAudio_Invalid    = 0,
+        DetailsElementOptionTypeAudio_Driver     = RT_BIT(0),
+        DetailsElementOptionTypeAudio_Controller = RT_BIT(1),
+        DetailsElementOptionTypeAudio_IO         = RT_BIT(2),
+        DetailsElementOptionTypeAudio_Default    = 0xFFFF
+    };
+
+    /** VirtualBox Manager UI: Details element: "Network" option types. */
+    enum DetailsElementOptionTypeNetwork
+    {
+        DetailsElementOptionTypeNetwork_Invalid         = 0,
+        DetailsElementOptionTypeNetwork_NotAttached     = RT_BIT(0),
+        DetailsElementOptionTypeNetwork_NAT             = RT_BIT(1),
+        DetailsElementOptionTypeNetwork_BridgetAdapter  = RT_BIT(2),
+        DetailsElementOptionTypeNetwork_InternalNetwork = RT_BIT(3),
+        DetailsElementOptionTypeNetwork_HostOnlyAdapter = RT_BIT(4),
+        DetailsElementOptionTypeNetwork_GenericDriver   = RT_BIT(5),
+        DetailsElementOptionTypeNetwork_Default         = 0xFFFF
+    };
+
+    /** VirtualBox Manager UI: Details element: "Serial" option types. */
+    enum DetailsElementOptionTypeSerial
+    {
+        DetailsElementOptionTypeSerial_Invalid      = 0,
+        DetailsElementOptionTypeSerial_Disconnected = RT_BIT(0),
+        DetailsElementOptionTypeSerial_HostPipe     = RT_BIT(1),
+        DetailsElementOptionTypeSerial_HostDevice   = RT_BIT(2),
+        DetailsElementOptionTypeSerial_RawFile      = RT_BIT(3),
+        DetailsElementOptionTypeSerial_TCP          = RT_BIT(4),
+        DetailsElementOptionTypeSerial_Default      = 0xFFFF
+    };
+
+    /** VirtualBox Manager UI: Details element: "USB" option types. */
+    enum DetailsElementOptionTypeUsb
+    {
+        DetailsElementOptionTypeUsb_Invalid       = 0,
+        DetailsElementOptionTypeUsb_Controller    = RT_BIT(0),
+        DetailsElementOptionTypeUsb_DeviceFilters = RT_BIT(1),
+        DetailsElementOptionTypeUsb_Default       = 0xFFFF
+    };
+
+    /** VirtualBox Manager UI: Details element: "SharedFolders" option types. */
+    enum DetailsElementOptionTypeSharedFolders
+    {
+        DetailsElementOptionTypeSharedFolders_Invalid = 0,
+        DetailsElementOptionTypeSharedFolders_Summary = RT_BIT(0),
+        DetailsElementOptionTypeSharedFolders_Default = 0xFFFF
+    };
+
+    /** VirtualBox Manager UI: Details element: "UserInterface" option types. */
+    enum DetailsElementOptionTypeUserInterface
+    {
+        DetailsElementOptionTypeUserInterface_Invalid     = 0,
+        DetailsElementOptionTypeUserInterface_MenuBar     = RT_BIT(0),
+        DetailsElementOptionTypeUserInterface_StatusBar   = RT_BIT(1),
+        DetailsElementOptionTypeUserInterface_MiniToolbar = RT_BIT(2),
+        DetailsElementOptionTypeUserInterface_Default     = 0xFFFF
+    };
+
+    /** VirtualBox Manager UI: Details element: "Description" option types. */
+    enum DetailsElementOptionTypeDescription
+    {
+        DetailsElementOptionTypeDescription_Invalid = 0,
+        DetailsElementOptionTypeDescription_Summary = RT_BIT(0),
+        DetailsElementOptionTypeDescription_Default = 0xFFFF
+    };
 };
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 75426)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 75427)
@@ -2919,4 +2919,16 @@
 }
 
+QStringList UIExtraDataManager::vboxManagerDetailsPaneElementOptions(DetailsElementType enmElementType)
+{
+    /* Compose full key from GUI_Details_Elements and enmElementType: */
+    QString strElementType = gpConverter->toInternalString(enmElementType);
+    AssertReturn(!strElementType.isEmpty(), QStringList());
+    strElementType[0] = strElementType.at(0).toUpper();
+    const QString strFullKey = QString("%1/%2").arg(GUI_Details_Elements).arg(strElementType);
+
+    /* Returns option list: */
+    return extraDataStringList(strFullKey);
+}
+
 bool UIExtraDataManager::snapshotManagerDetailsExpanded()
 {
@@ -4583,4 +4595,13 @@
             else if (strKey == GUI_Input_HostKeyCombination)
                 emit sigRuntimeUIHostKeyCombinationChange();
+            /* Details options: */
+            else if (strKey.startsWith(QString(GUI_Details_Elements) + '/'))
+            {
+                QString strLeftover = strKey;
+                strLeftover.remove(QString(GUI_Details_Elements) + '/');
+                const DetailsElementType enmType = gpConverter->fromInternalString<DetailsElementType>(strLeftover);
+                if (enmType != DetailsElementType_Invalid)
+                    emit sigDetailsOptionsChange(enmType);
+            }
         }
     }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 75426)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 75427)
@@ -71,4 +71,7 @@
     /** Notifies about Runtime UI host-key combination change. */
     void sigRuntimeUIHostKeyCombinationChange();
+
+    /** Notifies about VirtualBox Manager / Details pane options change. */
+    void sigDetailsOptionsChange(DetailsElementType enmType);
 
     /** Notifies about menu-bar configuration change. */
@@ -341,4 +344,7 @@
         /** Defines selector-window details-pane' preview update @a interval. */
         void setSelectorWindowPreviewUpdateInterval(PreviewUpdateIntervalType interval);
+
+        /** Returns VirtualBox Manager / Details pane options for certain @a enmElementType. */
+        QStringList vboxManagerDetailsPaneElementOptions(DetailsElementType enmElementType);
     /** @} */
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetails.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetails.cpp	(revision 75426)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetails.cpp	(revision 75427)
@@ -27,4 +27,5 @@
 # include "UIDetailsModel.h"
 # include "UIDetailsView.h"
+# include "UIExtraDataManager.h"
 
 #endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
@@ -73,4 +74,8 @@
     }
 
+    /* Extra-data events connections: */
+    connect(gEDataManager, &UIExtraDataManager::sigDetailsOptionsChange,
+            m_pDetailsModel, &UIDetailsModel::sltHandleExtraDataOptionsChange);
+
     /* Setup details-model connections: */
     connect(m_pDetailsModel, &UIDetailsModel::sigRootItemMinimumWidthHintChanged,
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElement.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElement.cpp	(revision 75426)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElement.cpp	(revision 75427)
@@ -34,4 +34,5 @@
 # include "UIDetailsSet.h"
 # include "UIDetailsModel.h"
+# include "UIExtraDataManager.h"
 # include "UIGraphicsRotatorButton.h"
 # include "UIGraphicsTextPane.h"
@@ -249,4 +250,9 @@
 }
 
+QStringList UIDetailsElement::extraDataOptions() const
+{
+    return gEDataManager->vboxManagerDetailsPaneElementOptions(elementType());
+}
+
 const CMachine &UIDetailsElement::machine()
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElement.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElement.h	(revision 75426)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElement.h	(revision 75427)
@@ -155,4 +155,7 @@
         /** Returns the description of the item. */
         virtual QString description() const /* override */;
+
+        /** Returns extra-data options. */
+        QStringList extraDataOptions() const;
 
         /** Returns cached machine reference. */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElements.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElements.cpp	(revision 75426)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElements.cpp	(revision 75427)
@@ -242,31 +242,37 @@
     {
         /* Name: */
-        table << UITextTableLine(QApplication::translate("UIDetails", "Name", "details (general)"), comMachine.GetName());
-
-        /* Operating System: */
-        table << UITextTableLine(QApplication::translate("UIDetails", "Operating System", "details (general)"),
-                                 vboxGlobal().vmGuestOSTypeDescription(comMachine.GetOSTypeId()));
-
-        /* Settings File Location: */
-        table << UITextTableLine(QApplication::translate("UIDetails", "Settings File Location", "details (general)"),
-                                 QDir::toNativeSeparators(QFileInfo(comMachine.GetSettingsFilePath()).absolutePath()));
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Name)
+            table << UITextTableLine(QApplication::translate("UIDetails", "Name", "details (general)"), comMachine.GetName());
+
+        /* Operating system: */
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_OS)
+            table << UITextTableLine(QApplication::translate("UIDetails", "Operating System", "details (general)"),
+                                     vboxGlobal().vmGuestOSTypeDescription(comMachine.GetOSTypeId()));
+
+        /* Settings file location: */
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Location)
+            table << UITextTableLine(QApplication::translate("UIDetails", "Settings File Location", "details (general)"),
+                                     QDir::toNativeSeparators(QFileInfo(comMachine.GetSettingsFilePath()).absolutePath()));
 
         /* Groups: */
-        QStringList groups = comMachine.GetGroups().toList();
-        /* Do not show groups for machine which is in root group only: */
-        if (groups.size() == 1)
-            groups.removeAll("/");
-        /* If group list still not empty: */
-        if (!groups.isEmpty())
-        {
-            /* For every group: */
-            for (int i = 0; i < groups.size(); ++i)
-            {
-                /* Trim first '/' symbol: */
-                QString &strGroup = groups[i];
-                if (strGroup.startsWith("/") && strGroup != "/")
-                    strGroup.remove(0, 1);
-            }
-            table << UITextTableLine(QApplication::translate("UIDetails", "Groups", "details (general)"), groups.join(", "));
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Groups)
+        {
+            QStringList groups = comMachine.GetGroups().toList();
+            /* Do not show groups for machine which is in root group only: */
+            if (groups.size() == 1)
+                groups.removeAll("/");
+            /* If group list still not empty: */
+            if (!groups.isEmpty())
+            {
+                /* For every group: */
+                for (int i = 0; i < groups.size(); ++i)
+                {
+                    /* Trim first '/' symbol: */
+                    QString &strGroup = groups[i];
+                    if (strGroup.startsWith("/") && strGroup != "/")
+                        strGroup.remove(0, 1);
+                }
+                table << UITextTableLine(QApplication::translate("UIDetails", "Groups", "details (general)"), groups.join(", "));
+            }
         }
     }
@@ -276,4 +282,19 @@
     /* Save the table as property: */
     setProperty("table", QVariant::fromValue(table));
+}
+
+UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral UIDetailsElementGeneral::parsedExtraDataOptions()
+{
+    UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral options = UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Invalid;
+    foreach (const QString &strOption, extraDataOptions())
+    {
+        const UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral enmOption =
+            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral>(strOption);
+        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Invalid)
+            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral>(options | enmOption);
+    }
+    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Invalid)
+        options = UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Default;
+    return options;
 }
 
@@ -293,85 +314,104 @@
     {
         /* Base memory: */
-        table << UITextTableLine(QApplication::translate("UIDetails", "Base Memory", "details (system)"),
-                                 QApplication::translate("UIDetails", "%1 MB", "details").arg(comMachine.GetMemorySize()));
-
-        /* CPU count: */
-        const int cCPU = comMachine.GetCPUCount();
-        if (cCPU > 1)
-            table << UITextTableLine(QApplication::translate("UIDetails", "Processors", "details (system)"),
-                                     QString::number(cCPU));
-
-        /* CPU execution cap: */
-        const int iCPUExecutionCap = comMachine.GetCPUExecutionCap();
-        if (iCPUExecutionCap < 100)
-            table << UITextTableLine(QApplication::translate("UIDetails", "Execution Cap", "details (system)"),
-                                     QApplication::translate("UIDetails", "%1%", "details").arg(iCPUExecutionCap));
-
-        /* Boot-order: */
-        QStringList bootOrder;
-        for (ulong i = 1; i <= vboxGlobal().virtualBox().GetSystemProperties().GetMaxBootPosition(); ++i)
-        {
-            const KDeviceType enmDeviceType = comMachine.GetBootOrder(i);
-            if (enmDeviceType == KDeviceType_Null)
-                continue;
-            bootOrder << gpConverter->toString(enmDeviceType);
-        }
-        if (bootOrder.isEmpty())
-            bootOrder << gpConverter->toString(KDeviceType_Null);
-        table << UITextTableLine(QApplication::translate("UIDetails", "Boot Order", "details (system)"), bootOrder.join(", "));
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_RAM)
+            table << UITextTableLine(QApplication::translate("UIDetails", "Base Memory", "details (system)"),
+                                     QApplication::translate("UIDetails", "%1 MB", "details").arg(comMachine.GetMemorySize()));
+
+        /* Processors: */
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_CPUCount)
+        {
+            const int cCPU = comMachine.GetCPUCount();
+            if (cCPU > 1)
+                table << UITextTableLine(QApplication::translate("UIDetails", "Processors", "details (system)"),
+                                         QString::number(cCPU));
+        }
+
+        /* Execution cap: */
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_CPUExecutionCap)
+        {
+            const int iCPUExecutionCap = comMachine.GetCPUExecutionCap();
+            if (iCPUExecutionCap < 100)
+                table << UITextTableLine(QApplication::translate("UIDetails", "Execution Cap", "details (system)"),
+                                         QApplication::translate("UIDetails", "%1%", "details").arg(iCPUExecutionCap));
+        }
+
+        /* Boot order: */
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_BootOrder)
+        {
+            QStringList bootOrder;
+            for (ulong i = 1; i <= vboxGlobal().virtualBox().GetSystemProperties().GetMaxBootPosition(); ++i)
+            {
+                const KDeviceType enmDeviceType = comMachine.GetBootOrder(i);
+                if (enmDeviceType == KDeviceType_Null)
+                    continue;
+                bootOrder << gpConverter->toString(enmDeviceType);
+            }
+            if (bootOrder.isEmpty())
+                bootOrder << gpConverter->toString(KDeviceType_Null);
+            table << UITextTableLine(QApplication::translate("UIDetails", "Boot Order", "details (system)"), bootOrder.join(", "));
+        }
 
         /* Chipset type: */
-        const KChipsetType enmChipsetType = comMachine.GetChipsetType();
-        if (enmChipsetType == KChipsetType_ICH9)
-            table << UITextTableLine(QApplication::translate("UIDetails", "Chipset Type", "details (system)"),
-                                     gpConverter->toString(enmChipsetType));
-
-        /* Firware type: */
-        switch (comMachine.GetFirmwareType())
-        {
-            case KFirmwareType_EFI:
-            case KFirmwareType_EFI32:
-            case KFirmwareType_EFI64:
-            case KFirmwareType_EFIDUAL:
-            {
-                table << UITextTableLine(QApplication::translate("UIDetails", "EFI", "details (system)"),
-                                         QApplication::translate("UIDetails", "Enabled", "details (system/EFI)"));
-                break;
-            }
-            default:
-            {
-                // For NLS purpose:
-                QApplication::translate("UIDetails", "Disabled", "details (system/EFI)");
-                break;
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_ChipsetType)
+        {
+            const KChipsetType enmChipsetType = comMachine.GetChipsetType();
+            if (enmChipsetType == KChipsetType_ICH9)
+                table << UITextTableLine(QApplication::translate("UIDetails", "Chipset Type", "details (system)"),
+                                         gpConverter->toString(enmChipsetType));
+        }
+
+        /* EFI: */
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Firmware)
+        {
+            switch (comMachine.GetFirmwareType())
+            {
+                case KFirmwareType_EFI:
+                case KFirmwareType_EFI32:
+                case KFirmwareType_EFI64:
+                case KFirmwareType_EFIDUAL:
+                {
+                    table << UITextTableLine(QApplication::translate("UIDetails", "EFI", "details (system)"),
+                                             QApplication::translate("UIDetails", "Enabled", "details (system/EFI)"));
+                    break;
+                }
+                default:
+                {
+                    // For NLS purpose:
+                    QApplication::translate("UIDetails", "Disabled", "details (system/EFI)");
+                    break;
+                }
             }
         }
 
         /* Acceleration: */
-        QStringList acceleration;
-        if (vboxGlobal().virtualBox().GetHost().GetProcessorFeature(KProcessorFeature_HWVirtEx))
-        {
-            /* VT-x/AMD-V: */
-            if (comMachine.GetHWVirtExProperty(KHWVirtExPropertyType_Enabled))
-            {
-                acceleration << QApplication::translate("UIDetails", "VT-x/AMD-V", "details (system)");
-                /* Nested Paging (only when hw virt is enabled): */
-                if (comMachine.GetHWVirtExProperty(KHWVirtExPropertyType_NestedPaging))
-                    acceleration << QApplication::translate("UIDetails", "Nested Paging", "details (system)");
-            }
-        }
-        /* PAE/NX: */
-        if (comMachine.GetCPUProperty(KCPUPropertyType_PAE))
-            acceleration << QApplication::translate("UIDetails", "PAE/NX", "details (system)");
-        /* Paravirtualization provider: */
-        switch (comMachine.GetEffectiveParavirtProvider())
-        {
-            case KParavirtProvider_Minimal: acceleration << QApplication::translate("UIDetails", "Minimal Paravirtualization", "details (system)"); break;
-            case KParavirtProvider_HyperV:  acceleration << QApplication::translate("UIDetails", "Hyper-V Paravirtualization", "details (system)"); break;
-            case KParavirtProvider_KVM:     acceleration << QApplication::translate("UIDetails", "KVM Paravirtualization", "details (system)"); break;
-            default: break;
-        }
-        if (!acceleration.isEmpty())
-            table << UITextTableLine(QApplication::translate("UIDetails", "Acceleration", "details (system)"),
-                                     acceleration.join(", "));
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Acceleration)
+        {
+            QStringList acceleration;
+            if (vboxGlobal().virtualBox().GetHost().GetProcessorFeature(KProcessorFeature_HWVirtEx))
+            {
+                /* VT-x/AMD-V: */
+                if (comMachine.GetHWVirtExProperty(KHWVirtExPropertyType_Enabled))
+                {
+                    acceleration << QApplication::translate("UIDetails", "VT-x/AMD-V", "details (system)");
+                    /* Nested Paging (only when hw virt is enabled): */
+                    if (comMachine.GetHWVirtExProperty(KHWVirtExPropertyType_NestedPaging))
+                        acceleration << QApplication::translate("UIDetails", "Nested Paging", "details (system)");
+                }
+            }
+            /* PAE/NX: */
+            if (comMachine.GetCPUProperty(KCPUPropertyType_PAE))
+                acceleration << QApplication::translate("UIDetails", "PAE/NX", "details (system)");
+            /* Paravirtualization provider: */
+            switch (comMachine.GetEffectiveParavirtProvider())
+            {
+                case KParavirtProvider_Minimal: acceleration << QApplication::translate("UIDetails", "Minimal Paravirtualization", "details (system)"); break;
+                case KParavirtProvider_HyperV:  acceleration << QApplication::translate("UIDetails", "Hyper-V Paravirtualization", "details (system)"); break;
+                case KParavirtProvider_KVM:     acceleration << QApplication::translate("UIDetails", "KVM Paravirtualization", "details (system)"); break;
+                default: break;
+            }
+            if (!acceleration.isEmpty())
+                table << UITextTableLine(QApplication::translate("UIDetails", "Acceleration", "details (system)"),
+                                         acceleration.join(", "));
+        }
     }
     else
@@ -381,4 +421,19 @@
     /* Save the table as property: */
     setProperty("table", QVariant::fromValue(table));
+}
+
+UIExtraDataMetaDefs::DetailsElementOptionTypeSystem UIDetailsElementSystem::parsedExtraDataOptions()
+{
+    UIExtraDataMetaDefs::DetailsElementOptionTypeSystem options = UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Invalid;
+    foreach (const QString &strOption, extraDataOptions())
+    {
+        const UIExtraDataMetaDefs::DetailsElementOptionTypeSystem enmOption =
+            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem>(strOption);
+        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Invalid)
+            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem>(options | enmOption);
+    }
+    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Invalid)
+        options = UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Default;
+    return options;
 }
 
@@ -398,73 +453,89 @@
     {
         /* Video memory: */
-        table << UITextTableLine(QApplication::translate("UIDetails", "Video Memory", "details (display)"),
-                                 QApplication::translate("UIDetails", "%1 MB", "details").arg(comMachine.GetVRAMSize()));
-
-        /* Screen count: */
-        const int cGuestScreens = comMachine.GetMonitorCount();
-        if (cGuestScreens > 1)
-            table << UITextTableLine(QApplication::translate("UIDetails", "Screens", "details (display)"),
-                                     QString::number(cGuestScreens));
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_VRAM)
+            table << UITextTableLine(QApplication::translate("UIDetails", "Video Memory", "details (display)"),
+                                     QApplication::translate("UIDetails", "%1 MB", "details").arg(comMachine.GetVRAMSize()));
+
+        /* Screens: */
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_ScreenCount)
+        {
+            const int cGuestScreens = comMachine.GetMonitorCount();
+            if (cGuestScreens > 1)
+                table << UITextTableLine(QApplication::translate("UIDetails", "Screens", "details (display)"),
+                                         QString::number(cGuestScreens));
+        }
 
         /* Scale-factor: */
-        const QString strScaleFactor = comMachine.GetExtraData(UIExtraDataDefs::GUI_ScaleFactor);
-        {
-            /* Try to convert loaded data to double: */
-            bool fOk = false;
-            double dValue = strScaleFactor.toDouble(&fOk);
-            /* Invent the default value: */
-            if (!fOk || !dValue)
-                dValue = 1.0;
-            /* Append information: */
-            if (dValue != 1.0)
-                table << UITextTableLine(QApplication::translate("UIDetails", "Scale-factor", "details (display)"),
-                                         QString::number(dValue, 'f', 2));
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_ScaleFactor)
+        {
+            const QString strScaleFactor = comMachine.GetExtraData(UIExtraDataDefs::GUI_ScaleFactor);
+            {
+                /* Try to convert loaded data to double: */
+                bool fOk = false;
+                double dValue = strScaleFactor.toDouble(&fOk);
+                /* Invent the default value: */
+                if (!fOk || !dValue)
+                    dValue = 1.0;
+                /* Append information: */
+                if (dValue != 1.0)
+                    table << UITextTableLine(QApplication::translate("UIDetails", "Scale-factor", "details (display)"),
+                                             QString::number(dValue, 'f', 2));
+            }
         }
 
         /* Acceleration: */
-        QStringList acceleration;
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Acceleration)
+        {
+            QStringList acceleration;
 #ifdef VBOX_WITH_VIDEOHWACCEL
-        /* 2D acceleration: */
-        if (comMachine.GetAccelerate2DVideoEnabled())
-            acceleration << QApplication::translate("UIDetails", "2D Video", "details (display)");
+            /* 2D acceleration: */
+            if (comMachine.GetAccelerate2DVideoEnabled())
+                acceleration << QApplication::translate("UIDetails", "2D Video", "details (display)");
 #endif
-        /* 3D acceleration: */
-        if (comMachine.GetAccelerate3DEnabled())
-            acceleration << QApplication::translate("UIDetails", "3D", "details (display)");
-        if (!acceleration.isEmpty())
-            table << UITextTableLine(QApplication::translate("UIDetails", "Acceleration", "details (display)"),
-                                     acceleration.join(", "));
-
-        /* VRDE: */
-        const CVRDEServer comServer = comMachine.GetVRDEServer();
-        if (!comServer.isNull())
-        {
-            if (comServer.GetEnabled())
-                table << UITextTableLine(QApplication::translate("UIDetails", "Remote Desktop Server Port", "details (display/vrde)"),
-                                         comServer.GetVRDEProperty("TCP/Ports"));
+            /* 3D acceleration: */
+            if (comMachine.GetAccelerate3DEnabled())
+                acceleration << QApplication::translate("UIDetails", "3D", "details (display)");
+            if (!acceleration.isEmpty())
+                table << UITextTableLine(QApplication::translate("UIDetails", "Acceleration", "details (display)"),
+                                         acceleration.join(", "));
+        }
+
+        /* Remote desktop server: */
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_VRDE)
+        {
+            const CVRDEServer comServer = comMachine.GetVRDEServer();
+            if (!comServer.isNull())
+            {
+                if (comServer.GetEnabled())
+                    table << UITextTableLine(QApplication::translate("UIDetails", "Remote Desktop Server Port", "details (display/vrde)"),
+                                             comServer.GetVRDEProperty("TCP/Ports"));
+                else
+                    table << UITextTableLine(QApplication::translate("UIDetails", "Remote Desktop Server", "details (display/vrde)"),
+                                             QApplication::translate("UIDetails", "Disabled", "details (display/vrde/VRDE server)"));
+            }
+        }
+
+        /* Recording: */
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Recording)
+        {
+            CRecordingSettings comRecordingSettings = comMachine.GetRecordingSettings();
+            if (comRecordingSettings.GetEnabled())
+            {
+                /* For now all screens have the same config: */
+                const CRecordingScreenSettings comRecordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
+
+                /** @todo r=andy Refine these texts (wrt audio and/or video). */
+                table << UITextTableLine(QApplication::translate("UIDetails", "Recording File", "details (display/recording)"),
+                                         comRecordingScreen0Settings.GetFileName());
+                table << UITextTableLine(QApplication::translate("UIDetails", "Recording Attributes", "details (display/recording)"),
+                                         QApplication::translate("UIDetails", "Frame Size: %1x%2, Frame Rate: %3fps, Bit Rate: %4kbps")
+                                             .arg(comRecordingScreen0Settings.GetVideoWidth()).arg(comRecordingScreen0Settings.GetVideoHeight())
+                                             .arg(comRecordingScreen0Settings.GetVideoFPS()).arg(comRecordingScreen0Settings.GetVideoRate()));
+            }
             else
-                table << UITextTableLine(QApplication::translate("UIDetails", "Remote Desktop Server", "details (display/vrde)"),
-                                         QApplication::translate("UIDetails", "Disabled", "details (display/vrde/VRDE server)"));
-        }
-
-        /* Recording info: */
-        CRecordingSettings comRecordingSettings = comMachine.GetRecordingSettings();
-        if (comRecordingSettings.GetEnabled())
-        {
-            /* For now all screens have the same config: */
-            const CRecordingScreenSettings comRecordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
-
-            /** @todo r=andy Refine these texts (wrt audio and/or video). */
-            table << UITextTableLine(QApplication::translate("UIDetails", "Recording File", "details (display/recording)"),
-                                     comRecordingScreen0Settings.GetFileName());
-            table << UITextTableLine(QApplication::translate("UIDetails", "Recording Attributes", "details (display/recording)"),
-                                     QApplication::translate("UIDetails", "Frame Size: %1x%2, Frame Rate: %3fps, Bit Rate: %4kbps")
-                                         .arg(comRecordingScreen0Settings.GetVideoWidth()).arg(comRecordingScreen0Settings.GetVideoHeight())
-                                         .arg(comRecordingScreen0Settings.GetVideoFPS()).arg(comRecordingScreen0Settings.GetVideoRate()));
-        }
-        else
-        {
-            table << UITextTableLine(QApplication::translate("UIDetails", "Recording", "details (display/recording)"),
-                                     QApplication::translate("UIDetails", "Disabled", "details (display/recording)"));
+            {
+                table << UITextTableLine(QApplication::translate("UIDetails", "Recording", "details (display/recording)"),
+                                         QApplication::translate("UIDetails", "Disabled", "details (display/recording)"));
+            }
         }
     }
@@ -474,4 +545,19 @@
     /* Save the table as property: */
     setProperty("table", QVariant::fromValue(table));
+}
+
+UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay UIDetailsElementDisplay::parsedExtraDataOptions()
+{
+    UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay options = UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Invalid;
+    foreach (const QString &strOption, extraDataOptions())
+    {
+        const UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay enmOption =
+            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay>(strOption);
+        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Invalid)
+            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay>(options | enmOption);
+    }
+    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Invalid)
+        options = UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Default;
+    return options;
 }
 
@@ -502,4 +588,13 @@
                 /* Acquire device type first of all: */
                 const KDeviceType enmDeviceType = attachment.GetType();
+
+                /* Ignore restricted device types: */
+                if (   (   !(m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_HardDisks)
+                        && enmDeviceType == KDeviceType_HardDisk)
+                    || (   !(m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_OpticalDevices)
+                        && enmDeviceType == KDeviceType_DVD)
+                    || (   !(m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_FloppyDevices)
+                        && enmDeviceType == KDeviceType_Floppy))
+                    continue;
 
                 /* Prepare current storage slot: */
@@ -561,4 +656,19 @@
 }
 
+UIExtraDataMetaDefs::DetailsElementOptionTypeStorage UIDetailsElementStorage::parsedExtraDataOptions()
+{
+    UIExtraDataMetaDefs::DetailsElementOptionTypeStorage options = UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_Invalid;
+    foreach (const QString &strOption, extraDataOptions())
+    {
+        const UIExtraDataMetaDefs::DetailsElementOptionTypeStorage enmOption =
+            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage>(strOption);
+        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_Invalid)
+            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage>(options | enmOption);
+    }
+    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_Invalid)
+        options = UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_Default;
+    return options;
+}
+
 
 void UIDetailsUpdateTaskAudio::run()
@@ -578,22 +688,27 @@
         if (comAudio.GetEnabled())
         {
-            /* Driver: */
-            table << UITextTableLine(QApplication::translate("UIDetails", "Host Driver", "details (audio)"),
-                                     gpConverter->toString(comAudio.GetAudioDriver()));
+            /* Host driver: */
+            if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Driver)
+                table << UITextTableLine(QApplication::translate("UIDetails", "Host Driver", "details (audio)"),
+                                         gpConverter->toString(comAudio.GetAudioDriver()));
 
             /* Controller: */
-            table << UITextTableLine(QApplication::translate("UIDetails", "Controller", "details (audio)"),
-                                     gpConverter->toString(comAudio.GetAudioController()));
+            if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Controller)
+                table << UITextTableLine(QApplication::translate("UIDetails", "Controller", "details (audio)"),
+                                         gpConverter->toString(comAudio.GetAudioController()));
 
 #ifdef VBOX_WITH_AUDIO_INOUT_INFO
-            /* I/O: */
-            table << UITextTableLine(QApplication::translate("UIDetails", "Audio Output", "details (audio)"),
-                                     comAudio.GetEnabledOut() ?
-                                     QApplication::translate("UIDetails", "Enabled", "details (audio/output)") :
-                                     QApplication::translate("UIDetails", "Disabled", "details (audio/output)"));
-            table << UITextTableLine(QApplication::translate("UIDetails", "Audio Input", "details (audio)"),
-                                     comAudio.GetEnabledIn() ?
-                                     QApplication::translate("UIDetails", "Enabled", "details (audio/input)") :
-                                     QApplication::translate("UIDetails", "Disabled", "details (audio/input)"));
+            /* Audio I/O: */
+            if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_IO)
+            {
+                table << UITextTableLine(QApplication::translate("UIDetails", "Audio Input", "details (audio)"),
+                                         comAudio.GetEnabledIn() ?
+                                         QApplication::translate("UIDetails", "Enabled", "details (audio/input)") :
+                                         QApplication::translate("UIDetails", "Disabled", "details (audio/input)"));
+                table << UITextTableLine(QApplication::translate("UIDetails", "Audio Output", "details (audio)"),
+                                         comAudio.GetEnabledOut() ?
+                                         QApplication::translate("UIDetails", "Enabled", "details (audio/output)") :
+                                         QApplication::translate("UIDetails", "Disabled", "details (audio/output)"));
+            }
 #endif /* VBOX_WITH_AUDIO_INOUT_INFO */
         }
@@ -608,4 +723,19 @@
     /* Save the table as property: */
     setProperty("table", QVariant::fromValue(table));
+}
+
+UIExtraDataMetaDefs::DetailsElementOptionTypeAudio UIDetailsElementAudio::parsedExtraDataOptions()
+{
+    UIExtraDataMetaDefs::DetailsElementOptionTypeAudio options = UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Invalid;
+    foreach (const QString &strOption, extraDataOptions())
+    {
+        const UIExtraDataMetaDefs::DetailsElementOptionTypeAudio enmOption =
+            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio>(strOption);
+        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Invalid)
+            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio>(options | enmOption);
+    }
+    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Invalid)
+        options = UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Default;
+    return options;
 }
 
@@ -642,39 +772,47 @@
                 case KNetworkAttachmentType_Bridged:
                 {
-                    strAttachmentType = strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Bridged Adapter, %1", "details (network)")
-                                                                  .arg(comAdapter.GetBridgedInterface()));
+                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_BridgetAdapter)
+                        strAttachmentType = strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Bridged Adapter, %1", "details (network)")
+                                                                      .arg(comAdapter.GetBridgedInterface()));
                     break;
                 }
                 case KNetworkAttachmentType_Internal:
                 {
-                    strAttachmentType = strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Internal Network, '%1'", "details (network)")
-                                                                  .arg(comAdapter.GetInternalNetwork()));
+                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_InternalNetwork)
+                        strAttachmentType = strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Internal Network, '%1'", "details (network)")
+                                                                      .arg(comAdapter.GetInternalNetwork()));
                     break;
                 }
                 case KNetworkAttachmentType_HostOnly:
                 {
-                    strAttachmentType = strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Host-only Adapter, '%1'", "details (network)")
-                                                                  .arg(comAdapter.GetHostOnlyInterface()));
+                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_HostOnlyAdapter)
+                        strAttachmentType = strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Host-only Adapter, '%1'", "details (network)")
+                                                                      .arg(comAdapter.GetHostOnlyInterface()));
                     break;
                 }
                 case KNetworkAttachmentType_Generic:
                 {
-                    const QString strGenericDriverProperties(summarizeGenericProperties(comAdapter));
-                    strAttachmentType = strGenericDriverProperties.isNull() ?
-                        strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Generic Driver, '%1'", "details (network)")
-                                                  .arg(comAdapter.GetGenericDriver())) :
-                        strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Generic Driver, '%1' { %2 }", "details (network)")
-                                                  .arg(comAdapter.GetGenericDriver(), strGenericDriverProperties));
+                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_GenericDriver)
+                    {
+                        const QString strGenericDriverProperties(summarizeGenericProperties(comAdapter));
+                        strAttachmentType = strGenericDriverProperties.isNull() ?
+                            strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Generic Driver, '%1'", "details (network)")
+                                                      .arg(comAdapter.GetGenericDriver())) :
+                            strAttachmentTemplate.arg(QApplication::translate("UIDetails", "Generic Driver, '%1' { %2 }", "details (network)")
+                                                      .arg(comAdapter.GetGenericDriver(), strGenericDriverProperties));
+                    }
                     break;
                 }
                 case KNetworkAttachmentType_NATNetwork:
                 {
-                    strAttachmentType = strAttachmentTemplate.arg(QApplication::translate("UIDetails", "NAT Network, '%1'", "details (network)")
-                                                                  .arg(comAdapter.GetNATNetwork()));
+                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_NAT)
+                        strAttachmentType = strAttachmentTemplate.arg(QApplication::translate("UIDetails", "NAT Network, '%1'", "details (network)")
+                                                                      .arg(comAdapter.GetNATNetwork()));
                     break;
                 }
                 default:
                 {
-                    strAttachmentType = strAttachmentTemplate.arg(gpConverter->toString(enmType));
+                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_NotAttached)
+                        strAttachmentType = strAttachmentTemplate.arg(gpConverter->toString(enmType));
                     break;
                 }
@@ -691,4 +829,19 @@
     /* Save the table as property: */
     setProperty("table", QVariant::fromValue(table));
+}
+
+UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork UIDetailsElementNetwork::parsedExtraDataOptions()
+{
+    UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork options = UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_Invalid;
+    foreach (const QString &strOption, extraDataOptions())
+    {
+        const UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork enmOption =
+            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork>(strOption);
+        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_Invalid)
+            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork>(options | enmOption);
+    }
+    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_Invalid)
+        options = UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_Default;
+    return options;
 }
 
@@ -741,25 +894,30 @@
                 case KPortMode_HostPipe:
                 {
-                    strModeType = strModeTemplate + QString("%1 (%2)").arg(gpConverter->toString(enmMode)).arg(QDir::toNativeSeparators(comPort.GetPath()));
+                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_HostPipe)
+                        strModeType = strModeTemplate + QString("%1 (%2)").arg(gpConverter->toString(enmMode)).arg(QDir::toNativeSeparators(comPort.GetPath()));
                     break;
                 }
                 case KPortMode_HostDevice:
                 {
-                    strModeType = strModeTemplate + QString("%1 (%2)").arg(gpConverter->toString(enmMode)).arg(QDir::toNativeSeparators(comPort.GetPath()));
+                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_HostDevice)
+                        strModeType = strModeTemplate + QString("%1 (%2)").arg(gpConverter->toString(enmMode)).arg(QDir::toNativeSeparators(comPort.GetPath()));
                     break;
                 }
                 case KPortMode_RawFile:
                 {
-                    strModeType = strModeTemplate + QString("%1 (%2)").arg(gpConverter->toString(enmMode)).arg(QDir::toNativeSeparators(comPort.GetPath()));
+                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_RawFile)
+                        strModeType = strModeTemplate + QString("%1 (%2)").arg(gpConverter->toString(enmMode)).arg(QDir::toNativeSeparators(comPort.GetPath()));
                     break;
                 }
                 case KPortMode_TCP:
                 {
-                    strModeType = strModeTemplate + QString("%1 (%2)").arg(gpConverter->toString(enmMode)).arg(QDir::toNativeSeparators(comPort.GetPath()));
+                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_TCP)
+                        strModeType = strModeTemplate + QString("%1 (%2)").arg(gpConverter->toString(enmMode)).arg(QDir::toNativeSeparators(comPort.GetPath()));
                     break;
                 }
                 default:
                 {
-                    strModeType = strModeTemplate + gpConverter->toString(enmMode);
+                    if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Disconnected)
+                        strModeType = strModeTemplate + gpConverter->toString(enmMode);
                     break;
                 }
@@ -776,4 +934,19 @@
     /* Save the table as property: */
     setProperty("table", QVariant::fromValue(table));
+}
+
+UIExtraDataMetaDefs::DetailsElementOptionTypeSerial UIDetailsElementSerial::parsedExtraDataOptions()
+{
+    UIExtraDataMetaDefs::DetailsElementOptionTypeSerial options = UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Invalid;
+    foreach (const QString &strOption, extraDataOptions())
+    {
+        const UIExtraDataMetaDefs::DetailsElementOptionTypeSerial enmOption =
+            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial>(strOption);
+        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Invalid)
+            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial>(options | enmOption);
+    }
+    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Invalid)
+        options = UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Default;
+    return options;
 }
 
@@ -799,19 +972,25 @@
             if (!controllers.isEmpty())
             {
-                /* Controllers: */
-                QStringList controllersReadable;
-                foreach (const CUSBController &comController, controllers)
-                    controllersReadable << gpConverter->toString(comController.GetType());
-                table << UITextTableLine(QApplication::translate("UIDetails", "USB Controller", "details (usb)"),
-                                         controllersReadable.join(", "));
-
-                /* Device Filters: */
-                const CUSBDeviceFilterVector filters = comFilterObject.GetDeviceFilters();
-                uint uActive = 0;
-                for (int i = 0; i < filters.size(); ++i)
-                    if (filters.at(i).GetActive())
-                        ++uActive;
-                table << UITextTableLine(QApplication::translate("UIDetails", "Device Filters", "details (usb)"),
-                                         QApplication::translate("UIDetails", "%1 (%2 active)", "details (usb)").arg(filters.size()).arg(uActive));
+                /* USB controllers: */
+                if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Controller)
+                {
+                    QStringList controllersReadable;
+                    foreach (const CUSBController &comController, controllers)
+                        controllersReadable << gpConverter->toString(comController.GetType());
+                    table << UITextTableLine(QApplication::translate("UIDetails", "USB Controller", "details (usb)"),
+                                             controllersReadable.join(", "));
+                }
+
+                /* Device filters: */
+                if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_DeviceFilters)
+                {
+                    const CUSBDeviceFilterVector filters = comFilterObject.GetDeviceFilters();
+                    uint uActive = 0;
+                    for (int i = 0; i < filters.size(); ++i)
+                        if (filters.at(i).GetActive())
+                            ++uActive;
+                    table << UITextTableLine(QApplication::translate("UIDetails", "Device Filters", "details (usb)"),
+                                             QApplication::translate("UIDetails", "%1 (%2 active)", "details (usb)").arg(filters.size()).arg(uActive));
+                }
             }
             else
@@ -826,4 +1005,19 @@
     /* Save the table as property: */
     setProperty("table", QVariant::fromValue(table));
+}
+
+UIExtraDataMetaDefs::DetailsElementOptionTypeUsb UIDetailsElementUSB::parsedExtraDataOptions()
+{
+    UIExtraDataMetaDefs::DetailsElementOptionTypeUsb options = UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Invalid;
+    foreach (const QString &strOption, extraDataOptions())
+    {
+        const UIExtraDataMetaDefs::DetailsElementOptionTypeUsb enmOption =
+            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb>(strOption);
+        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Invalid)
+            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb>(options | enmOption);
+    }
+    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Invalid)
+        options = UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Default;
+    return options;
 }
 
@@ -843,9 +1037,12 @@
     {
         /* Summary: */
-        const ulong uCount = comMachine.GetSharedFolders().size();
-        if (uCount > 0)
-            table << UITextTableLine(QApplication::translate("UIDetails", "Shared Folders", "details (shared folders)"), QString::number(uCount));
-        else
-            table << UITextTableLine(QApplication::translate("UIDetails", "None", "details (shared folders)"), QString());
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Summary)
+        {
+            const ulong uCount = comMachine.GetSharedFolders().size();
+            if (uCount > 0)
+                table << UITextTableLine(QApplication::translate("UIDetails", "Shared Folders", "details (shared folders)"), QString::number(uCount));
+            else
+                table << UITextTableLine(QApplication::translate("UIDetails", "None", "details (shared folders)"), QString());
+        }
     }
     else
@@ -854,4 +1051,19 @@
     /* Save the table as property: */
     setProperty("table", QVariant::fromValue(table));
+}
+
+UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders UIDetailsElementSF::parsedExtraDataOptions()
+{
+    UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders options = UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Invalid;
+    foreach (const QString &strOption, extraDataOptions())
+    {
+        const UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders enmOption =
+            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders>(strOption);
+        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Invalid)
+            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders>(options | enmOption);
+    }
+    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Invalid)
+        options = UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Default;
+    return options;
 }
 
@@ -872,6 +1084,7 @@
 #ifndef VBOX_WS_MAC
         /* Menu-bar: */
-        const QString strMenubarEnabled = comMachine.GetExtraData(UIExtraDataDefs::GUI_MenuBar_Enabled);
-        {
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_MenuBar)
+        {
+            const QString strMenubarEnabled = comMachine.GetExtraData(UIExtraDataDefs::GUI_MenuBar_Enabled);
             /* Try to convert loaded data to bool: */
             const bool fEnabled = !(   strMenubarEnabled.compare("false", Qt::CaseInsensitive) == 0
@@ -887,6 +1100,7 @@
 
         /* Status-bar: */
-        const QString strStatusbarEnabled = comMachine.GetExtraData(UIExtraDataDefs::GUI_StatusBar_Enabled);
-        {
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_StatusBar)
+        {
+            const QString strStatusbarEnabled = comMachine.GetExtraData(UIExtraDataDefs::GUI_StatusBar_Enabled);
             /* Try to convert loaded data to bool: */
             const bool fEnabled = !(   strStatusbarEnabled.compare("false", Qt::CaseInsensitive) == 0
@@ -902,6 +1116,7 @@
 #ifndef VBOX_WS_MAC
         /* Mini-toolbar: */
-        const QString strMiniToolbarEnabled = comMachine.GetExtraData(UIExtraDataDefs::GUI_ShowMiniToolBar);
-        {
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_MiniToolbar)
+        {
+            const QString strMiniToolbarEnabled = comMachine.GetExtraData(UIExtraDataDefs::GUI_ShowMiniToolBar);
             /* Try to convert loaded data to bool: */
             const bool fEnabled = !(   strMiniToolbarEnabled.compare("false", Qt::CaseInsensitive) == 0
@@ -945,4 +1160,19 @@
 }
 
+UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface UIDetailsElementUI::parsedExtraDataOptions()
+{
+    UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface options = UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_Invalid;
+    foreach (const QString &strOption, extraDataOptions())
+    {
+        const UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface enmOption =
+            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface>(strOption);
+        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_Invalid)
+            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface>(options | enmOption);
+    }
+    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_Invalid)
+        options = UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_Default;
+    return options;
+}
+
 
 void UIDetailsUpdateTaskDescription::run()
@@ -960,9 +1190,12 @@
     {
         /* Summary: */
-        const QString strDescription = machine.GetDescription();
-        if (!strDescription.isEmpty())
-            table << UITextTableLine(strDescription, QString());
-        else
-            table << UITextTableLine(QApplication::translate("UIDetails", "None", "details (description)"), QString());
+        if (m_fOptions & UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Summary)
+        {
+            const QString strDescription = machine.GetDescription();
+            if (!strDescription.isEmpty())
+                table << UITextTableLine(strDescription, QString());
+            else
+                table << UITextTableLine(QApplication::translate("UIDetails", "None", "details (description)"), QString());
+        }
     }
     else
@@ -972,2 +1205,17 @@
     setProperty("table", QVariant::fromValue(table));
 }
+
+UIExtraDataMetaDefs::DetailsElementOptionTypeDescription UIDetailsElementDescription::parsedExtraDataOptions()
+{
+    UIExtraDataMetaDefs::DetailsElementOptionTypeDescription options = UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Invalid;
+    foreach (const QString &strOption, extraDataOptions())
+    {
+        const UIExtraDataMetaDefs::DetailsElementOptionTypeDescription enmOption =
+            gpConverter->fromInternalString<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription>(strOption);
+        if (enmOption != UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Invalid)
+            options = static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription>(options | enmOption);
+    }
+    if (options == UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Invalid)
+        options = UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Default;
+    return options;
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElements.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElements.h	(revision 75426)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElements.h	(revision 75427)
@@ -121,11 +121,14 @@
 
     /** Constructs update task passing @a comMachine to the base-class. */
-    UIDetailsUpdateTaskGeneral(const CMachine &comMachine)
-        : UIDetailsUpdateTask(comMachine) {}
-
-private:
-
-    /** Contains update task body. */
-    void run();
+    UIDetailsUpdateTaskGeneral(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral fOptions)
+        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
+
+private:
+
+    /** Contains update task body. */
+    void run();
+
+    /** Holds the options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral m_fOptions;
 };
 
@@ -144,6 +147,9 @@
 private:
 
-    /** Creates update task for this element. */
-    UITask *createUpdateTask() { return new UIDetailsUpdateTaskGeneral(machine()); }
+    /** Returns parsed extra-data options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral parsedExtraDataOptions();
+
+    /** Creates update task for this element. */
+    UITask *createUpdateTask() { return new UIDetailsUpdateTaskGeneral(machine(), parsedExtraDataOptions()); }
 };
 
@@ -157,11 +163,14 @@
 
     /** Constructs update task passing @a comMachine to the base-class. */
-    UIDetailsUpdateTaskSystem(const CMachine &comMachine)
-        : UIDetailsUpdateTask(comMachine) {}
-
-private:
-
-    /** Contains update task body. */
-    void run();
+    UIDetailsUpdateTaskSystem(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeSystem fOptions)
+        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
+
+private:
+
+    /** Contains update task body. */
+    void run();
+
+    /** Holds the options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeSystem m_fOptions;
 };
 
@@ -180,6 +189,9 @@
 private:
 
-    /** Creates update task for this element. */
-    UITask *createUpdateTask() { return new UIDetailsUpdateTaskSystem(machine()); }
+    /** Returns parsed extra-data options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeSystem parsedExtraDataOptions();
+
+    /** Creates update task for this element. */
+    UITask *createUpdateTask() { return new UIDetailsUpdateTaskSystem(machine(), parsedExtraDataOptions()); }
 };
 
@@ -193,11 +205,14 @@
 
     /** Constructs update task passing @a comMachine to the base-class. */
-    UIDetailsUpdateTaskDisplay(const CMachine &comMachine)
-        : UIDetailsUpdateTask(comMachine) {}
-
-private:
-
-    /** Contains update task body. */
-    void run();
+    UIDetailsUpdateTaskDisplay(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay fOptions)
+        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
+
+private:
+
+    /** Contains update task body. */
+    void run();
+
+    /** Holds the options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay m_fOptions;
 };
 
@@ -216,6 +231,9 @@
 private:
 
-    /** Creates update task for this element. */
-    UITask *createUpdateTask() { return new UIDetailsUpdateTaskDisplay(machine()); }
+    /** Returns parsed extra-data options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay parsedExtraDataOptions();
+
+    /** Creates update task for this element. */
+    UITask *createUpdateTask() { return new UIDetailsUpdateTaskDisplay(machine(), parsedExtraDataOptions()); }
 };
 
@@ -229,11 +247,14 @@
 
     /** Constructs update task passing @a comMachine to the base-class. */
-    UIDetailsUpdateTaskStorage(const CMachine &comMachine)
-        : UIDetailsUpdateTask(comMachine) {}
-
-private:
-
-    /** Contains update task body. */
-    void run();
+    UIDetailsUpdateTaskStorage(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeStorage fOptions)
+        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
+
+private:
+
+    /** Contains update task body. */
+    void run();
+
+    /** Holds the options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeStorage m_fOptions;
 };
 
@@ -252,6 +273,9 @@
 private:
 
-    /** Creates update task for this element. */
-    UITask *createUpdateTask() { return new UIDetailsUpdateTaskStorage(machine()); }
+    /** Returns parsed extra-data options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeStorage parsedExtraDataOptions();
+
+    /** Creates update task for this element. */
+    UITask *createUpdateTask() { return new UIDetailsUpdateTaskStorage(machine(), parsedExtraDataOptions()); }
 };
 
@@ -265,11 +289,14 @@
 
     /** Constructs update task passing @a comMachine to the base-class. */
-    UIDetailsUpdateTaskAudio(const CMachine &comMachine)
-        : UIDetailsUpdateTask(comMachine) {}
-
-private:
-
-    /** Contains update task body. */
-    void run();
+    UIDetailsUpdateTaskAudio(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeAudio fOptions)
+        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
+
+private:
+
+    /** Contains update task body. */
+    void run();
+
+    /** Holds the options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeAudio m_fOptions;
 };
 
@@ -288,6 +315,9 @@
 private:
 
-    /** Creates update task for this element. */
-    UITask *createUpdateTask() { return new UIDetailsUpdateTaskAudio(machine()); }
+    /** Returns parsed extra-data options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeAudio parsedExtraDataOptions();
+
+    /** Creates update task for this element. */
+    UITask *createUpdateTask() { return new UIDetailsUpdateTaskAudio(machine(), parsedExtraDataOptions()); }
 };
 
@@ -301,6 +331,6 @@
 
     /** Constructs update task passing @a comMachine to the base-class. */
-    UIDetailsUpdateTaskNetwork(const CMachine &comMachine)
-        : UIDetailsUpdateTask(comMachine) {}
+    UIDetailsUpdateTaskNetwork(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork fOptions)
+        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
 
 private:
@@ -311,4 +341,7 @@
     /** Summarizes generic properties. */
     static QString summarizeGenericProperties(const CNetworkAdapter &adapter);
+
+    /** Holds the options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork m_fOptions;
 };
 
@@ -327,6 +360,9 @@
 private:
 
-    /** Creates update task for this element. */
-    UITask *createUpdateTask() { return new UIDetailsUpdateTaskNetwork(machine()); }
+    /** Returns parsed extra-data options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork parsedExtraDataOptions();
+
+    /** Creates update task for this element. */
+    UITask *createUpdateTask() { return new UIDetailsUpdateTaskNetwork(machine(), parsedExtraDataOptions()); }
 };
 
@@ -340,11 +376,14 @@
 
     /** Constructs update task passing @a comMachine to the base-class. */
-    UIDetailsUpdateTaskSerial(const CMachine &comMachine)
-        : UIDetailsUpdateTask(comMachine) {}
-
-private:
-
-    /** Contains update task body. */
-    void run();
+    UIDetailsUpdateTaskSerial(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeSerial fOptions)
+        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
+
+private:
+
+    /** Contains update task body. */
+    void run();
+
+    /** Holds the options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeSerial m_fOptions;
 };
 
@@ -363,6 +402,9 @@
 private:
 
-    /** Creates update task for this element. */
-    UITask *createUpdateTask() { return new UIDetailsUpdateTaskSerial(machine()); }
+    /** Returns parsed extra-data options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeSerial parsedExtraDataOptions();
+
+    /** Creates update task for this element. */
+    UITask *createUpdateTask() { return new UIDetailsUpdateTaskSerial(machine(), parsedExtraDataOptions()); }
 };
 
@@ -376,11 +418,14 @@
 
     /** Constructs update task passing @a comMachine to the base-class. */
-    UIDetailsUpdateTaskUSB(const CMachine &comMachine)
-        : UIDetailsUpdateTask(comMachine) {}
-
-private:
-
-    /** Contains update task body. */
-    void run();
+    UIDetailsUpdateTaskUSB(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeUsb fOptions)
+        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
+
+private:
+
+    /** Contains update task body. */
+    void run();
+
+    /** Holds the options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeUsb m_fOptions;
 };
 
@@ -399,6 +444,9 @@
 private:
 
-    /** Creates update task for this element. */
-    UITask *createUpdateTask() { return new UIDetailsUpdateTaskUSB(machine()); }
+    /** Returns parsed extra-data options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeUsb parsedExtraDataOptions();
+
+    /** Creates update task for this element. */
+    UITask *createUpdateTask() { return new UIDetailsUpdateTaskUSB(machine(), parsedExtraDataOptions()); }
 };
 
@@ -412,11 +460,14 @@
 
     /** Constructs update task passing @a comMachine to the base-class. */
-    UIDetailsUpdateTaskSF(const CMachine &comMachine)
-        : UIDetailsUpdateTask(comMachine) {}
-
-private:
-
-    /** Contains update task body. */
-    void run();
+    UIDetailsUpdateTaskSF(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders fOptions)
+        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
+
+private:
+
+    /** Contains update task body. */
+    void run();
+
+    /** Holds the options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders m_fOptions;
 };
 
@@ -435,6 +486,9 @@
 private:
 
-    /** Creates update task for this element. */
-    UITask *createUpdateTask() { return new UIDetailsUpdateTaskSF(machine()); }
+    /** Returns parsed extra-data options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders parsedExtraDataOptions();
+
+    /** Creates update task for this element. */
+    UITask *createUpdateTask() { return new UIDetailsUpdateTaskSF(machine(), parsedExtraDataOptions()); }
 };
 
@@ -448,11 +502,14 @@
 
     /** Constructs update task passing @a comMachine to the base-class. */
-    UIDetailsUpdateTaskUI(const CMachine &comMachine)
-        : UIDetailsUpdateTask(comMachine) {}
-
-private:
-
-    /** Contains update task body. */
-    void run();
+    UIDetailsUpdateTaskUI(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface fOptions)
+        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
+
+private:
+
+    /** Contains update task body. */
+    void run();
+
+    /** Holds the options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface m_fOptions;
 };
 
@@ -471,6 +528,9 @@
 private:
 
-    /** Creates update task for this element. */
-    UITask *createUpdateTask() { return new UIDetailsUpdateTaskUI(machine()); }
+    /** Returns parsed extra-data options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface parsedExtraDataOptions();
+
+    /** Creates update task for this element. */
+    UITask *createUpdateTask() { return new UIDetailsUpdateTaskUI(machine(), parsedExtraDataOptions()); }
 };
 
@@ -484,11 +544,14 @@
 
     /** Constructs update task passing @a comMachine to the base-class. */
-    UIDetailsUpdateTaskDescription(const CMachine &comMachine)
-        : UIDetailsUpdateTask(comMachine) {}
-
-private:
-
-    /** Contains update task body. */
-    void run();
+    UIDetailsUpdateTaskDescription(const CMachine &comMachine, UIExtraDataMetaDefs::DetailsElementOptionTypeDescription fOptions)
+        : UIDetailsUpdateTask(comMachine), m_fOptions(fOptions) {}
+
+private:
+
+    /** Contains update task body. */
+    void run();
+
+    /** Holds the options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeDescription m_fOptions;
 };
 
@@ -507,6 +570,9 @@
 private:
 
-    /** Creates update task for this element. */
-    UITask *createUpdateTask() { return new UIDetailsUpdateTaskDescription(machine()); }
+    /** Returns parsed extra-data options. */
+    UIExtraDataMetaDefs::DetailsElementOptionTypeDescription parsedExtraDataOptions();
+
+    /** Creates update task for this element. */
+    UITask *createUpdateTask() { return new UIDetailsUpdateTaskDescription(machine(), parsedExtraDataOptions()); }
 };
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsModel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsModel.cpp	(revision 75426)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsModel.cpp	(revision 75427)
@@ -129,4 +129,9 @@
 
 void UIDetailsModel::sltHandleToggleFinished()
+{
+    m_pRoot->rebuildGroup();
+}
+
+void UIDetailsModel::sltHandleExtraDataOptionsChange(DetailsElementType)
 {
     m_pRoot->rebuildGroup();
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsModel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsModel.h	(revision 75426)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsModel.h	(revision 75427)
@@ -94,4 +94,7 @@
     void sltHandleToggleFinished();
 
+    /** Handle extra-data options change. */
+    void sltHandleExtraDataOptionsChange(DetailsElementType enmType);
+
 private slots:
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsSet.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsSet.h	(revision 75426)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsSet.h	(revision 75427)
@@ -71,6 +71,6 @@
           * @param  uStepId    Brings the step ID.
           * @param  iStepNumber  Brings the step number. */
-    /** @} */
-    virtual void sltBuildStep(const QUuid &uStepId, int iStepNumber) /* override */;
+        virtual void sltBuildStep(const QUuid &uStepId, int iStepNumber) /* override */;
+    /** @} */
 
 protected:
