Index: libs/libmythui/mythmainwindow.cpp
===================================================================
--- libs/libmythui/mythmainwindow.cpp	(revision 23233)
+++ libs/libmythui/mythmainwindow.cpp	(working copy)
@@ -102,6 +102,16 @@
     MediaPlayCallback playFn;
 };
 
+void ImpreciseTimer::run(void)
+{
+    while (!m_ShouldQuit)
+    {
+        usleep(m_Usec);
+        if (m_Running)
+            emit timeout();
+    }
+}
+
 class MythMainWindowPrivate
 {
   public:
@@ -149,7 +159,7 @@
 
     QObject *sysEventHandler;
 
-    QTimer *drawTimer;
+    ImpreciseTimer *drawTimer;
     QVector<MythScreenStack *> stackList;
     MythScreenStack *mainStack;
 
@@ -478,9 +488,10 @@
     d->gestureTimer = new QTimer(this);
     connect(d->gestureTimer, SIGNAL(timeout()), this, SLOT(mouseTimeout()));
 
-    d->drawTimer = new QTimer(this);
+    d->drawTimer = new ImpreciseTimer(this);
     connect(d->drawTimer, SIGNAL(timeout()), this, SLOT(animate()));
-    d->drawTimer->start(1000 / 70);
+    d->drawTimer->start();
+    d->drawTimer->startTimer(70);
 
     d->AllowInput = true;
 
@@ -962,7 +973,7 @@
     d->paintwin->raise();
     d->paintwin->show();
 
-    d->drawTimer->start(1000 / 70);
+    d->drawTimer->startTimer(70);
 }
 
 void MythMainWindow::Show(void)
Index: libs/libmythui/mythmainwindow_internal.h
===================================================================
--- libs/libmythui/mythmainwindow_internal.h	(revision 23233)
+++ libs/libmythui/mythmainwindow_internal.h	(working copy)
@@ -2,6 +2,7 @@
 #define MYTHMAINWINDOW_INT
 
 #include <QWidget>
+#include <QThread>
 
 class MythMainWindow;
 class MythMainWindowPrivate;
@@ -52,4 +53,27 @@
     MythMainWindowPrivate *d;
 };
 
+class ImpreciseTimer : public QThread
+{
+    Q_OBJECT
+
+  public:
+    ImpreciseTimer(QObject *parent) : QThread(parent), m_Running(false),
+        m_ShouldQuit(false), m_Usec(100000) {}
+    ~ImpreciseTimer() { m_ShouldQuit = true; }
+    void stop(void) { m_Running = false; }
+    void startTimer(double framerate) { m_Usec = 1000000 / framerate; m_Running = true; }
+
+  protected:
+    void run(void);
+
+  signals:
+    void timeout(void);
+
+  private:
+    volatile bool m_Running;
+    volatile bool m_ShouldQuit;
+    volatile useconds_t m_Usec;
+};
+
 #endif
