diff --git a/qt5/fib-status.hpp b/qt5/fib-status.hpp
new file mode 100644
index 0000000..0ebd80e
--- /dev/null
+++ b/qt5/fib-status.hpp
@@ -0,0 +1,113 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
+ *
+ * This file is part of NFD Control Center.  See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NFD Control Center is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with NFD
+ * Control Center, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NCC_FIB_STATUS_HPP
+#define NCC_FIB_STATUS_HPP
+
+#include <QtCore/QAbstractListModel>
+#include <QtCore/QStringList>
+
+namespace ndn {
+class Face;
+class Data;
+
+class FibStatusItem
+{
+public:
+  FibStatusItem(const QString &prefix, uint64_t faceId, uint64_t cost)
+    : m_prefix(prefix)
+    , m_faceId(faceId)
+    , m_cost(cost)
+  {
+  }
+
+  const QString&
+  prefix() const
+  {
+    return m_prefix;
+  }
+
+  uint64_t
+  faceId() const
+  {
+    return m_faceId;
+  }
+
+  uint64_t
+  cost() const
+  {
+    return m_cost;
+  }
+
+private:
+  QString m_prefix;
+  uint64_t m_faceId;
+  uint64_t m_cost;
+};
+
+class FibStatusModel : public QAbstractListModel
+{
+  Q_OBJECT
+
+public:
+  enum FibStatusRoles {
+    PrefixRole = Qt::UserRole + 1,
+    FaceIdRole,
+    CostRole
+  };
+
+  explicit
+  FibStatusModel(Face& face, QObject *parent = 0);
+
+  int
+  rowCount(const QModelIndex &parent = QModelIndex()) const;
+
+  void
+  addItem(const FibStatusItem &item);
+
+  QVariant
+  data(const QModelIndex & index, int role) const;
+
+  QHash<int, QByteArray>
+  roleNames() const;
+
+  void
+  clear();
+
+  Q_INVOKABLE void
+  fetchFibInformation();
+
+  void
+  afterFetchedFibEnumerationInformation();
+
+  void
+  fetchSegments(const Data& data, void (FibStatusModel::*onDone)());
+
+  void
+  onTimeout();
+
+private:
+  Face& m_face;
+  QList<FibStatusItem> m_items;
+  // shared_ptr<OBufferStream> m_buffer;
+};
+
+} // namespace ndn
+
+#endif // NCC_FIB_STATUS_HPP
