Index: trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp	(revision 31698)
+++ trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp	(revision 31759)
@@ -3884,5 +3884,5 @@
         public:
             RemindEvent (ulong aRealBPP)
-                : mRealBPP (aRealBPP) {}
+                : VBoxAsyncEvent(100), mRealBPP (aRealBPP) {}
             void handle()
             {
Index: trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 31698)
+++ trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 31759)
@@ -4900,4 +4900,47 @@
  */
 
+VBoxAsyncEvent::VBoxAsyncEvent(uint uDelay)
+    : QEvent((QEvent::Type)VBoxDefs::AsyncEventType)
+    , m_uDelay(uDelay)
+{
+}
+
+void VBoxAsyncEvent::post()
+{
+    UIAsyncEventPoster::post(this);
+}
+
+uint VBoxAsyncEvent::delay() const
+{
+    return m_uDelay;
+}
+
+UIAsyncEventPoster* UIAsyncEventPoster::m_spInstance = 0;
+
+void UIAsyncEventPoster::post(VBoxAsyncEvent *pAsyncEvent)
+{
+    if (!m_spInstance)
+        new UIAsyncEventPoster(pAsyncEvent);
+}
+
+UIAsyncEventPoster::UIAsyncEventPoster(VBoxAsyncEvent *pAsyncEvent)
+    : m_pAsyncEvent(pAsyncEvent)
+{
+    m_spInstance = this;
+    QTimer::singleShot(m_pAsyncEvent->delay(), this, SLOT(sltPostAsyncEvent()));
+}
+
+UIAsyncEventPoster::~UIAsyncEventPoster()
+{
+    m_spInstance = 0;
+}
+
+void UIAsyncEventPoster::sltPostAsyncEvent()
+{
+    if (m_pAsyncEvent)
+        QApplication::postEvent(&vboxGlobal(), m_pAsyncEvent);
+    m_pAsyncEvent = 0;
+    deleteLater();
+}
 
 /**
Index: trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h	(revision 31698)
+++ trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h	(revision 31759)
@@ -816,36 +816,60 @@
 ////////////////////////////////////////////////////////////////////////////////
 
-/**
- *  Generic asyncronous event.
- *
- *  This abstract class is intended to provide a conveinent way to execute
- *  code on the main GUI thread asynchronously to the calling party. This is
- *  done by putting necessary actions to the #handle() function in a subclass
- *  and then posting an instance of the subclass using #post(). The instance
- *  must be allocated on the heap using the <tt>new</tt> operation and will be
- *  automatically deleted after processing. Note that if you don't call #post()
- *  on the created instance, you have to delete it yourself.
- */
+/* Generic asyncronous event.
+ * This abstract class is intended to provide a conveinent way
+ * to execute code on the main GUI thread asynchronously to the calling party.
+ * This is done by putting necessary actions to the handle() function
+ * in a subclass and then posting an instance of the subclass using post().
+ * The instance must be allocated on the heap and will be automatically deleted after processing. */
 class VBoxAsyncEvent : public QEvent
 {
 public:
 
-    VBoxAsyncEvent() : QEvent ((QEvent::Type) VBoxDefs::AsyncEventType) {}
-
-    /**
-     *  Worker function. Gets executed on the GUI thread when the posted event
-     *  is processed by the main event loop.
-     */
+    /* VBoxAsyncEvent constructor: */
+    VBoxAsyncEvent(uint uDelay = 0);
+
+    /* Worker function. Gets executed on the GUI thread when
+     * the posted event is processed by the main event loop. */
     virtual void handle() = 0;
 
-    /**
-     *  Posts this event to the main event loop.
-     *  The caller loses ownership of this object after this method returns
-     *  and must not delete the object.
-     */
-    void post()
-    {
-        QApplication::postEvent (&vboxGlobal(), this);
-    }
+    /* Posts this event to the main event loop. The caller loses ownership of
+     * this object after this method returns and must not delete the object. */
+    void post();
+
+    /* Returns delay for this event: */
+    uint delay() const;
+
+private:
+
+    uint m_uDelay;
+};
+
+/* Asyncronous event poster.
+ * This class is used to post async event into VBoxGlobal event handler
+ * taking into account delay set during async event creation procedure. */
+class UIAsyncEventPoster : public QObject
+{
+    Q_OBJECT;
+
+public:
+
+    /* Async event poster creator: */
+    static void post(VBoxAsyncEvent *pAsyncEvent);
+
+protected:
+
+    /* Constructor/destructor: */
+    UIAsyncEventPoster(VBoxAsyncEvent *pAsyncEvent);
+    ~UIAsyncEventPoster();
+
+private slots:
+
+    /* Async event poster: */
+    void sltPostAsyncEvent();
+
+private:
+
+    static UIAsyncEventPoster *m_spInstance;
+    VBoxAsyncEvent *m_pAsyncEvent;
 };
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBufferQImage.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBufferQImage.cpp	(revision 31698)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBufferQImage.cpp	(revision 31759)
@@ -193,5 +193,5 @@
         public:
             RemindEvent (ulong aRealBPP)
-                : mRealBPP (aRealBPP) {}
+                : VBoxAsyncEvent(100), mRealBPP (aRealBPP) {}
             void handle()
             {
