Index: /trunk/src/VBox/Main/include/GuestImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/GuestImpl.h	(revision 56469)
+++ /trunk/src/VBox/Main/include/GuestImpl.h	(revision 56470)
@@ -95,4 +95,5 @@
     HRESULT i_setStatistic(ULONG aCpuId, GUESTSTATTYPE enmType, ULONG aVal);
     BOOL i_isPageFusionEnabled();
+    void i_setCpuCount(uint32_t aCpus) { mCpus = aCpus; }
     static HRESULT i_setErrorStatic(HRESULT aResultCode, const Utf8Str &aText)
     {
@@ -209,7 +210,11 @@
     uint64_t                        mNetStatLastTs;
     ULONG                           mCurrentGuestStat[GUESTSTATTYPE_MAX];
+    ULONG                           mCurrentGuestCpuUserStat[VMM_MAX_CPU_COUNT];
+    ULONG                           mCurrentGuestCpuKernelStat[VMM_MAX_CPU_COUNT];
+    ULONG                           mCurrentGuestCpuIdleStat[VMM_MAX_CPU_COUNT];
     ULONG                           mVmValidStats;
     BOOL                            mCollectVMMStats;
     BOOL                            mfPageFusionEnabled;
+    uint32_t                        mCpus;
 
     const ComObjPtr<Console>        mParent;
Index: /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp	(revision 56469)
+++ /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp	(revision 56470)
@@ -496,4 +496,8 @@
         rc = mGuest->init(this);
         AssertComRCReturnRC(rc);
+    
+        ULONG cCpus = 1;
+        rc = mMachine->COMGETTER(CPUCount)(&cCpus);
+        mGuest->i_setCpuCount(cCpus);
 
         unconst(mKeyboard).createObject();
Index: /trunk/src/VBox/Main/src-client/GuestImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/GuestImpl.cpp	(revision 56469)
+++ /trunk/src/VBox/Main/src-client/GuestImpl.cpp	(revision 56470)
@@ -104,4 +104,7 @@
         mCurrentGuestStat[i] = 0;
     mVmValidStats = pm::VMSTATMASK_NONE;
+    RT_ZERO(mCurrentGuestCpuUserStat);
+    RT_ZERO(mCurrentGuestCpuKernelStat);
+    RT_ZERO(mCurrentGuestCpuIdleStat);
 
     mMagic = GUEST_MAGIC;
@@ -113,4 +116,6 @@
     if (SUCCEEDED(hr))
         hr = mEventSource->init();
+
+    mCpus = 1;
 
 #ifdef VBOX_WITH_DRAG_AND_DROP
@@ -702,4 +707,24 @@
     if (enmType >= GUESTSTATTYPE_MAX)
         return E_INVALIDARG;
+
+    if (aCpuId < VMM_MAX_CPU_COUNT)
+    {
+        ULONG *paCpuStats;
+        switch (enmType)
+        {
+            case GUESTSTATTYPE_CPUUSER:   paCpuStats = mCurrentGuestCpuUserStat;   break;
+            case GUESTSTATTYPE_CPUKERNEL: paCpuStats = mCurrentGuestCpuKernelStat; break;
+            case GUESTSTATTYPE_CPUIDLE:   paCpuStats = mCurrentGuestCpuIdleStat;   break;
+            default:                      paCpuStats = NULL;                       break;
+        }
+        if (paCpuStats)
+        {
+            paCpuStats[aCpuId] = aVal;
+            aVal = 0;
+            for (uint32_t i = 0; i < mCpus && i < VMM_MAX_CPU_COUNT; i++)
+                aVal += paCpuStats[i];
+            aVal /= mCpus;
+        }
+    }
 
     mCurrentGuestStat[enmType] = aVal;
@@ -1080,3 +1105,2 @@
     /** @todo Add VMMDEV_GUEST_SUPPORTS_GUEST_HOST_WINDOW_MAPPING */
 }
-
