diff --git a/src/cert-tree-model.cpp b/src/cert-tree-model.cpp
new file mode 100644
index 0000000..6af6e4e
--- /dev/null
+++ b/src/cert-tree-model.cpp
@@ -0,0 +1,60 @@
+/* -*- 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/>.
+ */
+
+#include "cert-tree-model.hpp"
+
+#ifdef WAF
+#include "cert-tree-model.moc"
+#endif
+
+namespace ndn {
+namespace ncc {
+
+CertTreeModel::CertTreeModel(int row, int column, QObject* parent)
+  : QStandardItemModel(row, column, parent)
+{
+}
+
+QVariant
+CertTreeModel::data(const QModelIndex& index, int role) const
+{
+  switch (role) {
+  case Qt::FontRole:
+    {
+      QFont font;
+      if (index.column() == 0) {
+        font.setBold(true);
+      }
+      return font;
+    }
+  case Qt::BackgroundRole:
+    {
+      QBrush brush(Qt::white, Qt::SolidPattern);
+      if (index.row() % 2 == 0) {
+        brush.setColor(Qt::lightGray);
+      }
+      return brush;
+    }
+  default:
+    return QStandardItemModel::data(index, role);
+  }
+}
+
+} // namespace ncc
+} // namespace ndn
diff --git a/src/cert-tree-model.hpp b/src/cert-tree-model.hpp
new file mode 100644
index 0000000..38693ad
--- /dev/null
+++ b/src/cert-tree-model.hpp
@@ -0,0 +1,43 @@
+/* -*- 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_CERT_TREE_MODEL_HPP
+#define NDN_NCC_CERT_TREE_MODEL_HPP
+
+#include <QStandardItemModel>
+
+namespace ndn {
+namespace ncc {
+
+class CertTreeModel : public QStandardItemModel
+{
+  Q_OBJECT
+
+public:
+  explicit
+  CertTreeModel(int row, int column, QObject* parent = 0);
+
+  QVariant
+  data(const QModelIndex& index, int role) const Q_DECL_OVERRIDE;
+};
+
+} // namespace ncc
+} // namespace ndn
+
+#endif // NDN_NCC_CERT_TREE_MODEL_HPP
diff --git a/src/key-tree-item.cpp b/src/key-tree-item.cpp
index 070537e..bfc5788 100644
--- a/src/key-tree-item.cpp
+++ b/src/key-tree-item.cpp
@@ -24,10 +24,12 @@
 namespace ndn {
 namespace ncc {
 
-KeyTreeItem::KeyTreeItem(const QVariant& name, const QVariant& data, Type type, KeyTreeItem* parent)
+KeyTreeItem::KeyTreeItem(const QVariant& name, const QVariant& data,
+                         Type type, KeyTreeItem* parent)
   : m_name(name)
   , m_data(data)
   , m_type(type)
+  , m_isDefault(false)
   , m_parentItem(parent)
 {
 }
@@ -38,6 +40,12 @@
 }
 
 void
+KeyTreeItem::setDefault(bool isDefault)
+{
+  m_isDefault = isDefault;
+}
+
+void
 KeyTreeItem::setParent(KeyTreeItem* parent)
 {
   m_parentItem = parent;
diff --git a/src/key-tree-item.hpp b/src/key-tree-item.hpp
index 6d7a02a..aa21c9c 100644
--- a/src/key-tree-item.hpp
+++ b/src/key-tree-item.hpp
@@ -47,6 +47,15 @@
   ~KeyTreeItem();
 
   void
+  setDefault(bool isDefault);
+
+  bool
+  isDefault()
+  {
+    return m_isDefault;
+  }
+
+  void
   setParent(KeyTreeItem* parent);
 
   void
@@ -81,6 +90,7 @@
   QVariant m_name;
   QVariant m_data;
   Type m_type;
+  bool m_isDefault;
   KeyTreeItem* m_parentItem;
 };
 
diff --git a/src/key-tree-model.cpp b/src/key-tree-model.cpp
index ec4fc02..56c4ec1 100644
--- a/src/key-tree-model.cpp
+++ b/src/key-tree-model.cpp
@@ -21,6 +21,9 @@
 #include "key-tree-item.hpp"
 
 #include <QStringList>
+#include <QFont>
+#include <QBrush>
+#include <iostream>
 
 
 #ifdef WAF
@@ -84,12 +87,33 @@
   if (!index.isValid())
     return QVariant();
 
-  if (role != Qt::DisplayRole)
-    return QVariant();
 
   KeyTreeItem* item = static_cast<KeyTreeItem*>(index.internalPointer());
-
-  return item->data();
+  switch (role) {
+  case Qt::DisplayRole:
+    {
+      return item->data();
+    }
+  case Qt::FontRole:
+    {
+      QFont font;
+      if (item->isDefault()) {
+        font.setBold(true);
+      }
+      return font;
+    }
+  // case Qt::BackgroundRole:
+  //   {
+  //     std::cerr << "brush" << std::endl;
+  //     QBrush brush(Qt::white, Qt::SolidPattern);
+  //     if (index.row() % 2 == 0) {
+  //       brush.setColor(Qt::cyan);
+  //     }
+  //     return brush;
+  //   }
+  default:
+    return QVariant();
+  }
 }
 
 Qt::ItemFlags
diff --git a/src/key-viewer-dialog.cpp b/src/key-viewer-dialog.cpp
index 9a95bbd..530fdb2 100644
--- a/src/key-viewer-dialog.cpp
+++ b/src/key-viewer-dialog.cpp
@@ -23,6 +23,8 @@
 
 #include <iostream>
 
+#include <Qt>
+
 
 #ifdef WAF
 #include "key-viewer-dialog.moc"
@@ -31,6 +33,8 @@
 namespace ndn {
 namespace ncc {
 
+static int N_ROWS = 30;
+
 KeyViewerDialog::KeyViewerDialog(QWidget *parent)
   : QDialog(parent)
   , ui(new Ui::KeyViewerDialog)
@@ -41,6 +45,12 @@
   ui->treeView->setModel(m_model.get());
   ui->treeView->show();
 
+  m_tableModel = make_shared<CertTreeModel>(N_ROWS, 2);
+  m_tableModel->setHeaderData(0, Qt::Horizontal,"Field");
+  m_tableModel->setHeaderData(1, Qt::Horizontal,"Value");
+  ui->certView->setModel(m_tableModel.get());
+  ui->certView->show();
+
   connect(ui->treeView, SIGNAL(clicked(const QModelIndex&)), this, SLOT(displayCert(const QModelIndex&)));
 }
 
@@ -62,7 +72,9 @@
   std::vector<Name> defaultIdentities;
   m_keyChain->getAllIdentities(defaultIdentities, true);
   for (const auto& identity : defaultIdentities) {
-    newModel->addChild(createIdentityNode(identity));
+    auto idItem = createIdentityNode(identity);
+    idItem->setDefault(true);
+    newModel->addChild(idItem);
   }
 
   std::vector<Name> otherIdentities;
@@ -97,7 +109,10 @@
     parent = m_model->index(0, 0, parent);
   }
 
-  shared_ptr<QStandardItemModel> tableModel;
+  shared_ptr<CertTreeModel> tableModel = make_shared<CertTreeModel>(N_ROWS, 2);
+  tableModel->setHeaderData(0, Qt::Horizontal,"Field");
+  tableModel->setHeaderData(1, Qt::Horizontal,"Value");
+
   item = static_cast<KeyTreeItem*>(parent.internalPointer());
   if (item->type() == KeyTreeItem::Type::CERT) {
     std::cerr << item->name().toString().toStdString() << std::endl;
@@ -105,9 +120,9 @@
     shared_ptr<IdentityCertificate> cert =
       m_keyChain->getCertificate(Name(item->name().toString().toStdString()));
 
-    tableModel = make_shared<QStandardItemModel>(5, 2);
     tableModel->setItem(0, 0, new QStandardItem(QString("Name")));
     tableModel->setItem(0, 1, new QStandardItem(item->name().toString()));
+    // tableModel->setData(tableModel->index(0, 0), Qt::red, Qt::BackgroundRole);
 
     tableModel->setItem(1, 0, new QStandardItem(QString("NotBefore")));
     tableModel->setItem(1, 1, new QStandardItem(QString::fromStdString(time::toIsoString(cert->getNotBefore()))));
@@ -123,14 +138,11 @@
     tableModel->setItem(4, 1, new QStandardItem(QString::fromStdString(signerName.toUri())));
   }
   else {
-    tableModel = make_shared<QStandardItemModel>(5, 2);
+    tableModel->setItem(0, 0, new QStandardItem(QString("")));
+    tableModel->setItem(0, 1, new QStandardItem(QString("")));
   }
-  ui->tableView->setModel(tableModel.get());
-  ui->tableView->resizeColumnsToContents();
-  QHeaderView* header = ui->tableView->horizontalHeader();
-  header->setStretchLastSection(true);
-  ui->tableView->setHorizontalHeader(header);
-  ui->tableView->show();
+  ui->certView->setModel(tableModel.get());
+  ui->certView->show();
   m_tableModel = tableModel;
 }
 
@@ -144,7 +156,9 @@
   std::vector<Name> defaultKeys;
   m_keyChain->getAllKeyNamesOfIdentity(identity, defaultKeys, true);
   for (const auto& keyName : defaultKeys) {
-    idItem->appendChild(createKeyNode(keyName, idItem));
+    auto keyItem = createKeyNode(keyName, idItem);
+    keyItem->setDefault(true);
+    idItem->appendChild(keyItem);
   }
 
   std::vector<ndn::Name> otherKeys;
@@ -167,10 +181,12 @@
   std::vector<Name> defaultCertificates;
   m_keyChain->getAllCertificateNamesOfKey(keyName, defaultCertificates, true);
   for (const auto& certName : defaultCertificates) {
-    keyItem->appendChild(new KeyTreeItem(QVariant(QString::fromStdString(certName.toUri())),
-                                         QVariant(QString::fromStdString(certName[-1].toUri())),
-                                         KeyTreeItem::Type::CERT,
-                                         keyItem));
+    auto certItem = new KeyTreeItem(QVariant(QString::fromStdString(certName.toUri())),
+                                    QVariant(QString::fromStdString(certName[-1].toUri())),
+                                    KeyTreeItem::Type::CERT,
+                                    keyItem);
+    certItem->setDefault(true);
+    keyItem->appendChild(certItem);
   }
 
   std::vector<ndn::Name> otherCertificates;
diff --git a/src/key-viewer-dialog.hpp b/src/key-viewer-dialog.hpp
index 60996af..01261a5 100644
--- a/src/key-viewer-dialog.hpp
+++ b/src/key-viewer-dialog.hpp
@@ -21,10 +21,11 @@
 #define NDN_NCC_KEY_VIEWER_DIALOG_HPP
 
 #include "key-tree-model.hpp"
+#include "cert-tree-model.hpp"
 #include <ndn-cxx/security/key-chain.hpp>
 
 #include <QDialog>
-#include <QStandardItemModel>
+
 
 namespace Ui {
 class KeyViewerDialog;
@@ -76,7 +77,7 @@
   shared_ptr<KeyTreeModel> m_model;
   shared_ptr<KeyChain> m_keyChain;
 
-  shared_ptr<QStandardItemModel> m_tableModel;
+  shared_ptr<CertTreeModel> m_tableModel;
 };
 
 } // namespace ncc
diff --git a/src/key-viewer-dialog.ui b/src/key-viewer-dialog.ui
index e3b6e38..44e02b4 100644
--- a/src/key-viewer-dialog.ui
+++ b/src/key-viewer-dialog.ui
@@ -27,7 +27,7 @@
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout_2">
    <item>
-    <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,1">
+    <layout class="QHBoxLayout" name="horizontalLayout" stretch="3,2">
      <property name="sizeConstraint">
       <enum>QLayout::SetMaximumSize</enum>
      </property>
@@ -35,7 +35,11 @@
       <widget class="QTreeView" name="treeView"/>
      </item>
      <item>
-      <widget class="QTableView" name="tableView"/>
+      <widget class="QTreeView" name="certView">
+       <property name="indentation">
+        <number>0</number>
+       </property>
+      </widget>
      </item>
     </layout>
    </item>
