diff --git a/src/xboxdrv_thread.cpp b/src/xboxdrv_thread.cpp
index ca44a59..f1f305b 100644
--- a/src/xboxdrv_thread.cpp
+++ b/src/xboxdrv_thread.cpp
@@ -130,6 +130,12 @@ XboxdrvThread::controller_loop(const Options& opts)
       if (m_controller->read(msg, opts.verbose, m_timeout))
       {
         m_oldrealmsg = msg;
+
+        // output current Xbox gamepad state to stdout
+        if (!opts.silent)
+        {
+          std::cout << msg << std::endl;
+        }
       }
       else
       {
@@ -142,12 +148,6 @@ XboxdrvThread::controller_loop(const Options& opts)
       int msec_delta = this_time - last_time;
       last_time = this_time;
 
-      // output current Xbox gamepad state to stdout
-      if (!opts.silent)
-      { // FIXME: only print stuff on change
-        std::cout << msg << std::endl;
-      }
-
       m_processor->send(msg, msec_delta);
 
       if (opts.rumble)