Index: /trunk/include/VBox/dbggui.h
===================================================================
--- /trunk/include/VBox/dbggui.h	(revision 103463)
+++ /trunk/include/VBox/dbggui.h	(revision 103464)
@@ -69,5 +69,5 @@
     DECLCALLBACKMEMBER(void, pfnAdjustRelativePos,(PDBGGUI pGui, int x, int y, unsigned cx, unsigned cy));
     /** @copydoc DBGGuiShowStatistics */
-    DECLCALLBACKMEMBER(int, pfnShowStatistics,(PDBGGUI pGui, const char *pszFilter, const char *pszExpand));
+    DECLCALLBACKMEMBER(int, pfnShowStatistics,(PDBGGUI pGui, const char *pszFilter, const char *pszExpand, const char *pszConfig));
     /** @copydoc DBGGuiShowCommandLine */
     DECLCALLBACKMEMBER(int, pfnShowCommandLine,(PDBGGUI pGui));
@@ -152,6 +152,8 @@
  * @param   pszFilter   Filter pattern.
  * @param   pszExpand   Expand pattern.
+ * @param   pszConfig   Advanced filter configuration (min/max/regexp on
+ *                      sub-trees) and more.
  */
-DBGDECL(int) DBGGuiShowStatistics(PDBGGUI pGui, const char *pszFilter, const char *pszExpand);
+DBGDECL(int) DBGGuiShowStatistics(PDBGGUI pGui, const char *pszFilter, const char *pszExpand, const char *pszConfig);
 
 /**
Index: /trunk/src/VBox/Debugger/VBoxDbg.cpp
===================================================================
--- /trunk/src/VBox/Debugger/VBoxDbg.cpp	(revision 103463)
+++ /trunk/src/VBox/Debugger/VBoxDbg.cpp	(revision 103464)
@@ -223,10 +223,12 @@
  * @param   pszFilter   Filter pattern.
  * @param   pszExpand   Expand pattern.
- */
-DBGDECL(int) DBGGuiShowStatistics(PDBGGUI pGui, const char *pszFilter, const char *pszExpand)
+ * @param   pszConfig   Advanced filter configuration (min/max/regexp on
+ *                      sub-trees) and more.
+ */
+DBGDECL(int) DBGGuiShowStatistics(PDBGGUI pGui, const char *pszFilter, const char *pszExpand, const char *pszConfig)
 {
     AssertReturn(pGui, VERR_INVALID_PARAMETER);
     AssertMsgReturn(pGui->u32Magic == DBGGUI_MAGIC, ("u32Magic=%#x\n", pGui->u32Magic), VERR_INVALID_PARAMETER);
-    return pGui->pVBoxDbgGui->showStatistics(pszFilter, pszExpand);
+    return pGui->pVBoxDbgGui->showStatistics(pszFilter, pszExpand, pszConfig);
 }
 
Index: /trunk/src/VBox/Debugger/VBoxDbgGui.cpp
===================================================================
--- /trunk/src/VBox/Debugger/VBoxDbgGui.cpp	(revision 103463)
+++ /trunk/src/VBox/Debugger/VBoxDbgGui.cpp	(revision 103464)
@@ -182,5 +182,5 @@
 
 int
-VBoxDbgGui::showStatistics(const char *pszFilter, const char *pszExpand)
+VBoxDbgGui::showStatistics(const char *pszFilter, const char *pszExpand, const char *pszConfig)
 {
     if (!m_pDbgStats)
@@ -189,4 +189,5 @@
                                        pszFilter && *pszFilter ? pszFilter :  "*",
                                        pszExpand && *pszExpand ? pszExpand : NULL,
+                                       pszConfig && *pszConfig ? pszConfig : NULL,
                                        2, m_pParent);
         connect(m_pDbgStats, SIGNAL(destroyed(QObject *)), this, SLOT(notifyChildDestroyed(QObject *)));
Index: /trunk/src/VBox/Debugger/VBoxDbgGui.h
===================================================================
--- /trunk/src/VBox/Debugger/VBoxDbgGui.h	(revision 103463)
+++ /trunk/src/VBox/Debugger/VBoxDbgGui.h	(revision 103464)
@@ -105,6 +105,8 @@
      * @param   pszFilter   Filter pattern.
      * @param   pszExpand   Expand pattern.
-     */
-    int showStatistics(const char *pszFilter, const char *pszExpand);
+     * @param   pszConfig   Advanced filter configuration (min/max/regexp on
+     *                      sub-trees) and more.
+     */
+    int showStatistics(const char *pszFilter, const char *pszExpand, const char *pszConfig);
 
     /**
Index: /trunk/src/VBox/Debugger/VBoxDbgStatsQt.cpp
===================================================================
--- /trunk/src/VBox/Debugger/VBoxDbgStatsQt.cpp	(revision 103463)
+++ /trunk/src/VBox/Debugger/VBoxDbgStatsQt.cpp	(revision 103464)
@@ -144,4 +144,26 @@
             && pRegexName == NULL;
     }
+
+    void reset(void)
+    {
+        uMinValue = 0;
+        uMaxValue = UINT64_MAX;
+        if (pRegexName)
+        {
+            delete pRegexName;
+            pRegexName = NULL;
+        }
+    }
+
+    struct VBoxGuiStatsFilterData *duplicate(void) const
+    {
+        VBoxGuiStatsFilterData *pDup = new VBoxGuiStatsFilterData();
+        pDup->uMinValue = uMinValue;
+        pDup->uMaxValue = uMaxValue;
+        if (pRegexName)
+            pDup->pRegexName = new QRegularExpression(*pRegexName);
+        return pDup;
+    }
+
 } VBoxGuiStatsFilterData;
 
@@ -254,4 +276,6 @@
     bool m_fUpdateInsertRemove;
 
+    /** Container indexed by node path and giving a filter config in return. */
+    QHash<QString, VBoxGuiStatsFilterData *> m_FilterHash;
 
 public:
@@ -259,8 +283,10 @@
      * Constructor.
      *
-     * @param   a_pParent       The parent object. See QAbstractItemModel in the Qt
-     *                          docs for details.
-     */
-    VBoxDbgStatsModel(QObject *a_pParent);
+     * @param   a_pszConfig Advanced filter configuration (min/max/regexp on
+     *                      sub-trees) and more.
+     * @param   a_pParent   The parent object. See QAbstractItemModel in the Qt
+     *                      docs for details.
+     */
+    VBoxDbgStatsModel(const char *a_pszConfig, QObject *a_pParent);
 
     /**
@@ -358,12 +384,14 @@
 
     /** Creates the root node. */
-    static PDBGGUISTATSNODE createRootNode(void);
+    PDBGGUISTATSNODE createRootNode(void);
 
     /** Creates and insert a node under the given parent. */
-    static PDBGGUISTATSNODE createAndInsertNode(PDBGGUISTATSNODE pParent, const char *pszName, size_t cchName, uint32_t iPosition);
+    PDBGGUISTATSNODE createAndInsertNode(PDBGGUISTATSNODE pParent, const char *pchName, size_t cchName, uint32_t iPosition,
+                                         const char *pchFullName, size_t cchFullName);
 
     /** Creates and insert a node under the given parent with correct Qt
      * signalling. */
-    PDBGGUISTATSNODE createAndInsert(PDBGGUISTATSNODE pParent, const char *pszName, size_t cchName, uint32_t iPosition);
+    PDBGGUISTATSNODE createAndInsert(PDBGGUISTATSNODE pParent, const char *pszName, size_t cchName, uint32_t iPosition,
+                                     const char *pchFullName, size_t cchFullName);
 
     /**
@@ -410,5 +438,5 @@
      * @param   pszName     The name of the tree element to update.
      */
-    PDBGGUISTATSNODE updateCallbackHandleOutOfOrder(const char *pszName);
+    PDBGGUISTATSNODE updateCallbackHandleOutOfOrder(const char * const pszName);
 
     /**
@@ -648,4 +676,12 @@
     }
 
+protected:
+    /**
+     * Populates m_FilterHash with configurations from @a a_pszConfig.
+     *
+     * @note This currently only work at construction time.
+     */
+    void loadFilterConfig(const char *a_pszConfig);
+
 public:
 
@@ -676,8 +712,11 @@
      * @param   a_pDbgGui       Pointer to the debugger gui object.
      * @param   a_rPatStr       The selection pattern.
-     * @param   a_pParent       The parent object. NULL is fine.
+     * @param   a_pszConfig     Advanced filter configuration (min/max/regexp on
+     *                          sub-trees) and more.
      * @param   a_pVMM          The VMM function table.
-     */
-    VBoxDbgStatsModelVM(VBoxDbgGui *a_pDbgGui, QString &a_rPatStr, QObject *a_pParent, PCVMMR3VTABLE a_pVMM);
+     * @param   a_pParent       The parent object. NULL is fine and default.
+     */
+    VBoxDbgStatsModelVM(VBoxDbgGui *a_pDbgGui, QString &a_rPatStr, const char *a_pszConfig,
+                        PCVMMR3VTABLE a_pVMM, QObject *a_pParent = NULL);
 
     /** Destructor */
@@ -688,4 +727,10 @@
 
 protected:
+    typedef struct
+    {
+        PDBGGUISTATSNODE     pRoot;
+        VBoxDbgStatsModelVM *pThis;
+    } CreateNewTreeCallbackArgs_T;
+
     /**
      * Enumeration callback used by createNewTree.
@@ -726,4 +771,7 @@
     virtual ~VBoxDbgStatsSortFileProxyModel()
     {}
+
+    /** Gets the unused-rows visibility status. */
+    bool isShowingUnusedRows() const { return m_fShowUnusedRows; }
 
     /** Sets whether or not to show unused rows (all zeros). */
@@ -999,8 +1047,16 @@
 
 
-VBoxDbgStatsModel::VBoxDbgStatsModel(QObject *a_pParent)
-    : QAbstractItemModel(a_pParent),
-    m_pRoot(NULL), m_iUpdateChild(UINT32_MAX), m_pUpdateParent(NULL), m_cchUpdateParent(0)
-{
+VBoxDbgStatsModel::VBoxDbgStatsModel(const char *a_pszConfig, QObject *a_pParent)
+    : QAbstractItemModel(a_pParent)
+    , m_pRoot(NULL)
+    , m_iUpdateChild(UINT32_MAX)
+    , m_pUpdateParent(NULL)
+    , m_cchUpdateParent(0)
+{
+    /*
+     * Parse the advance filtering string as best as we can and
+     * populate the map of pending node filter configs with it.
+     */
+    loadFilterConfig(a_pszConfig);
 }
 
@@ -1088,5 +1144,5 @@
 
 
-/*static*/ PDBGGUISTATSNODE
+PDBGGUISTATSNODE
 VBoxDbgStatsModel::createRootNode(void)
 {
@@ -1100,4 +1156,5 @@
     pRoot->cchName = 1;
     pRoot->enmState = kDbgGuiStatsNodeState_kRoot;
+    pRoot->pFilter = m_FilterHash.take("/");
 
     return pRoot;
@@ -1105,6 +1162,7 @@
 
 
-/*static*/ PDBGGUISTATSNODE
-VBoxDbgStatsModel::createAndInsertNode(PDBGGUISTATSNODE pParent, const char *pszName, size_t cchName, uint32_t iPosition)
+PDBGGUISTATSNODE
+VBoxDbgStatsModel::createAndInsertNode(PDBGGUISTATSNODE pParent, const char *pchName, size_t cchName, uint32_t iPosition,
+                                       const char *pchFullName, size_t cchFullName)
 {
     /*
@@ -1117,7 +1175,13 @@
     pNode->enmType = STAMTYPE_INVALID;
     pNode->pszUnit = "";
-    pNode->pszName = (char *)RTMemDupEx(pszName, cchName, 1);
+    pNode->pszName = (char *)RTMemDupEx(pchName, cchName, 1);
     pNode->cchName = cchName;
     pNode->enmState = kDbgGuiStatsNodeState_kVisible;
+    if (m_FilterHash.size() > 0 && cchFullName > 0)
+    {
+        char *pszTmp = RTStrDupN(pchFullName, cchFullName);
+        pNode->pFilter = m_FilterHash.take(QString(pszTmp));
+        RTStrFree(pszTmp);
+    }
 
     /*
@@ -1164,13 +1228,14 @@
 
 PDBGGUISTATSNODE
-VBoxDbgStatsModel::createAndInsert(PDBGGUISTATSNODE pParent, const char *pszName, size_t cchName, uint32_t iPosition)
+VBoxDbgStatsModel::createAndInsert(PDBGGUISTATSNODE pParent, const char *pszName, size_t cchName, uint32_t iPosition,
+                                   const char *pchFullName, size_t cchFullName)
 {
     PDBGGUISTATSNODE pNode;
     if (m_fUpdateInsertRemove)
-        pNode = createAndInsertNode(pParent, pszName, cchName, iPosition);
+        pNode = createAndInsertNode(pParent, pszName, cchName, iPosition, pchFullName, cchFullName);
     else
     {
         beginInsertRows(createIndex(pParent->iSelf, 0, pParent), iPosition, iPosition);
-        pNode = createAndInsertNode(pParent, pszName, cchName, iPosition);
+        pNode = createAndInsertNode(pParent, pszName, cchName, iPosition, pchFullName, cchFullName);
         endInsertRows();
     }
@@ -1736,5 +1801,5 @@
 
 PDBGGUISTATSNODE
-VBoxDbgStatsModel::updateCallbackHandleOutOfOrder(const char *pszName)
+VBoxDbgStatsModel::updateCallbackHandleOutOfOrder(const char * const pszName)
 {
 #if defined(VBOX_STRICT) || defined(LOG_ENABLED)
@@ -1801,5 +1866,5 @@
         {
             /* first child */
-            pNode = createAndInsert(pNode, pszSubName, cchSubName, 0);
+            pNode = createAndInsert(pNode, pszSubName, cchSubName, 0, pszName, pszEnd - pszName);
             AssertReturn(pNode, NULL);
         }
@@ -1827,5 +1892,5 @@
                     if (iStart > iLast)
                     {
-                        pNode = createAndInsert(pNode, pszSubName, cchSubName, iStart);
+                        pNode = createAndInsert(pNode, pszSubName, cchSubName, iStart, pszName, pszEnd - pszName);
                         AssertReturn(pNode, NULL);
                         break;
@@ -1837,5 +1902,5 @@
                     if (iLast < iStart)
                     {
-                        pNode = createAndInsert(pNode, pszSubName, cchSubName, i);
+                        pNode = createAndInsert(pNode, pszSubName, cchSubName, i, pszName, pszEnd - pszName);
                         AssertReturn(pNode, NULL);
                         break;
@@ -1922,5 +1987,5 @@
             ||  pNode->papChildren[pNode->cChildren - 1]->pszName[cchCur])
         {
-            pNode = createAndInsert(pNode, pszCur, pszNext - pszCur, pNode->cChildren);
+            pNode = createAndInsert(pNode, pszCur, pszNext - pszCur, pNode->cChildren, pszName, pszNext - pszName);
             AssertReturn(pNode, NULL);
         }
@@ -3093,4 +3158,83 @@
 
 
+void
+VBoxDbgStatsModel::loadFilterConfig(const char *a_pszConfig)
+{
+    /* Skip empty stuff. */
+    if (!a_pszConfig)
+        return;
+    a_pszConfig = RTStrStripL(a_pszConfig);
+    if (!*a_pszConfig)
+        return;
+
+    /*
+     * The list elements are separated by colons.  Paths must start with '/' to
+     * be accepted as such.
+     *
+     * Example: "/;min=123;max=9348;name='.*cmp.*';/CPUM;"
+     */
+    char * const pszDup  = RTStrDup(a_pszConfig);
+    AssertReturnVoid(pszDup);
+    char        *psz     = pszDup;
+    const char  *pszPath = NULL;
+    VBoxGuiStatsFilterData Data;
+    do
+    {
+        /* Split out this item, strip it and move 'psz' to the next one. */
+        char *pszItem = psz;
+        psz = strchr(psz, ';');
+        if (psz)
+            *psz++ = '\0';
+        else
+            psz = strchr(psz, '\0');
+        pszItem = RTStrStrip(pszItem);
+
+        /* Is it a path or a variable=value pair. */
+        if (*pszItem == '/')
+        {
+            if (pszPath && !Data.isAllDefaults())
+                m_FilterHash[QString(pszPath)] = Data.duplicate();
+            Data.reset();
+            pszPath = pszItem;
+        }
+        else
+        {
+            /* Split out the value, if any.  */
+            char *pszValue = strchr(pszItem, '=');
+            if (pszValue)
+            {
+                *pszValue++ = '\0';
+                pszValue = RTStrStripL(pszValue);
+                RTStrStripR(pszItem);
+
+                /* Switch on the variable name. */
+                uint64_t const uValue = RTStrToUInt64(pszValue);
+                if (strcmp(pszItem, "min") == 0)
+                    Data.uMinValue = uValue;
+                else if (strcmp(pszItem, "max") == 0)
+                    Data.uMaxValue = uValue != 0 ? uValue : UINT64_MAX;
+                else if (strcmp(pszItem, "name") == 0)
+                {
+                    if (!Data.pRegexName)
+                        Data.pRegexName = new QRegularExpression(QString(pszValue));
+                    else
+                        Data.pRegexName->setPattern(QString(pszValue));
+                    if (!Data.pRegexName->isValid())
+                    {
+                        delete Data.pRegexName;
+                        Data.pRegexName = NULL;
+                    }
+                }
+            }
+            /* else: Currently no variables w/o values. */
+        }
+    } while (*psz != '\0');
+
+    /* Add the final entry, if any. */
+    if (pszPath && !Data.isAllDefaults())
+        m_FilterHash[QString(pszPath)] = Data.duplicate();
+
+    RTStrFree(pszDup);
+}
 
 
@@ -3108,6 +3252,7 @@
 
 
-VBoxDbgStatsModelVM::VBoxDbgStatsModelVM(VBoxDbgGui *a_pDbgGui, QString &a_rPatStr, QObject *a_pParent, PCVMMR3VTABLE a_pVMM)
-    : VBoxDbgStatsModel(a_pParent), VBoxDbgBase(a_pDbgGui), m_pVMM(a_pVMM)
+VBoxDbgStatsModelVM::VBoxDbgStatsModelVM(VBoxDbgGui *a_pDbgGui, QString &a_rPatStr, const char *a_pszConfig,
+                                         PCVMMR3VTABLE a_pVMM, QObject *a_pParent /*= NULL*/)
+    : VBoxDbgStatsModel(a_pszConfig, a_pParent), VBoxDbgBase(a_pDbgGui), m_pVMM(a_pVMM)
 {
     /*
@@ -3154,5 +3299,5 @@
                                            const char *pszUnit, STAMVISIBILITY enmVisibility, const char *pszDesc, void *pvUser)
 {
-    PDBGGUISTATSNODE pRoot = (PDBGGUISTATSNODE)pvUser;
+    CreateNewTreeCallbackArgs_T * const pArgs = (CreateNewTreeCallbackArgs_T *)pvUser;
     Log3(("createNewTreeCallback: %s\n", pszName));
     RT_NOREF(enmUnit);
@@ -3170,5 +3315,5 @@
      */
     AssertReturn(*pszName == '/' && pszName[1] != '/', VERR_INTERNAL_ERROR);
-    PDBGGUISTATSNODE pNode = pRoot;
+    PDBGGUISTATSNODE pNode = pArgs->pRoot;
     const char *pszCur = pszName + 1;
     while (*pszCur)
@@ -3185,5 +3330,5 @@
             ||  pNode->papChildren[pNode->cChildren - 1]->pszName[cchCur])
         {
-            pNode = createAndInsertNode(pNode, pszCur, pszNext - pszCur, UINT32_MAX);
+            pNode = pArgs->pThis->createAndInsertNode(pNode, pszCur, pszNext - pszCur, UINT32_MAX, pszName, pszNext - pszName);
             if (!pNode)
                 return VERR_NO_MEMORY;
@@ -3209,5 +3354,6 @@
     if (pRoot)
     {
-        int rc = stamEnum(a_rPatStr, createNewTreeCallback, pRoot);
+        CreateNewTreeCallbackArgs_T Args = { pRoot, this };
+        int rc = stamEnum(a_rPatStr, createNewTreeCallback, &Args);
         if (RT_SUCCESS(rc))
             return pRoot;
@@ -3878,5 +4024,5 @@
      */
     QModelIndex Idx = m_pCurMenu ? m_CurIndex : currentIndex();
-    if (Idx.isValid())
+    if (!Idx.isValid())
         Idx = myGetRootIndex();
     Idx = m_pProxyModel->mapToSource(Idx);
@@ -4006,10 +4152,5 @@
     if (m_Data.isAllDefaults())
         return NULL;
-    VBoxGuiStatsFilterData *pRet = new VBoxGuiStatsFilterData();
-    pRet->uMinValue  = m_Data.uMinValue;
-    pRet->uMaxValue  = m_Data.uMaxValue;
-    if (m_Data.pRegexName)
-        pRet->pRegexName = new QRegularExpression(*m_Data.pRegexName);
-    return pRet;
+    return m_Data.duplicate();
 }
 
@@ -4087,5 +4228,5 @@
 
 VBoxDbgStats::VBoxDbgStats(VBoxDbgGui *a_pDbgGui, const char *pszFilter /*= NULL*/, const char *pszExpand /*= NULL*/,
-                           unsigned uRefreshRate/* = 0*/, QWidget *pParent/* = NULL*/)
+                           const char *pszConfig /*= NULL*/, unsigned uRefreshRate/* = 0*/, QWidget *pParent/* = NULL*/)
     : VBoxDbgBaseWindow(a_pDbgGui, pParent, "Statistics")
     , m_PatStr(pszFilter), m_pPatCB(NULL), m_uRefreshRate(0), m_pTimer(NULL), m_pView(NULL)
@@ -4145,8 +4286,9 @@
      * Create the tree view and setup the layout.
      */
-    VBoxDbgStatsModelVM *pModel = new VBoxDbgStatsModelVM(a_pDbgGui, m_PatStr, NULL, a_pDbgGui->getVMMFunctionTable());
+    VBoxDbgStatsModelVM *pModel = new VBoxDbgStatsModelVM(a_pDbgGui, m_PatStr, pszConfig, a_pDbgGui->getVMMFunctionTable());
 #ifdef VBOXDBG_WITH_SORTED_AND_FILTERED_STATS
     VBoxDbgStatsSortFileProxyModel *pProxyModel = new VBoxDbgStatsSortFileProxyModel(this);
     m_pView = new VBoxDbgStatsView(a_pDbgGui, pModel, pProxyModel, this);
+    pCheckBox->setCheckState(pProxyModel->isShowingUnusedRows() ? Qt::Checked : Qt::Unchecked);
 #else
     m_pView = new VBoxDbgStatsView(a_pDbgGui, pModel, NULL, this);
Index: /trunk/src/VBox/Debugger/VBoxDbgStatsQt.h
===================================================================
--- /trunk/src/VBox/Debugger/VBoxDbgStatsQt.h	(revision 103463)
+++ /trunk/src/VBox/Debugger/VBoxDbgStatsQt.h	(revision 103464)
@@ -244,9 +244,12 @@
      * @param   pszExpand       Initial expansion pattern. NULL means nothing is
      *                          expanded.
+     * @param   pszConfig       Advanced filter configuration (min/max/regexp on
+     *                          sub-trees) and more.
+     *
      * @param   uRefreshRate    The refresh rate. 0 means not to refresh and is the default.
      * @param   pParent         Parent widget.
      */
     VBoxDbgStats(VBoxDbgGui *a_pDbgGui, const char *pszFilter = NULL, const char *pszExpand = NULL,
-                 unsigned uRefreshRate = 0, QWidget *pParent = NULL);
+                 const char *pszConfig = NULL, unsigned uRefreshRate = 0, QWidget *pParent = NULL);
 
     /** Destructor. */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UICommon.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UICommon.cpp	(revision 103463)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UICommon.cpp	(revision 103464)
@@ -595,4 +595,15 @@
             m_strDbgStatisticsFilter = arguments.at(i).section('=', 1);
         }
+        else if (!::strcmp(arg, "--statistics-config") || !::strcmp(arg, "--stats-config"))
+        {
+            enmOptType = OptType_VMRunner;
+            if (++i < argc)
+                m_strDbgStatisticsConfig = arguments.at(i);
+        }
+        else if (!::strncmp(arg, RT_STR_TUPLE("--statistics-config=")) || !::strncmp(arg, RT_STR_TUPLE("--stats-config=")))
+        {
+            enmOptType = OptType_VMRunner;
+            m_strDbgStatisticsConfig = arguments.at(i).section('=', 1);
+        }
         else if (!::strcmp(arg, "-no-debug") || !::strcmp(arg, "--no-debug"))
         {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UICommon.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UICommon.h	(revision 103463)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UICommon.h	(revision 103464)
@@ -308,4 +308,6 @@
         /** Returns the --statistics-filter value. */
         QString const getDebuggerStatisticsFilter() const { return m_strDbgStatisticsFilter; }
+        /** Returns the --statistics-config value. */
+        QString const getDebuggerStatisticsConfig() const { return m_strDbgStatisticsConfig; }
 
         /** VBoxDbg module handle. */
@@ -732,6 +734,8 @@
         /** Pattern of statistics to expand when opening the viewer. */
         QString      m_strDbgStatisticsExpand;
-        /** The statistics viewer filter. */
+        /** The statistics viewer main filter pattern. */
         QString      m_strDbgStatisticsFilter;
+        /** The statistics viewer advanced filter configuration and possibly more. */
+        QString      m_strDbgStatisticsConfig;
 
         /** VBoxDbg module handle. */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/main.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/main.cpp	(revision 103463)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/main.cpp	(revision 103464)
@@ -286,4 +286,5 @@
         "  --statistics-expand <pat>  expand the matching statistics (can be repeated)\n"
         "  --statistics-filter <pat>  statistics filter\n"
+        "  --statistics-config <str>  statistics configuration\n"
         "  --no-debug                 disable the GUI debug menu and debug windows\n"
         "  --start-paused             start the VM in the paused state\n"
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 103463)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 103464)
@@ -2300,7 +2300,8 @@
 void UISession::dbgShowStatistics()
 {
+    const QByteArray &filterBytes = uiCommon().getDebuggerStatisticsFilter().toUtf8();
     const QByteArray &expandBytes = uiCommon().getDebuggerStatisticsExpand().toUtf8();
-    const QByteArray &filterBytes = uiCommon().getDebuggerStatisticsFilter().toUtf8();
-    m_pDbgGuiVT->pfnShowStatistics(m_pDbgGui, filterBytes.constData(), expandBytes.constData());
+    const QByteArray &configBytes = uiCommon().getDebuggerStatisticsConfig().toUtf8();
+    m_pDbgGuiVT->pfnShowStatistics(m_pDbgGui, filterBytes.constData(), expandBytes.constData(), configBytes.constData());
 }
 
