Index: /trunk/include/VBox/log.h
===================================================================
--- /trunk/include/VBox/log.h	(revision 75340)
+++ /trunk/include/VBox/log.h	(revision 75341)
@@ -354,10 +354,4 @@
     /** Main group, IBIOSSettings. */
     LOG_GROUP_MAIN_BIOSSETTINGS,
-    /** Main group, ICaptureChangedEvent. */
-    LOG_GROUP_MAIN_CAPTURECHANGEDEVENT,
-    /** Main group, ICaptureSettings. */
-    LOG_GROUP_MAIN_CAPTURESETTINGS,
-    /** Main group, ICaptureScreenSettings. */
-    LOG_GROUP_MAIN_CAPTURESCREENSETTINGS,
     /** Main group, ICanShowWindowEvent. */
     LOG_GROUP_MAIN_CANSHOWWINDOWEVENT,
@@ -600,4 +594,10 @@
     /** Main group, IProgressTaskCompletedEvent. */
     LOG_GROUP_MAIN_PROGRESSTASKCOMPLETEDEVENT,
+    /** Main group, IRecordChangedEvent. */
+    LOG_GROUP_MAIN_RECORDCHANGEDEVENT,
+    /** Main group, IRecordSettings. */
+    LOG_GROUP_MAIN_RECORDSETTINGS,
+    /** Main group, IRecordScreenSettings. */
+    LOG_GROUP_MAIN_RECORDSCREENSETTINGS,
     /** Main group, IReusableEvent. */
     LOG_GROUP_MAIN_REUSABLEEVENT,
@@ -1004,7 +1004,4 @@
     "MAIN_BANDWIDTHGROUPCHANGEDEVENT", \
     "MAIN_BIOSSETTINGS", \
-    "MAIN_CAPTURECHANGEDEVENT", \
-    "MAIN_CAPTURESETTINGS", \
-    "MAIN_CAPTURESCREENSETTINGS", \
     "MAIN_CANSHOWWINDOWEVENT", \
     "MAIN_CERTIFICATE", \
@@ -1127,4 +1124,7 @@
     "MAIN_PROGRESSPERCENTAGECHANGEDEVENT", \
     "MAIN_PROGRESSTASKCOMPLETEDEVENT", \
+    "MAIN_RECORDCHANGEDEVENT", \
+    "MAIN_RECORDSETTINGS", \
+    "MAIN_RECORDSCREENSETTINGS", \
     "MAIN_REUSABLEEVENT", \
     "MAIN_RUNTIMEERROREVENT", \
Index: /trunk/include/VBox/settings.h
===================================================================
--- /trunk/include/VBox/settings.h	(revision 75340)
+++ /trunk/include/VBox/settings.h	(revision 75341)
@@ -481,12 +481,12 @@
 };
 
-/** List for keeping a capturing feature list. */
-typedef std::map<CaptureFeature_T, bool> CaptureFeatureMap;
-
-struct CaptureScreenSettings
-{
-    CaptureScreenSettings();
-
-    virtual ~CaptureScreenSettings();
+/** List for keeping a recording feature list. */
+typedef std::map<RecordFeature_T, bool> RecordFeatureMap;
+
+struct RecordScreenSettings
+{
+    RecordScreenSettings();
+
+    virtual ~RecordScreenSettings();
 
     void applyDefaults(void);
@@ -494,11 +494,11 @@
     bool areDefaultSettings(void) const;
 
-    bool isFeatureEnabled(CaptureFeature_T enmFeature) const;
-
-    bool operator==(const CaptureScreenSettings &d) const;
+    bool isFeatureEnabled(RecordFeature_T enmFeature) const;
+
+    bool operator==(const RecordScreenSettings &d) const;
 
     bool                 fEnabled;       // requires settings version 1.14 (VirtualBox 4.3)
-    CaptureDestination_T enmDest;        // new since VirtualBox 6.0.
-    CaptureFeatureMap    featureMap;     // new since VirtualBox 6.0.
+    RecordDestination_T enmDest;        // new since VirtualBox 6.0.
+    RecordFeatureMap    featureMap;     // new since VirtualBox 6.0.
     uint32_t             ulMaxTimeS;     // requires settings version 1.14 (VirtualBox 4.3)
     com::Utf8Str         strOptions;     // new since VirtualBox 5.2.
@@ -507,5 +507,5 @@
     {
         Audio()
-            : enmAudioCodec(CaptureAudioCodec_Opus)
+            : enmAudioCodec(RecordAudioCodec_Opus)
             , uHz(22050)
             , cBits(16)
@@ -513,5 +513,5 @@
 
         /** The audio codec type to use. */
-        CaptureAudioCodec_T enmAudioCodec; // new since VirtualBox 6.0.
+        RecordAudioCodec_T enmAudioCodec; // new since VirtualBox 6.0.
         /** Hz rate. */
         uint16_t            uHz;           // new since VirtualBox 6.0.
@@ -525,5 +525,5 @@
     {
         Video()
-            : enmCodec(CaptureVideoCodec_VP8)
+            : enmCodec(RecordVideoCodec_VP8)
             , ulWidth(1024)
             , ulHeight(768)
@@ -531,5 +531,5 @@
             , ulFPS(25) { }
 
-        CaptureVideoCodec_T  enmCodec;  // new since VirtualBox 6.0.
+        RecordVideoCodec_T  enmCodec;  // new since VirtualBox 6.0.
         uint32_t             ulWidth;   // requires settings version 1.14 (VirtualBox 4.3)
         uint32_t             ulHeight;  // requires settings version 1.14 (VirtualBox 4.3)
@@ -549,14 +549,14 @@
 
 /** Map for keeping settings per virtual screen. */
-typedef std::map<uint32_t, CaptureScreenSettings> CaptureScreenMap;
-
-/**
- * NOTE: If you add any fields in here, you must update a) the constructor and b)
- * the operator== which is used by MachineConfigFile::operator==(), or otherwise
- * your settings might never get saved.
- */
-struct CaptureSettings
-{
-    CaptureSettings();
+typedef std::map<uint32_t, RecordScreenSettings> RecordScreenMap;
+
+/**
+ * NOTE: If you add any fields in here, you must update a) the constructor and b)
+ * the operator== which is used by MachineConfigFile::operator==(), or otherwise
+ * your settings might never get saved.
+ */
+struct RecordSettings
+{
+    RecordSettings();
 
     void applyDefaults(void);
@@ -564,8 +564,8 @@
     bool areDefaultSettings(void) const;
 
-    bool operator==(const CaptureSettings &d) const;
-
-    bool             fEnabled;       // requires settings version 1.14 (VirtualBox 4.3)
-    CaptureScreenMap mapScreens;
+    bool operator==(const RecordSettings &d) const;
+
+    bool            fEnabled;       // requires settings version 1.14 (VirtualBox 4.3)
+    RecordScreenMap mapScreens;
 };
 
@@ -1039,5 +1039,5 @@
 
     BIOSSettings        biosSettings;
-    CaptureSettings     captureSettings;
+    RecordSettings      recordSettings;
     USB                 usbSettings;
     NetworkAdaptersList llNetworkAdapters;
Index: /trunk/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp	(revision 75340)
+++ /trunk/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp	(revision 75341)
@@ -465,10 +465,10 @@
              "   -start-paused, --start-paused     Start the VM in paused state\n"
 #ifdef VBOX_WITH_VIDEOREC
-             "   -c, -capture, --capture           Record the VM screen output to a file\n"
-             "   -w, --width                       Frame width when recording\n"
-             "   -h, --height                      Frame height when recording\n"
-             "   -r, --bitrate                     Recording bit rate when recording\n"
+             "   -c, -record, --record             Record the VM screen output to a file\n"
+             "   -w, --videowidth                  Video frame width when recording\n"
+             "   -h, --videoheight                 Video frame height when recording\n"
+             "   -r, --videobitrate                Recording bit rate when recording\n"
              "   -f, --filename                    File name when recording. The codec used\n"
-             "                                       will be chosen based on file extension\n"
+             "                                     will be chosen based on file extension\n"
 #endif
              "\n");
@@ -494,32 +494,32 @@
  *
  *        Use RTEnvGetEx instead! */
-    if ((pszEnvTemp = RTEnvGet("VBOX_CAPTUREWIDTH")) != 0)
+    if ((pszEnvTemp = RTEnvGet("VBOX_RECORDWIDTH")) != 0)
     {
         errno = 0;
         unsigned long ulFrameWidth = strtoul(pszEnvTemp, 0, 10);
         if (errno != 0)
-            LogError("VBoxHeadless: ERROR: invalid VBOX_CAPTUREWIDTH environment variable", 0);
+            LogError("VBoxHeadless: ERROR: invalid VBOX_RECORDWIDTH environment variable", 0);
         else
             *pulFrameWidth = ulFrameWidth;
     }
-    if ((pszEnvTemp = RTEnvGet("VBOX_CAPTUREHEIGHT")) != 0)
+    if ((pszEnvTemp = RTEnvGet("VBOX_RECORDHEIGHT")) != 0)
     {
         errno = 0;
         unsigned long ulFrameHeight = strtoul(pszEnvTemp, 0, 10);
         if (errno != 0)
-            LogError("VBoxHeadless: ERROR: invalid VBOX_CAPTUREHEIGHT environment variable", 0);
+            LogError("VBoxHeadless: ERROR: invalid VBOX_RECORDHEIGHT environment variable", 0);
         else
             *pulFrameHeight = ulFrameHeight;
     }
-    if ((pszEnvTemp = RTEnvGet("VBOX_CAPTUREBITRATE")) != 0)
+    if ((pszEnvTemp = RTEnvGet("VBOX_RECORDBITRATE")) != 0)
     {
         errno = 0;
         unsigned long ulBitRate = strtoul(pszEnvTemp, 0, 10);
         if (errno != 0)
-            LogError("VBoxHeadless: ERROR: invalid VBOX_CAPTUREBITRATE environment variable", 0);
+            LogError("VBoxHeadless: ERROR: invalid VBOX_RECORDBITRATE environment variable", 0);
         else
             *pulBitRate = ulBitRate;
     }
-    if ((pszEnvTemp = RTEnvGet("VBOX_CAPTUREFILE")) != 0)
+    if ((pszEnvTemp = RTEnvGet("VBOX_RECORDFILE")) != 0)
         *ppszFileName = pszEnvTemp;
 }
@@ -627,10 +627,10 @@
     unsigned fPaused = 0;
 #ifdef VBOX_WITH_VIDEOREC
-    bool fCaptureEnabled = false;
-    uint32_t ulCaptureVideoWidth = 800;
-    uint32_t ulCaptureVideoHeight = 600;
-    uint32_t ulCaptureVideoRate = 300000;
-    char szCaptureFileName[RTPATH_MAX];
-    const char *pszCaptureFileNameTemplate = "VBox-%d.webm"; /* .webm container by default. */
+    bool fRecordEnabled = false;
+    uint32_t ulRecordVideoWidth = 800;
+    uint32_t ulRecordVideoHeight = 600;
+    uint32_t ulRecordVideoRate = 300000;
+    char szRecordFileName[RTPATH_MAX];
+    const char *pszRecordFileNameTemplate = "VBox-%d.webm"; /* .webm container by default. */
 #endif /* VBOX_WITH_VIDEOREC */
 #ifdef RT_OS_WINDOWS
@@ -645,5 +645,5 @@
 #ifdef VBOX_WITH_VIDEOREC
     /* Parse the environment */
-    parse_environ(&ulCaptureVideoWidth, &ulCaptureVideoHeight, &ulCaptureVideoRate, &pszCaptureFileNameTemplate);
+    parse_environ(&ulRecordVideoWidth, &ulRecordVideoHeight, &ulRecordVideoRate, &pszRecordFileNameTemplate);
 #endif
 
@@ -697,9 +697,9 @@
         { "--settingspwfile", OPT_SETTINGSPW_FILE, RTGETOPT_REQ_STRING },
 #ifdef VBOX_WITH_VIDEOREC
-        { "-capture", 'c', 0 },
-        { "--capture", 'c', 0 },
-        { "--width", 'w', RTGETOPT_REQ_UINT32 },
-        { "--height", 'h', RTGETOPT_REQ_UINT32 }, /* great choice of short option! */
-        { "--bitrate", 'r', RTGETOPT_REQ_UINT32 },
+        { "-record", 'c', 0 },
+        { "--record", 'c', 0 },
+        { "--videowidth", 'w', RTGETOPT_REQ_UINT32 },
+        { "--videoheight", 'h', RTGETOPT_REQ_UINT32 }, /* great choice of short option! */
+        { "--videorate", 'r', RTGETOPT_REQ_UINT32 },
         { "--filename", 'f', RTGETOPT_REQ_STRING },
 #endif /* VBOX_WITH_VIDEOREC defined */
@@ -782,14 +782,14 @@
 #ifdef VBOX_WITH_VIDEOREC
             case 'c':
-                fCaptureEnabled = true;
+                fRecordEnabled = true;
                 break;
             case 'w':
-                ulCaptureVideoWidth = ValueUnion.u32;
+                ulRecordVideoWidth = ValueUnion.u32;
                 break;
             case 'r':
-                ulCaptureVideoRate = ValueUnion.u32;
+                ulRecordVideoRate = ValueUnion.u32;
                 break;
             case 'f':
-                pszCaptureFileNameTemplate = ValueUnion.psz;
+                pszRecordFileNameTemplate = ValueUnion.psz;
                 break;
 #endif /* VBOX_WITH_VIDEOREC defined */
@@ -798,5 +798,5 @@
                 if ((GetState.pDef->fFlags & RTGETOPT_REQ_MASK) != RTGETOPT_REQ_NOTHING)
                 {
-                    ulCaptureVideoHeight = ValueUnion.u32;
+                    ulRecordVideoHeight = ValueUnion.u32;
                     break;
                 }
@@ -818,24 +818,24 @@
 
 #ifdef VBOX_WITH_VIDEOREC
-    if (ulCaptureVideoWidth < 512 || ulCaptureVideoWidth > 2048 || ulCaptureVideoWidth % 2)
-    {
-        LogError("VBoxHeadless: ERROR: please specify an even frame width between 512 and 2048", 0);
+    if (ulRecordVideoWidth < 512 || ulRecordVideoWidth > 2048 || ulRecordVideoWidth % 2)
+    {
+        LogError("VBoxHeadless: ERROR: please specify an even video frame width between 512 and 2048", 0);
         return 1;
     }
-    if (ulCaptureVideoHeight < 384 || ulCaptureVideoHeight > 1536 || ulCaptureVideoHeight % 2)
-    {
-        LogError("VBoxHeadless: ERROR: please specify an even frame height between 384 and 1536", 0);
+    if (ulRecordVideoHeight < 384 || ulRecordVideoHeight > 1536 || ulRecordVideoHeight % 2)
+    {
+        LogError("VBoxHeadless: ERROR: please specify an even video frame height between 384 and 1536", 0);
         return 1;
     }
-    if (ulCaptureVideoRate < 300000 || ulCaptureVideoRate > 1000000)
-    {
-        LogError("VBoxHeadless: ERROR: please specify an even bitrate between 300000 and 1000000", 0);
+    if (ulRecordVideoRate < 300000 || ulRecordVideoRate > 1000000)
+    {
+        LogError("VBoxHeadless: ERROR: please specify an even video bitrate between 300000 and 1000000", 0);
         return 1;
     }
     /* Make sure we only have %d or %u (or none) in the file name specified */
-    char *pcPercent = (char*)strchr(pszCaptureFileNameTemplate, '%');
+    char *pcPercent = (char*)strchr(pszRecordFileNameTemplate, '%');
     if (pcPercent != 0 && *(pcPercent + 1) != 'd' && *(pcPercent + 1) != 'u')
     {
-        LogError("VBoxHeadless: ERROR: Only %%d and %%u are allowed in the capture file name.", -1);
+        LogError("VBoxHeadless: ERROR: Only %%d and %%u are allowed in the recording file name.", -1);
         return 1;
     }
@@ -843,8 +843,8 @@
     if (pcPercent != 0 && strchr(pcPercent + 1, '%') != 0)
     {
-        LogError("VBoxHeadless: ERROR: Only one format modifier is allowed in the capture file name.", -1);
+        LogError("VBoxHeadless: ERROR: Only one format modifier is allowed in the recording file name.", -1);
         return 1;
     }
-    RTStrPrintf(&szCaptureFileName[0], RTPATH_MAX, pszCaptureFileNameTemplate, RTProcSelf());
+    RTStrPrintf(&szRecordFileName[0], RTPATH_MAX, pszRecordFileNameTemplate, RTProcSelf());
 #endif /* defined VBOX_WITH_VIDEOREC */
 
@@ -959,21 +959,21 @@
 
 #ifdef VBOX_WITH_VIDEOREC
-        if (fCaptureEnabled)
-        {
-            ComPtr<ICaptureSettings> captureSettings;
-            CHECK_ERROR_BREAK(machine, COMGETTER(CaptureSettings)(captureSettings.asOutParam()));
-            CHECK_ERROR_BREAK(captureSettings, COMSETTER(Enabled)(TRUE));
-
-            SafeIfaceArray <ICaptureScreenSettings> saCaptureScreenScreens;
-            CHECK_ERROR_BREAK(captureSettings, COMGETTER(Screens)(ComSafeArrayAsOutParam(saCaptureScreenScreens)));
+        if (fRecordEnabled)
+        {
+            ComPtr<IRecordSettings> RecordSettings;
+            CHECK_ERROR_BREAK(machine, COMGETTER(RecordSettings)(RecordSettings.asOutParam()));
+            CHECK_ERROR_BREAK(RecordSettings, COMSETTER(Enabled)(TRUE));
+
+            SafeIfaceArray <IRecordScreenSettings> saRecordScreenScreens;
+            CHECK_ERROR_BREAK(RecordSettings, COMGETTER(Screens)(ComSafeArrayAsOutParam(saRecordScreenScreens)));
 
             /* Note: For now all screens have the same configuration. */
-            for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
-            {
-                CHECK_ERROR_BREAK(saCaptureScreenScreens[i], COMSETTER(Enabled)(TRUE));
-                CHECK_ERROR_BREAK(saCaptureScreenScreens[i], COMSETTER(FileName)(Bstr(szCaptureFileName).raw()));
-                CHECK_ERROR_BREAK(saCaptureScreenScreens[i], COMSETTER(VideoWidth)(ulCaptureVideoWidth));
-                CHECK_ERROR_BREAK(saCaptureScreenScreens[i], COMSETTER(VideoHeight)(ulCaptureVideoHeight));
-                CHECK_ERROR_BREAK(saCaptureScreenScreens[i], COMSETTER(VideoRate)(ulCaptureVideoRate));
+            for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+            {
+                CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(Enabled)(TRUE));
+                CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(FileName)(Bstr(szRecordFileName).raw()));
+                CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(VideoWidth)(ulRecordVideoWidth));
+                CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(VideoHeight)(ulRecordVideoHeight));
+                CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(VideoRate)(ulRecordVideoRate));
             }
         }
@@ -1228,11 +1228,11 @@
 
 #ifdef VBOX_WITH_VIDEOREC
-        if (fCaptureEnabled)
+        if (fRecordEnabled)
         {
             if (!machine.isNull())
             {
-                ComPtr<ICaptureSettings> captureSettings;
-                CHECK_ERROR_BREAK(machine, COMGETTER(CaptureSettings)(captureSettings.asOutParam()));
-                CHECK_ERROR_BREAK(captureSettings, COMSETTER(Enabled)(FALSE));
+                ComPtr<IRecordSettings> RecordSettings;
+                CHECK_ERROR_BREAK(machine, COMGETTER(RecordSettings)(RecordSettings.asOutParam()));
+                CHECK_ERROR_BREAK(RecordSettings, COMSETTER(Enabled)(FALSE));
             }
         }
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp	(revision 75340)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp	(revision 75341)
@@ -1855,5 +1855,5 @@
         }
 #ifdef VBOX_WITH_VIDEOREC
-        else if (!strcmp(a->argv[1], "capture"))
+        else if (!strcmp(a->argv[1], "record"))
         {
             if (a->argc < 3)
@@ -1864,9 +1864,9 @@
             }
 
-            ComPtr<ICaptureSettings> captureSettings;
-            CHECK_ERROR_BREAK(machine, COMGETTER(CaptureSettings)(captureSettings.asOutParam()));
-
-            SafeIfaceArray <ICaptureScreenSettings> saCaptureScreenScreens;
-            CHECK_ERROR_BREAK(captureSettings, COMGETTER(Screens)(ComSafeArrayAsOutParam(saCaptureScreenScreens)));
+            ComPtr<IRecordSettings> RecordSettings;
+            CHECK_ERROR_BREAK(machine, COMGETTER(RecordSettings)(RecordSettings.asOutParam()));
+
+            SafeIfaceArray <IRecordScreenSettings> saRecordScreenScreens;
+            CHECK_ERROR_BREAK(RecordSettings, COMGETTER(Screens)(ComSafeArrayAsOutParam(saRecordScreenScreens)));
 
             /* Note: For now all screens have the same configuration. */
@@ -1876,11 +1876,11 @@
              *       kept to ensure backwards compatibility.
              */
-            if (!strcmp(a->argv[2], "enable"))
-            {
-                CHECK_ERROR_RET(captureSettings, COMSETTER(Enabled)(TRUE), RTEXITCODE_FAILURE);
-            }
-            else if (!strcmp(a->argv[2], "disable"))
-            {
-                CHECK_ERROR_RET(captureSettings, COMSETTER(Enabled)(FALSE), RTEXITCODE_FAILURE);
+            if (!strcmp(a->argv[2], "on"))
+            {
+                CHECK_ERROR_RET(RecordSettings, COMSETTER(Enabled)(TRUE), RTEXITCODE_FAILURE);
+            }
+            else if (!strcmp(a->argv[2], "off"))
+            {
+                CHECK_ERROR_RET(RecordSettings, COMSETTER(Enabled)(FALSE), RTEXITCODE_FAILURE);
             }
             else if (!strcmp(a->argv[2], "screens"))
@@ -1930,6 +1930,6 @@
                 }
 
-                for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
-                    CHECK_ERROR_BREAK(saCaptureScreenScreens[i], COMSETTER(Enabled)(saScreens[i]));
+                for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+                    CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(Enabled)(saScreens[i]));
             }
             else if (!strcmp(a->argv[2], "filename"))
@@ -1942,9 +1942,9 @@
                 }
 
-                for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
-                    CHECK_ERROR_BREAK(saCaptureScreenScreens[i], COMSETTER(FileName)(Bstr(a->argv[2]).raw()));
-            }
-            else if (   !strcmp(a->argv[2], "res")
-                     || !strcmp(a->argv[2], "resolution"))
+                for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+                    CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(FileName)(Bstr(a->argv[2]).raw()));
+            }
+            else if (   !strcmp(a->argv[2], "videores")
+                     || !strcmp(a->argv[2], "videoresolution"))
             {
                 if (a->argc != 5)
@@ -1972,8 +1972,8 @@
                 }
 
-                for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
-                {
-                    CHECK_ERROR_BREAK(saCaptureScreenScreens[i], COMSETTER(VideoWidth)(uVal));
-                    CHECK_ERROR_BREAK(saCaptureScreenScreens[i], COMSETTER(VideoHeight)(uVal));
+                for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+                {
+                    CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(VideoWidth)(uVal));
+                    CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(VideoHeight)(uVal));
                 }
             }
@@ -1996,6 +1996,6 @@
                 }
 
-                for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
-                    CHECK_ERROR_BREAK(saCaptureScreenScreens[i], COMSETTER(VideoRate)(uVal));
+                for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+                    CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(VideoRate)(uVal));
             }
             else if (!strcmp(a->argv[2], "videofps"))
@@ -2017,6 +2017,6 @@
                 }
 
-                for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
-                    CHECK_ERROR_BREAK(saCaptureScreenScreens[i], COMSETTER(VideoFPS)(uVal));
+                for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+                    CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(VideoFPS)(uVal));
             }
             else if (!strcmp(a->argv[2], "maxtime"))
@@ -2038,6 +2038,6 @@
                 }
 
-                for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
-                    CHECK_ERROR_BREAK(saCaptureScreenScreens[i], COMSETTER(MaxTime)(uVal));
+                for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+                    CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(MaxTime)(uVal));
             }
             else if (!strcmp(a->argv[2], "maxfilesize"))
@@ -2059,6 +2059,6 @@
                 }
 
-                for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
-                    CHECK_ERROR_BREAK(saCaptureScreenScreens[i], COMSETTER(MaxFileSize)(uVal));
+                for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+                    CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(MaxFileSize)(uVal));
             }
             else if (!strcmp(a->argv[2], "opts"))
@@ -2071,6 +2071,6 @@
                 }
 
-                for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
-                    CHECK_ERROR_BREAK(saCaptureScreenScreens[i], COMSETTER(Options)(Bstr(a->argv[3]).raw()));
+                for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+                    CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(Options)(Bstr(a->argv[3]).raw()));
             }
         }
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp	(revision 75340)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp	(revision 75341)
@@ -713,13 +713,13 @@
 #endif
 #ifdef VBOX_WITH_VIDEOREC
-                     "                            [--capture on|off]\n"
-                     "                            [--capture screens all|<screen ID> [<screen ID> ...]]\n"
-                     "                            [--capture filename <filename>]\n"
-                     "                            [--capture resolution <width> <height>]\n"
-                     "                            [--capture videorate <rate>]\n"
-                     "                            [--capture videofps <fps>]\n"
-                     "                            [--capture maxtime <ms>]\n"
-                     "                            [--capture maxfilesize <MB>]\n"
-                     "                            [--capture opts <key=value> [,<key=value> ...]]\n"
+                     "                            [--record on|off]\n"
+                     "                            [--record screens all|<screen ID> [<screen ID> ...]]\n"
+                     "                            [--record filename <filename>]\n"
+                     "                            [--record videores <width> <height>]\n"
+                     "                            [--record videorate <rate>]\n"
+                     "                            [--record videofps <fps>]\n"
+                     "                            [--record maxtime <ms>]\n"
+                     "                            [--record maxfilesize <MB>]\n"
+                     "                            [--record opts <key=value> [,<key=value> ...]]\n"
 #endif
                      "                            [--defaultfrontend default|<name>]\n"
@@ -832,12 +832,12 @@
                      "                            screenshotpng <file> [display] |\n"
 #ifdef VBOX_WITH_VIDEOREC
-                     "                            capture on|off |\n"
-                     "                            capture screens all|none|<screen>,[<screen>...] |\n"
-                     "                            capture filename <file> |\n"
-                     "                            capture resolution <width>x<height> |\n"
-                     "                            capture videorate <rate> |\n"
-                     "                            capture videofps <fps> |\n"
-                     "                            capture maxtime <s> |\n"
-                     "                            capture maxfilesize <MB> |\n"
+                     "                            record on|off |\n"
+                     "                            record screens all|none|<screen>,[<screen>...] |\n"
+                     "                            record filename <file> |\n"
+                     "                            record videores <width>x<height> |\n"
+                     "                            record videorate <rate> |\n"
+                     "                            record videofps <fps> |\n"
+                     "                            record maxtime <s> |\n"
+                     "                            record maxfilesize <MB> |\n"
 #endif /* VBOX_WITH_VIDEOREC */
                      "                            setcredentials <username>\n"
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp	(revision 75340)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp	(revision 75341)
@@ -2379,9 +2379,9 @@
 # endif
 
-        ComPtr<ICaptureSettings> captureSettings;
-        CHECK_ERROR_RET(machine, COMGETTER(CaptureSettings)(captureSettings.asOutParam()), rc);
-
-        SafeIfaceArray <ICaptureScreenSettings> saCaptureScreenScreens;
-        CHECK_ERROR_RET(captureSettings, COMGETTER(Screens)(ComSafeArrayAsOutParam(saCaptureScreenScreens)), rc);
+        ComPtr<IRecordSettings> RecordSettings;
+        CHECK_ERROR_RET(machine, COMGETTER(RecordSettings)(RecordSettings.asOutParam()), rc);
+
+        SafeIfaceArray <IRecordScreenSettings> saCaptureScreenScreens;
+        CHECK_ERROR_RET(RecordSettings, COMGETTER(Screens)(ComSafeArrayAsOutParam(saCaptureScreenScreens)), rc);
 
         /* For now all screens have the same configuration; so take screen 0 and work with that. */
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp	(revision 75340)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp	(revision 75341)
@@ -215,16 +215,16 @@
 #endif
 #ifdef VBOX_WITH_VIDEOREC
-    MODIFYVM_CAPTURE,
-    MODIFYVM_CAPTURE_FEATURES,
-    MODIFYVM_CAPTURE_SCREENS,
-    MODIFYVM_CAPTURE_FILENAME,
-    MODIFYVM_CAPTURE_WIDTH,
-    MODIFYVM_CAPTURE_HEIGHT,
-    MODIFYVM_CAPTURE_VIDEO_RES,
-    MODIFYVM_CAPTURE_VIDEO_RATE,
-    MODIFYVM_CAPTURE_VIDEO_FPS,
-    MODIFYVM_CAPTURE_MAXTIME,
-    MODIFYVM_CAPTURE_MAXSIZE,
-    MODIFYVM_CAPTURE_OPTIONS,
+    MODIFYVM_RECORD,
+    MODIFYVM_RECORD_FEATURES,
+    MODIFYVM_RECORD_SCREENS,
+    MODIFYVM_RECORD_FILENAME,
+    MODIFYVM_RECORD_VIDEO_WIDTH,
+    MODIFYVM_RECORD_VIDEO_HEIGHT,
+    MODIFYVM_RECORD_VIDEO_RES,
+    MODIFYVM_RECORD_VIDEO_RATE,
+    MODIFYVM_RECORD_VIDEO_FPS,
+    MODIFYVM_RECORD_MAXTIME,
+    MODIFYVM_RECORD_MAXSIZE,
+    MODIFYVM_RECORD_OPTIONS,
 #endif
     MODIFYVM_CHIPSET,
@@ -395,14 +395,14 @@
     { "--chipset",                  MODIFYVM_CHIPSET,                   RTGETOPT_REQ_STRING },
 #ifdef VBOX_WITH_VIDEOREC
-    { "--capture",                  MODIFYVM_CAPTURE,                    RTGETOPT_REQ_BOOL_ONOFF },
-    { "--capturescreens",           MODIFYVM_CAPTURE_SCREENS,            RTGETOPT_REQ_STRING },
-    { "--capturefile",              MODIFYVM_CAPTURE_FILENAME,           RTGETOPT_REQ_STRING },
-    { "--capturemaxtime",           MODIFYVM_CAPTURE_MAXTIME,            RTGETOPT_REQ_INT32  },
-    { "--capturemaxsize",           MODIFYVM_CAPTURE_MAXSIZE,            RTGETOPT_REQ_INT32  },
-    { "--captureopts",              MODIFYVM_CAPTURE_OPTIONS,            RTGETOPT_REQ_STRING },
-    { "--captureoptions",           MODIFYVM_CAPTURE_OPTIONS,            RTGETOPT_REQ_STRING },
-    { "--capturevideores",          MODIFYVM_CAPTURE_VIDEO_RES,          RTGETOPT_REQ_STRING },
-    { "--capturevideorate",         MODIFYVM_CAPTURE_VIDEO_RATE,         RTGETOPT_REQ_UINT32 },
-    { "--capturevideofps",          MODIFYVM_CAPTURE_VIDEO_FPS,          RTGETOPT_REQ_UINT32 },
+    { "--record",                   MODIFYVM_RECORD,                    RTGETOPT_REQ_BOOL_ONOFF },
+    { "--recordscreens",            MODIFYVM_RECORD_SCREENS,            RTGETOPT_REQ_STRING },
+    { "--recordfile",               MODIFYVM_RECORD_FILENAME,           RTGETOPT_REQ_STRING },
+    { "--recordmaxtime",            MODIFYVM_RECORD_MAXTIME,            RTGETOPT_REQ_INT32  },
+    { "--recordmaxsize",            MODIFYVM_RECORD_MAXSIZE,            RTGETOPT_REQ_INT32  },
+    { "--recordopts",               MODIFYVM_RECORD_OPTIONS,            RTGETOPT_REQ_STRING },
+    { "--recordoptions",            MODIFYVM_RECORD_OPTIONS,            RTGETOPT_REQ_STRING },
+    { "--recordvideores",           MODIFYVM_RECORD_VIDEO_RES,          RTGETOPT_REQ_STRING },
+    { "--recordvideorate",          MODIFYVM_RECORD_VIDEO_RATE,         RTGETOPT_REQ_UINT32 },
+    { "--recordvideofps",           MODIFYVM_RECORD_VIDEO_FPS,          RTGETOPT_REQ_UINT32 },
 #endif
     { "--autostart-enabled",        MODIFYVM_AUTOSTART_ENABLED,         RTGETOPT_REQ_BOOL_ONOFF },
@@ -2928,39 +2928,39 @@
             }
 #ifdef VBOX_WITH_VIDEOREC
-            case MODIFYVM_CAPTURE:
+            case MODIFYVM_RECORD:
                 RT_FALL_THROUGH();
-            case MODIFYVM_CAPTURE_SCREENS:
+            case MODIFYVM_RECORD_SCREENS:
                 RT_FALL_THROUGH();
-            case MODIFYVM_CAPTURE_FILENAME:
+            case MODIFYVM_RECORD_FILENAME:
                 RT_FALL_THROUGH();
-            case MODIFYVM_CAPTURE_WIDTH:
+            case MODIFYVM_RECORD_VIDEO_WIDTH:
                 RT_FALL_THROUGH();
-            case MODIFYVM_CAPTURE_HEIGHT:
+            case MODIFYVM_RECORD_VIDEO_HEIGHT:
                 RT_FALL_THROUGH();
-            case MODIFYVM_CAPTURE_VIDEO_RES:
+            case MODIFYVM_RECORD_VIDEO_RES:
                 RT_FALL_THROUGH();
-            case MODIFYVM_CAPTURE_VIDEO_RATE:
+            case MODIFYVM_RECORD_VIDEO_RATE:
                 RT_FALL_THROUGH();
-            case MODIFYVM_CAPTURE_VIDEO_FPS:
+            case MODIFYVM_RECORD_VIDEO_FPS:
                 RT_FALL_THROUGH();
-            case MODIFYVM_CAPTURE_MAXTIME:
+            case MODIFYVM_RECORD_MAXTIME:
                 RT_FALL_THROUGH();
-            case MODIFYVM_CAPTURE_MAXSIZE:
+            case MODIFYVM_RECORD_MAXSIZE:
                 RT_FALL_THROUGH();
-            case MODIFYVM_CAPTURE_OPTIONS:
-            {
-                ComPtr<ICaptureSettings> captureSettings;
-                CHECK_ERROR_BREAK(machine, COMGETTER(CaptureSettings)(captureSettings.asOutParam()));
-                SafeIfaceArray <ICaptureScreenSettings> saCaptureScreenScreens;
-                CHECK_ERROR_BREAK(captureSettings, COMGETTER(Screens)(ComSafeArrayAsOutParam(saCaptureScreenScreens)));
+            case MODIFYVM_RECORD_OPTIONS:
+            {
+                ComPtr<IRecordSettings> RecordSettings;
+                CHECK_ERROR_BREAK(machine, COMGETTER(RecordSettings)(RecordSettings.asOutParam()));
+                SafeIfaceArray <IRecordScreenSettings> saRecordScreenScreens;
+                CHECK_ERROR_BREAK(RecordSettings, COMGETTER(Screens)(ComSafeArrayAsOutParam(saRecordScreenScreens)));
 
                 switch (c)
                 {
-                    case MODIFYVM_CAPTURE:
-                    {
-                        CHECK_ERROR(captureSettings, COMSETTER(Enabled)(ValueUnion.f));
+                    case MODIFYVM_RECORD:
+                    {
+                        CHECK_ERROR(RecordSettings, COMSETTER(Enabled)(ValueUnion.f));
                         break;
                     }
-                    case MODIFYVM_CAPTURE_SCREENS:
+                    case MODIFYVM_RECORD_SCREENS:
                     {
                         ULONG cMonitors = 64;
@@ -2974,12 +2974,12 @@
                         }
 
-                        if (cMonitors > saCaptureScreenScreens.size()) /* Paranoia. */
-                            cMonitors = (ULONG)saCaptureScreenScreens.size();
+                        if (cMonitors > saRecordScreenScreens.size()) /* Paranoia. */
+                            cMonitors = (ULONG)saRecordScreenScreens.size();
 
                         for (size_t i = 0; i < cMonitors; ++i)
-                            CHECK_ERROR_BREAK(saCaptureScreenScreens[i], COMSETTER(Enabled)(screens[i]));
+                            CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(Enabled)(screens[i]));
                         break;
                     }
-                    case MODIFYVM_CAPTURE_FILENAME:
+                    case MODIFYVM_RECORD_FILENAME:
                     {
                         Bstr bstr;
@@ -2998,21 +2998,21 @@
                         }
 
-                        for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
-                            CHECK_ERROR(saCaptureScreenScreens[i], COMSETTER(FileName)(bstr.raw()));
+                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(FileName)(bstr.raw()));
                         break;
                     }
-                    case MODIFYVM_CAPTURE_WIDTH:
-                    {
-                        for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
-                            CHECK_ERROR(saCaptureScreenScreens[i], COMSETTER(VideoWidth)(ValueUnion.u32));
+                    case MODIFYVM_RECORD_VIDEO_WIDTH:
+                    {
+                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(VideoWidth)(ValueUnion.u32));
                         break;
                     }
-                    case MODIFYVM_CAPTURE_HEIGHT:
-                    {
-                        for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
-                            CHECK_ERROR(saCaptureScreenScreens[i], COMSETTER(VideoHeight)(ValueUnion.u32));
+                    case MODIFYVM_RECORD_VIDEO_HEIGHT:
+                    {
+                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(VideoHeight)(ValueUnion.u32));
                         break;
                     }
-                    case MODIFYVM_CAPTURE_VIDEO_RES:
+                    case MODIFYVM_RECORD_VIDEO_RES:
                     {
                         uint32_t uWidth = 0;
@@ -3034,40 +3034,40 @@
                         }
 
-                        for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
+                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
                         {
-                            CHECK_ERROR(saCaptureScreenScreens[i], COMSETTER(VideoWidth)(uWidth));
-                            CHECK_ERROR(saCaptureScreenScreens[i], COMSETTER(VideoHeight)(uHeight));
+                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(VideoWidth)(uWidth));
+                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(VideoHeight)(uHeight));
                         }
                         break;
                     }
-                    case MODIFYVM_CAPTURE_VIDEO_RATE:
-                    {
-                        for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
-                            CHECK_ERROR(saCaptureScreenScreens[i], COMSETTER(VideoRate)(ValueUnion.u32));
+                    case MODIFYVM_RECORD_VIDEO_RATE:
+                    {
+                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(VideoRate)(ValueUnion.u32));
                         break;
                     }
-                    case MODIFYVM_CAPTURE_VIDEO_FPS:
-                    {
-                        for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
-                            CHECK_ERROR(saCaptureScreenScreens[i], COMSETTER(VideoFPS)(ValueUnion.u32));
+                    case MODIFYVM_RECORD_VIDEO_FPS:
+                    {
+                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(VideoFPS)(ValueUnion.u32));
                         break;
                     }
-                    case MODIFYVM_CAPTURE_MAXTIME:
-                    {
-                        for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
-                            CHECK_ERROR(saCaptureScreenScreens[i], COMSETTER(MaxTime)(ValueUnion.u32));
+                    case MODIFYVM_RECORD_MAXTIME:
+                    {
+                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(MaxTime)(ValueUnion.u32));
                         break;
                     }
-                    case MODIFYVM_CAPTURE_MAXSIZE:
-                    {
-                        for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
-                            CHECK_ERROR(saCaptureScreenScreens[i], COMSETTER(MaxFileSize)(ValueUnion.u32));
+                    case MODIFYVM_RECORD_MAXSIZE:
+                    {
+                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(MaxFileSize)(ValueUnion.u32));
                         break;
                     }
-                    case MODIFYVM_CAPTURE_OPTIONS:
+                    case MODIFYVM_RECORD_OPTIONS:
                     {
                         Bstr bstr(ValueUnion.psz);
-                        for (size_t i = 0; i < saCaptureScreenScreens.size(); ++i)
-                            CHECK_ERROR(saCaptureScreenScreens[i], COMSETTER(Options)(bstr.raw()));
+                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(Options)(bstr.raw()));
                         break;
                     }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp	(revision 75340)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp	(revision 75341)
@@ -375,5 +375,5 @@
             break;
         }
-        case KVBoxEventType_OnCaptureChanged:
+        case KVBoxEventType_OnRecordChanged:
         {
             emit sigRecordingChange();
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElements.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElements.cpp	(revision 75340)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElements.cpp	(revision 75341)
@@ -44,6 +44,6 @@
 # include "CMediumAttachment.h"
 # include "CAudioAdapter.h"
-# include "CCaptureSettings.h"
-# include "CCaptureScreenSettings.h"
+# include "CRecordSettings.h"
+# include "CRecordScreenSettings.h"
 # include "CNetworkAdapter.h"
 # include "CSerialPort.h"
@@ -450,9 +450,9 @@
 
         /* Recording info: */
-        CCaptureSettings comRecordingSettings = machine.GetCaptureSettings();
+        CRecordSettings comRecordingSettings = machine.GetRecordSettings();
         if (comRecordingSettings.GetEnabled())
         {
             /* For now all screens have the same config: */
-            CCaptureScreenSettings comRecordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
+            CRecordScreenSettings comRecordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
 
             /** @todo r=andy Refine these texts (wrt audio and/or video). */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.cpp	(revision 75340)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.cpp	(revision 75341)
@@ -188,5 +188,5 @@
         << KVBoxEventType_OnVRDEServerChanged
         << KVBoxEventType_OnVRDEServerInfoChanged
-        << KVBoxEventType_OnCaptureChanged
+        << KVBoxEventType_OnRecordChanged
         << KVBoxEventType_OnUSBControllerChanged
         << KVBoxEventType_OnUSBDeviceStateChanged
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.cpp	(revision 75340)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.cpp	(revision 75341)
@@ -43,6 +43,6 @@
 /* COM includes: */
 # include "CAudioAdapter.h"
-# include "CCaptureSettings.h"
-# include "CCaptureScreenSettings.h"
+# include "CRecordSettings.h"
+# include "CRecordScreenSettings.h"
 # include "CConsole.h"
 # include "CMachine.h"
@@ -884,5 +884,5 @@
 
         /* Update indicator state early: */
-        CCaptureSettings comRecordingSettings = comMachine.GetCaptureSettings();
+        CRecordSettings comRecordingSettings = comMachine.GetRecordSettings();
         Assert(comRecordingSettings.isOk());
         if (!comRecordingSettings.GetEnabled())
@@ -918,5 +918,5 @@
 
                 /* For now all screens have the same config: */
-                CCaptureScreenSettings comRecordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
+                CRecordScreenSettings comRecordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
                 Assert(comRecordingScreen0Settings.isOk());
 
@@ -943,5 +943,5 @@
     void setRotationAngle(double dRotationAngle) { m_dRotationAngle = dRotationAngle; update(); }
 
-    /* Parses CaptureScreenSettings::Options and updates m_enmRecordingMode accordingly. */
+    /* Parses RecordScreenSettings::Options and updates m_enmRecordingMode accordingly. */
     void updateRecordingMode()
     {
@@ -955,11 +955,11 @@
             return;
 
-        CCaptureSettings comRecordingSettings = comMachine.GetCaptureSettings();
+        CRecordSettings comRecordingSettings = comMachine.GetRecordSettings();
         /* For now all screens have the same config: */
-        CCaptureScreenSettings recordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
-        if (recordingScreen0Settings.IsFeatureEnabled(KCaptureFeature_Video))
+        CRecordScreenSettings recordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
+        if (recordingScreen0Settings.IsFeatureEnabled(KRecordFeature_Video))
             m_enmRecordingMode = (UIIndicatorStateRecordingMode)((int)m_enmRecordingMode | (int)UIIndicatorStateRecordingMode_Video);
 
-        if (recordingScreen0Settings.IsFeatureEnabled(KCaptureFeature_Audio))
+        if (recordingScreen0Settings.IsFeatureEnabled(KRecordFeature_Audio))
             m_enmRecordingMode = (UIIndicatorStateRecordingMode)((int)m_enmRecordingMode | (int)UIIndicatorStateRecordingMode_Audio);
     }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 75340)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 75341)
@@ -77,5 +77,5 @@
 /* COM includes: */
 # include "CAudioAdapter.h"
-# include "CCaptureSettings.h"
+# include "CRecordSettings.h"
 # include "CVirtualBoxErrorInfo.h"
 # include "CMachineDebugger.h"
@@ -2104,5 +2104,5 @@
 
     /* Make sure something had changed: */
-    CCaptureSettings comRecordingSettings = machine().GetCaptureSettings();
+    CRecordSettings comRecordingSettings = machine().GetRecordSettings();
     if (comRecordingSettings.GetEnabled() == static_cast<BOOL>(fEnabled))
         return;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 75340)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 75341)
@@ -60,5 +60,5 @@
 /* COM includes: */
 # include "CAudioAdapter.h"
-# include "CCaptureSettings.h"
+# include "CRecordSettings.h"
 # include "CSystemProperties.h"
 # include "CStorageController.h"
@@ -724,5 +724,5 @@
 void UISession::sltRecordingChange()
 {
-    CCaptureSettings comRecordingSettings = machine().GetCaptureSettings();
+    CRecordSettings comRecordingSettings = machine().GetRecordSettings();
 
     /* Check/Uncheck Capture action depending on feature status: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.cpp	(revision 75340)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.cpp	(revision 75341)
@@ -31,6 +31,6 @@
 
 /* COM includes: */
-# include "CCaptureSettings.h"
-# include "CCaptureScreenSettings.h"
+# include "CRecordSettings.h"
+# include "CRecordScreenSettings.h"
 # include "CExtPack.h"
 # include "CExtPackManager.h"
@@ -383,10 +383,10 @@
 
     /* Gather old 'Recording' data: */
-    CCaptureSettings recordingSettings = m_machine.GetCaptureSettings();
+    CRecordSettings recordingSettings = m_machine.GetRecordSettings();
     Assert(recordingSettings.isNotNull());
     oldDisplayData.m_fRecordingEnabled = recordingSettings.GetEnabled();
 
     /* For now we're using the same settings for all screens; so get settings from screen 0 and work with that. */
-    CCaptureScreenSettings recordingScreen0Settings = recordingSettings.GetScreenSettings(0);
+    CRecordScreenSettings recordingScreen0Settings = recordingSettings.GetScreenSettings(0);
     if (!recordingScreen0Settings.isNull())
     {
@@ -400,9 +400,9 @@
     }
 
-    CCaptureScreenSettingsVector recordingScreenSettingsVector = recordingSettings.GetScreens();
+    CRecordScreenSettingsVector recordingScreenSettingsVector = recordingSettings.GetScreens();
     oldDisplayData.m_vecRecordingScreens.resize(recordingScreenSettingsVector.size());
     for (int iScreenIndex = 0; iScreenIndex < recordingScreenSettingsVector.size(); ++iScreenIndex)
     {
-        CCaptureScreenSettings recordingScreenSettings = recordingScreenSettingsVector.at(iScreenIndex);
+        CRecordScreenSettings recordingScreenSettings = recordingScreenSettingsVector.at(iScreenIndex);
         if (!recordingScreenSettings.isNull())
             oldDisplayData.m_vecRecordingScreens[iScreenIndex] = recordingScreenSettings.GetEnabled();
@@ -1511,5 +1511,5 @@
         const UIDataSettingsMachineDisplay &newDisplayData = m_pCache->data();
 
-        CCaptureSettings recordingSettings = m_machine.GetCaptureSettings();
+        CRecordSettings recordingSettings = m_machine.GetRecordSettings();
         Assert(recordingSettings.isNotNull());
 
@@ -1533,11 +1533,11 @@
                 if (fSuccess)
                 {
-                    CCaptureScreenSettingsVector captureScreenSettingsVector = recordingSettings.GetScreens();
-                    for (int iScreenIndex = 0; fSuccess && iScreenIndex < captureScreenSettingsVector.size(); ++iScreenIndex)
+                    CRecordScreenSettingsVector RecordScreenSettingsVector = recordingSettings.GetScreens();
+                    for (int iScreenIndex = 0; fSuccess && iScreenIndex < RecordScreenSettingsVector.size(); ++iScreenIndex)
                     {
                         if (newDisplayData.m_vecRecordingScreens[iScreenIndex] == oldDisplayData.m_vecRecordingScreens[iScreenIndex])
                             continue;
 
-                        CCaptureScreenSettings recordingScreenSettings = captureScreenSettingsVector.at(iScreenIndex);
+                        CRecordScreenSettings recordingScreenSettings = RecordScreenSettingsVector.at(iScreenIndex);
                         recordingScreenSettings.SetEnabled(newDisplayData.m_vecRecordingScreens[iScreenIndex]);
                         fSuccess = recordingScreenSettings.isOk();
@@ -1548,5 +1548,5 @@
             else
             {
-                CCaptureScreenSettingsVector recordingScreenSettingsVector = recordingSettings.GetScreens();
+                CRecordScreenSettingsVector recordingScreenSettingsVector = recordingSettings.GetScreens();
                 for (int iScreenIndex = 0; fSuccess && iScreenIndex < recordingScreenSettingsVector.size(); ++iScreenIndex)
                 {
@@ -1554,5 +1554,5 @@
                         continue;
 
-                    CCaptureScreenSettings recordingScreenSettings = recordingScreenSettingsVector.at(iScreenIndex);
+                    CRecordScreenSettings recordingScreenSettings = recordingScreenSettingsVector.at(iScreenIndex);
 
                     // We should save all the options *before* 'Recording' activation.
@@ -1623,5 +1623,5 @@
         else
         {
-            CCaptureScreenSettingsVector recordingScreenSettingsVector = recordingSettings.GetScreens();
+            CRecordScreenSettingsVector recordingScreenSettingsVector = recordingSettings.GetScreens();
             for (int iScreenIndex = 0; fSuccess && iScreenIndex < recordingScreenSettingsVector.size(); ++iScreenIndex)
             {
@@ -1629,5 +1629,5 @@
                     continue;
 
-                CCaptureScreenSettings recordingScreenSettings = recordingScreenSettingsVector.at(iScreenIndex);
+                CRecordScreenSettings recordingScreenSettings = recordingScreenSettingsVector.at(iScreenIndex);
 
                 /* Save recording file path: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/snapshots/UISnapshotDetailsWidget.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/snapshots/UISnapshotDetailsWidget.cpp	(revision 75340)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/snapshots/UISnapshotDetailsWidget.cpp	(revision 75341)
@@ -48,6 +48,6 @@
 /* COM includes: */
 # include "CAudioAdapter.h"
-# include "CCaptureSettings.h"
-# include "CCaptureScreenSettings.h"
+# include "CRecordSettings.h"
+# include "CRecordScreenSettings.h"
 # include "CMachine.h"
 # include "CMedium.h"
@@ -1748,7 +1748,7 @@
     QStringList aReport;
     /* Acquire recording status: */
-    CCaptureSettings comRecordingSettings = comMachine.GetCaptureSettings();
+    CRecordSettings comRecordingSettings = comMachine.GetRecordSettings();
     /* For now all screens have the same config: */
-    CCaptureScreenSettings comRecordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
+    CRecordScreenSettings comRecordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
     if (comRecordingScreen0Settings.GetEnabled())
     {
Index: /trunk/src/VBox/Main/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Main/Makefile.kmk	(revision 75340)
+++ /trunk/src/VBox/Main/Makefile.kmk	(revision 75341)
@@ -457,6 +457,6 @@
 	src-server/BandwidthGroupImpl.cpp \
 	src-server/BIOSSettingsImpl.cpp \
-	src-server/CaptureSettingsImpl.cpp \
-	src-server/CaptureScreenSettingsImpl.cpp \
+	src-server/RecordSettingsImpl.cpp \
+	src-server/RecordScreenSettingsImpl.cpp \
 	src-server/ClientWatcher.cpp \
 	src-server/ClientToken.cpp \
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 75340)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 75341)
@@ -4690,9 +4690,9 @@
 
   <enum
-    name="CaptureDestination"
-    uuid="E54603A9-6751-4255-93F8-C69E61693391"
+    name="RecordDestination"
+    uuid="F52E217E-CA05-41BA-8851-0FA38B3BA38B"
     >
     <desc>
-      Capturing destination enumeration.
+      Recording destination enumeration.
     </desc>
 
@@ -4706,9 +4706,9 @@
 
   <enum
-    name="CaptureFeature"
-    uuid="F606CDDB-91B2-4E41-9DFE-4713D4DBA96F"
+    name="RecordFeature"
+    uuid="52AEC901-4EF5-4E04-8CA3-EF1478BB0930"
     >
     <desc>
-      Capturing features enumeration.
+      Recording features enumeration.
     </desc>
 
@@ -4717,17 +4717,17 @@
     </const>
     <const name="Video"                 value="1">
-      <desc>Video capturing.</desc>
+      <desc>Video recording.</desc>
     </const>
     <const name="Audio"                 value="2">
-      <desc>Audio capturing.</desc>
+      <desc>Audio recording.</desc>
     </const>
   </enum>
 
   <enum
-    name="CaptureAudioCodec"
-    uuid="9B80C37F-7984-412C-A755-C18FE5859554"
+    name="RecordAudioCodec"
+    uuid="B72DD288-0D3F-4652-AE66-D6F621D2F275"
     >
     <desc>
-      Capturing audio codec enumeration.
+      Recording audio codec enumeration.
     </desc>
 
@@ -4745,9 +4745,9 @@
 
   <enum
-    name="CaptureVideoCodec"
-    uuid="98BBC021-E119-497D-8C66-4336D539A8D6"
+    name="RecordVideoCodec"
+    uuid="823F3AD4-151F-4BDB-AFF9-F7C998E46105"
     >
     <desc>
-      Capturing video codec enumeration.
+      Recording video codec enumeration.
     </desc>
 
@@ -4767,9 +4767,9 @@
 
   <enum
-    name="CaptureVideoScalingMethod"
-    uuid="8315399B-4F31-416E-970E-D7480BDA1ACF"
+    name="RecordVideoScalingMethod"
+    uuid="8D656085-BAE6-4F63-86F9-616776EB3773"
     >
     <desc>
-      Capturing video scaling method enumeration.
+      Recording video scaling method enumeration.
     </desc>
 
@@ -4792,9 +4792,9 @@
 
   <enum
-    name="CaptureVideoRateControlMode"
-    uuid="5D392E29-04EC-4FD7-989C-82452F54414C"
+    name="RecordVideoRateControlMode"
+    uuid="11F99274-835F-4F2C-86A5-F8DF8999C21A"
     >
     <desc>
-      Capturing video rate control mode enumeration.
+      Recording video rate control mode enumeration.
     </desc>
 
@@ -4808,19 +4808,19 @@
 
   <interface
-    name="ICaptureScreenSettings" extends="$unknown"
-    uuid="B19FFA8A-686C-4221-AB29-3C1FA33946CA"
+    name="IRecordScreenSettings" extends="$unknown"
+    uuid="7811A5C6-11DB-4F9A-8FAE-1CE238AB4B73"
     wsmap="managed"
     >
 
     <desc>
-      The ICaptureScreenSettings interface represents capturing settings of a
-      single virtual screen. This is used only in the <link to="ICaptureSettings" />
+      The IRecordScreenSettings interface represents recording settings of a
+      single virtual screen. This is used only in the <link to="IRecordSettings" />
       interface.
     </desc>
 
     <method name="isFeatureEnabled">
-      <desc>Returns whether a particular capturing feature is enabled for this
+      <desc>Returns whether a particular recording feature is enabled for this
         screen or not.</desc>
-      <param name="feature" type="CaptureFeature" dir="in">
+      <param name="feature" type="RecordFeature" dir="in">
         <desc>Feature to check for.</desc>
       </param>
@@ -4838,15 +4838,15 @@
     <attribute name="enabled" type="boolean" default="false">
       <desc>
-        This setting determines whether this screen is enabled while capturing.
+        This setting determines whether this screen is enabled while recording.
       </desc>
     </attribute>
 
     <attribute name="features" type="unsigned long">
-      <desc>This setting determines all enabled capturing features for this
+      <desc>This setting determines all enabled recording features for this
         screen.</desc>
     </attribute>
 
-    <attribute name="destination" type="CaptureDestination">
-      <desc>This setting determines the capturing destination for this
+    <attribute name="destination" type="RecordDestination">
+      <desc>This setting determines the recording destination for this
         screen.</desc>
     </attribute>
@@ -4856,5 +4856,5 @@
         This setting determines the filename VirtualBox uses to save
         the recorded content. This setting cannot be changed while video
-        capturing is enabled.
+        recording is enabled.
         <note>
           When setting this attribute, the specified path has to be
@@ -4868,7 +4868,7 @@
       <desc>
         This setting defines the maximum amount of time in milliseconds
-        to capture. Capturing will stop as soon as the defined time
-        interval has elapsed. If this value is zero, capturing will not be
-        limited by time. This setting cannot be changed while capturing is
+        to record. Recording will stop as soon as the defined time
+        interval has elapsed. If this value is zero, recording will not be
+        limited by time. This setting cannot be changed while recording is
         enabled.
       </desc>
@@ -4877,9 +4877,9 @@
     <attribute name="maxFileSize" type="unsigned long" default="0">
       <desc>
-        This setting determines the maximal number of captured file
-        size in MB. Capturing will stop as soon as the file size has
-        reached the defined value. If this value is zero, capturing
+        This setting determines the maximal number of recording file
+        size in MB. Recording will stop as soon as the file size has
+        reached the defined value. If this value is zero, recording
         will not be limited by the file size. This setting cannot be changed
-        while capturing is enabled.
+        while recording is enabled.
       </desc>
     </attribute>
@@ -4887,7 +4887,7 @@
     <attribute name="options" type="wstring">
       <desc>
-        This setting contains any additional capturing options
+        This setting contains any additional recording options
         required in comma-separated key=value format. This setting
-        cannot be changed while capturing is enabled.
+        cannot be changed while recording is enabled.
 
         The following keys and their corresponding values are available:
@@ -4906,8 +4906,8 @@
     </attribute>
 
-    <attribute name="audioCodec" type="CaptureAudioCodec">
+    <attribute name="audioCodec" type="RecordAudioCodec">
       <desc>
         Determines the audio codec to use for encoding the
-        recorded audio data. This setting cannot be changed while capturing is
+        recorded audio data. This setting cannot be changed while recording is
         enabled.
       </desc>
@@ -4917,5 +4917,5 @@
       <desc>
         Determines the Hertz (Hz) rate of the recorded audio data. This setting
-        cannot be changed while capturing is enabled.
+        cannot be changed while recording is enabled.
       </desc>
     </attribute>
@@ -4924,5 +4924,5 @@
       <desc>
         Determines the bits per sample of the recorded audio data. This setting
-        cannot be changed while capturing is enabled.
+        cannot be changed while recording is enabled.
       </desc>
     </attribute>
@@ -4933,12 +4933,12 @@
         Specifiy 2 for stereo or 1 for mono. More than stereo (2) channels
         are not supported at the moment. This setting cannot be changed while
-        capturing is enabled.
-      </desc>
-    </attribute>
-
-    <attribute name="videoCodec" type="CaptureVideoCodec">
+        recording is enabled.
+      </desc>
+    </attribute>
+
+    <attribute name="videoCodec" type="RecordVideoCodec">
       <desc>
         Determines the video codec to use for encoding the recorded video data.
-        This setting cannot be changed while capturing is enabled.
+        This setting cannot be changed while recording is enabled.
       </desc>
     </attribute>
@@ -4947,5 +4947,5 @@
       <desc>
         Determines the horizontal resolution of the recorded video data. This
-        setting cannot be changed while capturing is enabled.
+        setting cannot be changed while recording is enabled.
       </desc>
     </attribute>
@@ -4954,5 +4954,5 @@
       <desc>
         Determines the vertical resolution of the recorded video data. This
-        setting cannot be changed while capturing is enabled.
+        setting cannot be changed while recording is enabled.
       </desc>
     </attribute>
@@ -4962,12 +4962,12 @@
         Determines the bitrate in kilobits per second. Increasing this value
         makes the video look better for the cost of an increased file size or
-        transfer rate. This setting cannot be changed while capturing is enabled.
-      </desc>
-    </attribute>
-
-    <attribute name="videoRateControlMode" type="CaptureVideoRateControlMode">
+        transfer rate. This setting cannot be changed while recording is enabled.
+      </desc>
+    </attribute>
+
+    <attribute name="videoRateControlMode" type="RecordVideoRateControlMode">
       <desc>
         Determines the rate control mode. This setting cannot be changed
-        while capturing is enabled.
+        while recording is enabled.
       </desc>
     </attribute>
@@ -4978,12 +4978,12 @@
         a higher frequency will be skipped. Reducing this value increases the
         number of skipped frames and reduces the file size or transfer rate.
-        This setting cannot be changed while capturing is enabled.
-      </desc>
-    </attribute>
-
-    <attribute name="videoScalingMethod" type="CaptureVideoScalingMethod">
+        This setting cannot be changed while recording is enabled.
+      </desc>
+    </attribute>
+
+    <attribute name="videoScalingMethod" type="RecordVideoScalingMethod">
       <desc>
         Determines the video scaling method to use.
-        This setting cannot be changed while capturing is enabled.
+        This setting cannot be changed while recording is enabled.
       </desc>
     </attribute>
@@ -4992,22 +4992,22 @@
 
   <interface
-    name="ICaptureSettings" extends="$unknown"
-    uuid="F35B5C06-F6F0-475D-908A-F5FECC820043"
+    name="IRecordSettings" extends="$unknown"
+    uuid="7202BACF-2BFE-46AA-AEF6-69B32FDDE236"
     wsmap="managed"
     >
 
     <desc>
-      The ICaptureSettings interface represents capturing settings of the virtual
-      machine. This is used only in the <link to="IMachine::captureSettings" />
+      The IRecordSettings interface represents recording settings of the virtual
+      machine. This is used only in the <link to="IMachine::recordSettings" />
       attribute.
     </desc>
 
     <method name="getScreenSettings">
-      <desc>Returns the capturing settings for a particular screen.</desc>
+      <desc>Returns the recording settings for a particular screen.</desc>
       <param name="screenId" type="unsigned long" dir="in">
-        <desc>Screen ID to retrieve capturing screen settings for.</desc>
-      </param>
-      <param name="captureScreenSettings" type="ICaptureScreenSettings" dir="return">
-        <desc>Capturing screen settings for the requested screen.</desc>
+        <desc>Screen ID to retrieve recording screen settings for.</desc>
+      </param>
+      <param name="recordScreenSettings" type="IRecordScreenSettings" dir="return">
+        <desc>Recording screen settings for the requested screen.</desc>
       </param>
     </method>
@@ -5015,11 +5015,11 @@
     <attribute name="enabled" type="boolean" default="false">
       <desc>
-        This setting determines whether VirtualBox uses capturing to record a
+        This setting determines whether VirtualBox uses recording to record a
         VM session.</desc>
     </attribute>
 
-    <attribute name="screens" type="ICaptureScreenSettings" readonly="yes" safearray="yes">
-      <desc>
-        This setting returns an array for capturing settings of all configured
+    <attribute name="screens" type="IRecordScreenSettings" readonly="yes" safearray="yes">
+      <desc>
+        This setting returns an array for recording settings of all configured
         virtual screens.</desc>
     </attribute>
@@ -5221,5 +5221,5 @@
   <interface
     name="IMachine" extends="$unknown"
-    uuid="316A9802-03A5-44BE-B2A6-51261A021353"
+    uuid="7210DD84-2301-4C3B-8DB3-72DEBD3B91F9"
     wsmap="managed"
     wrap-hint-server-addinterfaces="IInternalMachineControl"
@@ -5506,6 +5506,6 @@
     </attribute>
 
-    <attribute name="captureSettings" type="ICaptureSettings" readonly="yes">
-      <desc>Object containing all capturing settings.</desc>
+    <attribute name="recordSettings" type="IRecordSettings" readonly="yes">
+      <desc>Object containing all recording settings.</desc>
     </attribute>
 
@@ -20652,5 +20652,5 @@
   <interface
     name="IInternalSessionControl" extends="$unknown"
-    uuid="96BDA9B7-92E6-402F-AA8C-2E77818DAE6E"
+    uuid="5CEB7885-5DD5-48E4-96C1-EEF4F4FD9FAC"
     internal="yes"
     wsmap="suppress"
@@ -20952,7 +20952,7 @@
     </method>
 
-    <method name="onCaptureChange">
-      <desc>
-        Triggered when capture settings have changed.
+    <method name="onRecordChange">
+      <desc>
+        Triggered when recording settings have changed.
       </desc>
     </method>
@@ -23136,7 +23136,7 @@
       </desc>
     </const>
-    <const name="OnCaptureChanged" value="91">
-      <desc>
-        See <link to="ICaptureChangedEvent">ICapturedChangeEvent</link>.
+    <const name="OnRecordChanged" value="91">
+      <desc>
+        See <link to="IRecordChangedEvent">IRecordChangeEvent</link>.
       </desc>
     </const>
@@ -24523,10 +24523,10 @@
 
   <interface
-    name="ICaptureChangedEvent" extends="IEvent"
-    uuid="C694687C-F432-4435-B457-F2E55B845C81"
-    wsmap="managed" autogen="VBoxEvent" id="OnCaptureChanged"
+    name="IRecordChangedEvent" extends="IEvent"
+    uuid="DA51AA0C-E642-4AA0-9DDD-B07E2911188B"
+    wsmap="managed" autogen="VBoxEvent" id="OnRecordChanged"
     >
     <desc>
-      Notification when capture settings have changed.
+      Notification when recording settings have changed.
     </desc>
     <attribute name="midlDoesNotLikeEmptyInterfaces" readonly="yes" type="boolean"/>
Index: unk/src/VBox/Main/include/CaptureScreenSettingsImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/CaptureScreenSettingsImpl.h	(revision 75340)
+++ 	(revision )
@@ -1,116 +1,0 @@
-/* $Id$ */
-
-/** @file
- *
- * VirtualBox COM class implementation - Capture settings of one virtual screen.
- */
-
-/*
- * Copyright (C) 2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef ____H_CAPTURESCREENSETTINGS
-#define ____H_CAPTURESCREENSETTINGS
-
-#include "CaptureScreenSettingsWrap.h"
-
-class CaptureSettings;
-
-namespace settings
-{
-    struct CaptureScreenSettings;
-}
-
-class ATL_NO_VTABLE CaptureScreenSettings :
-    public CaptureScreenSettingsWrap
-{
-public:
-
-    DECLARE_EMPTY_CTOR_DTOR(CaptureScreenSettings)
-
-    HRESULT FinalConstruct();
-    void FinalRelease();
-
-    // public initializer/uninitializer for internal purposes only
-    HRESULT init(CaptureSettings *aParent, uint32_t uScreenId, const settings::CaptureScreenSettings& data);
-    HRESULT init(CaptureSettings *aParent, CaptureScreenSettings *that);
-    HRESULT initCopy(CaptureSettings *aParent, CaptureScreenSettings *that);
-    void uninit();
-
-    // public methods only for internal purposes
-    HRESULT i_loadSettings(const settings::CaptureScreenSettings &data);
-    HRESULT i_saveSettings(settings::CaptureScreenSettings &data);
-
-    void i_rollback();
-    void i_commit();
-    void i_copyFrom(CaptureScreenSettings *aThat);
-    void i_applyDefaults();
-
-private:
-
-    // wrapped ICaptureScreenSettings methods
-    HRESULT isFeatureEnabled(CaptureFeature_T aFeature, BOOL *aEnabled);
-
-    // wrapped ICaptureScreenSettings properties
-    HRESULT getId(ULONG *id);
-    HRESULT getEnabled(BOOL *enabled);
-    HRESULT setEnabled(BOOL enabled);
-    HRESULT getFeatures(ULONG *aFeatures);
-    HRESULT setFeatures(ULONG aFeatures);
-    HRESULT getDestination(CaptureDestination_T *aDestination);
-    HRESULT setDestination(CaptureDestination_T aDestination);
-
-    HRESULT getFileName(com::Utf8Str &aFileName);
-    HRESULT setFileName(const com::Utf8Str &aFileName);
-    HRESULT getMaxTime(ULONG *aMaxTimeS);
-    HRESULT setMaxTime(ULONG aMaxTimeS);
-    HRESULT getMaxFileSize(ULONG *aMaxFileSizeMB);
-    HRESULT setMaxFileSize(ULONG aMaxFileSizeMB);
-    HRESULT getOptions(com::Utf8Str &aOptions);
-    HRESULT setOptions(const com::Utf8Str &aOptions);
-
-    HRESULT getAudioCodec(CaptureAudioCodec_T *aCodec);
-    HRESULT setAudioCodec(CaptureAudioCodec_T aCodec);
-    HRESULT getAudioHz(ULONG *aHz);
-    HRESULT setAudioHz(ULONG aHz);
-    HRESULT getAudioBits(ULONG *aBits);
-    HRESULT setAudioBits(ULONG aBits);
-    HRESULT getAudioChannels(ULONG *aChannels);
-    HRESULT setAudioChannels(ULONG aChannels);
-
-    HRESULT getVideoCodec(CaptureVideoCodec_T *aCodec);
-    HRESULT setVideoCodec(CaptureVideoCodec_T aCodec);
-    HRESULT getVideoWidth(ULONG *aVideoWidth);
-    HRESULT setVideoWidth(ULONG aVideoWidth);
-    HRESULT getVideoHeight(ULONG *aVideoHeight);
-    HRESULT setVideoHeight(ULONG aVideoHeight);
-    HRESULT getVideoRate(ULONG *aVideoRate);
-    HRESULT setVideoRate(ULONG aVideoRate);
-    HRESULT getVideoRateControlMode(CaptureVideoRateControlMode_T *aMode);
-    HRESULT setVideoRateControlMode(CaptureVideoRateControlMode_T aMode);
-    HRESULT getVideoFPS(ULONG *aVideoFPS);
-    HRESULT setVideoFPS(ULONG aVideoFPS);
-    HRESULT getVideoScalingMethod(CaptureVideoScalingMethod_T *aMode);
-    HRESULT setVideoScalingMethod(CaptureVideoScalingMethod_T aMode);
-
-private:
-
-    // internal methods
-    int  i_initInternal();
-
-private:
-
-    struct Data;
-    Data *m;
-};
-
-#endif // ____H_CAPTURESCREENSETTINGS
-
Index: unk/src/VBox/Main/include/CaptureSettingsImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/CaptureSettingsImpl.h	(revision 75340)
+++ 	(revision )
@@ -1,89 +1,0 @@
-/* $Id$ */
-
-/** @file
- *
- * VirtualBox COM class implementation - Machine capture settings.
- */
-
-/*
- * Copyright (C) 2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef ____H_CAPTURESETTINGS
-#define ____H_CAPTURESETTINGS
-
-#include "CaptureSettingsWrap.h"
-
-namespace settings
-{
-    struct CaptureSettings;
-    struct CaptureScreenSettings;
-}
-
-class CaptureScreenSettings;
-
-class ATL_NO_VTABLE CaptureSettings :
-    public CaptureSettingsWrap
-{
-public:
-
-    DECLARE_EMPTY_CTOR_DTOR(CaptureSettings)
-
-    HRESULT FinalConstruct();
-    void FinalRelease();
-
-    // public initializer/uninitializer for internal purposes only
-    HRESULT init(Machine *parent);
-    HRESULT init(Machine *parent, CaptureSettings *that);
-    HRESULT initCopy(Machine *parent, CaptureSettings *that);
-    void uninit();
-
-    // public methods only for internal purposes
-    HRESULT i_loadSettings(const settings::CaptureSettings &data);
-    HRESULT i_saveSettings(settings::CaptureSettings &data);
-
-    void i_rollback();
-    void i_commit();
-    void i_copyFrom(CaptureSettings *aThat);
-    void i_applyDefaults(void);
-
-    int i_getDefaultFileName(Utf8Str &strFile);
-    bool i_canChangeSettings(void);
-    void i_onSettingsChanged(void);
-
-private:
-
-    /** Map of screen settings objects. The key specifies the screen ID. */
-    typedef std::map <uint32_t, ComObjPtr<CaptureScreenSettings> > CaptureScreenSettingsMap;
-
-    void i_reset(void);
-    int i_syncToMachineDisplays(void);
-    int i_createScreenObj(CaptureScreenSettingsMap &screenSettingsMap, uint32_t uScreenId, const settings::CaptureScreenSettings &data);
-    int i_destroyScreenObj(CaptureScreenSettingsMap &screenSettingsMap, uint32_t uScreenId);
-    int i_destroyAllScreenObj(CaptureScreenSettingsMap &screenSettingsMap);
-
-private:
-
-    // wrapped ICaptureSettings properties
-    HRESULT getEnabled(BOOL *enabled);
-    HRESULT setEnabled(BOOL enable);
-    HRESULT getScreens(std::vector<ComPtr<ICaptureScreenSettings> > &aCaptureScreenSettings);
-
-    // wrapped ICaptureSettings methods
-    HRESULT getScreenSettings(ULONG uScreenId, ComPtr<ICaptureScreenSettings> &aCaptureScreenSettings);
-
-private:
-
-    struct Data;
-    Data *m;
-};
-#endif // ____H_CAPTURESETTINGS
-
Index: /trunk/src/VBox/Main/include/ConsoleImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/ConsoleImpl.h	(revision 75340)
+++ /trunk/src/VBox/Main/include/ConsoleImpl.h	(revision 75341)
@@ -145,5 +145,5 @@
     void i_videoRecDestroy(void);
     int i_videoRecEnable(BOOL fEnable, util::AutoWriteLock *pAutoLock);
-    int i_videoRecGetSettings(settings::CaptureSettings &Settings);
+    int i_videoRecGetSettings(settings::RecordSettings &Settings);
     int i_videoRecStart(void);
     int i_videoRecStop(void);
@@ -179,5 +179,5 @@
     HRESULT i_onDnDModeChange(DnDMode_T aDnDMode);
     HRESULT i_onVRDEServerChange(BOOL aRestart);
-    HRESULT i_onCaptureChange();
+    HRESULT i_onRecordChange();
     HRESULT i_onUSBControllerChange();
     HRESULT i_onSharedFolderChange(BOOL aGlobal);
Index: /trunk/src/VBox/Main/include/DrvAudioVideoRec.h
===================================================================
--- /trunk/src/VBox/Main/include/DrvAudioVideoRec.h	(revision 75340)
+++ /trunk/src/VBox/Main/include/DrvAudioVideoRec.h	(revision 75341)
@@ -45,5 +45,5 @@
 public:
 
-    int applyConfiguration(const settings::CaptureSettings &Settings);
+    int applyConfiguration(const settings::RecordSettings &Settings);
 
 public:
@@ -61,5 +61,5 @@
     struct DRVAUDIOVIDEOREC         *mpDrv;
     /** Capturing configuration used for configuring the driver. */
-    struct settings::CaptureSettings mVideoRecCfg;
+    struct settings::RecordSettings mVideoRecCfg;
 };
 
Index: /trunk/src/VBox/Main/include/MachineImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineImpl.h	(revision 75340)
+++ /trunk/src/VBox/Main/include/MachineImpl.h	(revision 75341)
@@ -32,5 +32,5 @@
 #include "ParallelPortImpl.h"
 #include "BIOSSettingsImpl.h"
-#include "CaptureSettingsImpl.h"
+#include "RecordSettingsImpl.h"
 #include "StorageControllerImpl.h"          // required for MachineImpl.h to compile on Windows
 #include "USBControllerImpl.h"              // required for MachineImpl.h to compile on Windows
@@ -266,5 +266,5 @@
         GraphicsControllerType_T mGraphicsControllerType;
         ULONG               mVRAMSize;
-        settings::CaptureSettings mCaptureSettings;
+        settings::RecordSettings mRecordSettings;
         ULONG               mMonitorCount;
         BOOL                mHWVirtExEnabled;
@@ -477,5 +477,5 @@
         IsModified_Snapshots            = 0x0800,
         IsModified_BandwidthControl     = 0x1000,
-        IsModified_Capture              = 0x2000
+        IsModified_Record               = 0x2000
     };
 
@@ -524,5 +524,5 @@
     virtual HRESULT i_onStorageDeviceChange(IMediumAttachment * /* mediumAttachment */, BOOL /* remove */,
                                             BOOL /* silent */) { return S_OK; }
-    virtual HRESULT i_onCaptureChange() { return S_OK; }
+    virtual HRESULT i_onRecordChange() { return S_OK; }
 
     HRESULT i_saveRegistryEntry(settings::MachineRegistryEntry &data);
@@ -777,5 +777,5 @@
     const ComObjPtr<USBDeviceFilters>  mUSBDeviceFilters;
     const ComObjPtr<BIOSSettings>      mBIOSSettings;
-    const ComObjPtr<CaptureSettings>   mCaptureSettings;
+    const ComObjPtr<RecordSettings>    mRecordSettings;
     const ComObjPtr<BandwidthControl>  mBandwidthControl;
 
@@ -825,6 +825,6 @@
 
     friend class Appliance;
-    friend class CaptureSettings;
-    friend class CaptureScreenSettings;
+    friend class RecordSettings;
+    friend class RecordScreenSettings;
     friend class SessionMachine;
     friend class SnapshotMachine;
@@ -880,5 +880,5 @@
     HRESULT setMonitorCount(ULONG aMonitorCount);
     HRESULT getBIOSSettings(ComPtr<IBIOSSettings> &aBIOSSettings);
-    HRESULT getCaptureSettings(ComPtr<ICaptureSettings> &aCaptureSettings);
+    HRESULT getRecordSettings(ComPtr<IRecordSettings> &aRecordSettings);
     HRESULT getFirmwareType(FirmwareType_T *aFirmwareType);
     HRESULT setFirmwareType(FirmwareType_T aFirmwareType);
@@ -1326,5 +1326,5 @@
     HRESULT i_onCPUChange(ULONG aCPU, BOOL aRemove);
     HRESULT i_onVRDEServerChange(BOOL aRestart);
-    HRESULT i_onCaptureChange();
+    HRESULT i_onRecordChange();
     HRESULT i_onUSBControllerChange();
     HRESULT i_onUSBDeviceAttach(IUSBDevice *aDevice,
Index: /trunk/src/VBox/Main/include/RecordScreenSettingsImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/RecordScreenSettingsImpl.h	(revision 75341)
+++ /trunk/src/VBox/Main/include/RecordScreenSettingsImpl.h	(revision 75341)
@@ -0,0 +1,116 @@
+/* $Id$ */
+
+/** @file
+ *
+ * VirtualBox COM class implementation - Capture settings of one virtual screen.
+ */
+
+/*
+ * Copyright (C) 2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ____H_RecordScreenSettings
+#define ____H_RecordScreenSettings
+
+#include "RecordScreenSettingsWrap.h"
+
+class RecordSettings;
+
+namespace settings
+{
+    struct RecordScreenSettings;
+}
+
+class ATL_NO_VTABLE RecordScreenSettings :
+    public RecordScreenSettingsWrap
+{
+public:
+
+    DECLARE_EMPTY_CTOR_DTOR(RecordScreenSettings)
+
+    HRESULT FinalConstruct();
+    void FinalRelease();
+
+    // public initializer/uninitializer for internal purposes only
+    HRESULT init(RecordSettings *aParent, uint32_t uScreenId, const settings::RecordScreenSettings& data);
+    HRESULT init(RecordSettings *aParent, RecordScreenSettings *that);
+    HRESULT initCopy(RecordSettings *aParent, RecordScreenSettings *that);
+    void uninit();
+
+    // public methods only for internal purposes
+    HRESULT i_loadSettings(const settings::RecordScreenSettings &data);
+    HRESULT i_saveSettings(settings::RecordScreenSettings &data);
+
+    void i_rollback();
+    void i_commit();
+    void i_copyFrom(RecordScreenSettings *aThat);
+    void i_applyDefaults();
+
+private:
+
+    // wrapped IRecordScreenSettings methods
+    HRESULT isFeatureEnabled(RecordFeature_T aFeature, BOOL *aEnabled);
+
+    // wrapped IRecordScreenSettings properties
+    HRESULT getId(ULONG *id);
+    HRESULT getEnabled(BOOL *enabled);
+    HRESULT setEnabled(BOOL enabled);
+    HRESULT getFeatures(ULONG *aFeatures);
+    HRESULT setFeatures(ULONG aFeatures);
+    HRESULT getDestination(RecordDestination_T *aDestination);
+    HRESULT setDestination(RecordDestination_T aDestination);
+
+    HRESULT getFileName(com::Utf8Str &aFileName);
+    HRESULT setFileName(const com::Utf8Str &aFileName);
+    HRESULT getMaxTime(ULONG *aMaxTimeS);
+    HRESULT setMaxTime(ULONG aMaxTimeS);
+    HRESULT getMaxFileSize(ULONG *aMaxFileSizeMB);
+    HRESULT setMaxFileSize(ULONG aMaxFileSizeMB);
+    HRESULT getOptions(com::Utf8Str &aOptions);
+    HRESULT setOptions(const com::Utf8Str &aOptions);
+
+    HRESULT getAudioCodec(RecordAudioCodec_T *aCodec);
+    HRESULT setAudioCodec(RecordAudioCodec_T aCodec);
+    HRESULT getAudioHz(ULONG *aHz);
+    HRESULT setAudioHz(ULONG aHz);
+    HRESULT getAudioBits(ULONG *aBits);
+    HRESULT setAudioBits(ULONG aBits);
+    HRESULT getAudioChannels(ULONG *aChannels);
+    HRESULT setAudioChannels(ULONG aChannels);
+
+    HRESULT getVideoCodec(RecordVideoCodec_T *aCodec);
+    HRESULT setVideoCodec(RecordVideoCodec_T aCodec);
+    HRESULT getVideoWidth(ULONG *aVideoWidth);
+    HRESULT setVideoWidth(ULONG aVideoWidth);
+    HRESULT getVideoHeight(ULONG *aVideoHeight);
+    HRESULT setVideoHeight(ULONG aVideoHeight);
+    HRESULT getVideoRate(ULONG *aVideoRate);
+    HRESULT setVideoRate(ULONG aVideoRate);
+    HRESULT getVideoRateControlMode(RecordVideoRateControlMode_T *aMode);
+    HRESULT setVideoRateControlMode(RecordVideoRateControlMode_T aMode);
+    HRESULT getVideoFPS(ULONG *aVideoFPS);
+    HRESULT setVideoFPS(ULONG aVideoFPS);
+    HRESULT getVideoScalingMethod(RecordVideoScalingMethod_T *aMode);
+    HRESULT setVideoScalingMethod(RecordVideoScalingMethod_T aMode);
+
+private:
+
+    // internal methods
+    int  i_initInternal();
+
+private:
+
+    struct Data;
+    Data *m;
+};
+
+#endif // ____H_RecordScreenSettings
+
Index: /trunk/src/VBox/Main/include/RecordSettingsImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/RecordSettingsImpl.h	(revision 75341)
+++ /trunk/src/VBox/Main/include/RecordSettingsImpl.h	(revision 75341)
@@ -0,0 +1,89 @@
+/* $Id$ */
+
+/** @file
+ *
+ * VirtualBox COM class implementation - Machine capture settings.
+ */
+
+/*
+ * Copyright (C) 2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ____H_RecordSettings
+#define ____H_RecordSettings
+
+#include "RecordSettingsWrap.h"
+
+namespace settings
+{
+    struct RecordSettings;
+    struct RecordScreenSettings;
+}
+
+class RecordScreenSettings;
+
+class ATL_NO_VTABLE RecordSettings :
+    public RecordSettingsWrap
+{
+public:
+
+    DECLARE_EMPTY_CTOR_DTOR(RecordSettings)
+
+    HRESULT FinalConstruct();
+    void FinalRelease();
+
+    // public initializer/uninitializer for internal purposes only
+    HRESULT init(Machine *parent);
+    HRESULT init(Machine *parent, RecordSettings *that);
+    HRESULT initCopy(Machine *parent, RecordSettings *that);
+    void uninit();
+
+    // public methods only for internal purposes
+    HRESULT i_loadSettings(const settings::RecordSettings &data);
+    HRESULT i_saveSettings(settings::RecordSettings &data);
+
+    void i_rollback();
+    void i_commit();
+    void i_copyFrom(RecordSettings *aThat);
+    void i_applyDefaults(void);
+
+    int i_getDefaultFileName(Utf8Str &strFile);
+    bool i_canChangeSettings(void);
+    void i_onSettingsChanged(void);
+
+private:
+
+    /** Map of screen settings objects. The key specifies the screen ID. */
+    typedef std::map <uint32_t, ComObjPtr<RecordScreenSettings> > RecordScreenSettingsMap;
+
+    void i_reset(void);
+    int i_syncToMachineDisplays(void);
+    int i_createScreenObj(RecordScreenSettingsMap &screenSettingsMap, uint32_t uScreenId, const settings::RecordScreenSettings &data);
+    int i_destroyScreenObj(RecordScreenSettingsMap &screenSettingsMap, uint32_t uScreenId);
+    int i_destroyAllScreenObj(RecordScreenSettingsMap &screenSettingsMap);
+
+private:
+
+    // wrapped IRecordSettings properties
+    HRESULT getEnabled(BOOL *enabled);
+    HRESULT setEnabled(BOOL enable);
+    HRESULT getScreens(std::vector<ComPtr<IRecordScreenSettings> > &aRecordScreenSettings);
+
+    // wrapped IRecordSettings methods
+    HRESULT getScreenSettings(ULONG uScreenId, ComPtr<IRecordScreenSettings> &aRecordScreenSettings);
+
+private:
+
+    struct Data;
+    Data *m;
+};
+#endif // ____H_RecordSettings
+
Index: /trunk/src/VBox/Main/include/SessionImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/SessionImpl.h	(revision 75340)
+++ /trunk/src/VBox/Main/include/SessionImpl.h	(revision 75341)
@@ -102,5 +102,5 @@
     HRESULT onCPUExecutionCapChange(ULONG aExecutionCap);
     HRESULT onVRDEServerChange(BOOL aRestart);
-    HRESULT onCaptureChange();
+    HRESULT onRecordChange();
     HRESULT onUSBControllerChange();
     HRESULT onSharedFolderChange(BOOL aGlobal);
Index: /trunk/src/VBox/Main/include/VideoRec.h
===================================================================
--- /trunk/src/VBox/Main/include/VideoRec.h	(revision 75340)
+++ /trunk/src/VBox/Main/include/VideoRec.h	(revision 75341)
@@ -41,5 +41,5 @@
     CaptureContext(Console *pConsole);
 
-    CaptureContext(Console *pConsole, const settings::CaptureSettings &a_Settings);
+    CaptureContext(Console *pConsole, const settings::RecordSettings &a_Settings);
 
     virtual ~CaptureContext(void);
@@ -47,9 +47,9 @@
 public:
 
-    const settings::CaptureSettings &GetConfig(void) const;
+    const settings::RecordSettings &GetConfig(void) const;
     CaptureStream *GetStream(unsigned uScreen) const;
     size_t GetStreamCount(void) const;
 
-    int Create(const settings::CaptureSettings &a_Settings);
+    int Create(const settings::RecordSettings &a_Settings);
     int Destroy(void);
 
@@ -64,5 +64,5 @@
 public:
 
-    bool IsFeatureEnabled(CaptureFeature_T enmFeature) const;
+    bool IsFeatureEnabled(RecordFeature_T enmFeature) const;
     bool IsReady(void) const;
     bool IsReady(uint32_t uScreen, uint64_t uTimeStampMs) const;
@@ -72,5 +72,5 @@
 protected:
 
-    int createInternal(const settings::CaptureSettings &a_Settings);
+    int createInternal(const settings::RecordSettings &a_Settings);
     int startInternal(void);
     int stopInternal(void);
@@ -104,5 +104,5 @@
     Console                  *pConsole;
     /** Used recording configuration. */
-    settings::CaptureSettings Settings;
+    settings::RecordSettings Settings;
     /** The current state. */
     VIDEORECSTS               enmState;
Index: /trunk/src/VBox/Main/include/VideoRecStream.h
===================================================================
--- /trunk/src/VBox/Main/include/VideoRecStream.h	(revision 75340)
+++ /trunk/src/VBox/Main/include/VideoRecStream.h	(revision 75341)
@@ -111,5 +111,5 @@
     CaptureStream(CaptureContext *pCtx);
 
-    CaptureStream(CaptureContext *pCtx, uint32_t uScreen, const settings::CaptureScreenSettings &Settings);
+    CaptureStream(CaptureContext *pCtx, uint32_t uScreen, const settings::RecordScreenSettings &Settings);
 
     virtual ~CaptureStream(void);
@@ -117,5 +117,5 @@
 public:
 
-    int Init(CaptureContext *pCtx, uint32_t uScreen, const settings::CaptureScreenSettings &Settings);
+    int Init(CaptureContext *pCtx, uint32_t uScreen, const settings::RecordScreenSettings &Settings);
     int Uninit(void);
 
@@ -124,5 +124,5 @@
                        uint32_t uSrcWidth, uint32_t uSrcHeight, uint8_t *puSrcData, uint64_t uTimeStampMs);
 
-    const settings::CaptureScreenSettings &GetConfig(void) const;
+    const settings::RecordScreenSettings &GetConfig(void) const;
     bool IsLimitReached(uint64_t tsNowMs) const;
     bool IsReady(void) const;
@@ -130,8 +130,8 @@
 protected:
 
-    int open(const settings::CaptureScreenSettings &Settings);
+    int open(const settings::RecordScreenSettings &Settings);
     int close(void);
 
-    int initInternal(CaptureContext *pCtx, uint32_t uScreen, const settings::CaptureScreenSettings &Settings);
+    int initInternal(CaptureContext *pCtx, uint32_t uScreen, const settings::RecordScreenSettings &Settings);
     int uninitInternal(void);
 
@@ -205,5 +205,5 @@
     } Video;
 
-    settings::CaptureScreenSettings ScreenSettings;
+    settings::RecordScreenSettings ScreenSettings;
     /** Common set of video recording (data) blocks, needed for
      *  multiplexing to all recording streams. */
Index: /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp	(revision 75340)
+++ /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp	(revision 75341)
@@ -5632,5 +5632,5 @@
 # ifdef VBOX_WITH_AUDIO_VIDEOREC
                     /* Attach the video recording audio driver if required. */
-                    if (   Capture.mpVideoRecCtx->IsFeatureEnabled(CaptureFeature_Audio)
+                    if (   Capture.mpVideoRecCtx->IsFeatureEnabled(RecordFeature_Audio)
                         && Capture.mAudioVideoRec)
                     {
@@ -5667,5 +5667,5 @@
 #endif /* VBOX_WITH_VIDEOREC */
 
-HRESULT Console::i_onCaptureChange()
+HRESULT Console::i_onRecordChange()
 {
     AutoCaller autoCaller(this);
@@ -5680,10 +5680,10 @@
     if (ptrVM.isOk())
     {
-        ComPtr<ICaptureSettings> CaptureSettings;
-        rc = mMachine->COMGETTER(CaptureSettings)(CaptureSettings.asOutParam());
+        ComPtr<IRecordSettings> RecordSettings;
+        rc = mMachine->COMGETTER(RecordSettings)(RecordSettings.asOutParam());
         AssertComRCReturnRC(rc);
 
         BOOL fEnabled;
-        rc = CaptureSettings->COMGETTER(Enabled)(&fEnabled);
+        rc = RecordSettings->COMGETTER(Enabled)(&fEnabled);
         AssertComRCReturnRC(rc);
 
@@ -5692,5 +5692,5 @@
         {
             alock.release();
-            fireCaptureChangedEvent(mEventSource);
+            fireRecordChangedEvent(mEventSource);
         }
 
@@ -6882,5 +6882,5 @@
 
     if (   Capture.mpVideoRecCtx->IsStarted()
-        && Capture.mpVideoRecCtx->IsFeatureEnabled(CaptureFeature_Audio))
+        && Capture.mpVideoRecCtx->IsFeatureEnabled(RecordFeature_Audio))
     {
         return Capture.mpVideoRecCtx->SendAudioFrame(pvData, cbData, uTimestampMs);
@@ -6892,5 +6892,5 @@
 
 #ifdef VBOX_WITH_VIDEOREC
-int Console::i_videoRecGetSettings(settings::CaptureSettings &Settings)
+int Console::i_videoRecGetSettings(settings::RecordSettings &Settings)
 {
     Assert(mMachine.isNotNull());
@@ -6898,46 +6898,46 @@
     Settings.applyDefaults();
 
-    ComPtr<ICaptureSettings> pCaptureSettings;
-    HRESULT hrc = mMachine->COMGETTER(CaptureSettings)(pCaptureSettings.asOutParam());
+    ComPtr<IRecordSettings> pRecordSettings;
+    HRESULT hrc = mMachine->COMGETTER(RecordSettings)(pRecordSettings.asOutParam());
     AssertComRCReturn(hrc, VERR_INVALID_PARAMETER);
 
     BOOL fTemp;
-    hrc = pCaptureSettings->COMGETTER(Enabled)(&fTemp);
+    hrc = pRecordSettings->COMGETTER(Enabled)(&fTemp);
     AssertComRCReturn(hrc, VERR_INVALID_PARAMETER);
     Settings.fEnabled = RT_BOOL(fTemp);
 
-    SafeIfaceArray<ICaptureScreenSettings> paCaptureScreens;
-    hrc = pCaptureSettings->COMGETTER(Screens)(ComSafeArrayAsOutParam(paCaptureScreens));
+    SafeIfaceArray<IRecordScreenSettings> paCaptureScreens;
+    hrc = pRecordSettings->COMGETTER(Screens)(ComSafeArrayAsOutParam(paCaptureScreens));
     AssertComRCReturn(hrc, VERR_INVALID_PARAMETER);
 
     for (unsigned long i = 0; i < (unsigned long)paCaptureScreens.size(); ++i)
     {
-        settings::CaptureScreenSettings CaptureScreenSettings;
-        ComPtr<ICaptureScreenSettings> pCaptureScreenSettings = paCaptureScreens[i];
-
-        hrc = pCaptureScreenSettings->COMGETTER(Enabled)(&fTemp);
+        settings::RecordScreenSettings RecordScreenSettings;
+        ComPtr<IRecordScreenSettings> pRecordScreenSettings = paCaptureScreens[i];
+
+        hrc = pRecordScreenSettings->COMGETTER(Enabled)(&fTemp);
         AssertComRCReturn(hrc, VERR_INVALID_PARAMETER);
-        CaptureScreenSettings.fEnabled = RT_BOOL(fTemp);
-        hrc = pCaptureScreenSettings->COMGETTER(MaxTime)((ULONG *)&CaptureScreenSettings.ulMaxTimeS);
+        RecordScreenSettings.fEnabled = RT_BOOL(fTemp);
+        hrc = pRecordScreenSettings->COMGETTER(MaxTime)((ULONG *)&RecordScreenSettings.ulMaxTimeS);
         AssertComRCReturn(hrc, VERR_INVALID_PARAMETER);
-        hrc = pCaptureScreenSettings->COMGETTER(MaxFileSize)((ULONG *)&CaptureScreenSettings.File.ulMaxSizeMB);
+        hrc = pRecordScreenSettings->COMGETTER(MaxFileSize)((ULONG *)&RecordScreenSettings.File.ulMaxSizeMB);
         AssertComRCReturn(hrc, VERR_INVALID_PARAMETER);
         Bstr bstrTemp;
-        hrc = pCaptureScreenSettings->COMGETTER(FileName)(bstrTemp.asOutParam());
+        hrc = pRecordScreenSettings->COMGETTER(FileName)(bstrTemp.asOutParam());
         AssertComRCReturn(hrc, VERR_INVALID_PARAMETER);
-        CaptureScreenSettings.File.strName = bstrTemp;
-        hrc = pCaptureScreenSettings->COMGETTER(Options)(bstrTemp.asOutParam());
+        RecordScreenSettings.File.strName = bstrTemp;
+        hrc = pRecordScreenSettings->COMGETTER(Options)(bstrTemp.asOutParam());
         AssertComRCReturn(hrc, VERR_INVALID_PARAMETER);
-        CaptureScreenSettings.strOptions = bstrTemp;
-        hrc = pCaptureScreenSettings->COMGETTER(VideoWidth)((ULONG *)&CaptureScreenSettings.Video.ulWidth);
+        RecordScreenSettings.strOptions = bstrTemp;
+        hrc = pRecordScreenSettings->COMGETTER(VideoWidth)((ULONG *)&RecordScreenSettings.Video.ulWidth);
         AssertComRCReturn(hrc, VERR_INVALID_PARAMETER);
-        hrc = pCaptureScreenSettings->COMGETTER(VideoHeight)((ULONG *)&CaptureScreenSettings.Video.ulHeight);
+        hrc = pRecordScreenSettings->COMGETTER(VideoHeight)((ULONG *)&RecordScreenSettings.Video.ulHeight);
         AssertComRCReturn(hrc, VERR_INVALID_PARAMETER);
-        hrc = pCaptureScreenSettings->COMGETTER(VideoRate)((ULONG *)&CaptureScreenSettings.Video.ulRate);
+        hrc = pRecordScreenSettings->COMGETTER(VideoRate)((ULONG *)&RecordScreenSettings.Video.ulRate);
         AssertComRCReturn(hrc, VERR_INVALID_PARAMETER);
-        hrc = pCaptureScreenSettings->COMGETTER(VideoFPS)((ULONG *)&CaptureScreenSettings.Video.ulFPS);
+        hrc = pRecordScreenSettings->COMGETTER(VideoFPS)((ULONG *)&RecordScreenSettings.Video.ulFPS);
         AssertComRCReturn(hrc, VERR_INVALID_PARAMETER);
 
-        Settings.mapScreens[i] = CaptureScreenSettings;
+        Settings.mapScreens[i] = RecordScreenSettings;
     }
 
@@ -6971,5 +6971,5 @@
     }
 
-    settings::CaptureSettings Settings;
+    settings::RecordSettings Settings;
     rc = i_videoRecGetSettings(Settings);
     if (RT_SUCCESS(rc))
@@ -7043,8 +7043,8 @@
             mDisplay->i_videoRecScreenChanged(uScreen);
 
-        ComPtr<ICaptureSettings> pCaptureSettings;
-        HRESULT hrc = mMachine->COMGETTER(CaptureSettings)(pCaptureSettings.asOutParam());
+        ComPtr<IRecordSettings> pRecordSettings;
+        HRESULT hrc = mMachine->COMGETTER(RecordSettings)(pRecordSettings.asOutParam());
         ComAssertComRC(hrc);
-        hrc = pCaptureSettings->COMSETTER(Enabled)(false);
+        hrc = pRecordSettings->COMSETTER(Enabled)(false);
         ComAssertComRC(hrc);
 
@@ -10146,10 +10146,10 @@
 
 #ifdef VBOX_WITH_VIDEOREC
-        ComPtr<ICaptureSettings> CaptureSettings;
-        rc = pConsole->mMachine->COMGETTER(CaptureSettings)(CaptureSettings.asOutParam());
+        ComPtr<IRecordSettings> RecordSettings;
+        rc = pConsole->mMachine->COMGETTER(RecordSettings)(RecordSettings.asOutParam());
         AssertComRCReturnVoid(rc);
 
         BOOL fCaptureEnabled;
-        rc = CaptureSettings->COMGETTER(Enabled)(&fCaptureEnabled);
+        rc = RecordSettings->COMGETTER(Enabled)(&fCaptureEnabled);
         AssertComRCReturnVoid(rc);
 
@@ -10159,5 +10159,5 @@
             if (RT_SUCCESS(vrc2))
             {
-                fireCaptureChangedEvent(pConsole->mEventSource);
+                fireRecordChangedEvent(pConsole->mEventSource);
             }
             else
Index: /trunk/src/VBox/Main/src-client/DisplayImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/DisplayImpl.cpp	(revision 75340)
+++ /trunk/src/VBox/Main/src-client/DisplayImpl.cpp	(revision 75341)
@@ -3393,5 +3393,5 @@
     if (   pCtx
         && pCtx->IsStarted()
-        && pCtx->IsFeatureEnabled(CaptureFeature_Video))
+        && pCtx->IsFeatureEnabled(RecordFeature_Video))
     {
         do {
@@ -3859,5 +3859,5 @@
     if (   pCtx
         && pCtx->IsStarted()
-        && pCtx->IsFeatureEnabled(CaptureFeature_Video))
+        && pCtx->IsFeatureEnabled(RecordFeature_Video))
     {
         int rc2 = pCtx->SendVideoFrame(uScreen, x, y,
Index: /trunk/src/VBox/Main/src-client/DrvAudioVideoRec.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/DrvAudioVideoRec.cpp	(revision 75340)
+++ /trunk/src/VBox/Main/src-client/DrvAudioVideoRec.cpp	(revision 75341)
@@ -1088,5 +1088,5 @@
  * @param   Settings        Capturing configuration to apply.
  */
-int AudioVideoRec::applyConfiguration(const settings::CaptureSettings &Settings)
+int AudioVideoRec::applyConfiguration(const settings::RecordSettings &Settings)
 {
     /** @todo Do some validation here. */
@@ -1108,9 +1108,9 @@
     /** @todo For now we're using the configuration of the first screen here audio-wise. */
     Assert(mVideoRecCfg.mapScreens.size() >= 1);
-    const settings::CaptureScreenSettings &Screen0Settings = mVideoRecCfg.mapScreens[0];
+    const settings::RecordScreenSettings &Screen0Settings = mVideoRecCfg.mapScreens[0];
 
     rc = CFGMR3InsertInteger(pLunCfg, "ContainerType", (uint64_t)Screen0Settings.enmDest);
     AssertRCReturn(rc, rc);
-    if (Screen0Settings.enmDest == CaptureDestination_File)
+    if (Screen0Settings.enmDest == RecordDestination_File)
     {
         rc = CFGMR3InsertString(pLunCfg, "ContainerFileName", Utf8Str(Screen0Settings.File.strName).c_str());
Index: /trunk/src/VBox/Main/src-client/SessionImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/SessionImpl.cpp	(revision 75340)
+++ /trunk/src/VBox/Main/src-client/SessionImpl.cpp	(revision 75341)
@@ -725,15 +725,15 @@
 }
 
-HRESULT Session::onCaptureChange()
-{
-    LogFlowThisFunc(("\n"));
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-    AssertReturn(mState == SessionState_Locked, VBOX_E_INVALID_VM_STATE);
-    AssertReturn(mType == SessionType_WriteLock, VBOX_E_INVALID_OBJECT_STATE);
-#ifndef VBOX_COM_INPROC_API_CLIENT
-    AssertReturn(mConsole, VBOX_E_INVALID_OBJECT_STATE);
-
-    return mConsole->i_onCaptureChange();
+HRESULT Session::onRecordChange()
+{
+    LogFlowThisFunc(("\n"));
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+    AssertReturn(mState == SessionState_Locked, VBOX_E_INVALID_VM_STATE);
+    AssertReturn(mType == SessionType_WriteLock, VBOX_E_INVALID_OBJECT_STATE);
+#ifndef VBOX_COM_INPROC_API_CLIENT
+    AssertReturn(mConsole, VBOX_E_INVALID_OBJECT_STATE);
+
+    return mConsole->i_onRecordChange();
 #else
     return S_OK;
Index: /trunk/src/VBox/Main/src-client/VideoRec.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/VideoRec.cpp	(revision 75340)
+++ /trunk/src/VBox/Main/src-client/VideoRec.cpp	(revision 75341)
@@ -94,5 +94,5 @@
     , enmState(VIDEORECSTS_UNINITIALIZED) { }
 
-CaptureContext::CaptureContext(Console *a_pConsole, const settings::CaptureSettings &a_Settings)
+CaptureContext::CaptureContext(Console *a_pConsole, const settings::RecordSettings &a_Settings)
     : pConsole(a_pConsole)
     , enmState(VIDEORECSTS_UNINITIALIZED)
@@ -177,5 +177,5 @@
  * @param   a_Settings          Capture settings to use for context creation.
  */
-int CaptureContext::createInternal(const settings::CaptureSettings &a_Settings)
+int CaptureContext::createInternal(const settings::RecordSettings &a_Settings)
 {
     int rc = RTCritSectInit(&this->CritSect);
@@ -183,5 +183,5 @@
         return rc;
 
-    settings::CaptureScreenMap::const_iterator itScreen = a_Settings.mapScreens.begin();
+    settings::RecordScreenMap::const_iterator itScreen = a_Settings.mapScreens.begin();
     while (itScreen != a_Settings.mapScreens.end())
     {
@@ -318,5 +318,5 @@
 }
 
-const settings::CaptureSettings &CaptureContext::GetConfig(void) const
+const settings::RecordSettings &CaptureContext::GetConfig(void) const
 {
     return this->Settings;
@@ -355,5 +355,5 @@
 }
 
-int CaptureContext::Create(const settings::CaptureSettings &a_Settings)
+int CaptureContext::Create(const settings::RecordSettings &a_Settings)
 {
     return createInternal(a_Settings);
@@ -375,5 +375,5 @@
 }
 
-bool CaptureContext::IsFeatureEnabled(CaptureFeature_T enmFeature) const
+bool CaptureContext::IsFeatureEnabled(RecordFeature_T enmFeature) const
 {
     VideoRecStreams::const_iterator itStream = this->vecStreams.begin();
Index: /trunk/src/VBox/Main/src-client/VideoRecStream.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/VideoRecStream.cpp	(revision 75340)
+++ /trunk/src/VBox/Main/src-client/VideoRecStream.cpp	(revision 75341)
@@ -51,5 +51,5 @@
 }
 
-CaptureStream::CaptureStream(CaptureContext *a_pCtx, uint32_t uScreen, const settings::CaptureScreenSettings &Settings)
+CaptureStream::CaptureStream(CaptureContext *a_pCtx, uint32_t uScreen, const settings::RecordScreenSettings &Settings)
     : enmState(RECORDINGSTREAMSTATE_UNINITIALIZED)
     , tsStartMs(0)
@@ -74,8 +74,8 @@
  * @returns IPRT status code.
  */
-int CaptureStream::open(const settings::CaptureScreenSettings &Settings)
+int CaptureStream::open(const settings::RecordScreenSettings &Settings)
 {
     /* Sanity. */
-    Assert(Settings.enmDest != CaptureDestination_None);
+    Assert(Settings.enmDest != RecordDestination_None);
 
     int rc;
@@ -83,5 +83,5 @@
     switch (Settings.enmDest)
     {
-        case CaptureDestination_File:
+        case RecordDestination_File:
         {
             Assert(Settings.File.strName.isNotEmpty());
@@ -209,5 +209,5 @@
             if (value.compare("false", Utf8Str::CaseInsensitive) == 0)
             {
-                this->ScreenSettings.featureMap[CaptureFeature_Video] = false;
+                this->ScreenSettings.featureMap[RecordFeature_Video] = false;
 #ifdef VBOX_WITH_AUDIO_VIDEOREC
                 LogRel(("VideoRec: Only audio will be recorded\n"));
@@ -220,5 +220,5 @@
             if (value.compare("true", Utf8Str::CaseInsensitive) == 0)
             {
-                this->ScreenSettings.featureMap[CaptureFeature_Audio] = true;
+                this->ScreenSettings.featureMap[RecordFeature_Audio] = true;
             }
             else
@@ -255,5 +255,5 @@
 }
 
-const settings::CaptureScreenSettings &CaptureStream::GetConfig(void) const
+const settings::RecordScreenSettings &CaptureStream::GetConfig(void) const
 {
     return this->ScreenSettings;
@@ -277,5 +277,5 @@
     }
 
-    if (this->ScreenSettings.enmDest == CaptureDestination_File)
+    if (this->ScreenSettings.enmDest == RecordDestination_File)
     {
 
@@ -661,5 +661,5 @@
  * @param   Settings            Capturing configuration to use for initialization.
  */
-int CaptureStream::Init(CaptureContext *a_pCtx, uint32_t uScreen, const settings::CaptureScreenSettings &Settings)
+int CaptureStream::Init(CaptureContext *a_pCtx, uint32_t uScreen, const settings::RecordScreenSettings &Settings)
 {
     return initInternal(a_pCtx, uScreen, Settings);
@@ -674,5 +674,5 @@
  * @param   Settings            Capturing configuration to use for initialization.
  */
-int CaptureStream::initInternal(CaptureContext *a_pCtx, uint32_t uScreen, const settings::CaptureScreenSettings &Settings)
+int CaptureStream::initInternal(CaptureContext *a_pCtx, uint32_t uScreen, const settings::RecordScreenSettings &Settings)
 {
     int rc = parseOptionsString(Settings.strOptions);
@@ -688,6 +688,6 @@
         return rc;
 
-    const bool fVideoEnabled = Settings.isFeatureEnabled(CaptureFeature_Video);
-    const bool fAudioEnabled = Settings.isFeatureEnabled(CaptureFeature_Audio);
+    const bool fVideoEnabled = Settings.isFeatureEnabled(RecordFeature_Video);
+    const bool fAudioEnabled = Settings.isFeatureEnabled(RecordFeature_Audio);
 
     if (fVideoEnabled)
@@ -699,5 +699,5 @@
     switch (this->ScreenSettings.enmDest)
     {
-        case CaptureDestination_File:
+        case RecordDestination_File:
         {
             const char *pszFile = this->ScreenSettings.File.strName.c_str();
@@ -706,10 +706,10 @@
             rc = File.pWEBM->OpenEx(pszFile, &this->File.hFile,
 #ifdef VBOX_WITH_AUDIO_VIDEOREC
-                                      Settings.isFeatureEnabled(CaptureFeature_Audio)
+                                      Settings.isFeatureEnabled(RecordFeature_Audio)
                                     ? WebMWriter::AudioCodec_Opus : WebMWriter::AudioCodec_None,
 #else
                                       WebMWriter::AudioCodec_None,
 #endif
-                                      Settings.isFeatureEnabled(CaptureFeature_Video)
+                                      Settings.isFeatureEnabled(RecordFeature_Video)
                                     ? WebMWriter::VideoCodec_VP8 : WebMWriter::VideoCodec_None);
             if (RT_FAILURE(rc))
@@ -814,5 +814,5 @@
         switch (this->ScreenSettings.enmDest)
         {
-            case CaptureDestination_File:
+            case RecordDestination_File:
             {
                 if (this->File.pWEBM)
@@ -839,5 +839,5 @@
     switch (this->ScreenSettings.enmDest)
     {
-        case CaptureDestination_File:
+        case RecordDestination_File:
         {
             if (RTFileIsValid(this->File.hFile))
@@ -891,5 +891,5 @@
         return rc;
 
-    if (this->ScreenSettings.isFeatureEnabled(CaptureFeature_Video))
+    if (this->ScreenSettings.isFeatureEnabled(RecordFeature_Video))
     {
         int rc2 = unitVideo();
@@ -1025,5 +1025,5 @@
 {
 #ifdef VBOX_WITH_AUDIO_VIDEOREC
-    if (this->ScreenSettings.isFeatureEnabled(CaptureFeature_Audio))
+    if (this->ScreenSettings.isFeatureEnabled(RecordFeature_Audio))
     {
         /* Sanity. */
Index: unk/src/VBox/Main/src-server/CaptureScreenSettingsImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/CaptureScreenSettingsImpl.cpp	(revision 75340)
+++ 	(revision )
@@ -1,817 +1,0 @@
-/* $Id$ */
-/** @file
- *
- * VirtualBox COM class implementation - Capture settings of one virtual screen.
- */
-
-/*
- * Copyright (C) 2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#define LOG_GROUP LOG_GROUP_MAIN_CAPTURESCREENSETTINGS
-#include "LoggingNew.h"
-
-#include "CaptureScreenSettingsImpl.h"
-#include "CaptureSettingsImpl.h"
-#include "MachineImpl.h"
-
-#include <iprt/path.h>
-#include <iprt/cpp/utils.h>
-#include <VBox/settings.h>
-
-#include "AutoStateDep.h"
-#include "AutoCaller.h"
-#include "Global.h"
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// CaptureScreenSettings private data definition
-//
-////////////////////////////////////////////////////////////////////////////////
-
-struct CaptureScreenSettings::Data
-{
-    Data()
-        : pParent(NULL)
-    { }
-
-    CaptureSettings * const          pParent;
-    ComObjPtr<CaptureScreenSettings> pPeer;
-    uint32_t                         uScreenId;
-
-    // use the XML settings structure in the members for simplicity
-    Backupable<settings::CaptureScreenSettings> bd;
-};
-
-// constructor / destructor
-/////////////////////////////////////////////////////////////////////////////
-
-DEFINE_EMPTY_CTOR_DTOR(CaptureScreenSettings)
-
-HRESULT CaptureScreenSettings::FinalConstruct()
-{
-    return BaseFinalConstruct();
-}
-
-void CaptureScreenSettings::FinalRelease()
-{
-    uninit();
-    BaseFinalRelease();
-}
-
-// public initializer/uninitializer for internal purposes only
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Initializes the audio adapter object.
- *
- * @returns COM result indicator
- */
-HRESULT CaptureScreenSettings::init(CaptureSettings *aParent, uint32_t uScreenId, const settings::CaptureScreenSettings& data)
-{
-    LogFlowThisFuncEnter();
-    LogFlowThisFunc(("aParent: %p\n", aParent));
-
-    ComAssertRet(aParent, E_INVALIDARG);
-
-    /* Enclose the state transition NotReady->InInit->Ready */
-    AutoInitSpan autoInitSpan(this);
-    AssertReturn(autoInitSpan.isOk(), E_FAIL);
-
-    m = new Data();
-
-    /* Share the parent & machine weakly. */
-    unconst(m->pParent)  = aParent;
-    /* mPeer is left null. */
-
-    /* Simply copy the settings data. */
-    m->uScreenId = uScreenId;
-    m->bd.allocate();
-    m->bd->operator=(data);
-
-    HRESULT rc = S_OK;
-
-    int vrc = i_initInternal();
-    if (RT_SUCCESS(vrc))
-    {
-        autoInitSpan.setSucceeded();
-    }
-    else
-    {
-        autoInitSpan.setFailed();
-        rc = E_UNEXPECTED;
-    }
-
-    LogFlowThisFuncLeave();
-    return rc;
-}
-
-/**
- *  Initializes the capture settings object given another capture settings object
- *  (a kind of copy constructor). This object shares data with
- *  the object passed as an argument.
- *
- *  @note This object must be destroyed before the original object
- *  it shares data with is destroyed.
- */
-HRESULT CaptureScreenSettings::init(CaptureSettings *aParent, CaptureScreenSettings *that)
-{
-    LogFlowThisFuncEnter();
-    LogFlowThisFunc(("aParent: %p, that: %p\n", aParent, that));
-
-    ComAssertRet(aParent && that, E_INVALIDARG);
-
-    /* Enclose the state transition NotReady->InInit->Ready */
-    AutoInitSpan autoInitSpan(this);
-    AssertReturn(autoInitSpan.isOk(), E_FAIL);
-
-    m = new Data();
-
-    unconst(m->pParent) = aParent;
-    m->pPeer = that;
-
-    AutoWriteLock thatlock(that COMMA_LOCKVAL_SRC_POS);
-
-    m->uScreenId = that->m->uScreenId;
-    m->bd.share(that->m->bd);
-
-    HRESULT rc = S_OK;
-
-    int vrc = i_initInternal();
-    if (RT_SUCCESS(vrc))
-    {
-        autoInitSpan.setSucceeded();
-    }
-    else
-    {
-        autoInitSpan.setFailed();
-        rc = E_UNEXPECTED;
-    }
-
-    LogFlowThisFuncLeave();
-    return rc;
-}
-
-/**
- *  Initializes the guest object given another guest object
- *  (a kind of copy constructor). This object makes a private copy of data
- *  of the original object passed as an argument.
- */
-HRESULT CaptureScreenSettings::initCopy(CaptureSettings *aParent, CaptureScreenSettings *that)
-{
-    LogFlowThisFuncEnter();
-    LogFlowThisFunc(("aParent: %p, that: %p\n", aParent, that));
-
-    ComAssertRet(aParent && that, E_INVALIDARG);
-
-    /* Enclose the state transition NotReady->InInit->Ready */
-    AutoInitSpan autoInitSpan(this);
-    AssertReturn(autoInitSpan.isOk(), E_FAIL);
-
-    m = new Data();
-
-    unconst(m->pParent) = aParent;
-    /* mPeer is left null. */
-
-    AutoWriteLock thatlock(that COMMA_LOCKVAL_SRC_POS);
-
-    m->uScreenId = that->m->uScreenId;
-    m->bd.attachCopy(that->m->bd);
-
-    HRESULT rc = S_OK;
-
-    int vrc = i_initInternal();
-    if (RT_SUCCESS(vrc))
-    {
-        autoInitSpan.setSucceeded();
-    }
-    else
-    {
-        autoInitSpan.setFailed();
-        rc = E_UNEXPECTED;
-    }
-
-    LogFlowThisFuncLeave();
-    return rc;
-}
-
-/**
- *  Uninitializes the instance and sets the ready flag to FALSE.
- *  Called either from FinalRelease() or by the parent when it gets destroyed.
- */
-void CaptureScreenSettings::uninit()
-{
-    LogFlowThisFuncEnter();
-
-    /* Enclose the state transition Ready->InUninit->NotReady */
-    AutoUninitSpan autoUninitSpan(this);
-    if (autoUninitSpan.uninitDone())
-        return;
-
-    m->bd.free();
-
-    unconst(m->pPeer) = NULL;
-    unconst(m->pParent) = NULL;
-
-    delete m;
-    m = NULL;
-
-    LogFlowThisFuncLeave();
-}
-
-HRESULT CaptureScreenSettings::isFeatureEnabled(CaptureFeature_T aFeature, BOOL *aEnabled)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    settings::CaptureFeatureMap::const_iterator itFeature = m->bd->featureMap.find(aFeature);
-
-    *aEnabled = (   itFeature != m->bd->featureMap.end()
-                 && itFeature->second == true);
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getId(ULONG *id)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *id = m->uScreenId;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getEnabled(BOOL *enabled)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *enabled = m->bd->fEnabled ? TRUE : FALSE;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setEnabled(BOOL enabled)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    LogFlowThisFunc(("Screen %RU32\n", m->uScreenId));
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change enabled state of screen while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    if (m->bd->fEnabled != RT_BOOL(enabled))
-    {
-        m->bd.backup();
-        m->bd->fEnabled = RT_BOOL(enabled);
-        alock.release();
-
-        m->pParent->i_onSettingsChanged();
-    }
-
-    LogFlowThisFunc(("Screen %RU32\n", m->uScreenId));
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getFeatures(ULONG *aFeatures)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *aFeatures = 0;
-
-    settings::CaptureFeatureMap::const_iterator itFeature = m->bd->featureMap.begin();
-    while (itFeature != m->bd->featureMap.end())
-    {
-        if (itFeature->second) /* Is feature enable? */
-            *aFeatures |= (ULONG)itFeature->first;
-
-        ++itFeature;
-    }
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setFeatures(ULONG aFeatures)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change features while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    m->bd.backup();
-    m->bd->featureMap.clear();
-
-    if (aFeatures & CaptureFeature_Audio)
-        m->bd->featureMap[CaptureFeature_Audio] = true;
-    if (aFeatures & CaptureFeature_Video)
-        m->bd->featureMap[CaptureFeature_Video] = true;
-
-    alock.release();
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getDestination(CaptureDestination_T *aDestination)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *aDestination = m->bd->enmDest;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setDestination(CaptureDestination_T aDestination)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change destination type while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    m->bd.backup();
-    m->bd->enmDest = aDestination;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getFileName(com::Utf8Str &aFileName)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    aFileName = m->bd->File.strName;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setFileName(const com::Utf8Str &aFileName)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change file name while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    Utf8Str strFile(aFileName);
-
-    if (!RTPathStartsWithRoot(strFile.c_str()))
-        return setError(E_INVALIDARG, tr("Capture file name '%s' is not absolute"), strFile.c_str());
-
-    m->bd.backup();
-    m->bd->File.strName = strFile;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getMaxTime(ULONG *aMaxTimeS)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *aMaxTimeS =  m->bd->ulMaxTimeS;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setMaxTime(ULONG aMaxTimeS)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change maximum time while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    m->bd.backup();
-    m->bd->ulMaxTimeS = aMaxTimeS;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getMaxFileSize(ULONG *aMaxFileSizeMB)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *aMaxFileSizeMB = m->bd->File.ulMaxSizeMB;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setMaxFileSize(ULONG aMaxFileSize)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change maximum file size while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    m->bd.backup();
-    m->bd->File.ulMaxSizeMB = aMaxFileSize;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getOptions(com::Utf8Str &aOptions)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    aOptions = m->bd->strOptions;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setOptions(const com::Utf8Str &aOptions)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change options while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    m->bd.backup();
-    m->bd->strOptions = aOptions;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getAudioCodec(CaptureAudioCodec_T *aCodec)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *aCodec = m->bd->Audio.enmAudioCodec;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setAudioCodec(CaptureAudioCodec_T aCodec)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change audio codec while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    m->bd.backup();
-    m->bd->Audio.enmAudioCodec = aCodec;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getAudioHz(ULONG *aHz)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *aHz = m->bd->Audio.uHz;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setAudioHz(ULONG aHz)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change audio Hertz rate while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    m->bd.backup();
-    m->bd->Audio.uHz = (uint16_t)aHz;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getAudioBits(ULONG *aBits)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *aBits = m->bd->Audio.cBits;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setAudioBits(ULONG aBits)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change audio bits while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    m->bd.backup();
-    m->bd->Audio.cBits = (uint8_t)aBits;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getAudioChannels(ULONG *aChannels)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *aChannels = m->bd->Audio.cChannels;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setAudioChannels(ULONG aChannels)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change audio channels while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    m->bd.backup();
-    m->bd->Audio.cChannels = (uint8_t)aChannels;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getVideoCodec(CaptureVideoCodec_T *aCodec)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *aCodec = m->bd->Video.enmCodec;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setVideoCodec(CaptureVideoCodec_T aCodec)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change video codec while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    m->bd.backup();
-    m->bd->Video.enmCodec = aCodec;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getVideoWidth(ULONG *aVideoWidth)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *aVideoWidth = m->bd->Video.ulWidth;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setVideoWidth(ULONG aVideoWidth)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change video width while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    m->bd.backup();
-    m->bd->Video.ulWidth = aVideoWidth;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getVideoHeight(ULONG *aVideoHeight)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *aVideoHeight = m->bd->Video.ulHeight;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setVideoHeight(ULONG aVideoHeight)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change video height while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    m->bd.backup();
-    m->bd->Video.ulHeight = aVideoHeight;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getVideoRate(ULONG *aVideoRate)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *aVideoRate = m->bd->Video.ulRate;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setVideoRate(ULONG aVideoRate)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change video rate while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    m->bd.backup();
-    m->bd->Video.ulRate = aVideoRate;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getVideoRateControlMode(CaptureVideoRateControlMode_T *aMode)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *aMode = CaptureVideoRateControlMode_CBR; /** @todo Implement VBR. */
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setVideoRateControlMode(CaptureVideoRateControlMode_T aMode)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change video rate control mode while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    /** @todo Implement this. */
-    RT_NOREF(aMode);
-
-    return E_NOTIMPL;
-}
-
-HRESULT CaptureScreenSettings::getVideoFPS(ULONG *aVideoFPS)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *aVideoFPS = m->bd->Video.ulFPS;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setVideoFPS(ULONG aVideoFPS)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change video FPS while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    m->bd.backup();
-    m->bd->Video.ulFPS = aVideoFPS;
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::getVideoScalingMethod(CaptureVideoScalingMethod_T *aMode)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *aMode = CaptureVideoScalingMethod_None; /** @todo Implement this. */
-
-    return S_OK;
-}
-
-HRESULT CaptureScreenSettings::setVideoScalingMethod(CaptureVideoScalingMethod_T aMode)
-{
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    if (!m->pParent->i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change video rate scaling method while capturing is enabled"));
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    /** @todo Implement this. */
-    RT_NOREF(aMode);
-
-    return E_NOTIMPL;
-}
-
-/**
- * Initializes data, internal version.
- *
- * @returns IPRT status code.
- */
-int CaptureScreenSettings::i_initInternal(void)
-{
-    Assert(m);
-
-    int rc = VINF_SUCCESS;
-
-    switch (m->bd->enmDest)
-    {
-        case CaptureDestination_File:
-        {
-            if (m->bd->File.strName.isEmpty())
-                rc = m->pParent->i_getDefaultFileName(m->bd->File.strName);
-            break;
-        }
-
-        default:
-            break;
-    }
-
-    return rc;
-}
-
Index: unk/src/VBox/Main/src-server/CaptureSettingsImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/CaptureSettingsImpl.cpp	(revision 75340)
+++ 	(revision )
@@ -1,661 +1,0 @@
-/* $Id$ */
-/** @file
- *
- * VirtualBox COM class implementation - Machine capture settings.
- */
-
-/*
- * Copyright (C) 2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#define LOG_GROUP LOG_GROUP_MAIN_CAPTURESETTINGS
-#include "LoggingNew.h"
-
-#include "CaptureSettingsImpl.h"
-#include "CaptureScreenSettingsImpl.h"
-#include "MachineImpl.h"
-
-#include <iprt/cpp/utils.h>
-#include <VBox/settings.h>
-
-#include "AutoStateDep.h"
-#include "AutoCaller.h"
-#include "Global.h"
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// CaptureSettings private data definition
-//
-////////////////////////////////////////////////////////////////////////////////
-
-struct CaptureSettings::Data
-{
-    Data()
-        : pMachine(NULL)
-    { }
-
-    Machine * const             pMachine;
-    ComObjPtr<CaptureSettings>  pPeer;
-    CaptureScreenSettingsMap    mapScreenObj;
-    bool                        fHasMachineLock;
-
-    // use the XML settings structure in the members for simplicity
-    Backupable<settings::CaptureSettings> bd;
-};
-
-DEFINE_EMPTY_CTOR_DTOR(CaptureSettings)
-
-HRESULT CaptureSettings::FinalConstruct()
-{
-    return BaseFinalConstruct();
-}
-
-void CaptureSettings::FinalRelease()
-{
-    uninit();
-    BaseFinalRelease();
-}
-
-/**
- * Initializes the audio adapter object.
- *
- * @returns COM result indicator
- */
-HRESULT CaptureSettings::init(Machine *aParent)
-{
-    LogFlowThisFuncEnter();
-    LogFlowThisFunc(("aParent: %p\n", aParent));
-
-    ComAssertRet(aParent, E_INVALIDARG);
-
-    /* Enclose the state transition NotReady->InInit->Ready */
-    AutoInitSpan autoInitSpan(this);
-    AssertReturn(autoInitSpan.isOk(), E_FAIL);
-
-    m = new Data();
-
-    /* share the parent weakly */
-    unconst(m->pMachine) = aParent;
-
-    m->bd.allocate();
-    m->fHasMachineLock = false;
-
-    autoInitSpan.setSucceeded();
-
-    LogFlowThisFuncLeave();
-    return S_OK;
-}
-
-/**
- *  Initializes the capture settings object given another capture settings object
- *  (a kind of copy constructor). This object shares data with
- *  the object passed as an argument.
- *
- *  @note This object must be destroyed before the original object
- *  it shares data with is destroyed.
- */
-HRESULT CaptureSettings::init(Machine *aParent, CaptureSettings *that)
-{
-    LogFlowThisFuncEnter();
-    LogFlowThisFunc(("aParent: %p, that: %p\n", aParent, that));
-
-    ComAssertRet(aParent && that, E_INVALIDARG);
-
-    /* Enclose the state transition NotReady->InInit->Ready */
-    AutoInitSpan autoInitSpan(this);
-    AssertReturn(autoInitSpan.isOk(), E_FAIL);
-
-    m = new Data();
-
-    unconst(m->pMachine) = aParent;
-    m->pPeer = that;
-
-    AutoWriteLock thatlock(that COMMA_LOCKVAL_SRC_POS);
-
-    m->bd.share(that->m->bd);
-    m->mapScreenObj = that->m->mapScreenObj;
-    m->fHasMachineLock = false;
-
-    autoInitSpan.setSucceeded();
-
-    LogFlowThisFuncLeave();
-    return S_OK;
-}
-
-/**
- *  Initializes the guest object given another guest object
- *  (a kind of copy constructor). This object makes a private copy of data
- *  of the original object passed as an argument.
- */
-HRESULT CaptureSettings::initCopy(Machine *aParent, CaptureSettings *that)
-{
-    LogFlowThisFuncEnter();
-    LogFlowThisFunc(("aParent: %p, that: %p\n", aParent, that));
-
-    ComAssertRet(aParent && that, E_INVALIDARG);
-
-    /* Enclose the state transition NotReady->InInit->Ready */
-    AutoInitSpan autoInitSpan(this);
-    AssertReturn(autoInitSpan.isOk(), E_FAIL);
-
-    m = new Data();
-
-    unconst(m->pMachine) = aParent;
-    // mPeer is left null
-
-    AutoWriteLock thatlock(that COMMA_LOCKVAL_SRC_POS);
-
-    m->bd.attachCopy(that->m->bd);
-    m->mapScreenObj = that->m->mapScreenObj;
-    m->fHasMachineLock = false;
-
-    autoInitSpan.setSucceeded();
-
-    LogFlowThisFuncLeave();
-    return S_OK;
-}
-
-/**
- *  Uninitializes the instance and sets the ready flag to FALSE.
- *  Called either from FinalRelease() or by the parent when it gets destroyed.
- */
-void CaptureSettings::uninit()
-{
-    LogFlowThisFuncEnter();
-
-    /* Enclose the state transition Ready->InUninit->NotReady */
-    AutoUninitSpan autoUninitSpan(this);
-    if (autoUninitSpan.uninitDone())
-        return;
-
-    /* Note: Do *not* call i_reset() here, as the shared recording configuration
-     *       otherwise gets destructed when this object goes out of scope or is destroyed. */
-
-    m->bd.free();
-
-    unconst(m->pPeer) = NULL;
-    unconst(m->pMachine) = NULL;
-
-    delete m;
-    m = NULL;
-
-    LogFlowThisFuncLeave();
-}
-
-// ICaptureSettings properties
-/////////////////////////////////////////////////////////////////////////////
-
-HRESULT CaptureSettings::getEnabled(BOOL *enabled)
-{
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *enabled = m->bd->fEnabled;
-
-    return S_OK;
-}
-
-HRESULT CaptureSettings::setEnabled(BOOL enable)
-{
-    LogFlowThisFuncEnter();
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    const bool fEnabled = RT_BOOL(enable);
-
-    HRESULT rc = S_OK;
-
-    if (m->bd->fEnabled != fEnabled)
-    {
-        m->bd.backup();
-        m->bd->fEnabled = fEnabled;
-
-        alock.release();
-        rc = m->pMachine->i_onCaptureChange();
-        if (FAILED(rc))
-        {
-            /*
-             * Normally we would do the actual change _after_ i_onCaptureChange() succeeded.
-             * We cannot do this because that function uses CaptureSettings::GetEnabled to
-             * determine if it should start or stop capturing. Therefore we need to manually
-             * undo change.
-             */
-            alock.acquire();
-            m->bd->fEnabled = m->bd.backedUpData()->fEnabled;
-        }
-        else
-        {
-            AutoWriteLock mlock(m->pMachine COMMA_LOCKVAL_SRC_POS);  // mParent is const, needs no locking
-            m->pMachine->i_setModified(Machine::IsModified_Capture);
-
-            /* We need to indicate here that we just took the machine lock, as Machine::i_saveSettings() will
-             * call i_commit(), which in turn also wants to lock the machine for writing. */
-            m->fHasMachineLock = true;
-
-            /** Save settings if online - @todo why is this required? -- @bugref{6818} */
-            if (Global::IsOnline(m->pMachine->i_getMachineState()))
-                rc = m->pMachine->i_saveSettings(NULL);
-
-            m->fHasMachineLock = false;
-        }
-    }
-
-    return rc;
-}
-
-HRESULT CaptureSettings::getScreens(std::vector<ComPtr<ICaptureScreenSettings> > &aCaptureScreenSettings)
-{
-    LogFlowThisFuncEnter();
-
-    i_syncToMachineDisplays();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    aCaptureScreenSettings.clear();
-    aCaptureScreenSettings.resize(m->mapScreenObj.size());
-
-    CaptureScreenSettingsMap::const_iterator itScreenSettings = m->mapScreenObj.begin();
-    size_t i = 0;
-    while (itScreenSettings != m->mapScreenObj.end())
-    {
-        itScreenSettings->second.queryInterfaceTo(aCaptureScreenSettings[i].asOutParam());
-        Assert(aCaptureScreenSettings[i].isNotNull());
-        ++i;
-        ++itScreenSettings;
-    }
-
-    Assert(aCaptureScreenSettings.size() == m->mapScreenObj.size());
-
-    return S_OK;
-}
-
-HRESULT CaptureSettings::getScreenSettings(ULONG uScreenId, ComPtr<ICaptureScreenSettings> &aCaptureScreenSettings)
-{
-    LogFlowThisFuncEnter();
-
-    i_syncToMachineDisplays();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    if (uScreenId + 1 > m->mapScreenObj.size())
-        return setError(E_INVALIDARG, tr("Invalid screen ID specified"));
-
-    CaptureScreenSettingsMap::const_iterator itScreenSettings = m->mapScreenObj.find(uScreenId);
-    if (itScreenSettings != m->mapScreenObj.end())
-    {
-        itScreenSettings->second.queryInterfaceTo(aCaptureScreenSettings.asOutParam());
-        return S_OK;
-    }
-
-    return VBOX_E_OBJECT_NOT_FOUND;
-}
-
-// ICaptureSettings methods
-/////////////////////////////////////////////////////////////////////////////
-
-// public methods only for internal purposes
-/////////////////////////////////////////////////////////////////////////////
-
-/**
- * Adds a screen settings object to a particular map.
- *
- * @returns IPRT status code. VERR_ALREADY_EXISTS if the object in question already exists.
- * @param   screenSettingsMap   Map to add screen settings to.
- * @param   uScreenId           Screen ID to add settings for.
- * @param   data                Recording screen settings to use for that screen.
- */
-int CaptureSettings::i_createScreenObj(CaptureScreenSettingsMap &screenSettingsMap,
-                                       uint32_t uScreenId, const settings::CaptureScreenSettings &data)
-{
-    LogFlowThisFunc(("Screen %RU32\n", uScreenId));
-
-    if (screenSettingsMap.find(uScreenId) != screenSettingsMap.end())
-    {
-        AssertFailed();
-        return VERR_ALREADY_EXISTS;
-    }
-
-    int vrc = VINF_SUCCESS;
-
-    ComObjPtr<CaptureScreenSettings> captureScreenSettings;
-    HRESULT rc = captureScreenSettings.createObject();
-    if (SUCCEEDED(rc))
-    {
-        rc = captureScreenSettings->init(this, uScreenId, data);
-        if (SUCCEEDED(rc))
-        {
-            try
-            {
-                screenSettingsMap[uScreenId] = captureScreenSettings;
-            }
-            catch (std::bad_alloc &)
-            {
-                vrc = VERR_NO_MEMORY;
-            }
-        }
-    }
-
-    return vrc;
-}
-
-/**
- * Removes a screen settings object from a particular map.
- *
- * @returns IPRT status code. VERR_NOT_FOUND if specified screen was not found.
- * @param   screenSettingsMap   Map to remove screen settings from.
- * @param   uScreenId           ID of screen to remove.
- */
-int CaptureSettings::i_destroyScreenObj(CaptureScreenSettingsMap &screenSettingsMap, uint32_t uScreenId)
-{
-    LogFlowThisFunc(("Screen %RU32\n", uScreenId));
-
-    AssertReturn(uScreenId > 0, VERR_INVALID_PARAMETER); /* Removing screen 0 isn't a good idea. */
-
-    CaptureScreenSettingsMap::iterator itScreen = screenSettingsMap.find(uScreenId);
-    if (itScreen == screenSettingsMap.end())
-    {
-        AssertFailed();
-        return VERR_NOT_FOUND;
-    }
-
-    /* Make sure to consume the pointer before the one of the
-     * iterator gets released. */
-    ComObjPtr<CaptureScreenSettings> pScreenSettings = itScreen->second;
-
-    screenSettingsMap.erase(itScreen);
-
-    pScreenSettings.setNull();
-
-    return VINF_SUCCESS;
-}
-
-/**
- * Destroys all screen settings objects of a particular map.
- *
- * @returns IPRT status code.
- * @param   screenSettingsMap   Map to destroy screen settings objects for.
- */
-int CaptureSettings::i_destroyAllScreenObj(CaptureScreenSettingsMap &screenSettingsMap)
-{
-    LogFlowThisFuncEnter();
-
-    CaptureScreenSettingsMap::iterator itScreen = screenSettingsMap.begin();
-    if (itScreen != screenSettingsMap.end())
-    {
-        /* Make sure to consume the pointer before the one of the
-         * iterator gets released. */
-        ComObjPtr<CaptureScreenSettings> pScreenSettings = itScreen->second;
-
-        screenSettingsMap.erase(itScreen);
-
-        pScreenSettings.setNull();
-
-        itScreen = screenSettingsMap.begin();
-    }
-
-    return VINF_SUCCESS;
-}
-
-/**
- * Loads settings from the given settings.
- * May be called once right after this object creation.
- *
- * @param data                  Capture settings to load from.
- *
- * @note Locks this object for writing.
- */
-HRESULT CaptureSettings::i_loadSettings(const settings::CaptureSettings &data)
-{
-    LogFlowThisFuncEnter();
-
-    AutoCaller autoCaller(this);
-    AssertComRCReturnRC(autoCaller.rc());
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    HRESULT rc = S_OK;
-
-    i_reset();
-
-    LogFlowThisFunc(("Data has %zu screens\n", data.mapScreens.size()));
-
-    settings::CaptureScreenMap::const_iterator itScreen = data.mapScreens.begin();
-    while (itScreen != data.mapScreens.end())
-    {
-        int vrc = i_createScreenObj(m->mapScreenObj,
-                                    itScreen->first /* uScreenId */, itScreen->second /* Settings */);
-        if (RT_FAILURE(vrc))
-        {
-            rc = E_OUTOFMEMORY;
-            break;
-        }
-
-        ++itScreen;
-    }
-
-    if (FAILED(rc))
-        return rc;
-
-    ComAssertComRC(rc);
-    Assert(m->mapScreenObj.size() == data.mapScreens.size());
-
-    // simply copy
-    m->bd.assignCopy(&data);
-
-    LogFlowThisFunc(("Returning %Rhrc\n", rc));
-    return rc;
-}
-
-/**
- * Resets the internal object state by destroying all screen settings objects.
- */
-void CaptureSettings::i_reset(void)
-{
-    LogFlowThisFuncEnter();
-
-    i_destroyAllScreenObj(m->mapScreenObj);
-    m->bd->mapScreens.clear();
-}
-
-/**
- * Saves settings to the given settings.
- *
- * @param data                  Where to store the capture settings to.
- *
- * @note Locks this object for reading.
- */
-HRESULT CaptureSettings::i_saveSettings(settings::CaptureSettings &data)
-{
-    LogFlowThisFuncEnter();
-
-    AutoCaller autoCaller(this);
-    AssertComRCReturnRC(autoCaller.rc());
-
-    int rc2 = i_syncToMachineDisplays();
-    AssertRC(rc2);
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    data = *m->bd.data();
-
-    settings::CaptureScreenMap::iterator itScreen = data.mapScreens.begin();
-    while (itScreen != data.mapScreens.end())
-    {
-        /* Store relative path of capture file if possible. */
-        m->pMachine->i_copyPathRelativeToMachine(itScreen->second.File.strName /* Source */,
-                                                 itScreen->second.File.strName /* Target */);
-        ++itScreen;
-    }
-
-    LogFlowThisFuncLeave();
-    return S_OK;
-}
-
-void CaptureSettings::i_rollback()
-{
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-    m->bd.rollback();
-}
-
-void CaptureSettings::i_commit()
-{
-    /* sanity */
-    AutoCaller autoCaller(this);
-    AssertComRCReturnVoid(autoCaller.rc());
-
-    /* sanity too */
-    AutoCaller peerCaller(m->pPeer);
-    AssertComRCReturnVoid(peerCaller.rc());
-
-    /* lock both for writing since we modify both (mPeer is "master" so locked
-     * first) */
-    AutoMultiWriteLock2 alock(m->pPeer, this COMMA_LOCKVAL_SRC_POS);
-
-    if (m->bd.isBackedUp())
-    {
-        m->bd.commit();
-        if (m->pPeer)
-        {
-            /* attach new data to the peer and reshare it */
-            AutoWriteLock peerlock(m->pPeer COMMA_LOCKVAL_SRC_POS);
-            m->pPeer->m->bd.attach(m->bd);
-        }
-    }
-}
-
-void CaptureSettings::i_copyFrom(CaptureSettings *aThat)
-{
-    AssertReturnVoid(aThat != NULL);
-
-    /* sanity */
-    AutoCaller autoCaller(this);
-    AssertComRCReturnVoid(autoCaller.rc());
-
-    /* sanity too */
-    AutoCaller thatCaller(aThat);
-    AssertComRCReturnVoid(thatCaller.rc());
-
-    /* peer is not modified, lock it for reading (aThat is "master" so locked
-     * first) */
-    AutoReadLock rl(aThat COMMA_LOCKVAL_SRC_POS);
-    AutoWriteLock wl(this COMMA_LOCKVAL_SRC_POS);
-
-    /* this will back up current data */
-    m->bd.assignCopy(aThat->m->bd);
-}
-
-void CaptureSettings::i_applyDefaults(void)
-{
-    /* sanity */
-    AutoCaller autoCaller(this);
-    AssertComRCReturnVoid(autoCaller.rc());
-
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    /* Initialize default capturing settings here. */
-}
-
-/**
- * Returns the full path to the default video capture file.
- */
-int CaptureSettings::i_getDefaultFileName(Utf8Str &strFile)
-{
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    strFile = m->pMachine->i_getSettingsFileFull(); // path/to/machinesfolder/vmname/vmname.vbox
-    strFile.stripSuffix();                          // path/to/machinesfolder/vmname/vmname
-    strFile.append(".webm");                        // path/to/machinesfolder/vmname/vmname.webm
-
-    return VINF_SUCCESS;
-}
-
-/**
- * Determines whether the recording settings currently can be changed or not.
- *
- * @returns \c true if the settings can be changed, \c false if not.
- */
-bool CaptureSettings::i_canChangeSettings(void)
-{
-    AutoAnyStateDependency adep(m->pMachine);
-    if (FAILED(adep.rc()))
-        return false;
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    /* Only allow settings to be changed when recording is disabled. */
-    return m->bd->fEnabled == false;
-}
-
-/**
- * Gets called when the machine object needs to know that the recording settings
- * have been changed.
- */
-void CaptureSettings::i_onSettingsChanged(void)
-{
-    LogFlowThisFuncEnter();
-
-    AutoWriteLock mlock(m->pMachine COMMA_LOCKVAL_SRC_POS);
-    m->pMachine->i_setModified(Machine::IsModified_Capture);
-    mlock.release();
-
-    LogFlowThisFuncLeave();
-}
-
-/**
- * Synchronizes the screen settings (COM) objects and configuration data
- * to the number of the machine's configured displays.
- */
-int CaptureSettings::i_syncToMachineDisplays(void)
-{
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    AssertPtr(m->pMachine);
-    const ULONG cMonitors = m->pMachine->i_getMonitorCount();
-
-    LogFlowThisFunc(("cMonitors=%RU32\n", cMonitors));
-    LogFlowThisFunc(("Data screen count = %zu, COM object count = %zu\n", m->bd->mapScreens.size(), m->mapScreenObj.size()));
-
-    /* If counts match, take a shortcut. */
-    if (cMonitors == m->mapScreenObj.size())
-        return VINF_SUCCESS;
-
-    /* Create all new screen settings objects which are not there yet. */
-    for (ULONG i = 0; i < cMonitors; i++)
-    {
-        if (m->mapScreenObj.find(i) == m->mapScreenObj.end())
-        {
-            settings::CaptureScreenMap::const_iterator itScreen = m->bd->mapScreens.find(i);
-            if (itScreen == m->bd->mapScreens.end())
-            {
-                settings::CaptureScreenSettings defaultScreenSettings; /* Apply default settings. */
-                m->bd->mapScreens[i] = defaultScreenSettings;
-            }
-
-            int vrc2 = i_createScreenObj(m->mapScreenObj, i /* Screen ID */, m->bd->mapScreens[i]);
-            AssertRC(vrc2);
-        }
-    }
-
-    /* Remove all left over screen settings objects which are not needed anymore. */
-    const ULONG cSettings = (ULONG)m->mapScreenObj.size();
-    for (ULONG i = cMonitors; i < cSettings; i++)
-    {
-        m->bd->mapScreens.erase(i);
-        int vrc2 = i_destroyScreenObj(m->mapScreenObj, i /* Screen ID */);
-        AssertRC(vrc2);
-    }
-
-    Assert(m->mapScreenObj.size() == cMonitors);
-    Assert(m->bd->mapScreens.size() == cMonitors);
-
-    LogFlowThisFuncLeave();
-    return VINF_SUCCESS;
-}
-
Index: /trunk/src/VBox/Main/src-server/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 75340)
+++ /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 75341)
@@ -358,6 +358,6 @@
         mBIOSSettings->i_applyDefaults(aOsType);
 
-        /* Apply capture defaults. */
-        mCaptureSettings->i_applyDefaults();
+        /* Apply record defaults. */
+        mRecordSettings->i_applyDefaults();
 
         /* Apply network adapters defaults */
@@ -1940,8 +1940,8 @@
 }
 
-HRESULT Machine::getCaptureSettings(ComPtr<ICaptureSettings> &aCaptureSettings)
-{
-    /* mCaptureSettings is constant during life time, no need to lock */
-    aCaptureSettings = mCaptureSettings;
+HRESULT Machine::getRecordSettings(ComPtr<IRecordSettings> &aRecordSettings)
+{
+    /* mRecordSettings is constant during life time, no need to lock */
+    aRecordSettings = mRecordSettings;
 
     return S_OK;
@@ -8259,7 +8259,7 @@
     mBIOSSettings->init(this);
 
-    /* create associated capture settings object */
-    unconst(mCaptureSettings).createObject();
-    mCaptureSettings->init(this);
+    /* create associated record settings object */
+    unconst(mRecordSettings).createObject();
+    mRecordSettings->init(this);
 
     /* create an associated VRDE object (default is disabled) */
@@ -8378,8 +8378,8 @@
     }
 
-    if (mCaptureSettings)
-    {
-        mCaptureSettings->uninit();
-        unconst(mCaptureSettings).setNull();
+    if (mRecordSettings)
+    {
+        mRecordSettings->uninit();
+        unconst(mRecordSettings).setNull();
     }
 
@@ -8898,6 +8898,6 @@
         if (FAILED(rc)) return rc;
 
-        /* Capture settings */
-        rc = mCaptureSettings->i_loadSettings(data.captureSettings);
+        /* Record settings */
+        rc = mRecordSettings->i_loadSettings(data.recordSettings);
         if (FAILED(rc)) return rc;
 
@@ -10217,6 +10217,6 @@
         if (FAILED(rc)) throw rc;
 
-        /* Capture settings (required) */
-        rc = mCaptureSettings->i_saveSettings(data.captureSettings);
+        /* Record settings (required) */
+        rc = mRecordSettings->i_saveSettings(data.recordSettings);
         if (FAILED(rc)) throw rc;
 
@@ -11723,6 +11723,6 @@
         mBIOSSettings->i_rollback();
 
-    if (mCaptureSettings && (mData->flModifications & IsModified_Capture))
-        mCaptureSettings->i_rollback();
+    if (mRecordSettings && (mData->flModifications & IsModified_Record))
+        mRecordSettings->i_rollback();
 
     if (mVRDEServer && (mData->flModifications & IsModified_VRDEServer))
@@ -11836,5 +11836,5 @@
 
     mBIOSSettings->i_commit();
-    mCaptureSettings->i_commit();
+    mRecordSettings->i_commit();
     mVRDEServer->i_commit();
     mAudioAdapter->i_commit();
@@ -12089,5 +12089,5 @@
 
     mBIOSSettings->i_copyFrom(aThat->mBIOSSettings);
-    mCaptureSettings->i_copyFrom(aThat->mCaptureSettings);
+    mRecordSettings->i_copyFrom(aThat->mRecordSettings);
     mVRDEServer->i_copyFrom(aThat->mVRDEServer);
     mAudioAdapter->i_copyFrom(aThat->mAudioAdapter);
@@ -12463,6 +12463,6 @@
     unconst(mBIOSSettings).createObject();
     mBIOSSettings->init(this, aMachine->mBIOSSettings);
-    unconst(mCaptureSettings).createObject();
-    mCaptureSettings->init(this, aMachine->mCaptureSettings);
+    unconst(mRecordSettings).createObject();
+    mRecordSettings->init(this, aMachine->mRecordSettings);
     /* create another VRDEServer object that will be mutable */
     unconst(mVRDEServer).createObject();
@@ -14098,5 +14098,5 @@
  * @note Locks this object for reading.
  */
-HRESULT SessionMachine::i_onCaptureChange()
+HRESULT SessionMachine::i_onRecordChange()
 {
     LogFlowThisFunc(("\n"));
@@ -14116,5 +14116,5 @@
         return S_OK;
 
-    return directControl->OnCaptureChange();
+    return directControl->OnRecordChange();
 }
 
@@ -15050,6 +15050,6 @@
     mBIOSSettings->i_applyDefaults(osType);
 
-    /* Initialize default capture settings. */
-    mCaptureSettings->i_applyDefaults();
+    /* Initialize default record settings. */
+    mRecordSettings->i_applyDefaults();
 
     /* Initialize default BIOS settings here */
Index: /trunk/src/VBox/Main/src-server/RecordScreenSettingsImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/RecordScreenSettingsImpl.cpp	(revision 75341)
+++ /trunk/src/VBox/Main/src-server/RecordScreenSettingsImpl.cpp	(revision 75341)
@@ -0,0 +1,817 @@
+/* $Id$ */
+/** @file
+ *
+ * VirtualBox COM class implementation - Capture settings of one virtual screen.
+ */
+
+/*
+ * Copyright (C) 2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#define LOG_GROUP LOG_GROUP_MAIN_RECORDSCREENSETTINGS
+#include "LoggingNew.h"
+
+#include "RecordScreenSettingsImpl.h"
+#include "RecordSettingsImpl.h"
+#include "MachineImpl.h"
+
+#include <iprt/path.h>
+#include <iprt/cpp/utils.h>
+#include <VBox/settings.h>
+
+#include "AutoStateDep.h"
+#include "AutoCaller.h"
+#include "Global.h"
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// RecordScreenSettings private data definition
+//
+////////////////////////////////////////////////////////////////////////////////
+
+struct RecordScreenSettings::Data
+{
+    Data()
+        : pParent(NULL)
+    { }
+
+    RecordSettings * const          pParent;
+    ComObjPtr<RecordScreenSettings> pPeer;
+    uint32_t                         uScreenId;
+
+    // use the XML settings structure in the members for simplicity
+    Backupable<settings::RecordScreenSettings> bd;
+};
+
+// constructor / destructor
+/////////////////////////////////////////////////////////////////////////////
+
+DEFINE_EMPTY_CTOR_DTOR(RecordScreenSettings)
+
+HRESULT RecordScreenSettings::FinalConstruct()
+{
+    return BaseFinalConstruct();
+}
+
+void RecordScreenSettings::FinalRelease()
+{
+    uninit();
+    BaseFinalRelease();
+}
+
+// public initializer/uninitializer for internal purposes only
+/////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Initializes the audio adapter object.
+ *
+ * @returns COM result indicator
+ */
+HRESULT RecordScreenSettings::init(RecordSettings *aParent, uint32_t uScreenId, const settings::RecordScreenSettings& data)
+{
+    LogFlowThisFuncEnter();
+    LogFlowThisFunc(("aParent: %p\n", aParent));
+
+    ComAssertRet(aParent, E_INVALIDARG);
+
+    /* Enclose the state transition NotReady->InInit->Ready */
+    AutoInitSpan autoInitSpan(this);
+    AssertReturn(autoInitSpan.isOk(), E_FAIL);
+
+    m = new Data();
+
+    /* Share the parent & machine weakly. */
+    unconst(m->pParent)  = aParent;
+    /* mPeer is left null. */
+
+    /* Simply copy the settings data. */
+    m->uScreenId = uScreenId;
+    m->bd.allocate();
+    m->bd->operator=(data);
+
+    HRESULT rc = S_OK;
+
+    int vrc = i_initInternal();
+    if (RT_SUCCESS(vrc))
+    {
+        autoInitSpan.setSucceeded();
+    }
+    else
+    {
+        autoInitSpan.setFailed();
+        rc = E_UNEXPECTED;
+    }
+
+    LogFlowThisFuncLeave();
+    return rc;
+}
+
+/**
+ *  Initializes the capture settings object given another capture settings object
+ *  (a kind of copy constructor). This object shares data with
+ *  the object passed as an argument.
+ *
+ *  @note This object must be destroyed before the original object
+ *  it shares data with is destroyed.
+ */
+HRESULT RecordScreenSettings::init(RecordSettings *aParent, RecordScreenSettings *that)
+{
+    LogFlowThisFuncEnter();
+    LogFlowThisFunc(("aParent: %p, that: %p\n", aParent, that));
+
+    ComAssertRet(aParent && that, E_INVALIDARG);
+
+    /* Enclose the state transition NotReady->InInit->Ready */
+    AutoInitSpan autoInitSpan(this);
+    AssertReturn(autoInitSpan.isOk(), E_FAIL);
+
+    m = new Data();
+
+    unconst(m->pParent) = aParent;
+    m->pPeer = that;
+
+    AutoWriteLock thatlock(that COMMA_LOCKVAL_SRC_POS);
+
+    m->uScreenId = that->m->uScreenId;
+    m->bd.share(that->m->bd);
+
+    HRESULT rc = S_OK;
+
+    int vrc = i_initInternal();
+    if (RT_SUCCESS(vrc))
+    {
+        autoInitSpan.setSucceeded();
+    }
+    else
+    {
+        autoInitSpan.setFailed();
+        rc = E_UNEXPECTED;
+    }
+
+    LogFlowThisFuncLeave();
+    return rc;
+}
+
+/**
+ *  Initializes the guest object given another guest object
+ *  (a kind of copy constructor). This object makes a private copy of data
+ *  of the original object passed as an argument.
+ */
+HRESULT RecordScreenSettings::initCopy(RecordSettings *aParent, RecordScreenSettings *that)
+{
+    LogFlowThisFuncEnter();
+    LogFlowThisFunc(("aParent: %p, that: %p\n", aParent, that));
+
+    ComAssertRet(aParent && that, E_INVALIDARG);
+
+    /* Enclose the state transition NotReady->InInit->Ready */
+    AutoInitSpan autoInitSpan(this);
+    AssertReturn(autoInitSpan.isOk(), E_FAIL);
+
+    m = new Data();
+
+    unconst(m->pParent) = aParent;
+    /* mPeer is left null. */
+
+    AutoWriteLock thatlock(that COMMA_LOCKVAL_SRC_POS);
+
+    m->uScreenId = that->m->uScreenId;
+    m->bd.attachCopy(that->m->bd);
+
+    HRESULT rc = S_OK;
+
+    int vrc = i_initInternal();
+    if (RT_SUCCESS(vrc))
+    {
+        autoInitSpan.setSucceeded();
+    }
+    else
+    {
+        autoInitSpan.setFailed();
+        rc = E_UNEXPECTED;
+    }
+
+    LogFlowThisFuncLeave();
+    return rc;
+}
+
+/**
+ *  Uninitializes the instance and sets the ready flag to FALSE.
+ *  Called either from FinalRelease() or by the parent when it gets destroyed.
+ */
+void RecordScreenSettings::uninit()
+{
+    LogFlowThisFuncEnter();
+
+    /* Enclose the state transition Ready->InUninit->NotReady */
+    AutoUninitSpan autoUninitSpan(this);
+    if (autoUninitSpan.uninitDone())
+        return;
+
+    m->bd.free();
+
+    unconst(m->pPeer) = NULL;
+    unconst(m->pParent) = NULL;
+
+    delete m;
+    m = NULL;
+
+    LogFlowThisFuncLeave();
+}
+
+HRESULT RecordScreenSettings::isFeatureEnabled(RecordFeature_T aFeature, BOOL *aEnabled)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    settings::RecordFeatureMap::const_iterator itFeature = m->bd->featureMap.find(aFeature);
+
+    *aEnabled = (   itFeature != m->bd->featureMap.end()
+                 && itFeature->second == true);
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getId(ULONG *id)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *id = m->uScreenId;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getEnabled(BOOL *enabled)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *enabled = m->bd->fEnabled ? TRUE : FALSE;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setEnabled(BOOL enabled)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    LogFlowThisFunc(("Screen %RU32\n", m->uScreenId));
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change enabled state of screen while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    if (m->bd->fEnabled != RT_BOOL(enabled))
+    {
+        m->bd.backup();
+        m->bd->fEnabled = RT_BOOL(enabled);
+        alock.release();
+
+        m->pParent->i_onSettingsChanged();
+    }
+
+    LogFlowThisFunc(("Screen %RU32\n", m->uScreenId));
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getFeatures(ULONG *aFeatures)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aFeatures = 0;
+
+    settings::RecordFeatureMap::const_iterator itFeature = m->bd->featureMap.begin();
+    while (itFeature != m->bd->featureMap.end())
+    {
+        if (itFeature->second) /* Is feature enable? */
+            *aFeatures |= (ULONG)itFeature->first;
+
+        ++itFeature;
+    }
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setFeatures(ULONG aFeatures)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change features while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->featureMap.clear();
+
+    if (aFeatures & RecordFeature_Audio)
+        m->bd->featureMap[RecordFeature_Audio] = true;
+    if (aFeatures & RecordFeature_Video)
+        m->bd->featureMap[RecordFeature_Video] = true;
+
+    alock.release();
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getDestination(RecordDestination_T *aDestination)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aDestination = m->bd->enmDest;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setDestination(RecordDestination_T aDestination)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change destination type while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->enmDest = aDestination;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getFileName(com::Utf8Str &aFileName)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    aFileName = m->bd->File.strName;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setFileName(const com::Utf8Str &aFileName)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change file name while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    Utf8Str strFile(aFileName);
+
+    if (!RTPathStartsWithRoot(strFile.c_str()))
+        return setError(E_INVALIDARG, tr("Capture file name '%s' is not absolute"), strFile.c_str());
+
+    m->bd.backup();
+    m->bd->File.strName = strFile;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getMaxTime(ULONG *aMaxTimeS)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aMaxTimeS =  m->bd->ulMaxTimeS;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setMaxTime(ULONG aMaxTimeS)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change maximum time while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->ulMaxTimeS = aMaxTimeS;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getMaxFileSize(ULONG *aMaxFileSizeMB)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aMaxFileSizeMB = m->bd->File.ulMaxSizeMB;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setMaxFileSize(ULONG aMaxFileSize)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change maximum file size while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->File.ulMaxSizeMB = aMaxFileSize;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getOptions(com::Utf8Str &aOptions)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    aOptions = m->bd->strOptions;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setOptions(const com::Utf8Str &aOptions)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change options while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->strOptions = aOptions;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getAudioCodec(RecordAudioCodec_T *aCodec)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aCodec = m->bd->Audio.enmAudioCodec;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setAudioCodec(RecordAudioCodec_T aCodec)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change audio codec while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Audio.enmAudioCodec = aCodec;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getAudioHz(ULONG *aHz)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aHz = m->bd->Audio.uHz;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setAudioHz(ULONG aHz)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change audio Hertz rate while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Audio.uHz = (uint16_t)aHz;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getAudioBits(ULONG *aBits)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aBits = m->bd->Audio.cBits;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setAudioBits(ULONG aBits)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change audio bits while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Audio.cBits = (uint8_t)aBits;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getAudioChannels(ULONG *aChannels)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aChannels = m->bd->Audio.cChannels;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setAudioChannels(ULONG aChannels)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change audio channels while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Audio.cChannels = (uint8_t)aChannels;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getVideoCodec(RecordVideoCodec_T *aCodec)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aCodec = m->bd->Video.enmCodec;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setVideoCodec(RecordVideoCodec_T aCodec)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change video codec while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Video.enmCodec = aCodec;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getVideoWidth(ULONG *aVideoWidth)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aVideoWidth = m->bd->Video.ulWidth;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setVideoWidth(ULONG aVideoWidth)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change video width while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Video.ulWidth = aVideoWidth;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getVideoHeight(ULONG *aVideoHeight)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aVideoHeight = m->bd->Video.ulHeight;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setVideoHeight(ULONG aVideoHeight)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change video height while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Video.ulHeight = aVideoHeight;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getVideoRate(ULONG *aVideoRate)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aVideoRate = m->bd->Video.ulRate;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setVideoRate(ULONG aVideoRate)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change video rate while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Video.ulRate = aVideoRate;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getVideoRateControlMode(RecordVideoRateControlMode_T *aMode)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aMode = RecordVideoRateControlMode_CBR; /** @todo Implement VBR. */
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setVideoRateControlMode(RecordVideoRateControlMode_T aMode)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change video rate control mode while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    /** @todo Implement this. */
+    RT_NOREF(aMode);
+
+    return E_NOTIMPL;
+}
+
+HRESULT RecordScreenSettings::getVideoFPS(ULONG *aVideoFPS)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aVideoFPS = m->bd->Video.ulFPS;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setVideoFPS(ULONG aVideoFPS)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change video FPS while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Video.ulFPS = aVideoFPS;
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::getVideoScalingMethod(RecordVideoScalingMethod_T *aMode)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aMode = RecordVideoScalingMethod_None; /** @todo Implement this. */
+
+    return S_OK;
+}
+
+HRESULT RecordScreenSettings::setVideoScalingMethod(RecordVideoScalingMethod_T aMode)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    if (!m->pParent->i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change video rate scaling method while capturing is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    /** @todo Implement this. */
+    RT_NOREF(aMode);
+
+    return E_NOTIMPL;
+}
+
+/**
+ * Initializes data, internal version.
+ *
+ * @returns IPRT status code.
+ */
+int RecordScreenSettings::i_initInternal(void)
+{
+    Assert(m);
+
+    int rc = VINF_SUCCESS;
+
+    switch (m->bd->enmDest)
+    {
+        case RecordDestination_File:
+        {
+            if (m->bd->File.strName.isEmpty())
+                rc = m->pParent->i_getDefaultFileName(m->bd->File.strName);
+            break;
+        }
+
+        default:
+            break;
+    }
+
+    return rc;
+}
+
Index: /trunk/src/VBox/Main/src-server/RecordSettingsImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/RecordSettingsImpl.cpp	(revision 75341)
+++ /trunk/src/VBox/Main/src-server/RecordSettingsImpl.cpp	(revision 75341)
@@ -0,0 +1,661 @@
+/* $Id$ */
+/** @file
+ *
+ * VirtualBox COM class implementation - Machine capture settings.
+ */
+
+/*
+ * Copyright (C) 2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#define LOG_GROUP LOG_GROUP_MAIN_RECORDSETTINGS
+#include "LoggingNew.h"
+
+#include "RecordSettingsImpl.h"
+#include "RecordScreenSettingsImpl.h"
+#include "MachineImpl.h"
+
+#include <iprt/cpp/utils.h>
+#include <VBox/settings.h>
+
+#include "AutoStateDep.h"
+#include "AutoCaller.h"
+#include "Global.h"
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// RecordSettings private data definition
+//
+////////////////////////////////////////////////////////////////////////////////
+
+struct RecordSettings::Data
+{
+    Data()
+        : pMachine(NULL)
+    { }
+
+    Machine * const           pMachine;
+    ComObjPtr<RecordSettings> pPeer;
+    RecordScreenSettingsMap   mapScreenObj;
+    bool                      fHasMachineLock;
+
+    // use the XML settings structure in the members for simplicity
+    Backupable<settings::RecordSettings> bd;
+};
+
+DEFINE_EMPTY_CTOR_DTOR(RecordSettings)
+
+HRESULT RecordSettings::FinalConstruct()
+{
+    return BaseFinalConstruct();
+}
+
+void RecordSettings::FinalRelease()
+{
+    uninit();
+    BaseFinalRelease();
+}
+
+/**
+ * Initializes the audio adapter object.
+ *
+ * @returns COM result indicator
+ */
+HRESULT RecordSettings::init(Machine *aParent)
+{
+    LogFlowThisFuncEnter();
+    LogFlowThisFunc(("aParent: %p\n", aParent));
+
+    ComAssertRet(aParent, E_INVALIDARG);
+
+    /* Enclose the state transition NotReady->InInit->Ready */
+    AutoInitSpan autoInitSpan(this);
+    AssertReturn(autoInitSpan.isOk(), E_FAIL);
+
+    m = new Data();
+
+    /* share the parent weakly */
+    unconst(m->pMachine) = aParent;
+
+    m->bd.allocate();
+    m->fHasMachineLock = false;
+
+    autoInitSpan.setSucceeded();
+
+    LogFlowThisFuncLeave();
+    return S_OK;
+}
+
+/**
+ *  Initializes the capture settings object given another capture settings object
+ *  (a kind of copy constructor). This object shares data with
+ *  the object passed as an argument.
+ *
+ *  @note This object must be destroyed before the original object
+ *  it shares data with is destroyed.
+ */
+HRESULT RecordSettings::init(Machine *aParent, RecordSettings *that)
+{
+    LogFlowThisFuncEnter();
+    LogFlowThisFunc(("aParent: %p, that: %p\n", aParent, that));
+
+    ComAssertRet(aParent && that, E_INVALIDARG);
+
+    /* Enclose the state transition NotReady->InInit->Ready */
+    AutoInitSpan autoInitSpan(this);
+    AssertReturn(autoInitSpan.isOk(), E_FAIL);
+
+    m = new Data();
+
+    unconst(m->pMachine) = aParent;
+    m->pPeer = that;
+
+    AutoWriteLock thatlock(that COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.share(that->m->bd);
+    m->mapScreenObj = that->m->mapScreenObj;
+    m->fHasMachineLock = false;
+
+    autoInitSpan.setSucceeded();
+
+    LogFlowThisFuncLeave();
+    return S_OK;
+}
+
+/**
+ *  Initializes the guest object given another guest object
+ *  (a kind of copy constructor). This object makes a private copy of data
+ *  of the original object passed as an argument.
+ */
+HRESULT RecordSettings::initCopy(Machine *aParent, RecordSettings *that)
+{
+    LogFlowThisFuncEnter();
+    LogFlowThisFunc(("aParent: %p, that: %p\n", aParent, that));
+
+    ComAssertRet(aParent && that, E_INVALIDARG);
+
+    /* Enclose the state transition NotReady->InInit->Ready */
+    AutoInitSpan autoInitSpan(this);
+    AssertReturn(autoInitSpan.isOk(), E_FAIL);
+
+    m = new Data();
+
+    unconst(m->pMachine) = aParent;
+    // mPeer is left null
+
+    AutoWriteLock thatlock(that COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.attachCopy(that->m->bd);
+    m->mapScreenObj = that->m->mapScreenObj;
+    m->fHasMachineLock = false;
+
+    autoInitSpan.setSucceeded();
+
+    LogFlowThisFuncLeave();
+    return S_OK;
+}
+
+/**
+ *  Uninitializes the instance and sets the ready flag to FALSE.
+ *  Called either from FinalRelease() or by the parent when it gets destroyed.
+ */
+void RecordSettings::uninit()
+{
+    LogFlowThisFuncEnter();
+
+    /* Enclose the state transition Ready->InUninit->NotReady */
+    AutoUninitSpan autoUninitSpan(this);
+    if (autoUninitSpan.uninitDone())
+        return;
+
+    /* Note: Do *not* call i_reset() here, as the shared recording configuration
+     *       otherwise gets destructed when this object goes out of scope or is destroyed. */
+
+    m->bd.free();
+
+    unconst(m->pPeer) = NULL;
+    unconst(m->pMachine) = NULL;
+
+    delete m;
+    m = NULL;
+
+    LogFlowThisFuncLeave();
+}
+
+// IRecordSettings properties
+/////////////////////////////////////////////////////////////////////////////
+
+HRESULT RecordSettings::getEnabled(BOOL *enabled)
+{
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *enabled = m->bd->fEnabled;
+
+    return S_OK;
+}
+
+HRESULT RecordSettings::setEnabled(BOOL enable)
+{
+    LogFlowThisFuncEnter();
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    const bool fEnabled = RT_BOOL(enable);
+
+    HRESULT rc = S_OK;
+
+    if (m->bd->fEnabled != fEnabled)
+    {
+        m->bd.backup();
+        m->bd->fEnabled = fEnabled;
+
+        alock.release();
+        rc = m->pMachine->i_onRecordChange();
+        if (FAILED(rc))
+        {
+            /*
+             * Normally we would do the actual change _after_ i_onCaptureChange() succeeded.
+             * We cannot do this because that function uses RecordSettings::GetEnabled to
+             * determine if it should start or stop capturing. Therefore we need to manually
+             * undo change.
+             */
+            alock.acquire();
+            m->bd->fEnabled = m->bd.backedUpData()->fEnabled;
+        }
+        else
+        {
+            AutoWriteLock mlock(m->pMachine COMMA_LOCKVAL_SRC_POS);  // mParent is const, needs no locking
+            m->pMachine->i_setModified(Machine::IsModified_Record);
+
+            /* We need to indicate here that we just took the machine lock, as Machine::i_saveSettings() will
+             * call i_commit(), which in turn also wants to lock the machine for writing. */
+            m->fHasMachineLock = true;
+
+            /** Save settings if online - @todo why is this required? -- @bugref{6818} */
+            if (Global::IsOnline(m->pMachine->i_getMachineState()))
+                rc = m->pMachine->i_saveSettings(NULL);
+
+            m->fHasMachineLock = false;
+        }
+    }
+
+    return rc;
+}
+
+HRESULT RecordSettings::getScreens(std::vector<ComPtr<IRecordScreenSettings> > &aRecordScreenSettings)
+{
+    LogFlowThisFuncEnter();
+
+    i_syncToMachineDisplays();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    aRecordScreenSettings.clear();
+    aRecordScreenSettings.resize(m->mapScreenObj.size());
+
+    RecordScreenSettingsMap::const_iterator itScreenSettings = m->mapScreenObj.begin();
+    size_t i = 0;
+    while (itScreenSettings != m->mapScreenObj.end())
+    {
+        itScreenSettings->second.queryInterfaceTo(aRecordScreenSettings[i].asOutParam());
+        Assert(aRecordScreenSettings[i].isNotNull());
+        ++i;
+        ++itScreenSettings;
+    }
+
+    Assert(aRecordScreenSettings.size() == m->mapScreenObj.size());
+
+    return S_OK;
+}
+
+HRESULT RecordSettings::getScreenSettings(ULONG uScreenId, ComPtr<IRecordScreenSettings> &aRecordScreenSettings)
+{
+    LogFlowThisFuncEnter();
+
+    i_syncToMachineDisplays();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    if (uScreenId + 1 > m->mapScreenObj.size())
+        return setError(E_INVALIDARG, tr("Invalid screen ID specified"));
+
+    RecordScreenSettingsMap::const_iterator itScreenSettings = m->mapScreenObj.find(uScreenId);
+    if (itScreenSettings != m->mapScreenObj.end())
+    {
+        itScreenSettings->second.queryInterfaceTo(aRecordScreenSettings.asOutParam());
+        return S_OK;
+    }
+
+    return VBOX_E_OBJECT_NOT_FOUND;
+}
+
+// IRecordSettings methods
+/////////////////////////////////////////////////////////////////////////////
+
+// public methods only for internal purposes
+/////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Adds a screen settings object to a particular map.
+ *
+ * @returns IPRT status code. VERR_ALREADY_EXISTS if the object in question already exists.
+ * @param   screenSettingsMap   Map to add screen settings to.
+ * @param   uScreenId           Screen ID to add settings for.
+ * @param   data                Recording screen settings to use for that screen.
+ */
+int RecordSettings::i_createScreenObj(RecordScreenSettingsMap &screenSettingsMap,
+                                       uint32_t uScreenId, const settings::RecordScreenSettings &data)
+{
+    LogFlowThisFunc(("Screen %RU32\n", uScreenId));
+
+    if (screenSettingsMap.find(uScreenId) != screenSettingsMap.end())
+    {
+        AssertFailed();
+        return VERR_ALREADY_EXISTS;
+    }
+
+    int vrc = VINF_SUCCESS;
+
+    ComObjPtr<RecordScreenSettings> RecordScreenSettings;
+    HRESULT rc = RecordScreenSettings.createObject();
+    if (SUCCEEDED(rc))
+    {
+        rc = RecordScreenSettings->init(this, uScreenId, data);
+        if (SUCCEEDED(rc))
+        {
+            try
+            {
+                screenSettingsMap[uScreenId] = RecordScreenSettings;
+            }
+            catch (std::bad_alloc &)
+            {
+                vrc = VERR_NO_MEMORY;
+            }
+        }
+    }
+
+    return vrc;
+}
+
+/**
+ * Removes a screen settings object from a particular map.
+ *
+ * @returns IPRT status code. VERR_NOT_FOUND if specified screen was not found.
+ * @param   screenSettingsMap   Map to remove screen settings from.
+ * @param   uScreenId           ID of screen to remove.
+ */
+int RecordSettings::i_destroyScreenObj(RecordScreenSettingsMap &screenSettingsMap, uint32_t uScreenId)
+{
+    LogFlowThisFunc(("Screen %RU32\n", uScreenId));
+
+    AssertReturn(uScreenId > 0, VERR_INVALID_PARAMETER); /* Removing screen 0 isn't a good idea. */
+
+    RecordScreenSettingsMap::iterator itScreen = screenSettingsMap.find(uScreenId);
+    if (itScreen == screenSettingsMap.end())
+    {
+        AssertFailed();
+        return VERR_NOT_FOUND;
+    }
+
+    /* Make sure to consume the pointer before the one of the
+     * iterator gets released. */
+    ComObjPtr<RecordScreenSettings> pScreenSettings = itScreen->second;
+
+    screenSettingsMap.erase(itScreen);
+
+    pScreenSettings.setNull();
+
+    return VINF_SUCCESS;
+}
+
+/**
+ * Destroys all screen settings objects of a particular map.
+ *
+ * @returns IPRT status code.
+ * @param   screenSettingsMap   Map to destroy screen settings objects for.
+ */
+int RecordSettings::i_destroyAllScreenObj(RecordScreenSettingsMap &screenSettingsMap)
+{
+    LogFlowThisFuncEnter();
+
+    RecordScreenSettingsMap::iterator itScreen = screenSettingsMap.begin();
+    if (itScreen != screenSettingsMap.end())
+    {
+        /* Make sure to consume the pointer before the one of the
+         * iterator gets released. */
+        ComObjPtr<RecordScreenSettings> pScreenSettings = itScreen->second;
+
+        screenSettingsMap.erase(itScreen);
+
+        pScreenSettings.setNull();
+
+        itScreen = screenSettingsMap.begin();
+    }
+
+    return VINF_SUCCESS;
+}
+
+/**
+ * Loads settings from the given settings.
+ * May be called once right after this object creation.
+ *
+ * @param data                  Capture settings to load from.
+ *
+ * @note Locks this object for writing.
+ */
+HRESULT RecordSettings::i_loadSettings(const settings::RecordSettings &data)
+{
+    LogFlowThisFuncEnter();
+
+    AutoCaller autoCaller(this);
+    AssertComRCReturnRC(autoCaller.rc());
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    HRESULT rc = S_OK;
+
+    i_reset();
+
+    LogFlowThisFunc(("Data has %zu screens\n", data.mapScreens.size()));
+
+    settings::RecordScreenMap::const_iterator itScreen = data.mapScreens.begin();
+    while (itScreen != data.mapScreens.end())
+    {
+        int vrc = i_createScreenObj(m->mapScreenObj,
+                                    itScreen->first /* uScreenId */, itScreen->second /* Settings */);
+        if (RT_FAILURE(vrc))
+        {
+            rc = E_OUTOFMEMORY;
+            break;
+        }
+
+        ++itScreen;
+    }
+
+    if (FAILED(rc))
+        return rc;
+
+    ComAssertComRC(rc);
+    Assert(m->mapScreenObj.size() == data.mapScreens.size());
+
+    // simply copy
+    m->bd.assignCopy(&data);
+
+    LogFlowThisFunc(("Returning %Rhrc\n", rc));
+    return rc;
+}
+
+/**
+ * Resets the internal object state by destroying all screen settings objects.
+ */
+void RecordSettings::i_reset(void)
+{
+    LogFlowThisFuncEnter();
+
+    i_destroyAllScreenObj(m->mapScreenObj);
+    m->bd->mapScreens.clear();
+}
+
+/**
+ * Saves settings to the given settings.
+ *
+ * @param data                  Where to store the capture settings to.
+ *
+ * @note Locks this object for reading.
+ */
+HRESULT RecordSettings::i_saveSettings(settings::RecordSettings &data)
+{
+    LogFlowThisFuncEnter();
+
+    AutoCaller autoCaller(this);
+    AssertComRCReturnRC(autoCaller.rc());
+
+    int rc2 = i_syncToMachineDisplays();
+    AssertRC(rc2);
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    data = *m->bd.data();
+
+    settings::RecordScreenMap::iterator itScreen = data.mapScreens.begin();
+    while (itScreen != data.mapScreens.end())
+    {
+        /* Store relative path of capture file if possible. */
+        m->pMachine->i_copyPathRelativeToMachine(itScreen->second.File.strName /* Source */,
+                                                 itScreen->second.File.strName /* Target */);
+        ++itScreen;
+    }
+
+    LogFlowThisFuncLeave();
+    return S_OK;
+}
+
+void RecordSettings::i_rollback()
+{
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+    m->bd.rollback();
+}
+
+void RecordSettings::i_commit()
+{
+    /* sanity */
+    AutoCaller autoCaller(this);
+    AssertComRCReturnVoid(autoCaller.rc());
+
+    /* sanity too */
+    AutoCaller peerCaller(m->pPeer);
+    AssertComRCReturnVoid(peerCaller.rc());
+
+    /* lock both for writing since we modify both (mPeer is "master" so locked
+     * first) */
+    AutoMultiWriteLock2 alock(m->pPeer, this COMMA_LOCKVAL_SRC_POS);
+
+    if (m->bd.isBackedUp())
+    {
+        m->bd.commit();
+        if (m->pPeer)
+        {
+            /* attach new data to the peer and reshare it */
+            AutoWriteLock peerlock(m->pPeer COMMA_LOCKVAL_SRC_POS);
+            m->pPeer->m->bd.attach(m->bd);
+        }
+    }
+}
+
+void RecordSettings::i_copyFrom(RecordSettings *aThat)
+{
+    AssertReturnVoid(aThat != NULL);
+
+    /* sanity */
+    AutoCaller autoCaller(this);
+    AssertComRCReturnVoid(autoCaller.rc());
+
+    /* sanity too */
+    AutoCaller thatCaller(aThat);
+    AssertComRCReturnVoid(thatCaller.rc());
+
+    /* peer is not modified, lock it for reading (aThat is "master" so locked
+     * first) */
+    AutoReadLock rl(aThat COMMA_LOCKVAL_SRC_POS);
+    AutoWriteLock wl(this COMMA_LOCKVAL_SRC_POS);
+
+    /* this will back up current data */
+    m->bd.assignCopy(aThat->m->bd);
+}
+
+void RecordSettings::i_applyDefaults(void)
+{
+    /* sanity */
+    AutoCaller autoCaller(this);
+    AssertComRCReturnVoid(autoCaller.rc());
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    /* Initialize default capturing settings here. */
+}
+
+/**
+ * Returns the full path to the default video capture file.
+ */
+int RecordSettings::i_getDefaultFileName(Utf8Str &strFile)
+{
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    strFile = m->pMachine->i_getSettingsFileFull(); // path/to/machinesfolder/vmname/vmname.vbox
+    strFile.stripSuffix();                          // path/to/machinesfolder/vmname/vmname
+    strFile.append(".webm");                        // path/to/machinesfolder/vmname/vmname.webm
+
+    return VINF_SUCCESS;
+}
+
+/**
+ * Determines whether the recording settings currently can be changed or not.
+ *
+ * @returns \c true if the settings can be changed, \c false if not.
+ */
+bool RecordSettings::i_canChangeSettings(void)
+{
+    AutoAnyStateDependency adep(m->pMachine);
+    if (FAILED(adep.rc()))
+        return false;
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    /* Only allow settings to be changed when recording is disabled. */
+    return m->bd->fEnabled == false;
+}
+
+/**
+ * Gets called when the machine object needs to know that the recording settings
+ * have been changed.
+ */
+void RecordSettings::i_onSettingsChanged(void)
+{
+    LogFlowThisFuncEnter();
+
+    AutoWriteLock mlock(m->pMachine COMMA_LOCKVAL_SRC_POS);
+    m->pMachine->i_setModified(Machine::IsModified_Record);
+    mlock.release();
+
+    LogFlowThisFuncLeave();
+}
+
+/**
+ * Synchronizes the screen settings (COM) objects and configuration data
+ * to the number of the machine's configured displays.
+ */
+int RecordSettings::i_syncToMachineDisplays(void)
+{
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    AssertPtr(m->pMachine);
+    const ULONG cMonitors = m->pMachine->i_getMonitorCount();
+
+    LogFlowThisFunc(("cMonitors=%RU32\n", cMonitors));
+    LogFlowThisFunc(("Data screen count = %zu, COM object count = %zu\n", m->bd->mapScreens.size(), m->mapScreenObj.size()));
+
+    /* If counts match, take a shortcut. */
+    if (cMonitors == m->mapScreenObj.size())
+        return VINF_SUCCESS;
+
+    /* Create all new screen settings objects which are not there yet. */
+    for (ULONG i = 0; i < cMonitors; i++)
+    {
+        if (m->mapScreenObj.find(i) == m->mapScreenObj.end())
+        {
+            settings::RecordScreenMap::const_iterator itScreen = m->bd->mapScreens.find(i);
+            if (itScreen == m->bd->mapScreens.end())
+            {
+                settings::RecordScreenSettings defaultScreenSettings; /* Apply default settings. */
+                m->bd->mapScreens[i] = defaultScreenSettings;
+            }
+
+            int vrc2 = i_createScreenObj(m->mapScreenObj, i /* Screen ID */, m->bd->mapScreens[i]);
+            AssertRC(vrc2);
+        }
+    }
+
+    /* Remove all left over screen settings objects which are not needed anymore. */
+    const ULONG cSettings = (ULONG)m->mapScreenObj.size();
+    for (ULONG i = cMonitors; i < cSettings; i++)
+    {
+        m->bd->mapScreens.erase(i);
+        int vrc2 = i_destroyScreenObj(m->mapScreenObj, i /* Screen ID */);
+        AssertRC(vrc2);
+    }
+
+    Assert(m->mapScreenObj.size() == cMonitors);
+    Assert(m->bd->mapScreens.size() == cMonitors);
+
+    LogFlowThisFuncLeave();
+    return VINF_SUCCESS;
+}
+
Index: /trunk/src/VBox/Main/src-server/SnapshotImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/SnapshotImpl.cpp	(revision 75340)
+++ /trunk/src/VBox/Main/src-server/SnapshotImpl.cpp	(revision 75341)
@@ -1082,6 +1082,6 @@
     if (FAILED(rc)) return rc;
 
-    unconst(mCaptureSettings).createObject();
-    rc = mCaptureSettings->initCopy(this, pMachine->mCaptureSettings);
+    unconst(mRecordSettings).createObject();
+    rc = mRecordSettings->initCopy(this, pMachine->mRecordSettings);
     if (FAILED(rc)) return rc;
 
@@ -1208,6 +1208,6 @@
     mBIOSSettings->init(this);
 
-    unconst(mCaptureSettings).createObject();
-    mCaptureSettings->init(this);
+    unconst(mRecordSettings).createObject();
+    mRecordSettings->init(this);
 
     unconst(mVRDEServer).createObject();
Index: /trunk/src/VBox/Main/xml/Settings.cpp
===================================================================
--- /trunk/src/VBox/Main/xml/Settings.cpp	(revision 75340)
+++ /trunk/src/VBox/Main/xml/Settings.cpp	(revision 75341)
@@ -2371,15 +2371,15 @@
 }
 
-CaptureScreenSettings::CaptureScreenSettings(void)
+RecordScreenSettings::RecordScreenSettings(void)
 {
     applyDefaults();
 }
 
-CaptureScreenSettings::~CaptureScreenSettings()
-{
-
-}
-
-void CaptureScreenSettings::applyDefaults(void)
+RecordScreenSettings::~RecordScreenSettings()
+{
+
+}
+
+void RecordScreenSettings::applyDefaults(void)
 {
     /*
@@ -2388,21 +2388,21 @@
 
     fEnabled            = false;
-    enmDest             = CaptureDestination_File;
+    enmDest             = RecordDestination_File;
     ulMaxTimeS          = 0;
     strOptions          = "";
     File.ulMaxSizeMB    = 0;
     File.strName        = "";
-    Video.enmCodec      = CaptureVideoCodec_VP8;
+    Video.enmCodec      = RecordVideoCodec_VP8;
     Video.ulWidth       = 1024;
     Video.ulHeight      = 768;
     Video.ulRate        = 512;
     Video.ulFPS         = 25;
-    Audio.enmAudioCodec = CaptureAudioCodec_Opus;
+    Audio.enmAudioCodec = RecordAudioCodec_Opus;
     Audio.cBits         = 16;
     Audio.cChannels     = 2;
     Audio.uHz           = 22050;
 
-    featureMap[CaptureFeature_Video] = true;
-    featureMap[CaptureFeature_Audio] = false;
+    featureMap[RecordFeature_Video] = true;
+    featureMap[RecordFeature_Audio] = false;
 }
 
@@ -2410,18 +2410,18 @@
  * Check if all settings have default values.
  */
-bool CaptureScreenSettings::areDefaultSettings(void) const
+bool RecordScreenSettings::areDefaultSettings(void) const
 {
     return    fEnabled            == false
-           && enmDest             == CaptureDestination_File
+           && enmDest             == RecordDestination_File
            && ulMaxTimeS          == 0
            && strOptions          == ""
            && File.ulMaxSizeMB    == 0
            && File.strName        == ""
-           && Video.enmCodec      == CaptureVideoCodec_VP8
+           && Video.enmCodec      == RecordVideoCodec_VP8
            && Video.ulWidth       == 1024
            && Video.ulHeight      == 768
            && Video.ulRate        == 512
            && Video.ulFPS         == 25
-           && Audio.enmAudioCodec == CaptureAudioCodec_Opus
+           && Audio.enmAudioCodec == RecordAudioCodec_Opus
            && Audio.cBits         == 16
            && Audio.cChannels     == 2
@@ -2429,7 +2429,7 @@
 }
 
-bool CaptureScreenSettings::isFeatureEnabled(CaptureFeature_T enmFeature) const
-{
-    CaptureFeatureMap::const_iterator itFeature = featureMap.find(enmFeature);
+bool RecordScreenSettings::isFeatureEnabled(RecordFeature_T enmFeature) const
+{
+    RecordFeatureMap::const_iterator itFeature = featureMap.find(enmFeature);
     if (itFeature != featureMap.end())
         return itFeature->second;
@@ -2443,5 +2443,5 @@
  * machine settings have really changed and thus need to be written out to disk.
  */
-bool CaptureScreenSettings::operator==(const CaptureScreenSettings &d) const
+bool RecordScreenSettings::operator==(const RecordScreenSettings &d) const
 {
     return    fEnabled            == d.fEnabled
@@ -2465,5 +2465,5 @@
  * Constructor. Needs to set sane defaults which stand the test of time.
  */
-CaptureSettings::CaptureSettings()
+RecordSettings::RecordSettings()
 {
     applyDefaults();
@@ -2473,5 +2473,5 @@
  * Applies the default settings.
  */
-void CaptureSettings::applyDefaults(void)
+void RecordSettings::applyDefaults(void)
 {
     fEnabled = false;
@@ -2482,5 +2482,5 @@
     {
         /* Always add screen 0 to the default configuration. */
-        CaptureScreenSettings screenSettings; /* Apply default settings for screen 0. */
+        RecordScreenSettings screenSettings; /* Apply default settings for screen 0. */
         screenSettings.fEnabled = true;       /* Enabled by default. */
         mapScreens[0] = screenSettings;
@@ -2495,5 +2495,5 @@
  * Check if all settings have default values.
  */
-bool CaptureSettings::areDefaultSettings() const
+bool RecordSettings::areDefaultSettings() const
 {
     const bool fDefault =    fEnabled          == false
@@ -2502,5 +2502,5 @@
         return false;
 
-    CaptureScreenMap::const_iterator itScreen = mapScreens.begin();
+    RecordScreenMap::const_iterator itScreen = mapScreens.begin();
     return    itScreen->first == 0
            && itScreen->second.areDefaultSettings();
@@ -2512,5 +2512,5 @@
  * machine settings have really changed and thus need to be written out to disk.
  */
-bool CaptureSettings::operator==(const CaptureSettings &d) const
+bool RecordSettings::operator==(const RecordSettings &d) const
 {
     if (this == &d)
@@ -2521,9 +2521,9 @@
         return false;
 
-    CaptureScreenMap::const_iterator itScreen = mapScreens.begin();
+    RecordScreenMap::const_iterator itScreen = mapScreens.begin();
     uint32_t i = 0;
     while (itScreen != mapScreens.end())
     {
-        CaptureScreenMap::const_iterator itScreenThat = d.mapScreens.find(i);
+        RecordScreenMap::const_iterator itScreenThat = d.mapScreens.find(i);
         if (itScreen->second == itScreenThat->second)
         {
@@ -4409,5 +4409,5 @@
         else if (pelmHwChild->nameEquals("VideoCapture"))
         {
-            pelmHwChild->getAttributeValue("enabled",   hw.captureSettings.fEnabled);
+            pelmHwChild->getAttributeValue("enabled",   hw.recordSettings.fEnabled);
 
             /* Right now I don't want to bump the settings version, so just convert the enabled
@@ -4418,6 +4418,6 @@
             /* At the moment we only support one capturing configuration, that is, all screens
              * have the same configuration. So load/save to/from screen 0. */
-            Assert(hw.captureSettings.mapScreens.size()); /* At least screen must be present. */
-            CaptureScreenSettings &screen0Settings = hw.captureSettings.mapScreens[0];
+            Assert(hw.recordSettings.mapScreens.size()); /* At least screen must be present. */
+            RecordScreenSettings &screen0Settings = hw.recordSettings.mapScreens[0];
 
             pelmHwChild->getAttributeValue("maxTime",   screen0Settings.ulMaxTimeS);
@@ -4433,8 +4433,8 @@
             {
                 /* Add screen i to config in any case. */
-                hw.captureSettings.mapScreens[i] = screen0Settings;
+                hw.recordSettings.mapScreens[i] = screen0Settings;
 
                 if (u64VideoCaptureScreens & RT_BIT_64(i)) /* Screen i enabled? */
-                    hw.captureSettings.mapScreens[i].fEnabled = true;
+                    hw.recordSettings.mapScreens[i].fEnabled = true;
             }
         }
@@ -5820,16 +5820,16 @@
     }
 
-    if (m->sv >= SettingsVersion_v1_14 && !hw.captureSettings.areDefaultSettings())
+    if (m->sv >= SettingsVersion_v1_14 && !hw.recordSettings.areDefaultSettings())
     {
         xml::ElementNode *pelmVideoCapture = pelmHardware->createChild("VideoCapture");
 
-        if (hw.captureSettings.fEnabled)
-            pelmVideoCapture->setAttribute("enabled", hw.captureSettings.fEnabled);
+        if (hw.recordSettings.fEnabled)
+            pelmVideoCapture->setAttribute("enabled", hw.recordSettings.fEnabled);
 
         /* Right now I don't want to bump the settings version, so just convert the enabled
          * screens to the former uint64t_t bit array and vice versa. */
         uint64_t u64VideoCaptureScreens = 0;
-        CaptureScreenMap::const_iterator itScreen = hw.captureSettings.mapScreens.begin();
-        while (itScreen != hw.captureSettings.mapScreens.end())
+        RecordScreenMap::const_iterator itScreen = hw.recordSettings.mapScreens.begin();
+        while (itScreen != hw.recordSettings.mapScreens.end())
         {
             if (itScreen->second.fEnabled)
@@ -5843,7 +5843,7 @@
         /* At the moment we only support one capturing configuration, that is, all screens
          * have the same configuration. So load/save to/from screen 0. */
-        Assert(hw.captureSettings.mapScreens.size());
-        const CaptureScreenMap::const_iterator itScreen0Settings = hw.captureSettings.mapScreens.find(0);
-        Assert(itScreen0Settings != hw.captureSettings.mapScreens.end());
+        Assert(hw.recordSettings.mapScreens.size());
+        const RecordScreenMap::const_iterator itScreen0Settings = hw.recordSettings.mapScreens.find(0);
+        Assert(itScreen0Settings != hw.recordSettings.mapScreens.end());
 
         if (itScreen0Settings->second.ulMaxTimeS)
@@ -7442,5 +7442,5 @@
             || hardwareMachine.enmLongMode != Hardware::LongMode_Legacy
             || machineUserData.ovIcon.size() > 0
-            || hardwareMachine.captureSettings.fEnabled)
+            || hardwareMachine.recordSettings.fEnabled)
         {
             m->sv = SettingsVersion_v1_14;
