Index: /trunk/include/VBox/log.h
===================================================================
--- /trunk/include/VBox/log.h	(revision 75360)
+++ /trunk/include/VBox/log.h	(revision 75361)
@@ -594,10 +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, IRecordingChangedEvent. */
+    LOG_GROUP_MAIN_RECORDINGCHANGEDEVENT,
+    /** Main group, IRecordingSettings. */
+    LOG_GROUP_MAIN_RECORDINGSETTINGS,
+    /** Main group, IRecordingScreenSettings. */
+    LOG_GROUP_MAIN_RECORDINGSCREENSETTINGS,
     /** Main group, IReusableEvent. */
     LOG_GROUP_MAIN_REUSABLEEVENT,
@@ -1124,7 +1124,7 @@
     "MAIN_PROGRESSPERCENTAGECHANGEDEVENT", \
     "MAIN_PROGRESSTASKCOMPLETEDEVENT", \
-    "MAIN_RECORDCHANGEDEVENT", \
-    "MAIN_RECORDSETTINGS", \
-    "MAIN_RECORDSCREENSETTINGS", \
+    "MAIN_RECORDINGCHANGEDEVENT", \
+    "MAIN_RECORDINGSETTINGS", \
+    "MAIN_RECORDINGSCREENSETTINGS", \
     "MAIN_REUSABLEEVENT", \
     "MAIN_RUNTIMEERROREVENT", \
Index: /trunk/include/VBox/settings.h
===================================================================
--- /trunk/include/VBox/settings.h	(revision 75360)
+++ /trunk/include/VBox/settings.h	(revision 75361)
@@ -482,11 +482,11 @@
 
 /** List for keeping a recording feature list. */
-typedef std::map<RecordFeature_T, bool> RecordFeatureMap;
-
-struct RecordScreenSettings
-{
-    RecordScreenSettings();
-
-    virtual ~RecordScreenSettings();
+typedef std::map<RecordingFeature_T, bool> RecordingFeatureMap;
+
+struct RecordingScreenSettings
+{
+    RecordingScreenSettings();
+
+    virtual ~RecordingScreenSettings();
 
     void applyDefaults(void);
@@ -494,18 +494,18 @@
     bool areDefaultSettings(void) const;
 
-    bool isFeatureEnabled(RecordFeature_T enmFeature) const;
-
-    bool operator==(const RecordScreenSettings &d) const;
-
-    bool                 fEnabled;       // requires settings version 1.14 (VirtualBox 4.3)
-    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.
+    bool isFeatureEnabled(RecordingFeature_T enmFeature) const;
+
+    bool operator==(const RecordingScreenSettings &d) const;
+
+    bool                   fEnabled;   // requires settings version 1.14 (VirtualBox 4.3)
+    RecordingDestination_T enmDest;    // new since VirtualBox 6.0.
+    RecordingFeatureMap    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.
 
     struct Audio
     {
         Audio()
-            : enmAudioCodec(RecordAudioCodec_Opus)
+            : enmAudioCodec(RecordingAudioCodec_Opus)
             , uHz(22050)
             , cBits(16)
@@ -513,11 +513,11 @@
 
         /** The audio codec type to use. */
-        RecordAudioCodec_T enmAudioCodec; // new since VirtualBox 6.0.
+        RecordingAudioCodec_T enmAudioCodec; // new since VirtualBox 6.0.
         /** Hz rate. */
-        uint16_t            uHz;           // new since VirtualBox 6.0.
+        uint16_t              uHz;           // new since VirtualBox 6.0.
         /** Bits per sample. */
-        uint8_t             cBits;         // new since VirtualBox 6.0.
+        uint8_t               cBits;         // new since VirtualBox 6.0.
         /** Number of audio channels. */
-        uint8_t             cChannels;     // new since VirtualBox 6.0.
+        uint8_t               cChannels;     // new since VirtualBox 6.0.
     } Audio;
 
@@ -525,5 +525,5 @@
     {
         Video()
-            : enmCodec(RecordVideoCodec_VP8)
+            : enmCodec(RecordingVideoCodec_VP8)
             , ulWidth(1024)
             , ulHeight(768)
@@ -531,9 +531,9 @@
             , ulFPS(25) { }
 
-        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)
-        uint32_t             ulRate;    // requires settings version 1.14 (VirtualBox 4.3)
-        uint32_t             ulFPS;     // requires settings version 1.14 (VirtualBox 4.3)
+        RecordingVideoCodec_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)
+        uint32_t              ulRate;    // requires settings version 1.14 (VirtualBox 4.3)
+        uint32_t              ulFPS;     // requires settings version 1.14 (VirtualBox 4.3)
     } Video;
 
@@ -549,14 +549,14 @@
 
 /** Map for keeping settings per virtual screen. */
-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();
+typedef std::map<uint32_t, RecordingScreenSettings> RecordingScreenMap;
+
+/**
+ * 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 RecordingSettings
+{
+    RecordingSettings();
 
     void applyDefaults(void);
@@ -564,8 +564,8 @@
     bool areDefaultSettings(void) const;
 
-    bool operator==(const RecordSettings &d) const;
-
-    bool            fEnabled;       // requires settings version 1.14 (VirtualBox 4.3)
-    RecordScreenMap mapScreens;
+    bool operator==(const RecordingSettings &d) const;
+
+    bool               fEnabled;       // requires settings version 1.14 (VirtualBox 4.3)
+    RecordingScreenMap mapScreens;
 };
 
@@ -1039,5 +1039,5 @@
 
     BIOSSettings        biosSettings;
-    RecordSettings      recordSettings;
+    RecordingSettings   recordingSettings;
     USB                 usbSettings;
     NetworkAdaptersList llNetworkAdapters;
Index: /trunk/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp	(revision 75360)
+++ /trunk/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp	(revision 75361)
@@ -961,10 +961,10 @@
         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)));
+            ComPtr<IRecordingSettings> recordingSettings;
+            CHECK_ERROR_BREAK(machine, COMGETTER(RecordingSettings)(recordingSettings.asOutParam()));
+            CHECK_ERROR_BREAK(recordingSettings, COMSETTER(Enabled)(TRUE));
+
+            SafeIfaceArray <IRecordingScreenSettings> saRecordScreenScreens;
+            CHECK_ERROR_BREAK(recordingSettings, COMGETTER(Screens)(ComSafeArrayAsOutParam(saRecordScreenScreens)));
 
             /* Note: For now all screens have the same configuration. */
@@ -1232,7 +1232,7 @@
             if (!machine.isNull())
             {
-                ComPtr<IRecordSettings> RecordSettings;
-                CHECK_ERROR_BREAK(machine, COMGETTER(RecordSettings)(RecordSettings.asOutParam()));
-                CHECK_ERROR_BREAK(RecordSettings, COMSETTER(Enabled)(FALSE));
+                ComPtr<IRecordingSettings> recordingSettings;
+                CHECK_ERROR_BREAK(machine, COMGETTER(RecordingSettings)(recordingSettings.asOutParam()));
+                CHECK_ERROR_BREAK(recordingSettings, COMSETTER(Enabled)(FALSE));
             }
         }
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp	(revision 75360)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp	(revision 75361)
@@ -1864,9 +1864,9 @@
             }
 
-            ComPtr<IRecordSettings> RecordSettings;
-            CHECK_ERROR_BREAK(machine, COMGETTER(RecordSettings)(RecordSettings.asOutParam()));
-
-            SafeIfaceArray <IRecordScreenSettings> saRecordScreenScreens;
-            CHECK_ERROR_BREAK(RecordSettings, COMGETTER(Screens)(ComSafeArrayAsOutParam(saRecordScreenScreens)));
+            ComPtr<IRecordingSettings> recordingSettings;
+            CHECK_ERROR_BREAK(machine, COMGETTER(RecordingSettings)(recordingSettings.asOutParam()));
+
+            SafeIfaceArray <IRecordingScreenSettings> saRecordingScreenScreens;
+            CHECK_ERROR_BREAK(recordingSettings, COMGETTER(Screens)(ComSafeArrayAsOutParam(saRecordingScreenScreens)));
 
             /* Note: For now all screens have the same configuration. */
@@ -1878,9 +1878,9 @@
             if (!strcmp(a->argv[2], "on"))
             {
-                CHECK_ERROR_RET(RecordSettings, COMSETTER(Enabled)(TRUE), RTEXITCODE_FAILURE);
+                CHECK_ERROR_RET(recordingSettings, COMSETTER(Enabled)(TRUE), RTEXITCODE_FAILURE);
             }
             else if (!strcmp(a->argv[2], "off"))
             {
-                CHECK_ERROR_RET(RecordSettings, COMSETTER(Enabled)(FALSE), RTEXITCODE_FAILURE);
+                CHECK_ERROR_RET(recordingSettings, COMSETTER(Enabled)(FALSE), RTEXITCODE_FAILURE);
             }
             else if (!strcmp(a->argv[2], "screens"))
@@ -1930,6 +1930,6 @@
                 }
 
-                for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
-                    CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(Enabled)(saScreens[i]));
+                for (size_t i = 0; i < saRecordingScreenScreens.size(); ++i)
+                    CHECK_ERROR_BREAK(saRecordingScreenScreens[i], COMSETTER(Enabled)(saScreens[i]));
             }
             else if (!strcmp(a->argv[2], "filename"))
@@ -1942,6 +1942,6 @@
                 }
 
-                for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
-                    CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(FileName)(Bstr(a->argv[2]).raw()));
+                for (size_t i = 0; i < saRecordingScreenScreens.size(); ++i)
+                    CHECK_ERROR_BREAK(saRecordingScreenScreens[i], COMSETTER(FileName)(Bstr(a->argv[2]).raw()));
             }
             else if (   !strcmp(a->argv[2], "videores")
@@ -1972,8 +1972,8 @@
                 }
 
-                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));
+                for (size_t i = 0; i < saRecordingScreenScreens.size(); ++i)
+                {
+                    CHECK_ERROR_BREAK(saRecordingScreenScreens[i], COMSETTER(VideoWidth)(uVal));
+                    CHECK_ERROR_BREAK(saRecordingScreenScreens[i], COMSETTER(VideoHeight)(uVal));
                 }
             }
@@ -1996,6 +1996,6 @@
                 }
 
-                for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
-                    CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(VideoRate)(uVal));
+                for (size_t i = 0; i < saRecordingScreenScreens.size(); ++i)
+                    CHECK_ERROR_BREAK(saRecordingScreenScreens[i], COMSETTER(VideoRate)(uVal));
             }
             else if (!strcmp(a->argv[2], "videofps"))
@@ -2017,6 +2017,6 @@
                 }
 
-                for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
-                    CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(VideoFPS)(uVal));
+                for (size_t i = 0; i < saRecordingScreenScreens.size(); ++i)
+                    CHECK_ERROR_BREAK(saRecordingScreenScreens[i], COMSETTER(VideoFPS)(uVal));
             }
             else if (!strcmp(a->argv[2], "maxtime"))
@@ -2038,6 +2038,6 @@
                 }
 
-                for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
-                    CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(MaxTime)(uVal));
+                for (size_t i = 0; i < saRecordingScreenScreens.size(); ++i)
+                    CHECK_ERROR_BREAK(saRecordingScreenScreens[i], COMSETTER(MaxTime)(uVal));
             }
             else if (!strcmp(a->argv[2], "maxfilesize"))
@@ -2059,6 +2059,6 @@
                 }
 
-                for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
-                    CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(MaxFileSize)(uVal));
+                for (size_t i = 0; i < saRecordingScreenScreens.size(); ++i)
+                    CHECK_ERROR_BREAK(saRecordingScreenScreens[i], COMSETTER(MaxFileSize)(uVal));
             }
             else if (!strcmp(a->argv[2], "opts"))
@@ -2071,6 +2071,6 @@
                 }
 
-                for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
-                    CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(Options)(Bstr(a->argv[3]).raw()));
+                for (size_t i = 0; i < saRecordingScreenScreens.size(); ++i)
+                    CHECK_ERROR_BREAK(saRecordingScreenScreens[i], COMSETTER(Options)(Bstr(a->argv[3]).raw()));
             }
         }
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp	(revision 75360)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp	(revision 75361)
@@ -2379,25 +2379,25 @@
 # endif
 
-        ComPtr<IRecordSettings> RecordSettings;
-        CHECK_ERROR_RET(machine, COMGETTER(RecordSettings)(RecordSettings.asOutParam()), rc);
-
-        SafeIfaceArray <IRecordScreenSettings> saCaptureScreenScreens;
-        CHECK_ERROR_RET(RecordSettings, COMGETTER(Screens)(ComSafeArrayAsOutParam(saCaptureScreenScreens)), rc);
+        ComPtr<IRecordingSettings> recordingSettings;
+        CHECK_ERROR_RET(machine, COMGETTER(RecordingSettings)(recordingSettings.asOutParam()), rc);
+
+        SafeIfaceArray <IRecordingScreenSettings> saRecordingScreenScreens;
+        CHECK_ERROR_RET(recordingSettings, COMGETTER(Screens)(ComSafeArrayAsOutParam(saRecordingScreenScreens)), rc);
 
         /* For now all screens have the same configuration; so take screen 0 and work with that. */
         ULONG fFeatures;
-        CHECK_ERROR_RET(saCaptureScreenScreens[0], COMGETTER(Features)(&fFeatures), rc);
+        CHECK_ERROR_RET(saRecordingScreenScreens[0], COMGETTER(Features)(&fFeatures), rc);
         ULONG Width;
-        CHECK_ERROR_RET(saCaptureScreenScreens[0], COMGETTER(VideoWidth)(&Width), rc);
+        CHECK_ERROR_RET(saRecordingScreenScreens[0], COMGETTER(VideoWidth)(&Width), rc);
         ULONG Height;
-        CHECK_ERROR_RET(saCaptureScreenScreens[0], COMGETTER(VideoHeight)(&Height), rc);
+        CHECK_ERROR_RET(saRecordingScreenScreens[0], COMGETTER(VideoHeight)(&Height), rc);
         ULONG Rate;
-        CHECK_ERROR_RET(saCaptureScreenScreens[0], COMGETTER(VideoRate)(&Rate), rc);
+        CHECK_ERROR_RET(saRecordingScreenScreens[0], COMGETTER(VideoRate)(&Rate), rc);
         ULONG Fps;
-        CHECK_ERROR_RET(saCaptureScreenScreens[0], COMGETTER(VideoFPS)(&Fps), rc);
+        CHECK_ERROR_RET(saRecordingScreenScreens[0], COMGETTER(VideoFPS)(&Fps), rc);
         Bstr  bstrFile;
-        CHECK_ERROR_RET(saCaptureScreenScreens[0], COMGETTER(FileName)(bstrFile.asOutParam()), rc);
+        CHECK_ERROR_RET(saRecordingScreenScreens[0], COMGETTER(FileName)(bstrFile.asOutParam()), rc);
         Bstr  bstrOptions;
-        CHECK_ERROR_RET(saCaptureScreenScreens[0], COMGETTER(Options)(bstrOptions.asOutParam()), rc);
+        CHECK_ERROR_RET(saRecordingScreenScreens[0], COMGETTER(Options)(bstrOptions.asOutParam()), rc);
 
         Utf8Str strOptions(bstrOptions);
@@ -2423,8 +2423,8 @@
 # endif
         szValue[0] = '\0';
-        for (size_t i = 0, off = 0; i < saCaptureScreenScreens.size(); i++)
+        for (size_t i = 0, off = 0; i < saRecordingScreenScreens.size(); i++)
         {
             BOOL fEnabled;
-            CHECK_ERROR_RET(saCaptureScreenScreens[i], COMGETTER(Enabled)(&fEnabled), rc);
+            CHECK_ERROR_RET(saRecordingScreenScreens[i], COMGETTER(Enabled)(&fEnabled), rc);
             if (fEnabled && off < sizeof(szValue) - 3)
                 off += RTStrPrintf(&szValue[off], sizeof(szValue) - off, off ? ",%zu" : "%zu", i);
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp	(revision 75360)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp	(revision 75361)
@@ -2950,8 +2950,8 @@
             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)));
+                ComPtr<IRecordingSettings> recordingSettings;
+                CHECK_ERROR_BREAK(machine, COMGETTER(RecordingSettings)(recordingSettings.asOutParam()));
+                SafeIfaceArray <IRecordingScreenSettings> saRecordingScreenScreens;
+                CHECK_ERROR_BREAK(recordingSettings, COMGETTER(Screens)(ComSafeArrayAsOutParam(saRecordingScreenScreens)));
 
                 switch (c)
@@ -2959,5 +2959,5 @@
                     case MODIFYVM_RECORD:
                     {
-                        CHECK_ERROR(RecordSettings, COMSETTER(Enabled)(ValueUnion.f));
+                        CHECK_ERROR(recordingSettings, COMSETTER(Enabled)(ValueUnion.f));
                         break;
                     }
@@ -2974,9 +2974,9 @@
                         }
 
-                        if (cMonitors > saRecordScreenScreens.size()) /* Paranoia. */
-                            cMonitors = (ULONG)saRecordScreenScreens.size();
+                        if (cMonitors > saRecordingScreenScreens.size()) /* Paranoia. */
+                            cMonitors = (ULONG)saRecordingScreenScreens.size();
 
                         for (size_t i = 0; i < cMonitors; ++i)
-                            CHECK_ERROR_BREAK(saRecordScreenScreens[i], COMSETTER(Enabled)(screens[i]));
+                            CHECK_ERROR_BREAK(saRecordingScreenScreens[i], COMSETTER(Enabled)(screens[i]));
                         break;
                     }
@@ -2998,18 +2998,18 @@
                         }
 
-                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
-                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(FileName)(bstr.raw()));
+                        for (size_t i = 0; i < saRecordingScreenScreens.size(); ++i)
+                            CHECK_ERROR(saRecordingScreenScreens[i], COMSETTER(FileName)(bstr.raw()));
                         break;
                     }
                     case MODIFYVM_RECORD_VIDEO_WIDTH:
                     {
-                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
-                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(VideoWidth)(ValueUnion.u32));
+                        for (size_t i = 0; i < saRecordingScreenScreens.size(); ++i)
+                            CHECK_ERROR(saRecordingScreenScreens[i], COMSETTER(VideoWidth)(ValueUnion.u32));
                         break;
                     }
                     case MODIFYVM_RECORD_VIDEO_HEIGHT:
                     {
-                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
-                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(VideoHeight)(ValueUnion.u32));
+                        for (size_t i = 0; i < saRecordingScreenScreens.size(); ++i)
+                            CHECK_ERROR(saRecordingScreenScreens[i], COMSETTER(VideoHeight)(ValueUnion.u32));
                         break;
                     }
@@ -3034,8 +3034,8 @@
                         }
 
-                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
+                        for (size_t i = 0; i < saRecordingScreenScreens.size(); ++i)
                         {
-                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(VideoWidth)(uWidth));
-                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(VideoHeight)(uHeight));
+                            CHECK_ERROR(saRecordingScreenScreens[i], COMSETTER(VideoWidth)(uWidth));
+                            CHECK_ERROR(saRecordingScreenScreens[i], COMSETTER(VideoHeight)(uHeight));
                         }
                         break;
@@ -3043,24 +3043,24 @@
                     case MODIFYVM_RECORD_VIDEO_RATE:
                     {
-                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
-                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(VideoRate)(ValueUnion.u32));
+                        for (size_t i = 0; i < saRecordingScreenScreens.size(); ++i)
+                            CHECK_ERROR(saRecordingScreenScreens[i], COMSETTER(VideoRate)(ValueUnion.u32));
                         break;
                     }
                     case MODIFYVM_RECORD_VIDEO_FPS:
                     {
-                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
-                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(VideoFPS)(ValueUnion.u32));
+                        for (size_t i = 0; i < saRecordingScreenScreens.size(); ++i)
+                            CHECK_ERROR(saRecordingScreenScreens[i], COMSETTER(VideoFPS)(ValueUnion.u32));
                         break;
                     }
                     case MODIFYVM_RECORD_MAXTIME:
                     {
-                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
-                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(MaxTime)(ValueUnion.u32));
+                        for (size_t i = 0; i < saRecordingScreenScreens.size(); ++i)
+                            CHECK_ERROR(saRecordingScreenScreens[i], COMSETTER(MaxTime)(ValueUnion.u32));
                         break;
                     }
                     case MODIFYVM_RECORD_MAXSIZE:
                     {
-                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
-                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(MaxFileSize)(ValueUnion.u32));
+                        for (size_t i = 0; i < saRecordingScreenScreens.size(); ++i)
+                            CHECK_ERROR(saRecordingScreenScreens[i], COMSETTER(MaxFileSize)(ValueUnion.u32));
                         break;
                     }
@@ -3068,6 +3068,6 @@
                     {
                         Bstr bstr(ValueUnion.psz);
-                        for (size_t i = 0; i < saRecordScreenScreens.size(); ++i)
-                            CHECK_ERROR(saRecordScreenScreens[i], COMSETTER(Options)(bstr.raw()));
+                        for (size_t i = 0; i < saRecordingScreenScreens.size(); ++i)
+                            CHECK_ERROR(saRecordingScreenScreens[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 75360)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp	(revision 75361)
@@ -375,5 +375,5 @@
             break;
         }
-        case KVBoxEventType_OnRecordChanged:
+        case KVBoxEventType_OnRecordingChanged:
         {
             emit sigRecordingChange();
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElements.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElements.cpp	(revision 75360)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsElements.cpp	(revision 75361)
@@ -44,6 +44,6 @@
 # include "CMediumAttachment.h"
 # include "CAudioAdapter.h"
-# include "CRecordSettings.h"
-# include "CRecordScreenSettings.h"
+# include "CRecordingSettings.h"
+# include "CRecordingScreenSettings.h"
 # include "CNetworkAdapter.h"
 # include "CSerialPort.h"
@@ -450,9 +450,9 @@
 
         /* Recording info: */
-        CRecordSettings comRecordingSettings = machine.GetRecordSettings();
+        CRecordingSettings comRecordingSettings = machine.GetRecordingSettings();
         if (comRecordingSettings.GetEnabled())
         {
             /* For now all screens have the same config: */
-            CRecordScreenSettings comRecordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
+            CRecordingScreenSettings 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 75360)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.cpp	(revision 75361)
@@ -188,5 +188,5 @@
         << KVBoxEventType_OnVRDEServerChanged
         << KVBoxEventType_OnVRDEServerInfoChanged
-        << KVBoxEventType_OnRecordChanged
+        << KVBoxEventType_OnRecordingChanged
         << KVBoxEventType_OnUSBControllerChanged
         << KVBoxEventType_OnUSBDeviceStateChanged
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.cpp	(revision 75360)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.cpp	(revision 75361)
@@ -43,6 +43,6 @@
 /* COM includes: */
 # include "CAudioAdapter.h"
-# include "CRecordSettings.h"
-# include "CRecordScreenSettings.h"
+# include "CRecordingSettings.h"
+# include "CRecordingScreenSettings.h"
 # include "CConsole.h"
 # include "CMachine.h"
@@ -884,5 +884,5 @@
 
         /* Update indicator state early: */
-        CRecordSettings comRecordingSettings = comMachine.GetRecordSettings();
+        CRecordingSettings comRecordingSettings = comMachine.GetRecordingSettings();
         Assert(comRecordingSettings.isOk());
         if (!comRecordingSettings.GetEnabled())
@@ -918,5 +918,5 @@
 
                 /* For now all screens have the same config: */
-                CRecordScreenSettings comRecordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
+                CRecordingScreenSettings comRecordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
                 Assert(comRecordingScreen0Settings.isOk());
 
@@ -955,11 +955,11 @@
             return;
 
-        CRecordSettings comRecordingSettings = comMachine.GetRecordSettings();
+        CRecordingSettings comRecordingSettings = comMachine.GetRecordingSettings();
         /* For now all screens have the same config: */
-        CRecordScreenSettings recordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
-        if (recordingScreen0Settings.IsFeatureEnabled(KRecordFeature_Video))
+        CRecordingScreenSettings recordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
+        if (recordingScreen0Settings.IsFeatureEnabled(KRecordingFeature_Video))
             m_enmRecordingMode = (UIIndicatorStateRecordingMode)((int)m_enmRecordingMode | (int)UIIndicatorStateRecordingMode_Video);
 
-        if (recordingScreen0Settings.IsFeatureEnabled(KRecordFeature_Audio))
+        if (recordingScreen0Settings.IsFeatureEnabled(KRecordingFeature_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 75360)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 75361)
@@ -77,5 +77,5 @@
 /* COM includes: */
 # include "CAudioAdapter.h"
-# include "CRecordSettings.h"
+# include "CRecordingSettings.h"
 # include "CVirtualBoxErrorInfo.h"
 # include "CMachineDebugger.h"
@@ -2104,5 +2104,5 @@
 
     /* Make sure something had changed: */
-    CRecordSettings comRecordingSettings = machine().GetRecordSettings();
+    CRecordingSettings comRecordingSettings = machine().GetRecordingSettings();
     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 75360)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 75361)
@@ -60,5 +60,5 @@
 /* COM includes: */
 # include "CAudioAdapter.h"
-# include "CRecordSettings.h"
+# include "CRecordingSettings.h"
 # include "CSystemProperties.h"
 # include "CStorageController.h"
@@ -724,5 +724,5 @@
 void UISession::sltRecordingChange()
 {
-    CRecordSettings comRecordingSettings = machine().GetRecordSettings();
+    CRecordingSettings comRecordingSettings = machine().GetRecordingSettings();
 
     /* 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 75360)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.cpp	(revision 75361)
@@ -31,6 +31,6 @@
 
 /* COM includes: */
-# include "CRecordSettings.h"
-# include "CRecordScreenSettings.h"
+# include "CRecordingSettings.h"
+# include "CRecordingScreenSettings.h"
 # include "CExtPack.h"
 # include "CExtPackManager.h"
@@ -383,10 +383,10 @@
 
     /* Gather old 'Recording' data: */
-    CRecordSettings recordingSettings = m_machine.GetRecordSettings();
+    CRecordingSettings recordingSettings = m_machine.GetRecordingSettings();
     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. */
-    CRecordScreenSettings recordingScreen0Settings = recordingSettings.GetScreenSettings(0);
+    CRecordingScreenSettings recordingScreen0Settings = recordingSettings.GetScreenSettings(0);
     if (!recordingScreen0Settings.isNull())
     {
@@ -400,9 +400,9 @@
     }
 
-    CRecordScreenSettingsVector recordingScreenSettingsVector = recordingSettings.GetScreens();
+    CRecordingScreenSettingsVector recordingScreenSettingsVector = recordingSettings.GetScreens();
     oldDisplayData.m_vecRecordingScreens.resize(recordingScreenSettingsVector.size());
     for (int iScreenIndex = 0; iScreenIndex < recordingScreenSettingsVector.size(); ++iScreenIndex)
     {
-        CRecordScreenSettings recordingScreenSettings = recordingScreenSettingsVector.at(iScreenIndex);
+        CRecordingScreenSettings recordingScreenSettings = recordingScreenSettingsVector.at(iScreenIndex);
         if (!recordingScreenSettings.isNull())
             oldDisplayData.m_vecRecordingScreens[iScreenIndex] = recordingScreenSettings.GetEnabled();
@@ -1511,5 +1511,5 @@
         const UIDataSettingsMachineDisplay &newDisplayData = m_pCache->data();
 
-        CRecordSettings recordingSettings = m_machine.GetRecordSettings();
+        CRecordingSettings recordingSettings = m_machine.GetRecordingSettings();
         Assert(recordingSettings.isNotNull());
 
@@ -1533,5 +1533,5 @@
                 if (fSuccess)
                 {
-                    CRecordScreenSettingsVector RecordScreenSettingsVector = recordingSettings.GetScreens();
+                    CRecordingScreenSettingsVector RecordScreenSettingsVector = recordingSettings.GetScreens();
                     for (int iScreenIndex = 0; fSuccess && iScreenIndex < RecordScreenSettingsVector.size(); ++iScreenIndex)
                     {
@@ -1539,5 +1539,5 @@
                             continue;
 
-                        CRecordScreenSettings recordingScreenSettings = RecordScreenSettingsVector.at(iScreenIndex);
+                        CRecordingScreenSettings recordingScreenSettings = RecordScreenSettingsVector.at(iScreenIndex);
                         recordingScreenSettings.SetEnabled(newDisplayData.m_vecRecordingScreens[iScreenIndex]);
                         fSuccess = recordingScreenSettings.isOk();
@@ -1548,5 +1548,5 @@
             else
             {
-                CRecordScreenSettingsVector recordingScreenSettingsVector = recordingSettings.GetScreens();
+                CRecordingScreenSettingsVector recordingScreenSettingsVector = recordingSettings.GetScreens();
                 for (int iScreenIndex = 0; fSuccess && iScreenIndex < recordingScreenSettingsVector.size(); ++iScreenIndex)
                 {
@@ -1554,5 +1554,5 @@
                         continue;
 
-                    CRecordScreenSettings recordingScreenSettings = recordingScreenSettingsVector.at(iScreenIndex);
+                    CRecordingScreenSettings recordingScreenSettings = recordingScreenSettingsVector.at(iScreenIndex);
 
                     // We should save all the options *before* 'Recording' activation.
@@ -1623,5 +1623,5 @@
         else
         {
-            CRecordScreenSettingsVector recordingScreenSettingsVector = recordingSettings.GetScreens();
+            CRecordingScreenSettingsVector recordingScreenSettingsVector = recordingSettings.GetScreens();
             for (int iScreenIndex = 0; fSuccess && iScreenIndex < recordingScreenSettingsVector.size(); ++iScreenIndex)
             {
@@ -1629,5 +1629,5 @@
                     continue;
 
-                CRecordScreenSettings recordingScreenSettings = recordingScreenSettingsVector.at(iScreenIndex);
+                CRecordingScreenSettings 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 75360)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/snapshots/UISnapshotDetailsWidget.cpp	(revision 75361)
@@ -48,6 +48,6 @@
 /* COM includes: */
 # include "CAudioAdapter.h"
-# include "CRecordSettings.h"
-# include "CRecordScreenSettings.h"
+# include "CRecordingSettings.h"
+# include "CRecordingScreenSettings.h"
 # include "CMachine.h"
 # include "CMedium.h"
@@ -1748,7 +1748,7 @@
     QStringList aReport;
     /* Acquire recording status: */
-    CRecordSettings comRecordingSettings = comMachine.GetRecordSettings();
+    CRecordingSettings comRecordingSettings = comMachine.GetRecordingSettings();
     /* For now all screens have the same config: */
-    CRecordScreenSettings comRecordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
+    CRecordingScreenSettings comRecordingScreen0Settings = comRecordingSettings.GetScreenSettings(0);
     if (comRecordingScreen0Settings.GetEnabled())
     {
Index: /trunk/src/VBox/Main/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Main/Makefile.kmk	(revision 75360)
+++ /trunk/src/VBox/Main/Makefile.kmk	(revision 75361)
@@ -457,6 +457,6 @@
 	src-server/BandwidthGroupImpl.cpp \
 	src-server/BIOSSettingsImpl.cpp \
-	src-server/RecordSettingsImpl.cpp \
-	src-server/RecordScreenSettingsImpl.cpp \
+	src-server/RecordingSettingsImpl.cpp \
+	src-server/RecordingScreenSettingsImpl.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 75360)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 75361)
@@ -4690,6 +4690,6 @@
 
   <enum
-    name="RecordDestination"
-    uuid="F52E217E-CA05-41BA-8851-0FA38B3BA38B"
+    name="RecordingDestination"
+    uuid="11E3F06B-DEC1-48B9-BDC4-1E618D72893C"
     >
     <desc>
@@ -4706,6 +4706,6 @@
 
   <enum
-    name="RecordFeature"
-    uuid="52AEC901-4EF5-4E04-8CA3-EF1478BB0930"
+    name="RecordingFeature"
+    uuid="A7DDC6A5-DAA8-4485-B860-E9F2E98A7794"
     >
     <desc>
@@ -4725,6 +4725,6 @@
 
   <enum
-    name="RecordAudioCodec"
-    uuid="B72DD288-0D3F-4652-AE66-D6F621D2F275"
+    name="RecordingAudioCodec"
+    uuid="0AEFF775-053A-42F8-9C00-E445107DBED8"
     >
     <desc>
@@ -4745,6 +4745,6 @@
 
   <enum
-    name="RecordVideoCodec"
-    uuid="823F3AD4-151F-4BDB-AFF9-F7C998E46105"
+    name="RecordingVideoCodec"
+    uuid="663BFC39-AFFF-49FA-98DD-322A857E877B"
     >
     <desc>
@@ -4767,6 +4767,6 @@
 
   <enum
-    name="RecordVideoScalingMethod"
-    uuid="8D656085-BAE6-4F63-86F9-616776EB3773"
+    name="RecordingVideoScalingMethod"
+    uuid="5576D890-48EE-449A-A81B-B776233598B7"
     >
     <desc>
@@ -4808,12 +4808,12 @@
 
   <interface
-    name="IRecordScreenSettings" extends="$unknown"
-    uuid="7811A5C6-11DB-4F9A-8FAE-1CE238AB4B73"
+    name="IRecordingScreenSettings" extends="$unknown"
+    uuid="41E56E39-C36D-440E-867B-FB80C4CE6FAA"
     wsmap="managed"
     >
 
     <desc>
-      The IRecordScreenSettings interface represents recording settings of a
-      single virtual screen. This is used only in the <link to="IRecordSettings" />
+      The IRecordingScreenSettings interface represents recording settings of a
+      single virtual screen. This is used only in the <link to="IRecordingSettings" />
       interface.
     </desc>
@@ -4822,5 +4822,5 @@
       <desc>Returns whether a particular recording feature is enabled for this
         screen or not.</desc>
-      <param name="feature" type="RecordFeature" dir="in">
+      <param name="feature" type="RecordingFeature" dir="in">
         <desc>Feature to check for.</desc>
       </param>
@@ -4847,5 +4847,5 @@
     </attribute>
 
-    <attribute name="destination" type="RecordDestination">
+    <attribute name="destination" type="RecordingDestination">
       <desc>This setting determines the recording destination for this
         screen.</desc>
@@ -4906,5 +4906,5 @@
     </attribute>
 
-    <attribute name="audioCodec" type="RecordAudioCodec">
+    <attribute name="audioCodec" type="RecordingAudioCodec">
       <desc>
         Determines the audio codec to use for encoding the
@@ -4937,5 +4937,5 @@
     </attribute>
 
-    <attribute name="videoCodec" type="RecordVideoCodec">
+    <attribute name="videoCodec" type="RecordingVideoCodec">
       <desc>
         Determines the video codec to use for encoding the recorded video data.
@@ -4982,5 +4982,5 @@
     </attribute>
 
-    <attribute name="videoScalingMethod" type="RecordVideoScalingMethod">
+    <attribute name="videoScalingMethod" type="RecordingVideoScalingMethod">
       <desc>
         Determines the video scaling method to use.
@@ -4992,11 +4992,11 @@
 
   <interface
-    name="IRecordSettings" extends="$unknown"
-    uuid="7202BACF-2BFE-46AA-AEF6-69B32FDDE236"
+    name="IRecordingSettings" extends="$unknown"
+    uuid="D88F2A5A-47C7-4A3F-AAE1-1B516817DB41"
     wsmap="managed"
     >
 
     <desc>
-      The IRecordSettings interface represents recording settings of the virtual
+      The IRecordingSettings interface represents recording settings of the virtual
       machine. This is used only in the <link to="IMachine::recordSettings" />
       attribute.
@@ -5008,5 +5008,5 @@
         <desc>Screen ID to retrieve recording screen settings for.</desc>
       </param>
-      <param name="recordScreenSettings" type="IRecordScreenSettings" dir="return">
+      <param name="recordScreenSettings" type="IRecordingScreenSettings" dir="return">
         <desc>Recording screen settings for the requested screen.</desc>
       </param>
@@ -5019,5 +5019,5 @@
     </attribute>
 
-    <attribute name="screens" type="IRecordScreenSettings" readonly="yes" safearray="yes">
+    <attribute name="screens" type="IRecordingScreenSettings" readonly="yes" safearray="yes">
       <desc>
         This setting returns an array for recording settings of all configured
@@ -5221,5 +5221,5 @@
   <interface
     name="IMachine" extends="$unknown"
-    uuid="7210DD84-2301-4C3B-8DB3-72DEBD3B91F9"
+    uuid="BD65ADC6-7F47-4F69-B881-96EA06CF9924"
     wsmap="managed"
     wrap-hint-server-addinterfaces="IInternalMachineControl"
@@ -5506,5 +5506,5 @@
     </attribute>
 
-    <attribute name="recordSettings" type="IRecordSettings" readonly="yes">
+    <attribute name="recordingSettings" type="IRecordingSettings" readonly="yes">
       <desc>Object containing all recording settings.</desc>
     </attribute>
@@ -20652,5 +20652,5 @@
   <interface
     name="IInternalSessionControl" extends="$unknown"
-    uuid="5CEB7885-5DD5-48E4-96C1-EEF4F4FD9FAC"
+    uuid="DE773CFC-B679-4225-8EAE-938D294B73D2"
     internal="yes"
     wsmap="suppress"
@@ -20952,5 +20952,5 @@
     </method>
 
-    <method name="onRecordChange">
+    <method name="onRecordingChange">
       <desc>
         Triggered when recording settings have changed.
@@ -22777,5 +22777,5 @@
   <enum
     name="VBoxEventType"
-    uuid="b2ddb312-2f9e-4e69-98df-7235e43b2149"
+    uuid="822087CA-4703-49E4-B20D-C6D794E67969"
     >
 
@@ -23136,7 +23136,7 @@
       </desc>
     </const>
-    <const name="OnRecordChanged" value="91">
-      <desc>
-        See <link to="IRecordChangedEvent">IRecordChangeEvent</link>.
+    <const name="OnRecordingChanged" value="91">
+      <desc>
+        See <link to="IRecordingChangedEvent">IRecordingChangeEvent</link>.
       </desc>
     </const>
@@ -24523,7 +24523,7 @@
 
   <interface
-    name="IRecordChangedEvent" extends="IEvent"
-    uuid="DA51AA0C-E642-4AA0-9DDD-B07E2911188B"
-    wsmap="managed" autogen="VBoxEvent" id="OnRecordChanged"
+    name="IRecordingChangedEvent" extends="IEvent"
+    uuid="B5DDB370-08A7-4C8F-910D-47AABD67253A"
+    wsmap="managed" autogen="VBoxEvent" id="OnRecordingChanged"
     >
     <desc>
Index: /trunk/src/VBox/Main/include/ConsoleImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/ConsoleImpl.h	(revision 75360)
+++ /trunk/src/VBox/Main/include/ConsoleImpl.h	(revision 75361)
@@ -145,5 +145,5 @@
     void i_recordingDestroy(void);
     int i_recordingEnable(BOOL fEnable, util::AutoWriteLock *pAutoLock);
-    int i_recordingGetSettings(settings::RecordSettings &Settings);
+    int i_recordingGetSettings(settings::RecordingSettings &Settings);
     int i_recordingStart(void);
     int i_recordingStop(void);
@@ -179,5 +179,5 @@
     HRESULT i_onDnDModeChange(DnDMode_T aDnDMode);
     HRESULT i_onVRDEServerChange(BOOL aRestart);
-    HRESULT i_onRecordChange();
+    HRESULT i_onRecordingChange();
     HRESULT i_onUSBControllerChange();
     HRESULT i_onSharedFolderChange(BOOL aGlobal);
Index: /trunk/src/VBox/Main/include/DrvAudioRec.h
===================================================================
--- /trunk/src/VBox/Main/include/DrvAudioRec.h	(revision 75360)
+++ /trunk/src/VBox/Main/include/DrvAudioRec.h	(revision 75361)
@@ -45,5 +45,5 @@
 public:
 
-    int applyConfiguration(const settings::RecordSettings &Settings);
+    int applyConfiguration(const settings::RecordingSettings &Settings);
 
 public:
@@ -61,5 +61,5 @@
     struct DRVAUDIORECORDING         *mpDrv;
     /** Capturing configuration used for configuring the driver. */
-    struct settings::RecordSettings mVideoRecCfg;
+    struct settings::RecordingSettings mVideoRecCfg;
 };
 
Index: /trunk/src/VBox/Main/include/MachineImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineImpl.h	(revision 75360)
+++ /trunk/src/VBox/Main/include/MachineImpl.h	(revision 75361)
@@ -32,5 +32,5 @@
 #include "ParallelPortImpl.h"
 #include "BIOSSettingsImpl.h"
-#include "RecordSettingsImpl.h"
+#include "RecordingSettingsImpl.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::RecordSettings mRecordSettings;
+        settings::RecordingSettings mRecordSettings;
         ULONG               mMonitorCount;
         BOOL                mHWVirtExEnabled;
@@ -777,5 +777,5 @@
     const ComObjPtr<USBDeviceFilters>  mUSBDeviceFilters;
     const ComObjPtr<BIOSSettings>      mBIOSSettings;
-    const ComObjPtr<RecordSettings>    mRecordSettings;
+    const ComObjPtr<RecordingSettings> mRecordingSettings;
     const ComObjPtr<BandwidthControl>  mBandwidthControl;
 
@@ -825,6 +825,6 @@
 
     friend class Appliance;
-    friend class RecordSettings;
-    friend class RecordScreenSettings;
+    friend class RecordingSettings;
+    friend class RecordingScreenSettings;
     friend class SessionMachine;
     friend class SnapshotMachine;
@@ -880,5 +880,5 @@
     HRESULT setMonitorCount(ULONG aMonitorCount);
     HRESULT getBIOSSettings(ComPtr<IBIOSSettings> &aBIOSSettings);
-    HRESULT getRecordSettings(ComPtr<IRecordSettings> &aRecordSettings);
+    HRESULT getRecordingSettings(ComPtr<IRecordingSettings> &aRecordingSettings);
     HRESULT getFirmwareType(FirmwareType_T *aFirmwareType);
     HRESULT setFirmwareType(FirmwareType_T aFirmwareType);
Index: unk/src/VBox/Main/include/RecordScreenSettingsImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/RecordScreenSettingsImpl.h	(revision 75360)
+++ 	(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_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: unk/src/VBox/Main/include/RecordSettingsImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/RecordSettingsImpl.h	(revision 75360)
+++ 	(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_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/Recording.h
===================================================================
--- /trunk/src/VBox/Main/include/Recording.h	(revision 75360)
+++ /trunk/src/VBox/Main/include/Recording.h	(revision 75361)
@@ -41,5 +41,5 @@
     RecordingContext(Console *pConsole);
 
-    RecordingContext(Console *pConsole, const settings::RecordSettings &a_Settings);
+    RecordingContext(Console *pConsole, const settings::RecordingSettings &a_Settings);
 
     virtual ~RecordingContext(void);
@@ -47,9 +47,9 @@
 public:
 
-    const settings::RecordSettings &GetConfig(void) const;
+    const settings::RecordingSettings &GetConfig(void) const;
     RecordingStream *GetStream(unsigned uScreen) const;
     size_t GetStreamCount(void) const;
 
-    int Create(const settings::RecordSettings &a_Settings);
+    int Create(const settings::RecordingSettings &a_Settings);
     int Destroy(void);
 
@@ -64,5 +64,5 @@
 public:
 
-    bool IsFeatureEnabled(RecordFeature_T enmFeature) const;
+    bool IsFeatureEnabled(RecordingFeature_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::RecordSettings &a_Settings);
+    int createInternal(const settings::RecordingSettings &a_Settings);
     int startInternal(void);
     int stopInternal(void);
@@ -104,5 +104,5 @@
     Console                  *pConsole;
     /** Used recording configuration. */
-    settings::RecordSettings  Settings;
+    settings::RecordingSettings  Settings;
     /** The current state. */
     RECORDINGSTS              enmState;
Index: /trunk/src/VBox/Main/include/RecordingScreenSettingsImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/RecordingScreenSettingsImpl.h	(revision 75361)
+++ /trunk/src/VBox/Main/include/RecordingScreenSettingsImpl.h	(revision 75361)
@@ -0,0 +1,116 @@
+/* $Id$ */
+
+/** @file
+ *
+ * VirtualBox COM class implementation - Recording 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_RecordingScreenSettings
+#define ____H_RecordingScreenSettings
+
+#include "RecordingScreenSettingsWrap.h"
+
+class RecordingSettings;
+
+namespace settings
+{
+    struct RecordingScreenSettings;
+}
+
+class ATL_NO_VTABLE RecordingScreenSettings :
+    public RecordingScreenSettingsWrap
+{
+public:
+
+    DECLARE_EMPTY_CTOR_DTOR(RecordingScreenSettings)
+
+    HRESULT FinalConstruct();
+    void FinalRelease();
+
+    // public initializer/uninitializer for internal purposes only
+    HRESULT init(RecordingSettings *aParent, uint32_t uScreenId, const settings::RecordingScreenSettings& data);
+    HRESULT init(RecordingSettings *aParent, RecordingScreenSettings *that);
+    HRESULT initCopy(RecordingSettings *aParent, RecordingScreenSettings *that);
+    void uninit();
+
+    // public methods only for internal purposes
+    HRESULT i_loadSettings(const settings::RecordingScreenSettings &data);
+    HRESULT i_saveSettings(settings::RecordingScreenSettings &data);
+
+    void i_rollback();
+    void i_commit();
+    void i_copyFrom(RecordingScreenSettings *aThat);
+    void i_applyDefaults();
+
+private:
+
+    // wrapped IRecordingScreenSettings methods
+    HRESULT isFeatureEnabled(RecordingFeature_T aFeature, BOOL *aEnabled);
+
+    // wrapped IRecordingScreenSettings properties
+    HRESULT getId(ULONG *id);
+    HRESULT getEnabled(BOOL *enabled);
+    HRESULT setEnabled(BOOL enabled);
+    HRESULT getFeatures(ULONG *aFeatures);
+    HRESULT setFeatures(ULONG aFeatures);
+    HRESULT getDestination(RecordingDestination_T *aDestination);
+    HRESULT setDestination(RecordingDestination_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(RecordingAudioCodec_T *aCodec);
+    HRESULT setAudioCodec(RecordingAudioCodec_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(RecordingVideoCodec_T *aCodec);
+    HRESULT setVideoCodec(RecordingVideoCodec_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(RecordingVideoScalingMethod_T *aMode);
+    HRESULT setVideoScalingMethod(RecordingVideoScalingMethod_T aMode);
+
+private:
+
+    // internal methods
+    int  i_initInternal();
+
+private:
+
+    struct Data;
+    Data *m;
+};
+
+#endif // ____H_RecordingScreenSettings
+
Index: /trunk/src/VBox/Main/include/RecordingSettingsImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/RecordingSettingsImpl.h	(revision 75361)
+++ /trunk/src/VBox/Main/include/RecordingSettingsImpl.h	(revision 75361)
@@ -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 "RecordingSettingsWrap.h"
+
+namespace settings
+{
+    struct RecordingSettings;
+    struct RecordingScreenSettings;
+}
+
+class RecordingScreenSettings;
+
+class ATL_NO_VTABLE RecordingSettings :
+    public RecordingSettingsWrap
+{
+public:
+
+    DECLARE_EMPTY_CTOR_DTOR(RecordingSettings)
+
+    HRESULT FinalConstruct();
+    void FinalRelease();
+
+    // public initializer/uninitializer for internal purposes only
+    HRESULT init(Machine *parent);
+    HRESULT init(Machine *parent, RecordingSettings *that);
+    HRESULT initCopy(Machine *parent, RecordingSettings *that);
+    void uninit();
+
+    // public methods only for internal purposes
+    HRESULT i_loadSettings(const settings::RecordingSettings &data);
+    HRESULT i_saveSettings(settings::RecordingSettings &data);
+
+    void i_rollback();
+    void i_commit();
+    void i_copyFrom(RecordingSettings *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<RecordingScreenSettings> > RecordScreenSettingsMap;
+
+    void i_reset(void);
+    int i_syncToMachineDisplays(void);
+    int i_createScreenObj(RecordScreenSettingsMap &screenSettingsMap, uint32_t uScreenId, const settings::RecordingScreenSettings &data);
+    int i_destroyScreenObj(RecordScreenSettingsMap &screenSettingsMap, uint32_t uScreenId);
+    int i_destroyAllScreenObj(RecordScreenSettingsMap &screenSettingsMap);
+
+private:
+
+    // wrapped IRecordingSettings properties
+    HRESULT getEnabled(BOOL *enabled);
+    HRESULT setEnabled(BOOL enable);
+    HRESULT getScreens(std::vector<ComPtr<IRecordingScreenSettings> > &aRecordScreenSettings);
+
+    // wrapped IRecordingSettings methods
+    HRESULT getScreenSettings(ULONG uScreenId, ComPtr<IRecordingScreenSettings> &aRecordScreenSettings);
+
+private:
+
+    struct Data;
+    Data *m;
+};
+#endif // ____H_RecordSettings
+
Index: /trunk/src/VBox/Main/include/RecordingStream.h
===================================================================
--- /trunk/src/VBox/Main/include/RecordingStream.h	(revision 75360)
+++ /trunk/src/VBox/Main/include/RecordingStream.h	(revision 75361)
@@ -111,5 +111,5 @@
     RecordingStream(RecordingContext *pCtx);
 
-    RecordingStream(RecordingContext *pCtx, uint32_t uScreen, const settings::RecordScreenSettings &Settings);
+    RecordingStream(RecordingContext *pCtx, uint32_t uScreen, const settings::RecordingScreenSettings &Settings);
 
     virtual ~RecordingStream(void);
@@ -117,5 +117,5 @@
 public:
 
-    int Init(RecordingContext *pCtx, uint32_t uScreen, const settings::RecordScreenSettings &Settings);
+    int Init(RecordingContext *pCtx, uint32_t uScreen, const settings::RecordingScreenSettings &Settings);
     int Uninit(void);
 
@@ -124,5 +124,5 @@
                        uint32_t uSrcWidth, uint32_t uSrcHeight, uint8_t *puSrcData, uint64_t uTimeStampMs);
 
-    const settings::RecordScreenSettings &GetConfig(void) const;
+    const settings::RecordingScreenSettings &GetConfig(void) const;
     bool IsLimitReached(uint64_t tsNowMs) const;
     bool IsReady(void) const;
@@ -130,8 +130,8 @@
 protected:
 
-    int open(const settings::RecordScreenSettings &Settings);
+    int open(const settings::RecordingScreenSettings &Settings);
     int close(void);
 
-    int initInternal(RecordingContext *pCtx, uint32_t uScreen, const settings::RecordScreenSettings &Settings);
+    int initInternal(RecordingContext *pCtx, uint32_t uScreen, const settings::RecordingScreenSettings &Settings);
     int uninitInternal(void);
 
@@ -205,5 +205,5 @@
     } Video;
 
-    settings::RecordScreenSettings ScreenSettings;
+    settings::RecordingScreenSettings ScreenSettings;
     /** Common set of recording (data) blocks, needed for
      *  multiplexing to all recording streams. */
Index: /trunk/src/VBox/Main/include/SessionImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/SessionImpl.h	(revision 75360)
+++ /trunk/src/VBox/Main/include/SessionImpl.h	(revision 75361)
@@ -102,5 +102,5 @@
     HRESULT onCPUExecutionCapChange(ULONG aExecutionCap);
     HRESULT onVRDEServerChange(BOOL aRestart);
-    HRESULT onRecordChange();
+    HRESULT onRecordingChange();
     HRESULT onUSBControllerChange();
     HRESULT onSharedFolderChange(BOOL aGlobal);
Index: /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp	(revision 75360)
+++ /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp	(revision 75361)
@@ -5632,5 +5632,5 @@
 # ifdef VBOX_WITH_AUDIO_RECORDING
                     /* Attach the video recording audio driver if required. */
-                    if (   Recording.mpCtx->IsFeatureEnabled(RecordFeature_Audio)
+                    if (   Recording.mpCtx->IsFeatureEnabled(RecordingFeature_Audio)
                         && Recording.mAudioRec)
                     {
@@ -5667,5 +5667,5 @@
 #endif /* VBOX_WITH_RECORDING */
 
-HRESULT Console::i_onRecordChange()
+HRESULT Console::i_onRecordingChange()
 {
     AutoCaller autoCaller(this);
@@ -5680,10 +5680,10 @@
     if (ptrVM.isOk())
     {
-        ComPtr<IRecordSettings> RecordSettings;
-        rc = mMachine->COMGETTER(RecordSettings)(RecordSettings.asOutParam());
+        ComPtr<IRecordingSettings> recordingSettings;
+        rc = mMachine->COMGETTER(RecordingSettings)(recordingSettings.asOutParam());
         AssertComRCReturnRC(rc);
 
         BOOL fEnabled;
-        rc = RecordSettings->COMGETTER(Enabled)(&fEnabled);
+        rc = recordingSettings->COMGETTER(Enabled)(&fEnabled);
         AssertComRCReturnRC(rc);
 
@@ -5692,5 +5692,5 @@
         {
             alock.release();
-            fireRecordChangedEvent(mEventSource);
+            fireRecordingChangedEvent(mEventSource);
         }
 
@@ -6882,5 +6882,5 @@
 
     if (   Recording.mpCtx->IsStarted()
-        && Recording.mpCtx->IsFeatureEnabled(RecordFeature_Audio))
+        && Recording.mpCtx->IsFeatureEnabled(RecordingFeature_Audio))
     {
         return Recording.mpCtx->SendAudioFrame(pvData, cbData, uTimestampMs);
@@ -6892,5 +6892,5 @@
 
 #ifdef VBOX_WITH_RECORDING
-int Console::i_recordingGetSettings(settings::RecordSettings &Settings)
+int Console::i_recordingGetSettings(settings::RecordingSettings &Settings)
 {
     Assert(mMachine.isNotNull());
@@ -6898,6 +6898,6 @@
     Settings.applyDefaults();
 
-    ComPtr<IRecordSettings> pRecordSettings;
-    HRESULT hrc = mMachine->COMGETTER(RecordSettings)(pRecordSettings.asOutParam());
+    ComPtr<IRecordingSettings> pRecordSettings;
+    HRESULT hrc = mMachine->COMGETTER(RecordingSettings)(pRecordSettings.asOutParam());
     AssertComRCReturn(hrc, VERR_INVALID_PARAMETER);
 
@@ -6907,5 +6907,5 @@
     Settings.fEnabled = RT_BOOL(fTemp);
 
-    SafeIfaceArray<IRecordScreenSettings> paRecordingScreens;
+    SafeIfaceArray<IRecordingScreenSettings> paRecordingScreens;
     hrc = pRecordSettings->COMGETTER(Screens)(ComSafeArrayAsOutParam(paRecordingScreens));
     AssertComRCReturn(hrc, VERR_INVALID_PARAMETER);
@@ -6913,6 +6913,6 @@
     for (unsigned long i = 0; i < (unsigned long)paRecordingScreens.size(); ++i)
     {
-        settings::RecordScreenSettings RecordScreenSettings;
-        ComPtr<IRecordScreenSettings> pRecordScreenSettings = paRecordingScreens[i];
+        settings::RecordingScreenSettings RecordScreenSettings;
+        ComPtr<IRecordingScreenSettings> pRecordScreenSettings = paRecordingScreens[i];
 
         hrc = pRecordScreenSettings->COMGETTER(Enabled)(&fTemp);
@@ -6971,5 +6971,5 @@
     }
 
-    settings::RecordSettings Settings;
+    settings::RecordingSettings Settings;
     rc = i_recordingGetSettings(Settings);
     if (RT_SUCCESS(rc))
@@ -7043,6 +7043,6 @@
             mDisplay->i_recordingScreenChanged(uScreen);
 
-        ComPtr<IRecordSettings> pRecordSettings;
-        HRESULT hrc = mMachine->COMGETTER(RecordSettings)(pRecordSettings.asOutParam());
+        ComPtr<IRecordingSettings> pRecordSettings;
+        HRESULT hrc = mMachine->COMGETTER(RecordingSettings)(pRecordSettings.asOutParam());
         ComAssertComRC(hrc);
         hrc = pRecordSettings->COMSETTER(Enabled)(false);
@@ -10146,18 +10146,18 @@
 
 #ifdef VBOX_WITH_RECORDING
-        ComPtr<IRecordSettings> RecordSettings;
-        rc = pConsole->mMachine->COMGETTER(RecordSettings)(RecordSettings.asOutParam());
+        ComPtr<IRecordingSettings> recordingSettings;
+        rc = pConsole->mMachine->COMGETTER(RecordingSettings)(recordingSettings.asOutParam());
         AssertComRCReturnVoid(rc);
 
-        BOOL fCaptureEnabled;
-        rc = RecordSettings->COMGETTER(Enabled)(&fCaptureEnabled);
+        BOOL fRecordingEnabled;
+        rc = recordingSettings->COMGETTER(Enabled)(&fRecordingEnabled);
         AssertComRCReturnVoid(rc);
 
-        if (fCaptureEnabled)
-        {
-            int vrc2 = pConsole->i_recordingEnable(fCaptureEnabled, &alock);
+        if (fRecordingEnabled)
+        {
+            int vrc2 = pConsole->i_recordingEnable(fRecordingEnabled, &alock);
             if (RT_SUCCESS(vrc2))
             {
-                fireRecordChangedEvent(pConsole->mEventSource);
+                fireRecordingChangedEvent(pConsole->mEventSource);
             }
             else
Index: /trunk/src/VBox/Main/src-client/DisplayImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/DisplayImpl.cpp	(revision 75360)
+++ /trunk/src/VBox/Main/src-client/DisplayImpl.cpp	(revision 75361)
@@ -3393,5 +3393,5 @@
     if (   pCtx
         && pCtx->IsStarted()
-        && pCtx->IsFeatureEnabled(RecordFeature_Video))
+        && pCtx->IsFeatureEnabled(RecordingFeature_Video))
     {
         do {
@@ -3859,5 +3859,5 @@
     if (   pCtx
         && pCtx->IsStarted()
-        && pCtx->IsFeatureEnabled(RecordFeature_Video))
+        && pCtx->IsFeatureEnabled(RecordingFeature_Video))
     {
         int rc2 = pCtx->SendVideoFrame(uScreen, x, y,
Index: /trunk/src/VBox/Main/src-client/DrvAudioRec.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/DrvAudioRec.cpp	(revision 75360)
+++ /trunk/src/VBox/Main/src-client/DrvAudioRec.cpp	(revision 75361)
@@ -1088,5 +1088,5 @@
  * @param   Settings        Capturing configuration to apply.
  */
-int AudioVideoRec::applyConfiguration(const settings::RecordSettings &Settings)
+int AudioVideoRec::applyConfiguration(const settings::RecordingSettings &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::RecordScreenSettings &Screen0Settings = mVideoRecCfg.mapScreens[0];
+    const settings::RecordingScreenSettings &Screen0Settings = mVideoRecCfg.mapScreens[0];
 
     rc = CFGMR3InsertInteger(pLunCfg, "ContainerType", (uint64_t)Screen0Settings.enmDest);
     AssertRCReturn(rc, rc);
-    if (Screen0Settings.enmDest == RecordDestination_File)
+    if (Screen0Settings.enmDest == RecordingDestination_File)
     {
         rc = CFGMR3InsertString(pLunCfg, "ContainerFileName", Utf8Str(Screen0Settings.File.strName).c_str());
Index: /trunk/src/VBox/Main/src-client/Recording.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/Recording.cpp	(revision 75360)
+++ /trunk/src/VBox/Main/src-client/Recording.cpp	(revision 75361)
@@ -94,5 +94,5 @@
     , enmState(RECORDINGSTS_UNINITIALIZED) { }
 
-RecordingContext::RecordingContext(Console *a_pConsole, const settings::RecordSettings &a_Settings)
+RecordingContext::RecordingContext(Console *a_pConsole, const settings::RecordingSettings &a_Settings)
     : pConsole(a_pConsole)
     , enmState(RECORDINGSTS_UNINITIALIZED)
@@ -177,5 +177,5 @@
  * @param   a_Settings          Capture settings to use for context creation.
  */
-int RecordingContext::createInternal(const settings::RecordSettings &a_Settings)
+int RecordingContext::createInternal(const settings::RecordingSettings &a_Settings)
 {
     int rc = RTCritSectInit(&this->CritSect);
@@ -183,5 +183,5 @@
         return rc;
 
-    settings::RecordScreenMap::const_iterator itScreen = a_Settings.mapScreens.begin();
+    settings::RecordingScreenMap::const_iterator itScreen = a_Settings.mapScreens.begin();
     while (itScreen != a_Settings.mapScreens.end())
     {
@@ -318,5 +318,5 @@
 }
 
-const settings::RecordSettings &RecordingContext::GetConfig(void) const
+const settings::RecordingSettings &RecordingContext::GetConfig(void) const
 {
     return this->Settings;
@@ -355,5 +355,5 @@
 }
 
-int RecordingContext::Create(const settings::RecordSettings &a_Settings)
+int RecordingContext::Create(const settings::RecordingSettings &a_Settings)
 {
     return createInternal(a_Settings);
@@ -375,5 +375,5 @@
 }
 
-bool RecordingContext::IsFeatureEnabled(RecordFeature_T enmFeature) const
+bool RecordingContext::IsFeatureEnabled(RecordingFeature_T enmFeature) const
 {
     RecordingStreams::const_iterator itStream = this->vecStreams.begin();
Index: /trunk/src/VBox/Main/src-client/RecordingStream.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/RecordingStream.cpp	(revision 75360)
+++ /trunk/src/VBox/Main/src-client/RecordingStream.cpp	(revision 75361)
@@ -51,5 +51,5 @@
 }
 
-RecordingStream::RecordingStream(RecordingContext *a_pCtx, uint32_t uScreen, const settings::RecordScreenSettings &Settings)
+RecordingStream::RecordingStream(RecordingContext *a_pCtx, uint32_t uScreen, const settings::RecordingScreenSettings &Settings)
     : enmState(RECORDINGSTREAMSTATE_UNINITIALIZED)
     , tsStartMs(0)
@@ -74,8 +74,8 @@
  * @returns IPRT status code.
  */
-int RecordingStream::open(const settings::RecordScreenSettings &Settings)
+int RecordingStream::open(const settings::RecordingScreenSettings &Settings)
 {
     /* Sanity. */
-    Assert(Settings.enmDest != RecordDestination_None);
+    Assert(Settings.enmDest != RecordingDestination_None);
 
     int rc;
@@ -83,5 +83,5 @@
     switch (Settings.enmDest)
     {
-        case RecordDestination_File:
+        case RecordingDestination_File:
         {
             Assert(Settings.File.strName.isNotEmpty());
@@ -209,5 +209,5 @@
             if (value.compare("false", Utf8Str::CaseInsensitive) == 0)
             {
-                this->ScreenSettings.featureMap[RecordFeature_Video] = false;
+                this->ScreenSettings.featureMap[RecordingFeature_Video] = false;
 #ifdef VBOX_WITH_AUDIO_RECORDING
                 LogRel(("Recording: Only audio will be recorded\n"));
@@ -220,5 +220,5 @@
             if (value.compare("true", Utf8Str::CaseInsensitive) == 0)
             {
-                this->ScreenSettings.featureMap[RecordFeature_Audio] = true;
+                this->ScreenSettings.featureMap[RecordingFeature_Audio] = true;
             }
             else
@@ -255,5 +255,5 @@
 }
 
-const settings::RecordScreenSettings &RecordingStream::GetConfig(void) const
+const settings::RecordingScreenSettings &RecordingStream::GetConfig(void) const
 {
     return this->ScreenSettings;
@@ -277,5 +277,5 @@
     }
 
-    if (this->ScreenSettings.enmDest == RecordDestination_File)
+    if (this->ScreenSettings.enmDest == RecordingDestination_File)
     {
 
@@ -661,5 +661,5 @@
  * @param   Settings            Capturing configuration to use for initialization.
  */
-int RecordingStream::Init(RecordingContext *a_pCtx, uint32_t uScreen, const settings::RecordScreenSettings &Settings)
+int RecordingStream::Init(RecordingContext *a_pCtx, uint32_t uScreen, const settings::RecordingScreenSettings &Settings)
 {
     return initInternal(a_pCtx, uScreen, Settings);
@@ -674,5 +674,5 @@
  * @param   Settings            Capturing configuration to use for initialization.
  */
-int RecordingStream::initInternal(RecordingContext *a_pCtx, uint32_t uScreen, const settings::RecordScreenSettings &Settings)
+int RecordingStream::initInternal(RecordingContext *a_pCtx, uint32_t uScreen, const settings::RecordingScreenSettings &Settings)
 {
     int rc = parseOptionsString(Settings.strOptions);
@@ -688,6 +688,6 @@
         return rc;
 
-    const bool fVideoEnabled = Settings.isFeatureEnabled(RecordFeature_Video);
-    const bool fAudioEnabled = Settings.isFeatureEnabled(RecordFeature_Audio);
+    const bool fVideoEnabled = Settings.isFeatureEnabled(RecordingFeature_Video);
+    const bool fAudioEnabled = Settings.isFeatureEnabled(RecordingFeature_Audio);
 
     if (fVideoEnabled)
@@ -699,5 +699,5 @@
     switch (this->ScreenSettings.enmDest)
     {
-        case RecordDestination_File:
+        case RecordingDestination_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_RECORDING
-                                      Settings.isFeatureEnabled(RecordFeature_Audio)
+                                      Settings.isFeatureEnabled(RecordingFeature_Audio)
                                     ? WebMWriter::AudioCodec_Opus : WebMWriter::AudioCodec_None,
 #else
                                       WebMWriter::AudioCodec_None,
 #endif
-                                      Settings.isFeatureEnabled(RecordFeature_Video)
+                                      Settings.isFeatureEnabled(RecordingFeature_Video)
                                     ? WebMWriter::VideoCodec_VP8 : WebMWriter::VideoCodec_None);
             if (RT_FAILURE(rc))
@@ -814,5 +814,5 @@
         switch (this->ScreenSettings.enmDest)
         {
-            case RecordDestination_File:
+            case RecordingDestination_File:
             {
                 if (this->File.pWEBM)
@@ -839,5 +839,5 @@
     switch (this->ScreenSettings.enmDest)
     {
-        case RecordDestination_File:
+        case RecordingDestination_File:
         {
             if (RTFileIsValid(this->File.hFile))
@@ -891,5 +891,5 @@
         return rc;
 
-    if (this->ScreenSettings.isFeatureEnabled(RecordFeature_Video))
+    if (this->ScreenSettings.isFeatureEnabled(RecordingFeature_Video))
     {
         int rc2 = unitVideo();
@@ -1025,5 +1025,5 @@
 {
 #ifdef VBOX_WITH_AUDIO_RECORDING
-    if (this->ScreenSettings.isFeatureEnabled(RecordFeature_Audio))
+    if (this->ScreenSettings.isFeatureEnabled(RecordingFeature_Audio))
     {
         /* Sanity. */
Index: /trunk/src/VBox/Main/src-client/SessionImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/SessionImpl.cpp	(revision 75360)
+++ /trunk/src/VBox/Main/src-client/SessionImpl.cpp	(revision 75361)
@@ -725,15 +725,15 @@
 }
 
-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();
+HRESULT Session::onRecordingChange()
+{
+    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_onRecordingChange();
 #else
     return S_OK;
Index: /trunk/src/VBox/Main/src-server/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 75360)
+++ /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 75361)
@@ -359,5 +359,5 @@
 
         /* Apply record defaults. */
-        mRecordSettings->i_applyDefaults();
+        mRecordingSettings->i_applyDefaults();
 
         /* Apply network adapters defaults */
@@ -1940,8 +1940,8 @@
 }
 
-HRESULT Machine::getRecordSettings(ComPtr<IRecordSettings> &aRecordSettings)
-{
-    /* mRecordSettings is constant during life time, no need to lock */
-    aRecordSettings = mRecordSettings;
+HRESULT Machine::getRecordingSettings(ComPtr<IRecordingSettings> &aRecordingSettings)
+{
+    /* mRecordingSettings is constant during life time, no need to lock */
+    aRecordingSettings = mRecordingSettings;
 
     return S_OK;
@@ -8260,6 +8260,6 @@
 
     /* create associated record settings object */
-    unconst(mRecordSettings).createObject();
-    mRecordSettings->init(this);
+    unconst(mRecordingSettings).createObject();
+    mRecordingSettings->init(this);
 
     /* create an associated VRDE object (default is disabled) */
@@ -8378,8 +8378,8 @@
     }
 
-    if (mRecordSettings)
-    {
-        mRecordSettings->uninit();
-        unconst(mRecordSettings).setNull();
+    if (mRecordingSettings)
+    {
+        mRecordingSettings->uninit();
+        unconst(mRecordingSettings).setNull();
     }
 
@@ -8898,6 +8898,6 @@
         if (FAILED(rc)) return rc;
 
-        /* Record settings */
-        rc = mRecordSettings->i_loadSettings(data.recordSettings);
+        /* Recording settings */
+        rc = mRecordingSettings->i_loadSettings(data.recordingSettings);
         if (FAILED(rc)) return rc;
 
@@ -10217,6 +10217,6 @@
         if (FAILED(rc)) throw rc;
 
-        /* Record settings (required) */
-        rc = mRecordSettings->i_saveSettings(data.recordSettings);
+        /* Recording settings (required) */
+        rc = mRecordingSettings->i_saveSettings(data.recordingSettings);
         if (FAILED(rc)) throw rc;
 
@@ -11723,6 +11723,6 @@
         mBIOSSettings->i_rollback();
 
-    if (mRecordSettings && (mData->flModifications & IsModified_Record))
-        mRecordSettings->i_rollback();
+    if (mRecordingSettings && (mData->flModifications & IsModified_Record))
+        mRecordingSettings->i_rollback();
 
     if (mVRDEServer && (mData->flModifications & IsModified_VRDEServer))
@@ -11836,5 +11836,5 @@
 
     mBIOSSettings->i_commit();
-    mRecordSettings->i_commit();
+    mRecordingSettings->i_commit();
     mVRDEServer->i_commit();
     mAudioAdapter->i_commit();
@@ -12089,5 +12089,5 @@
 
     mBIOSSettings->i_copyFrom(aThat->mBIOSSettings);
-    mRecordSettings->i_copyFrom(aThat->mRecordSettings);
+    mRecordingSettings->i_copyFrom(aThat->mRecordingSettings);
     mVRDEServer->i_copyFrom(aThat->mVRDEServer);
     mAudioAdapter->i_copyFrom(aThat->mAudioAdapter);
@@ -12463,6 +12463,6 @@
     unconst(mBIOSSettings).createObject();
     mBIOSSettings->init(this, aMachine->mBIOSSettings);
-    unconst(mRecordSettings).createObject();
-    mRecordSettings->init(this, aMachine->mRecordSettings);
+    unconst(mRecordingSettings).createObject();
+    mRecordingSettings->init(this, aMachine->mRecordingSettings);
     /* create another VRDEServer object that will be mutable */
     unconst(mVRDEServer).createObject();
@@ -14116,5 +14116,5 @@
         return S_OK;
 
-    return directControl->OnRecordChange();
+    return directControl->OnRecordingChange();
 }
 
@@ -15051,5 +15051,5 @@
 
     /* Initialize default record settings. */
-    mRecordSettings->i_applyDefaults();
+    mRecordingSettings->i_applyDefaults();
 
     /* Initialize default BIOS settings here */
Index: unk/src/VBox/Main/src-server/RecordScreenSettingsImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/RecordScreenSettingsImpl.cpp	(revision 75360)
+++ 	(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_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: unk/src/VBox/Main/src-server/RecordSettingsImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/RecordSettingsImpl.cpp	(revision 75360)
+++ 	(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_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/RecordingScreenSettingsImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/RecordingScreenSettingsImpl.cpp	(revision 75361)
+++ /trunk/src/VBox/Main/src-server/RecordingScreenSettingsImpl.cpp	(revision 75361)
@@ -0,0 +1,817 @@
+/* $Id$ */
+/** @file
+ *
+ * VirtualBox COM class implementation - Recording 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_RECORDINGSCREENSETTINGS
+#include "LoggingNew.h"
+
+#include "RecordingScreenSettingsImpl.h"
+#include "RecordingSettingsImpl.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 RecordingScreenSettings::Data
+{
+    Data()
+        : pParent(NULL)
+    { }
+
+    RecordingSettings * const          pParent;
+    ComObjPtr<RecordingScreenSettings> pPeer;
+    uint32_t                           uScreenId;
+
+    // use the XML settings structure in the members for simplicity
+    Backupable<settings::RecordingScreenSettings> bd;
+};
+
+// constructor / destructor
+/////////////////////////////////////////////////////////////////////////////
+
+DEFINE_EMPTY_CTOR_DTOR(RecordingScreenSettings)
+
+HRESULT RecordingScreenSettings::FinalConstruct()
+{
+    return BaseFinalConstruct();
+}
+
+void RecordingScreenSettings::FinalRelease()
+{
+    uninit();
+    BaseFinalRelease();
+}
+
+// public initializer/uninitializer for internal purposes only
+/////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Initializes the audio adapter object.
+ *
+ * @returns COM result indicator
+ */
+HRESULT RecordingScreenSettings::init(RecordingSettings *aParent, uint32_t uScreenId, const settings::RecordingScreenSettings& 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 RecordingScreenSettings::init(RecordingSettings *aParent, RecordingScreenSettings *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 RecordingScreenSettings::initCopy(RecordingSettings *aParent, RecordingScreenSettings *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 RecordingScreenSettings::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 RecordingScreenSettings::isFeatureEnabled(RecordingFeature_T aFeature, BOOL *aEnabled)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    settings::RecordingFeatureMap::const_iterator itFeature = m->bd->featureMap.find(aFeature);
+
+    *aEnabled = (   itFeature != m->bd->featureMap.end()
+                 && itFeature->second == true);
+
+    return S_OK;
+}
+
+HRESULT RecordingScreenSettings::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 RecordingScreenSettings::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 RecordingScreenSettings::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 recording 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 RecordingScreenSettings::getFeatures(ULONG *aFeatures)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aFeatures = 0;
+
+    settings::RecordingFeatureMap::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 RecordingScreenSettings::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 recording is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->featureMap.clear();
+
+    if (aFeatures & RecordingFeature_Audio)
+        m->bd->featureMap[RecordingFeature_Audio] = true;
+    if (aFeatures & RecordingFeature_Video)
+        m->bd->featureMap[RecordingFeature_Video] = true;
+
+    alock.release();
+
+    return S_OK;
+}
+
+HRESULT RecordingScreenSettings::getDestination(RecordingDestination_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 RecordingScreenSettings::setDestination(RecordingDestination_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 recording is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->enmDest = aDestination;
+
+    return S_OK;
+}
+
+HRESULT RecordingScreenSettings::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 RecordingScreenSettings::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 recording 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 RecordingScreenSettings::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 RecordingScreenSettings::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 recording is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->ulMaxTimeS = aMaxTimeS;
+
+    return S_OK;
+}
+
+HRESULT RecordingScreenSettings::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 RecordingScreenSettings::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 recording is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->File.ulMaxSizeMB = aMaxFileSize;
+
+    return S_OK;
+}
+
+HRESULT RecordingScreenSettings::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 RecordingScreenSettings::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 recording is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->strOptions = aOptions;
+
+    return S_OK;
+}
+
+HRESULT RecordingScreenSettings::getAudioCodec(RecordingAudioCodec_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 RecordingScreenSettings::setAudioCodec(RecordingAudioCodec_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 recording is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Audio.enmAudioCodec = aCodec;
+
+    return S_OK;
+}
+
+HRESULT RecordingScreenSettings::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 RecordingScreenSettings::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 recording is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Audio.uHz = (uint16_t)aHz;
+
+    return S_OK;
+}
+
+HRESULT RecordingScreenSettings::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 RecordingScreenSettings::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 recording is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Audio.cBits = (uint8_t)aBits;
+
+    return S_OK;
+}
+
+HRESULT RecordingScreenSettings::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 RecordingScreenSettings::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 recording is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Audio.cChannels = (uint8_t)aChannels;
+
+    return S_OK;
+}
+
+HRESULT RecordingScreenSettings::getVideoCodec(RecordingVideoCodec_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 RecordingScreenSettings::setVideoCodec(RecordingVideoCodec_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 recording is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Video.enmCodec = aCodec;
+
+    return S_OK;
+}
+
+HRESULT RecordingScreenSettings::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 RecordingScreenSettings::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 recording is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Video.ulWidth = aVideoWidth;
+
+    return S_OK;
+}
+
+HRESULT RecordingScreenSettings::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 RecordingScreenSettings::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 recording is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Video.ulHeight = aVideoHeight;
+
+    return S_OK;
+}
+
+HRESULT RecordingScreenSettings::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 RecordingScreenSettings::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 recording is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Video.ulRate = aVideoRate;
+
+    return S_OK;
+}
+
+HRESULT RecordingScreenSettings::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 RecordingScreenSettings::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 recording is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    /** @todo Implement this. */
+    RT_NOREF(aMode);
+
+    return E_NOTIMPL;
+}
+
+HRESULT RecordingScreenSettings::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 RecordingScreenSettings::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 recording is enabled"));
+
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    m->bd.backup();
+    m->bd->Video.ulFPS = aVideoFPS;
+
+    return S_OK;
+}
+
+HRESULT RecordingScreenSettings::getVideoScalingMethod(RecordingVideoScalingMethod_T *aMode)
+{
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aMode = RecordingVideoScalingMethod_None; /** @todo Implement this. */
+
+    return S_OK;
+}
+
+HRESULT RecordingScreenSettings::setVideoScalingMethod(RecordingVideoScalingMethod_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 recording 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 RecordingScreenSettings::i_initInternal(void)
+{
+    Assert(m);
+
+    int rc = VINF_SUCCESS;
+
+    switch (m->bd->enmDest)
+    {
+        case RecordingDestination_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/RecordingSettingsImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/RecordingSettingsImpl.cpp	(revision 75361)
+++ /trunk/src/VBox/Main/src-server/RecordingSettingsImpl.cpp	(revision 75361)
@@ -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_RECORDINGSETTINGS
+#include "LoggingNew.h"
+
+#include "RecordingSettingsImpl.h"
+#include "RecordingScreenSettingsImpl.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 RecordingSettings::Data
+{
+    Data()
+        : pMachine(NULL)
+    { }
+
+    Machine * const              pMachine;
+    ComObjPtr<RecordingSettings> pPeer;
+    RecordScreenSettingsMap      mapScreenObj;
+    bool                         fHasMachineLock;
+
+    // use the XML settings structure in the members for simplicity
+    Backupable<settings::RecordingSettings> bd;
+};
+
+DEFINE_EMPTY_CTOR_DTOR(RecordingSettings)
+
+HRESULT RecordingSettings::FinalConstruct()
+{
+    return BaseFinalConstruct();
+}
+
+void RecordingSettings::FinalRelease()
+{
+    uninit();
+    BaseFinalRelease();
+}
+
+/**
+ * Initializes the audio adapter object.
+ *
+ * @returns COM result indicator
+ */
+HRESULT RecordingSettings::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 RecordingSettings::init(Machine *aParent, RecordingSettings *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 RecordingSettings::initCopy(Machine *aParent, RecordingSettings *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 RecordingSettings::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 RecordingSettings::getEnabled(BOOL *enabled)
+{
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *enabled = m->bd->fEnabled;
+
+    return S_OK;
+}
+
+HRESULT RecordingSettings::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 RecordingSettings::getScreens(std::vector<ComPtr<IRecordingScreenSettings> > &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 RecordingSettings::getScreenSettings(ULONG uScreenId, ComPtr<IRecordingScreenSettings> &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 RecordingSettings::i_createScreenObj(RecordScreenSettingsMap &screenSettingsMap,
+                                       uint32_t uScreenId, const settings::RecordingScreenSettings &data)
+{
+    LogFlowThisFunc(("Screen %RU32\n", uScreenId));
+
+    if (screenSettingsMap.find(uScreenId) != screenSettingsMap.end())
+    {
+        AssertFailed();
+        return VERR_ALREADY_EXISTS;
+    }
+
+    int vrc = VINF_SUCCESS;
+
+    ComObjPtr<RecordingScreenSettings> recordingScreenSettings;
+    HRESULT rc = recordingScreenSettings.createObject();
+    if (SUCCEEDED(rc))
+    {
+        rc = recordingScreenSettings->init(this, uScreenId, data);
+        if (SUCCEEDED(rc))
+        {
+            try
+            {
+                screenSettingsMap[uScreenId] = recordingScreenSettings;
+            }
+            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 RecordingSettings::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<RecordingScreenSettings> 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 RecordingSettings::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<RecordingScreenSettings> 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 RecordingSettings::i_loadSettings(const settings::RecordingSettings &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::RecordingScreenMap::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 RecordingSettings::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 RecordingSettings::i_saveSettings(settings::RecordingSettings &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::RecordingScreenMap::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 RecordingSettings::i_rollback()
+{
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+    m->bd.rollback();
+}
+
+void RecordingSettings::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 RecordingSettings::i_copyFrom(RecordingSettings *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 RecordingSettings::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 RecordingSettings::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 RecordingSettings::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 RecordingSettings::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 RecordingSettings::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::RecordingScreenMap::const_iterator itScreen = m->bd->mapScreens.find(i);
+            if (itScreen == m->bd->mapScreens.end())
+            {
+                settings::RecordingScreenSettings 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 75360)
+++ /trunk/src/VBox/Main/src-server/SnapshotImpl.cpp	(revision 75361)
@@ -1082,6 +1082,6 @@
     if (FAILED(rc)) return rc;
 
-    unconst(mRecordSettings).createObject();
-    rc = mRecordSettings->initCopy(this, pMachine->mRecordSettings);
+    unconst(mRecordingSettings).createObject();
+    rc = mRecordingSettings->initCopy(this, pMachine->mRecordingSettings);
     if (FAILED(rc)) return rc;
 
@@ -1208,6 +1208,6 @@
     mBIOSSettings->init(this);
 
-    unconst(mRecordSettings).createObject();
-    mRecordSettings->init(this);
+    unconst(mRecordingSettings).createObject();
+    mRecordingSettings->init(this);
 
     unconst(mVRDEServer).createObject();
Index: /trunk/src/VBox/Main/xml/Settings.cpp
===================================================================
--- /trunk/src/VBox/Main/xml/Settings.cpp	(revision 75360)
+++ /trunk/src/VBox/Main/xml/Settings.cpp	(revision 75361)
@@ -2371,15 +2371,15 @@
 }
 
-RecordScreenSettings::RecordScreenSettings(void)
+RecordingScreenSettings::RecordingScreenSettings(void)
 {
     applyDefaults();
 }
 
-RecordScreenSettings::~RecordScreenSettings()
-{
-
-}
-
-void RecordScreenSettings::applyDefaults(void)
+RecordingScreenSettings::~RecordingScreenSettings()
+{
+
+}
+
+void RecordingScreenSettings::applyDefaults(void)
 {
     /*
@@ -2388,21 +2388,21 @@
 
     fEnabled            = false;
-    enmDest             = RecordDestination_File;
+    enmDest             = RecordingDestination_File;
     ulMaxTimeS          = 0;
     strOptions          = "";
     File.ulMaxSizeMB    = 0;
     File.strName        = "";
-    Video.enmCodec      = RecordVideoCodec_VP8;
+    Video.enmCodec      = RecordingVideoCodec_VP8;
     Video.ulWidth       = 1024;
     Video.ulHeight      = 768;
     Video.ulRate        = 512;
     Video.ulFPS         = 25;
-    Audio.enmAudioCodec = RecordAudioCodec_Opus;
+    Audio.enmAudioCodec = RecordingAudioCodec_Opus;
     Audio.cBits         = 16;
     Audio.cChannels     = 2;
     Audio.uHz           = 22050;
 
-    featureMap[RecordFeature_Video] = true;
-    featureMap[RecordFeature_Audio] = false;
+    featureMap[RecordingFeature_Video] = true;
+    featureMap[RecordingFeature_Audio] = false;
 }
 
@@ -2410,18 +2410,18 @@
  * Check if all settings have default values.
  */
-bool RecordScreenSettings::areDefaultSettings(void) const
+bool RecordingScreenSettings::areDefaultSettings(void) const
 {
     return    fEnabled            == false
-           && enmDest             == RecordDestination_File
+           && enmDest             == RecordingDestination_File
            && ulMaxTimeS          == 0
            && strOptions          == ""
            && File.ulMaxSizeMB    == 0
            && File.strName        == ""
-           && Video.enmCodec      == RecordVideoCodec_VP8
+           && Video.enmCodec      == RecordingVideoCodec_VP8
            && Video.ulWidth       == 1024
            && Video.ulHeight      == 768
            && Video.ulRate        == 512
            && Video.ulFPS         == 25
-           && Audio.enmAudioCodec == RecordAudioCodec_Opus
+           && Audio.enmAudioCodec == RecordingAudioCodec_Opus
            && Audio.cBits         == 16
            && Audio.cChannels     == 2
@@ -2429,7 +2429,7 @@
 }
 
-bool RecordScreenSettings::isFeatureEnabled(RecordFeature_T enmFeature) const
-{
-    RecordFeatureMap::const_iterator itFeature = featureMap.find(enmFeature);
+bool RecordingScreenSettings::isFeatureEnabled(RecordingFeature_T enmFeature) const
+{
+    RecordingFeatureMap::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 RecordScreenSettings::operator==(const RecordScreenSettings &d) const
+bool RecordingScreenSettings::operator==(const RecordingScreenSettings &d) const
 {
     return    fEnabled            == d.fEnabled
@@ -2465,5 +2465,5 @@
  * Constructor. Needs to set sane defaults which stand the test of time.
  */
-RecordSettings::RecordSettings()
+RecordingSettings::RecordingSettings()
 {
     applyDefaults();
@@ -2473,5 +2473,5 @@
  * Applies the default settings.
  */
-void RecordSettings::applyDefaults(void)
+void RecordingSettings::applyDefaults(void)
 {
     fEnabled = false;
@@ -2482,5 +2482,5 @@
     {
         /* Always add screen 0 to the default configuration. */
-        RecordScreenSettings screenSettings; /* Apply default settings for screen 0. */
+        RecordingScreenSettings 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 RecordSettings::areDefaultSettings() const
+bool RecordingSettings::areDefaultSettings() const
 {
     const bool fDefault =    fEnabled          == false
@@ -2502,5 +2502,5 @@
         return false;
 
-    RecordScreenMap::const_iterator itScreen = mapScreens.begin();
+    RecordingScreenMap::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 RecordSettings::operator==(const RecordSettings &d) const
+bool RecordingSettings::operator==(const RecordingSettings &d) const
 {
     if (this == &d)
@@ -2521,9 +2521,9 @@
         return false;
 
-    RecordScreenMap::const_iterator itScreen = mapScreens.begin();
+    RecordingScreenMap::const_iterator itScreen = mapScreens.begin();
     uint32_t i = 0;
     while (itScreen != mapScreens.end())
     {
-        RecordScreenMap::const_iterator itScreenThat = d.mapScreens.find(i);
+        RecordingScreenMap::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.recordSettings.fEnabled);
+            pelmHwChild->getAttributeValue("enabled",   hw.recordingSettings.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.recordSettings.mapScreens.size()); /* At least screen must be present. */
-            RecordScreenSettings &screen0Settings = hw.recordSettings.mapScreens[0];
+            Assert(hw.recordingSettings.mapScreens.size()); /* At least screen must be present. */
+            RecordingScreenSettings &screen0Settings = hw.recordingSettings.mapScreens[0];
 
             pelmHwChild->getAttributeValue("maxTime",   screen0Settings.ulMaxTimeS);
@@ -4433,8 +4433,8 @@
             {
                 /* Add screen i to config in any case. */
-                hw.recordSettings.mapScreens[i] = screen0Settings;
+                hw.recordingSettings.mapScreens[i] = screen0Settings;
 
                 if (u64VideoCaptureScreens & RT_BIT_64(i)) /* Screen i enabled? */
-                    hw.recordSettings.mapScreens[i].fEnabled = true;
+                    hw.recordingSettings.mapScreens[i].fEnabled = true;
             }
         }
@@ -5820,16 +5820,16 @@
     }
 
-    if (m->sv >= SettingsVersion_v1_14 && !hw.recordSettings.areDefaultSettings())
+    if (m->sv >= SettingsVersion_v1_14 && !hw.recordingSettings.areDefaultSettings())
     {
         xml::ElementNode *pelmVideoCapture = pelmHardware->createChild("VideoCapture");
 
-        if (hw.recordSettings.fEnabled)
-            pelmVideoCapture->setAttribute("enabled", hw.recordSettings.fEnabled);
+        if (hw.recordingSettings.fEnabled)
+            pelmVideoCapture->setAttribute("enabled", hw.recordingSettings.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;
-        RecordScreenMap::const_iterator itScreen = hw.recordSettings.mapScreens.begin();
-        while (itScreen != hw.recordSettings.mapScreens.end())
+        RecordingScreenMap::const_iterator itScreen = hw.recordingSettings.mapScreens.begin();
+        while (itScreen != hw.recordingSettings.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.recordSettings.mapScreens.size());
-        const RecordScreenMap::const_iterator itScreen0Settings = hw.recordSettings.mapScreens.find(0);
-        Assert(itScreen0Settings != hw.recordSettings.mapScreens.end());
+        Assert(hw.recordingSettings.mapScreens.size());
+        const RecordingScreenMap::const_iterator itScreen0Settings = hw.recordingSettings.mapScreens.find(0);
+        Assert(itScreen0Settings != hw.recordingSettings.mapScreens.end());
 
         if (itScreen0Settings->second.ulMaxTimeS)
@@ -7442,5 +7442,5 @@
             || hardwareMachine.enmLongMode != Hardware::LongMode_Legacy
             || machineUserData.ovIcon.size() > 0
-            || hardwareMachine.recordSettings.fEnabled)
+            || hardwareMachine.recordingSettings.fEnabled)
         {
             m->sv = SettingsVersion_v1_14;
