Index: trunk/src/VBox/Frontends/VirtualBox/src/monitor/resource/UIResourceMonitor.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/monitor/resource/UIResourceMonitor.cpp	(revision 83465)
+++ trunk/src/VBox/Frontends/VirtualBox/src/monitor/resource/UIResourceMonitor.cpp	(revision 83466)
@@ -70,4 +70,6 @@
     UIResourceMonitorItem();
     bool operator==(const UIResourceMonitorItem& other) const;
+    bool isWithGuestAdditions();
+
     QUuid    m_VMuid;
     QString  m_strVMName;
@@ -94,5 +96,5 @@
 
     CMachineDebugger m_comDebugger;
-
+    CGuest           m_comGuest;
 private:
 
@@ -130,5 +132,5 @@
     UIResourceMonitorProxyModel(QObject *parent = 0);
     void dataUpdate();
-    void setColumnShown(const QVector<bool>& columnShown);
+    void setColumnVisible(const QMap<int, bool>& columnVisible);
 
 protected:
@@ -139,5 +141,5 @@
 private:
 
-    QVector<bool> m_columnShown;
+    QMap<int, bool> m_columnVisible;
 
 };
@@ -234,5 +236,8 @@
         CConsole comConsole = comSession.GetConsole();
         if (!comConsole.isNull())
+        {
+            m_comGuest = comConsole.GetGuest();
             m_comDebugger = comConsole.GetDebugger();
+        }
     }
 }
@@ -285,4 +290,11 @@
 }
 
+bool UIResourceMonitorItem::isWithGuestAdditions()
+{
+    if (m_comGuest.isNull())
+        return false;
+    return m_comGuest.GetAdditionsStatus(m_comGuest.GetAdditionsRunLevel());
+}
+
 
 /*********************************************************************************************************************************
@@ -323,13 +335,11 @@
 {
     Q_UNUSED(sourceParent);
-    if (iSourceColumn >= m_columnShown.size())
-        return true;
-    return m_columnShown[iSourceColumn];
-}
-
-void UIResourceMonitorProxyModel::setColumnShown(const QVector<bool>& columnShown)
+    return m_columnVisible.value(iSourceColumn, true);
+}
+
+void UIResourceMonitorProxyModel::setColumnVisible(const QMap<int, bool>& columnVisible)
 {
     emit layoutAboutToBeChanged();
-    m_columnShown = columnShown;
+    m_columnVisible = columnVisible;
     invalidateFilter();
     emit layoutChanged();
@@ -720,5 +730,5 @@
         connect(m_pModel, &UIResourceMonitorModel::sigDataUpdate, this, &UIResourceMonitorWidget::sltHandleDataUpdate);
 
-        m_pProxyModel->setColumnShown(m_columnShown);
+        m_pProxyModel->setColumnVisible(m_columnVisible);
     }
 }
@@ -743,6 +753,5 @@
         pLayout->addWidget(pCheckBox);
         pCheckBox->setData(i);
-        if (i < m_columnShown.size())
-            pCheckBox->setChecked(m_columnShown[i]);
+        pCheckBox->setChecked(columnVisible(i));
         if (i == (int)VMResouceMonitorColumn_Name)
             pCheckBox->setEnabled(false);
@@ -789,13 +798,8 @@
 {
     QStringList hiddenColumnList = gEDataManager->VMResourceMonitorHiddenColumnList();
-    m_columnShown.resize(VMResouceMonitorColumn_Max);
-    for (int i = 0; i < m_columnShown.size(); ++i)
-        m_columnShown[i] = true;
+    for (int i = (int)VMResouceMonitorColumn_Name; i < (int)VMResouceMonitorColumn_Max; ++i)
+        m_columnVisible[i] = true;
     foreach(const QString& strColumn, hiddenColumnList)
-    {
-        VMResouceMonitorColumn enmColumn = gpConverter->fromInternalString<VMResouceMonitorColumn>(strColumn);
-        if ((int)enmColumn < m_columnShown.size())
-            m_columnShown[(int)enmColumn] = false;
-    }
+        setColumnVisible((int)gpConverter->fromInternalString<VMResouceMonitorColumn>(strColumn), false);
 }
 
@@ -803,7 +807,7 @@
 {
     QStringList hiddenColumnList;
-    for (int i = 0; i < m_columnShown.size(); ++i)
-    {
-        if (!m_columnShown[i])
+    for (int i = 0; i < m_columnVisible.size(); ++i)
+    {
+        if (!columnVisible(i))
             hiddenColumnList << gpConverter->toInternalString((VMResouceMonitorColumn) i);
     }
@@ -844,8 +848,5 @@
     if (!pSender)
         return;
-    int iColumnId = pSender->data().toInt();
-    if (iColumnId >= m_columnShown.size())
-        return;
-    setColumnShown(iColumnId, fChecked);
+    setColumnVisible(pSender->data().toInt(), fChecked);
 }
 
@@ -856,13 +857,16 @@
 }
 
-void UIResourceMonitorWidget::setColumnShown(int iColumnId, bool fShown)
-{
-    if (iColumnId >= m_columnShown.size())
+void UIResourceMonitorWidget::setColumnVisible(int iColumnId, bool fVisible)
+{
+    if (m_columnVisible.contains(iColumnId) && m_columnVisible[iColumnId] == fVisible)
         return;
-    if (m_columnShown[iColumnId] == fShown)
-        return;
-    m_columnShown[iColumnId] = fShown;
+    m_columnVisible[iColumnId] = fVisible;
     if (m_pProxyModel)
-        m_pProxyModel->setColumnShown(m_columnShown);
+        m_pProxyModel->setColumnVisible(m_columnVisible);
+}
+
+bool UIResourceMonitorWidget::columnVisible(int iColumnId) const
+{
+    return m_columnVisible.value(iColumnId, true);
 }
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/monitor/resource/UIResourceMonitor.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/monitor/resource/UIResourceMonitor.h	(revision 83465)
+++ trunk/src/VBox/Frontends/VirtualBox/src/monitor/resource/UIResourceMonitor.h	(revision 83466)
@@ -78,5 +78,7 @@
 private:
 
-    void setColumnShown(int iColumnId, bool fShown);
+    void setColumnVisible(int iColumnId, bool fVisible);
+    bool columnVisible(int iColumnId) const;
+
     /** @name Prepare/cleanup cascade.
       * @{ */
@@ -104,5 +106,6 @@
         UIResourceMonitorModel      *m_pModel;
         QVector<QString>             m_columnCaptions;
-        QVector<bool>                m_columnShown;
+        /* The key is the column id (VMResouceMonitorColumn) and value is true if the column is visible. */
+        QMap<int, bool>              m_columnVisible;
     /** @} */
     QFrame* m_pColumnSelectionMenu;
