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;
