diff --git a/src/key-tree-item.hpp b/src/key-tree-item.hpp
new file mode 100644
index 0000000..6d7a02a
--- /dev/null
+++ b/src/key-tree-item.hpp
@@ -0,0 +1,90 @@
+/* -*- 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 NDN_NCC_KEY_TREE_ITEM_HPP
+#define NDN_NCC_KEY_TREE_ITEM_HPP
+
+#include <string>
+#include <QList>
+#include <QVariant>
+
+namespace ndn {
+namespace ncc {
+
+class KeyTreeItem
+{
+public:
+  enum class Type {
+    ROOT = 0,
+    ID = 1,
+    KEY = 2,
+    CERT = 3
+  };
+
+public:
+  explicit
+  KeyTreeItem(const QVariant& name,
+              const QVariant& data = QVariant(),
+              Type type = Type::ROOT,
+              KeyTreeItem* parent = nullptr);
+
+  ~KeyTreeItem();
+
+  void
+  setParent(KeyTreeItem* parent);
+
+  void
+  appendChild(KeyTreeItem* child);
+
+  KeyTreeItem*
+  child(int row);
+
+  int
+  childCount() const;
+
+  int
+  columnCount() const;
+
+  QVariant
+  name() const;
+
+  QVariant
+  data() const;
+
+  Type
+  type() const;
+
+  int
+  row() const;
+
+  KeyTreeItem*
+  parentItem();
+
+private:
+  QList<KeyTreeItem*> m_childItems;
+  QVariant m_name;
+  QVariant m_data;
+  Type m_type;
+  KeyTreeItem* m_parentItem;
+};
+
+} // namespace ndn
+} // namespace ncc
+
+#endif // NDN_NCC_KEY_TREE_ITEM_HPP
