Index: /trunk/src/VBox/Main/MachineDebuggerImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/MachineDebuggerImpl.cpp	(revision 443)
+++ /trunk/src/VBox/Main/MachineDebuggerImpl.cpp	(revision 444)
@@ -28,4 +28,5 @@
 #include <VBox/csam.h>
 #include <VBox/vm.h>
+#include <VBox/tm.h>
 #include <VBox/err.h>
 #include <VBox/hwaccm.h>
@@ -83,4 +84,5 @@
     csamEnabledQueued = ~0;
     mLogEnabledQueued = ~0;
+    mVirtualTimeRateQueued = ~0;
     fFlushMode = false;
     setReady(true);
@@ -481,4 +483,64 @@
 
 /**
+ * Returns the current virtual time rate.
+ * 
+ * @returns COM status code.
+ * @param   pct     Where to store the rate.
+ */
+STDMETHODIMP MachineDebugger::COMGETTER(VirtualTimeRate)(ULONG *pct)
+{
+    if (!pct)
+        return E_POINTER;
+
+    AutoLock lock(this);
+    CHECK_READY();
+
+    Console::SafeVMPtrQuiet pVM (mParent);
+    if (pVM.isOk())
+        *pct = TMVirtualGetWarpDrive(pVM);
+    else
+        *pct = 100;
+    return S_OK;
+}
+
+/**
+ * Returns the current virtual time rate.
+ * 
+ * @returns COM status code.
+ * @param   pct     Where to store the rate.
+ */
+STDMETHODIMP MachineDebugger::COMSETTER(VirtualTimeRate)(ULONG pct)
+{
+    if (pct < 2 || pct > 20000)
+        return E_INVALIDARG;
+
+    AutoLock lock(this);
+    CHECK_READY();
+
+    if (!fFlushMode)
+    {
+        // check if the machine is running
+        MachineState_T machineState;
+        mParent->COMGETTER(State)(&machineState);
+        if (machineState != MachineState_Running)
+        {
+            // queue the request
+            mVirtualTimeRateQueued = pct;
+            return S_OK;
+        }
+    }
+
+    Console::SafeVMPtr pVM (mParent);
+    CheckComRCReturnRC (pVM.rc());
+
+    int vrc = TMVirtualSetWarpDrive(pVM, pct);
+    if (VBOX_FAILURE(vrc))
+    {
+        /** @todo handle error code. */
+    }
+    return S_OK;
+}
+
+/**
  * Hack for getting the VM handle.
  * This is only temporary (promise) while prototyping the debugger.
@@ -546,4 +608,9 @@
         mLogEnabledQueued = ~0;
     }
+    if (mVirtualTimeRateQueued != ~0)
+    {
+        COMSETTER(VirtualTimeRate)(mVirtualTimeRateQueued);
+        mVirtualTimeRateQueued = ~0;
+    }
     fFlushMode = false;
 }
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 443)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 444)
@@ -5888,5 +5888,5 @@
     <interface
         name="IMachineDebugger" extends="$unknown"
-        uuid="837c19ca-c4a4-479b-81e4-362d441f8f94"
+        uuid="288da658-74fa-4877-ab5c-dafdad19a1cd"
     >
         <method name="resetStats">
@@ -5930,4 +5930,11 @@
                 Flag indicating whether the VM is currently making use of CPU hardware
                 virtualization extensions
+            </desc>
+        </attribute>
+
+        <attribute name="VirtualTimeRate" type="unsigned long">
+            <desc>
+                The rate at which the virtual time runs expressed as a percentage. 
+                The accepted range is 2% to 20000%.
             </desc>
         </attribute>
Index: /trunk/src/VBox/Main/include/MachineDebuggerImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineDebuggerImpl.h	(revision 443)
+++ /trunk/src/VBox/Main/include/MachineDebuggerImpl.h	(revision 444)
@@ -67,4 +67,6 @@
     STDMETHOD(COMSETTER(LogEnabled))(BOOL enable);
     STDMETHOD(COMGETTER(HWVirtExEnabled))(BOOL *enabled);
+    STDMETHOD(COMGETTER(VirtualTimeRate))(ULONG *pct);
+    STDMETHOD(COMSETTER(VirtualTimeRate))(ULONG pct);
     STDMETHOD(COMGETTER(VM))(ULONG64 *vm);
 
@@ -89,4 +91,5 @@
     int csamEnabledQueued;
     int mLogEnabledQueued;
+    uint32_t mVirtualTimeRateQueued;
     bool fFlushMode;
 };
