diff --git a/src/main.cpp b/src/main.cpp
index e39e70c..3f8d238 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -27,7 +27,9 @@
 #include "tray-menu.hpp"
 
 #include <ndn-cxx/face.hpp>
+#include <ndn-cxx/name.hpp>
 #include <ndn-cxx/util/scheduler.hpp>
+#include <ndn-cxx/mgmt/nfd/fib-entry.hpp>
 #include <ndn-cxx/mgmt/nfd/controller.hpp>
 #include <ndn-cxx/mgmt/nfd/status-dataset.hpp>
 
@@ -40,6 +42,7 @@
 public:
   Ncc()
     : m_isActive(true)
+    , m_localhopFibEntry(Name("/localhop/nfd"))
     , m_face(nullptr, m_keyChain)
     , m_controller(m_face, m_keyChain)
     , m_scheduler(m_face.getIoService())
@@ -70,8 +73,7 @@
       while (m_isActive) {
         try {
           while (m_isActive) {
-            m_controller.fetch<ndn::nfd::ForwarderGeneralStatusDataset>(bind(&Ncc::onStatusRetrieved, this, _1),
-                                                                        bind(&Ncc::onStatusTimeout, this));
+            requestNfdStatus();
             m_face.processEvents(time::milliseconds::zero(), true);
           }
         }
@@ -97,10 +99,25 @@
     emit m_tray.nfdActivityUpdate(true);
     emit m_forwarderStatusModel.onDataReceived(status);
 
+    m_controller.fetch<ndn::nfd::FibDataset>(bind(&Ncc::onFibStatusRetrieved, this, _1),
+                                             bind(&Ncc::onStatusTimeout, this));
+
     m_scheduler.scheduleEvent(time::seconds(6), bind(&Ncc::requestNfdStatus, this));
   }
 
   void
+  onFibStatusRetrieved(const std::vector<nfd::FibEntry>& status)
+  {
+    bool isConnectedToHub = false;
+    for (auto const& fibEntry : status) {
+      if (fibEntry.getPrefix() == m_localhopFibEntry) {
+        isConnectedToHub = true;
+      }
+    }
+    emit m_tray.connectivityUpdate(isConnectedToHub);
+  }
+
+  void
   onStatusTimeout()
   {
     emit m_tray.nfdActivityUpdate(false);
@@ -124,12 +141,13 @@
   requestNfdStatus()
   {
     m_controller.fetch<ndn::nfd::ForwarderGeneralStatusDataset>(bind(&Ncc::onStatusRetrieved, this, _1),
-                                                       bind(&Ncc::onStatusTimeout, this));
+                                                                bind(&Ncc::onStatusTimeout, this));
   }
 
 private:
   volatile bool m_isActive;
   boost::thread m_nfdThread;
+  const Name m_localhopFibEntry;
 
   KeyChain m_keyChain;
   Face m_face;
