diff --git a/qt5/main.cpp b/qt5/main.cpp
index 81a7ba6..52c720c 100644
--- a/qt5/main.cpp
+++ b/qt5/main.cpp
@@ -19,6 +19,7 @@
 
 #include <QtQml/QQmlApplicationEngine>
 #include <QtWidgets/QApplication>
+#include <QtWidgets/QPushButton>
 #include <QtQml/QQmlContext>
 
 #include "forwarder-status.hpp"
@@ -26,6 +27,7 @@
 #include "tray-menu.hpp"
 
 #include <ndn-cxx/face.hpp>
+#include <ndn-cxx/util/scheduler.hpp>
 #include <boost/thread.hpp>
 
 namespace ndn {
@@ -35,12 +37,13 @@
 public:
   Ncc()
     : m_isActive(true)
-    , m_forwarderModel(m_face)
+    , m_scheduler(m_face.getIoService())
     , m_fibModel(m_face)
+    , m_tray(m_engine.rootContext())
   {
     QQmlContext* context = m_engine.rootContext();
 
-    context->setContextProperty("forwarderModel", &m_forwarderModel);
+    context->setContextProperty("forwarderModel", &m_forwarderStatusModel);
     context->setContextProperty("fibModel", &m_fibModel);
     context->setContextProperty("trayModel", &m_tray);
 
@@ -63,12 +66,12 @@
         try {
           while (m_isActive) {
             m_face.expressInterest(Interest("/localhost/nfd/status"),
-                                   bind(&Ncc::onStatusRetrieved, this),
+                                   bind(&Ncc::onStatusRetrieved, this, _2),
                                    bind(&Ncc::onStatusTimeout, this));
             m_face.processEvents(time::milliseconds::zero(), true);
           }
         }
-        catch (const std::exception&) {
+        catch (const std::exception&e) {
           emit m_tray.nfdActivityUpdate(false);
 #ifdef BOOST_THREAD_USES_CHRONO
           boost::this_thread::sleep_for(retryTimeout);
@@ -84,9 +87,12 @@
   }
 
   void
-  onStatusRetrieved()
+  onStatusRetrieved(const Data& data)
   {
     emit m_tray.nfdActivityUpdate(true);
+    emit m_forwarderStatusModel.onDataReceived(data.shared_from_this());
+
+    m_scheduler.scheduleEvent(time::seconds(6), bind(&Ncc::requestNfdStatus, this));
   }
 
   void
@@ -95,9 +101,7 @@
     emit m_tray.nfdActivityUpdate(false);
 
     std::cerr << "Should not really happen, most likely a serious problem" << std::endl;
-    m_face.expressInterest(Interest("/localhost/nfd/status"),
-                           bind(&Ncc::onStatusRetrieved, this),
-                           bind(&Ncc::onStatusTimeout, this));
+    m_scheduler.scheduleEvent(time::seconds(6), bind(&Ncc::requestNfdStatus, this));
   }
 
   void
@@ -105,19 +109,32 @@
   {
     m_isActive = false;
     m_face.shutdown();
+    m_scheduler.cancelAllEvents();
     m_nfdThread.interrupt();
     m_nfdThread.join();
   }
 
 private:
+  void
+  requestNfdStatus()
+  {
+    Interest interest("/localhost/nfd/status");
+    interest.setMustBeFresh(true);
+    m_face.expressInterest(interest,
+                           bind(&Ncc::onStatusRetrieved, this, _2),
+                           bind(&Ncc::onStatusTimeout, this));
+  }
+
+private:
   volatile bool m_isActive;
   boost::thread m_nfdThread;
 
   Face m_face;
+  Scheduler m_scheduler;
 
   QQmlApplicationEngine m_engine;
 
-  ForwarderStatusModel m_forwarderModel;
+  ForwarderStatusModel m_forwarderStatusModel;
   FibStatusModel m_fibModel;
   TrayMenu m_tray;
 };
