Index: trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 46524)
+++ trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 46536)
@@ -388,4 +388,5 @@
 	src/widgets/UINameAndSystemEditor.h \
 	src/widgets/VBoxWarningPane.h \
+	src/widgets/UIFilmContainer.h \
 	src/widgets/graphics/UIGraphicsButton.h \
 	src/widgets/graphics/UIGraphicsRotatorButton.h \
@@ -635,4 +636,5 @@
 	src/widgets/UINameAndSystemEditor.cpp \
 	src/widgets/VBoxWarningPane.cpp \
+	src/widgets/UIFilmContainer.cpp \
 	src/widgets/graphics/UIGraphicsButton.cpp \
 	src/widgets/graphics/UIGraphicsRotatorButton.cpp \
Index: trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.cpp	(revision 46524)
+++ trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.cpp	(revision 46536)
@@ -121,4 +121,5 @@
     displayData.m_iVideoCaptureFrameRate = m_machine.GetVideoCaptureFps();
     displayData.m_iVideoCaptureBitRate = m_machine.GetVideoCaptureRate();
+    displayData.m_screens = m_machine.GetVideoCaptureScreens();
 
     /* Initialize other variables: */
@@ -167,4 +168,5 @@
     m_pEditorVideoCaptureFrameRate->setValue(displayData.m_iVideoCaptureFrameRate);
     m_pEditorVideoCaptureBitRate->setValue(displayData.m_iVideoCaptureBitRate);
+    m_pScrollerVideoCaptureScreens->setValue(displayData.m_screens);
 
     /* Polish page finally: */
@@ -209,4 +211,5 @@
     displayData.m_iVideoCaptureFrameRate = m_pEditorVideoCaptureFrameRate->value();
     displayData.m_iVideoCaptureBitRate = m_pEditorVideoCaptureBitRate->value();
+    displayData.m_screens = m_pScrollerVideoCaptureScreens->value();
 
     /* Cache display data: */
@@ -254,8 +257,32 @@
 
         /* Store Video Capture data: */
-        m_machine.SetVideoCaptureEnabled(displayData.m_fVideoCaptureEnabled);
-        /* Make sure machine is 'offline': */
-        if (isMachineOffline()) // TODO: Ask about isMachineSaved()
+        if (isMachineOnline())
         {
+            /* If Video Capture is *enabled* now: */
+            if (m_cache.base().m_fVideoCaptureEnabled)
+            {
+                /* All we can do is to *disable* it: */
+                if (!displayData.m_fVideoCaptureEnabled)
+                    m_machine.SetVideoCaptureEnabled(displayData.m_fVideoCaptureEnabled);
+            }
+            /* If Video Capture is *disabled* now: */
+            else
+            {
+                /* We should save all the options *before* Video Capture activation: */
+                m_machine.SetVideoCaptureFile(displayData.m_strVideoCaptureFilePath);
+                m_machine.SetVideoCaptureWidth(displayData.m_iVideoCaptureFrameWidth);
+                m_machine.SetVideoCaptureHeight(displayData.m_iVideoCaptureFrameHeight);
+                m_machine.SetVideoCaptureFps(displayData.m_iVideoCaptureFrameRate);
+                m_machine.SetVideoCaptureRate(displayData.m_iVideoCaptureBitRate);
+                m_machine.SetVideoCaptureScreens(displayData.m_screens);
+                /* Finally we should *enable* Video Capture if necessary: */
+                if (displayData.m_fVideoCaptureEnabled)
+                    m_machine.SetVideoCaptureEnabled(displayData.m_fVideoCaptureEnabled);
+            }
+        }
+        else
+        {
+            /* For 'offline' and 'saved' states the order is irrelevant: */
+            m_machine.SetVideoCaptureEnabled(displayData.m_fVideoCaptureEnabled);
             m_machine.SetVideoCaptureFile(displayData.m_strVideoCaptureFilePath);
             m_machine.SetVideoCaptureWidth(displayData.m_iVideoCaptureFrameWidth);
@@ -263,6 +290,5 @@
             m_machine.SetVideoCaptureFps(displayData.m_iVideoCaptureFrameRate);
             m_machine.SetVideoCaptureRate(displayData.m_iVideoCaptureBitRate);
-            QVector<BOOL> screens(m_machine.GetMonitorCount(), true);
-            m_machine.SetVideoCaptureScreens(screens);
+            m_machine.SetVideoCaptureScreens(displayData.m_screens);
         }
     }
@@ -440,6 +466,6 @@
 
     /* Video Capture tab: */
-    m_pContainerVideoCapture->setEnabled(isMachineOffline()); // TODO: Ask about isMachineSaved()
-    m_pContainerVideoCaptureOptions->setEnabled(m_pCheckboxVideoCapture->isChecked());
+    m_pContainerVideoCapture->setEnabled(isMachineInValidMode());
+    sltHandleVideoCaptureCheckboxToggle();
 }
 
@@ -478,4 +504,7 @@
     checkVRAMRequirements();
 
+    /* Update Video Capture tab screen count: */
+    updateVideoCaptureScreenCount();
+
     /* Revalidate if possible: */
     if (m_pValidator)
@@ -493,7 +522,19 @@
     checkVRAMRequirements();
 
+    /* Update Video Capture tab screen count: */
+    updateVideoCaptureScreenCount();
+
     /* Revalidate if possible: */
     if (m_pValidator)
         m_pValidator->revalidate();
+}
+
+void UIMachineSettingsDisplay::sltHandleVideoCaptureCheckboxToggle()
+{
+    /* Video Capture options should be enabled only if:
+     * 1. Machine is in 'offline' or 'saved' state and check-box is checked,
+     * 2. Machine is in 'online' state, check-box is checked, and video recording is *disabled* currently. */
+    m_pContainerVideoCaptureOptions->setEnabled(((isMachineOffline() || isMachineSaved()) && m_pCheckboxVideoCapture->isChecked()) ||
+                                                (isMachineOnline()  && !m_cache.base().m_fVideoCaptureEnabled && m_pCheckboxVideoCapture->isChecked()));
 }
 
@@ -651,4 +692,7 @@
 void UIMachineSettingsDisplay::prepareVideoCaptureTab()
 {
+    /* Prepare Video Capture checkbox: */
+    connect(m_pCheckboxVideoCapture, SIGNAL(toggled(bool)), this, SLOT(sltHandleVideoCaptureCheckboxToggle()));
+
     /* Prepare filepath selector: */
     m_pEditorVideoCapturePath->setMode(VBoxFilePathSelectorWidget::Mode_File_Save);
@@ -809,4 +853,12 @@
 }
 
+void UIMachineSettingsDisplay::updateVideoCaptureScreenCount()
+{
+    /* Update copy of the cached item to get the desired result: */
+    QVector<BOOL> screens = m_cache.base().m_screens;
+    screens.resize(m_pEditorVideoScreenCount->value());
+    m_pScrollerVideoCaptureScreens->setValue(screens);
+}
+
 /* static */
 void UIMachineSettingsDisplay::lookForCorrespondingPreset(QComboBox *pWhere, const QVariant &whichData)
Index: trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.h	(revision 46524)
+++ trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.h	(revision 46536)
@@ -73,5 +73,6 @@
                (m_iVideoCaptureFrameHeight == other.m_iVideoCaptureFrameHeight) &&
                (m_iVideoCaptureFrameRate == other.m_iVideoCaptureFrameRate) &&
-               (m_iVideoCaptureBitRate == other.m_iVideoCaptureBitRate);
+               (m_iVideoCaptureBitRate == other.m_iVideoCaptureBitRate) &&
+               (m_screens == other.m_screens);
     }
 
@@ -104,4 +105,5 @@
     int m_iVideoCaptureFrameRate;
     int m_iVideoCaptureBitRate;
+    QVector<BOOL> m_screens;
 };
 typedef UISettingsCache<UIDataSettingsMachineDisplay> UICacheSettingsMachineDisplay;
@@ -167,4 +169,5 @@
 
     /* Handlers: Video Capture stuff: */
+    void sltHandleVideoCaptureCheckboxToggle();
     void sltHandleVideoCaptureFrameSizeComboboxChange();
     void sltHandleVideoCaptureFrameWidthEditorChange();
@@ -190,4 +193,5 @@
     /* Helpers: Video Capture stuff: */
     void lookForCorrespondingSizePreset();
+    void updateVideoCaptureScreenCount();
     static void lookForCorrespondingPreset(QComboBox *pWhere, const QVariant &whichData);
     static int calculateBitRate(int iFrameWidth, int iFrameHeight, int iFrameRate, int iQuality);
Index: trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.ui
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.ui	(revision 46524)
+++ trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.ui	(revision 46536)
@@ -596,4 +596,24 @@
              <item row="4" column="3">
               <widget class="QLabel" name="m_pLabelVideoCaptureBitRateUnits"/>
+             </item>
+             <item row="6" column="0">
+              <widget class="QLabel" name="m_pLabelVideoCaptureScreens">
+               <property name="text">
+                <string>&amp;Screens:</string>
+               </property>
+               <property name="alignment">
+                <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignTop</set>
+               </property>
+               <property name="buddy">
+                <cstring>m_pScrollerVideoCaptureScreens</cstring>
+               </property>
+              </widget>
+             </item>
+             <item row="6" column="1" colspan="3">
+              <widget class="UIFilmContainer" name="m_pScrollerVideoCaptureScreens">
+               <property name="whatsThis">
+                <string></string>
+               </property>
+              </widget>
              </item>
             </layout>
@@ -639,4 +659,9 @@
    <container>1</container>
   </customwidget>
+  <customwidget>
+   <class>UIFilmContainer</class>
+   <extends>QWidget</extends>
+   <header>UIFilmContainer.h</header>
+  </customwidget>
  </customwidgets>
  <resources/>
@@ -648,10 +673,4 @@
    <slot>setEnabled(bool)</slot>
   </connection>
-  <connection>
-   <sender>m_pCheckboxVideoCapture</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>m_pContainerVideoCaptureOptions</receiver>
-   <slot>setEnabled(bool)</slot>
-  </connection>
  </connections>
 </ui>
Index: trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.cpp	(revision 46536)
+++ trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.cpp	(revision 46536)
@@ -0,0 +1,240 @@
+/* $Id$ */
+/** @file
+ *
+ * VBox frontends: Qt4 GUI ("VirtualBox"):
+ * UIFilmContainer class implementation
+ */
+
+/*
+ * Copyright (C) 2013 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.
+ */
+
+/* Qt includes: */
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QScrollArea>
+#include <QScrollBar>
+#include <QCheckBox>
+#include <QPainter>
+
+/* GUI includes: */
+#include "UIFilmContainer.h"
+
+UIFilmContainer::UIFilmContainer(QWidget *pParent /*= 0*/)
+    : QWidget(pParent)
+    , m_pMainLayout(0)
+    , m_pScroller(0)
+{
+    /* Prepare: */
+    prepare();
+}
+
+QVector<BOOL> UIFilmContainer::value() const
+{
+    /* Enumerate all the existing widgets: */
+    QVector<BOOL> value;
+    foreach (UIFilm *pWidget, m_widgets)
+        value << static_cast<BOOL>(pWidget->checked());
+
+    /* Return value: */
+    return value;
+}
+
+void UIFilmContainer::setValue(const QVector<BOOL> &value)
+{
+    /* Cleanup viewport/widget list: */
+    delete m_pScroller->takeWidget();
+    m_widgets.clear();
+
+    /* Create widget: */
+    if (QWidget *pWidget = new QWidget)
+    {
+        /* Create viewport layout: */
+        if (QHBoxLayout *pWidgetLayout = new QHBoxLayout(pWidget))
+        {
+            /* Configure viewport layout: */
+            pWidgetLayout->setMargin(4);
+            pWidgetLayout->setSpacing(4);
+            /* Create new widgets according passed vector: */
+            for (int iScreenIndex = 0; iScreenIndex < value.size(); ++iScreenIndex)
+            {
+                /* Create new widget: */
+                UIFilm *pWidget = new UIFilm(iScreenIndex, value[iScreenIndex]);
+                /* Add widget into the widget list: */
+                m_widgets << pWidget;
+                /* Add widget into the viewport layout: */
+                pWidgetLayout->addWidget(pWidget);
+            }
+        }
+        /* Assign scroller with widget: */
+        m_pScroller->setWidget(pWidget);
+        /* Reconfigure scroller widget: */
+        m_pScroller->widget()->setAutoFillBackground(false);
+        /* And adjust that widget geometry: */
+        QSize msh = m_pScroller->widget()->minimumSizeHint();
+        int iMinimumHeight = msh.height();
+        m_pScroller->viewport()->setFixedHeight(iMinimumHeight);
+    }
+}
+
+void UIFilmContainer::prepare()
+{
+    /* Prepare layout: */
+    prepareLayout();
+
+    /* Prepare scroller: */
+    prepareScroller();
+
+    /* Append with 'default' value: */
+    setValue(QVector<BOOL>() << true);
+}
+
+void UIFilmContainer::prepareLayout()
+{
+    /* Create layout: */
+    m_pMainLayout = new QVBoxLayout(this);
+
+    /* Configure layout: */
+    m_pMainLayout->setMargin(0);
+    m_pMainLayout->setSpacing(0);
+}
+
+void UIFilmContainer::prepareScroller()
+{
+    /* Create scroller: */
+    m_pScroller = new QScrollArea;
+
+    /* Configure scroller: */
+    m_pScroller->setFrameShape(QFrame::NoFrame);
+    m_pScroller->viewport()->setAutoFillBackground(false);
+    m_pScroller->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
+    m_pScroller->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
+    m_pMainLayout->addWidget(m_pScroller);
+}
+
+UIFilm::UIFilm(int iScreenIndex, BOOL fEnabled, QWidget *pParent /*= 0*/)
+    : QIWithRetranslateUI<QWidget>(pParent)
+    , m_iScreenIndex(iScreenIndex)
+    , m_fWasEnabled(fEnabled)
+    , m_pCheckBox(0)
+{
+    /* Prepare: */
+    prepare();
+}
+
+bool UIFilm::checked() const
+{
+    /* Is the check-box currently checked? */
+    return m_pCheckBox->isChecked();
+}
+
+void UIFilm::retranslateUi()
+{
+    /* Translate check-box: */
+    m_pCheckBox->setText(tr("Screen %1").arg(m_iScreenIndex + 1));
+    m_pCheckBox->setToolTip(tr("Enable video recording for screen %1.").arg(m_iScreenIndex + 1));
+}
+
+void UIFilm::prepare()
+{
+    /* Prepare layout: */
+    prepareLayout();
+
+    /* Prepare check-box: */
+    prepareCheckBox();
+
+    /* Translate finally: */
+    retranslateUi();
+}
+
+void UIFilm::prepareLayout()
+{
+    /* Create layout: */
+    m_pMainLayout = new QVBoxLayout(this);
+
+    /* Configure layout: */
+#ifdef Q_WS_MAC
+    m_pMainLayout->setContentsMargins(10, 10, 15, 10);
+#else /* Q_WS_MAC */
+    m_pMainLayout->setContentsMargins(10, 10, 10, 10);
+#endif /* !Q_WS_MAC */
+
+    /* Add strech: */
+    m_pMainLayout->addStretch();
+}
+
+void UIFilm::prepareCheckBox()
+{
+    /* Create check-box: */
+    m_pCheckBox = new QCheckBox;
+    m_pCheckBox->setChecked(static_cast<bool>(m_fWasEnabled));
+
+    /* Configure font: */
+    QFont currentFont = m_pCheckBox->font();
+#ifdef Q_WS_MAC
+    currentFont.setPointSize(currentFont.pointSize() - 2);
+#else /* Q_WS_MAC */
+    currentFont.setPointSize(currentFont.pointSize() - 1);
+#endif /* !Q_WS_MAC */
+    m_pCheckBox->setFont(currentFont);
+
+    /* Insert check-box into layout: */
+    m_pMainLayout->insertWidget(0, m_pCheckBox);
+}
+
+QSize UIFilm::minimumSizeHint() const
+{
+    /* Return 16:9 aspect-ratio msh: */
+    QSize msh = QWidget::minimumSizeHint();
+    return QSize(msh.width(), (double)9 / (double)16 * msh.width());
+}
+
+void UIFilm::paintEvent(QPaintEvent*)
+{
+    /* Compose painting rectangle: */
+    const QRect rect(1, 1, width() - 2, height() - 2);
+
+    /* Create painter: */
+    QPainter painter(this);
+    painter.setRenderHint(QPainter::Antialiasing);
+
+    /* Configure painter clipping: */
+    QPainterPath path;
+    int iDiameter = 6;
+    QSizeF arcSize(2 * iDiameter, 2 * iDiameter);
+    path.moveTo(rect.x() + iDiameter, rect.y());
+    path.arcTo(QRectF(path.currentPosition(), arcSize).translated(-iDiameter, 0), 90, 90);
+    path.lineTo(path.currentPosition().x(), rect.height() - iDiameter);
+    path.arcTo(QRectF(path.currentPosition(), arcSize).translated(0, -iDiameter), 180, 90);
+    path.lineTo(rect.width() - iDiameter, path.currentPosition().y());
+    path.arcTo(QRectF(path.currentPosition(), arcSize).translated(-iDiameter, -2 * iDiameter), 270, 90);
+    path.lineTo(path.currentPosition().x(), rect.y() + iDiameter);
+    path.arcTo(QRectF(path.currentPosition(), arcSize).translated(-2 * iDiameter, -iDiameter), 0, 90);
+    path.closeSubpath();
+
+    /* Get current background color: */
+    QColor currentColor(palette().color(backgroundRole()));
+
+    /* Fill with background: */
+    painter.setClipPath(path);
+    QColor newColor1 = currentColor;
+    QColor newColor2 = currentColor.darker(125);
+    QLinearGradient headerGradient(rect.topLeft(), rect.bottomRight());
+    headerGradient.setColorAt(0, newColor1);
+    headerGradient.setColorAt(1, newColor2);
+    painter.fillRect(rect, headerGradient);
+
+    /* Stroke with border: */
+    QColor strokeColor = currentColor.darker(150);
+    painter.setClipping(false);
+    painter.strokePath(path, strokeColor);
+}
+
Index: trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.h	(revision 46536)
+++ trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.h	(revision 46536)
@@ -0,0 +1,101 @@
+/** @file
+ *
+ * VBox frontends: Qt4 GUI ("VirtualBox"):
+ * UIFilmContainer class declaration
+ */
+
+/*
+ * Copyright (C) 2013 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 __UIFilmContainer_h__
+#define __UIFilmContainer_h__
+
+/* Qt includes: */
+#include <QWidget>
+
+/* GUI includes: */
+#include "QIWithRetranslateUI.h"
+
+/* Other VBox includes: */
+#include <VBox/com/com.h>
+
+/* Forward declarations: */
+class QScrollArea;
+class UIFilm;
+class QVBoxLayout;
+class QCheckBox;
+
+/* Transparent QScrollArea container for UIFilm widgets: */
+class UIFilmContainer : public QWidget
+{
+    Q_OBJECT;
+
+public:
+
+    /* Constructor: */
+    UIFilmContainer(QWidget *pParent = 0);
+
+    /* API: Value stuff: */
+    QVector<BOOL> value() const;
+    void setValue(const QVector<BOOL> &value);
+
+private:
+
+    /* Helpers: Prepare stuff: */
+    void prepare();
+    void prepareLayout();
+    void prepareScroller();
+
+    /* Variables: */
+    QVBoxLayout *m_pMainLayout;
+    QScrollArea *m_pScroller;
+    QList<UIFilm*> m_widgets;
+};
+
+/* QWidget item for UIFilmContainer: */
+class UIFilm : public QIWithRetranslateUI<QWidget>
+{
+    Q_OBJECT;
+
+public:
+
+    /* Constructor: */
+    UIFilm(int iScreenIndex, BOOL fEnabled, QWidget *pParent = 0);
+
+    /* API: Cehck-box stuff: */
+    bool checked() const;
+
+protected:
+
+    /* Helper: Translate stuff: */
+    void retranslateUi();
+
+private:
+
+    /* Helper: Prepare stuff: */
+    void prepare();
+    void prepareLayout();
+    void prepareCheckBox();
+
+    /* Handler: Layut stuff: */
+    QSize minimumSizeHint() const;
+
+    /* Handlers: Paint stuff: */
+    void paintEvent(QPaintEvent *pEvent);
+
+    /* Variables: */
+    int m_iScreenIndex;
+    BOOL m_fWasEnabled;
+    QVBoxLayout *m_pMainLayout;
+    QCheckBox *m_pCheckBox;
+};
+#endif /* __UIFilmContainer_h__ */
