diff --git a/src/key-viewer-dialog.cpp b/src/key-viewer-dialog.cpp
index 530fdb2..07604dd 100644
--- a/src/key-viewer-dialog.cpp
+++ b/src/key-viewer-dialog.cpp
@@ -24,6 +24,7 @@
 #include <iostream>
 
 #include <Qt>
+#include <QMenu>
 
 
 #ifdef WAF
@@ -39,19 +40,25 @@
   : QDialog(parent)
   , ui(new Ui::KeyViewerDialog)
   , m_model(new KeyTreeModel)
+  , m_keyChain(new KeyChain)
+  , m_timer(parent)
 {
   ui->setupUi(this);
 
-  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();
+  // present();
 
   connect(ui->treeView, SIGNAL(clicked(const QModelIndex&)), this, SLOT(displayCert(const QModelIndex&)));
+
+  m_timer.setInterval(600000);
+  connect(&m_timer, SIGNAL(timeout()), this, SLOT(display()));
+  m_timer.start();
+
+  this->setContextMenuPolicy(Qt::CustomContextMenu);
+
+  connect(ui->treeView, SIGNAL(pressed(const QModelIndex&)),
+          this, SLOT(getSelection(const QModelIndex&)));
+  connect(this, SIGNAL(customContextMenuRequested(const QPoint&)),
+          this, SLOT(showContextMenu(const QPoint&)));
 }
 
 KeyViewerDialog::~KeyViewerDialog()
@@ -64,7 +71,7 @@
 }
 
 void
-KeyViewerDialog::present()
+KeyViewerDialog::display()
 {
   m_keyChain = make_shared<KeyChain>();
   auto newModel = make_shared<KeyTreeModel>();
@@ -87,11 +94,73 @@
   ui->treeView->show();
   m_model = newModel;
 
+  auto newTableModel = make_shared<CertTreeModel>(N_ROWS, 2);
+  newTableModel->setHeaderData(0, Qt::Horizontal,"Field");
+  newTableModel->setHeaderData(1, Qt::Horizontal,"Value");
+  ui->certView->setModel(newTableModel.get());
+  ui->certView->show();
+  m_tableModel = newTableModel;
+}
+
+void
+KeyViewerDialog::present()
+{
+  display();
+
   show();
   raise();
 }
 
 void
+KeyViewerDialog::getSelection(const QModelIndex& index)
+{
+  m_selectedIndex = index;
+}
+
+void
+KeyViewerDialog::showContextMenu(const QPoint& point)
+{
+  QMenu contextMenu(tr("Key Management"), this);
+  QAction action1("Set Default", this);
+  connect(&action1, SIGNAL(triggered()), this, SLOT(setDefault()));
+  contextMenu.addAction(&action1);
+  contextMenu.exec(ui->treeView->mapToGlobal(point));
+}
+
+void
+KeyViewerDialog::setDefault()
+{
+  std::cerr << "default" << std::endl;
+  KeyTreeItem* item = static_cast<KeyTreeItem*>(m_selectedIndex.internalPointer());
+  if (item == nullptr)
+    return;
+
+  Name name(item->name().toString().toStdString());
+  std::cerr << name << std::endl;
+
+  switch (item->type()) {
+  case KeyTreeItem::Type::ID:
+    {
+      m_keyChain->setDefaultIdentity(name);
+      break;
+    }
+  case KeyTreeItem::Type::KEY:
+    {
+      m_keyChain->setDefaultKeyNameForIdentity(name);
+      break;
+    }
+  case KeyTreeItem::Type::CERT:
+    {
+      m_keyChain->setDefaultCertificateNameForKey(name);
+      break;
+    }
+  default:
+    return;
+  }
+  present();
+}
+
+void
 KeyViewerDialog::displayCert(const QModelIndex& index)
 {
   std::cerr << "clicked" << std::endl;
diff --git a/src/key-viewer-dialog.hpp b/src/key-viewer-dialog.hpp
index 01261a5..51ba998 100644
--- a/src/key-viewer-dialog.hpp
+++ b/src/key-viewer-dialog.hpp
@@ -25,6 +25,7 @@
 #include <ndn-cxx/security/key-chain.hpp>
 
 #include <QDialog>
+#include <QTimer>
 
 
 namespace Ui {
@@ -60,11 +61,24 @@
 
 public slots:
   void
-  present();
+  display();
 
 private slots:
   void
   displayCert(const QModelIndex& index);
+
+  void
+  present();
+
+  void
+  getSelection(const QModelIndex& index);
+
+  void
+  showContextMenu(const QPoint& point);
+
+  void
+  setDefault();
+
   // void insertChild();
   // bool insertColumn();
   // void insertRow();
@@ -78,6 +92,10 @@
   shared_ptr<KeyChain> m_keyChain;
 
   shared_ptr<CertTreeModel> m_tableModel;
+
+  QTimer m_timer;
+
+  QModelIndex m_selectedIndex;
 };
 
 } // namespace ncc
