diff --git a/src/addcontactpanel.cpp b/src/addcontactpanel.cpp
index aceac41..8b9d66b 100644
--- a/src/addcontactpanel.cpp
+++ b/src/addcontactpanel.cpp
@@ -1,14 +1,49 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2013, Regents of the University of California
+ *                     Yingdi Yu
+ *
+ * BSD license, See the LICENSE file for more information
+ *
+ * Author: Yingdi Yu <yingdi@cs.ucla.edu>
+ */
+
 #include "addcontactpanel.h"
 #include "ui_addcontactpanel.h"
 
-AddContactPanel::AddContactPanel(QWidget *parent) :
-    QDialog(parent),
-    ui(new Ui::AddContactPanel)
+AddContactPanel::AddContactPanel(QWidget *parent) 
+  : QDialog(parent)
+  , ui(new Ui::AddContactPanel)
+  , m_selfEndorseCertificate(NULL)
 {
-    ui->setupUi(this);
+  ui->setupUi(this);
+
+  connect(ui->cancelButton, SIGNAL(clicked()),
+          this, SLOT(onCancelClicked()));
+  connect(ui->searchButton, SIGNAL(clicked()),
+          this, SLOT(onSearchClicked()));
 }
 
 AddContactPanel::~AddContactPanel()
 {
     delete ui;
 }
+
+void
+AddContactPanel::onCancelClicked()
+{ this->close(); }
+
+void
+AddContactPanel::onSearchClicked()
+{
+}
+
+void
+AddContactPanel::onAddClicked()
+{
+}
+
+#if WAF
+#include "addcontactpanel.moc"
+#include "addcontactpanel.cpp.moc"
+#endif
diff --git a/src/addcontactpanel.h b/src/addcontactpanel.h
index c640394..5b35afe 100644
--- a/src/addcontactpanel.h
+++ b/src/addcontactpanel.h
@@ -1,8 +1,22 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2013, Regents of the University of California
+ *                     Yingdi Yu
+ *
+ * BSD license, See the LICENSE file for more information
+ *
+ * Author: Yingdi Yu <yingdi@cs.ucla.edu>
+ */
+
 #ifndef ADDCONTACTPANEL_H
 #define ADDCONTACTPANEL_H
 
 #include <QDialog>
 
+#ifndef Q_MOC_RUN
+#include "endorse-certificate.h"
+#endif
+
 namespace Ui {
 class AddContactPanel;
 }
@@ -15,8 +29,19 @@
     explicit AddContactPanel(QWidget *parent = 0);
     ~AddContactPanel();
 
+private slots:
+  void
+  onCancelClicked();
+  
+  void
+  onSearchClicked();
+
+  void
+  onAddClicked();
+
 private:
-    Ui::AddContactPanel *ui;
+  Ui::AddContactPanel *ui;
+  Ptr<EndorseCertificate> m_selfEndorseCertificate;
 };
 
 #endif // ADDCONTACTPANEL_H
diff --git a/src/addcontactpanel.ui b/src/addcontactpanel.ui
index d2b0374..3632931 100644
--- a/src/addcontactpanel.ui
+++ b/src/addcontactpanel.ui
@@ -22,14 +22,14 @@
      <height>481</height>
     </rect>
    </property>
-   <layout class="QVBoxLayout" name="verticalLayout" stretch="1,15,1">
+   <layout class="QVBoxLayout" name="addContactPanelLayout" stretch="1,25,1">
     <property name="spacing">
      <number>10</number>
     </property>
     <item>
-     <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,5,2">
+     <layout class="QHBoxLayout" name="contactSearchLayout" stretch="1,5,2">
       <item>
-       <widget class="QLabel" name="label">
+       <widget class="QLabel" name="contactLabel">
         <property name="font">
          <font>
           <weight>75</weight>
@@ -45,10 +45,10 @@
        </widget>
       </item>
       <item>
-       <widget class="QLineEdit" name="lineEdit"/>
+       <widget class="QLineEdit" name="contactInput"/>
       </item>
       <item>
-       <widget class="QPushButton" name="pushButton">
+       <widget class="QPushButton" name="searchButton">
         <property name="text">
          <string>Search</string>
         </property>
@@ -57,19 +57,19 @@
      </layout>
     </item>
     <item>
-     <widget class="QTableView" name="tableView"/>
+     <widget class="QTableWidget" name="infoView"/>
     </item>
     <item>
-     <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <layout class="QHBoxLayout" name="buttonLayout">
       <item>
-       <widget class="QPushButton" name="pushButton_2">
+       <widget class="QPushButton" name="cancelButton">
         <property name="text">
          <string>Cancel</string>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QPushButton" name="pushButton_3">
+       <widget class="QPushButton" name="addButton">
         <property name="text">
          <string>Add</string>
         </property>
diff --git a/src/contactpanel.cpp b/src/contactpanel.cpp
index 5dea76c..f103100 100644
--- a/src/contactpanel.cpp
+++ b/src/contactpanel.cpp
@@ -33,7 +33,8 @@
     , ui(new Ui::ContactPanel)
     , m_contactStorage(contactStorage)
     , m_contactListModel(new QStringListModel)
-    , m_profileEditor(NULL)
+    , m_profileEditor(new ProfileEditor(m_contactStorage))
+    , m_addContactPanel(new AddContactPanel())
 {
   
     ui->setupUi(this);
@@ -51,16 +52,22 @@
     ui->ContactList->setModel(m_contactListModel);
 
     QItemSelectionModel* selectionModel = ui->ContactList->selectionModel();
+
     connect(selectionModel, SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
 	    this, SLOT(updateSelection(const QItemSelection &, const QItemSelection &)));
     connect(ui->EditProfileButton, SIGNAL(clicked()), 
             this, SLOT(openProfileEditor()));
+
+    connect(ui->AddContactButton, SIGNAL(clicked()),
+            this, SLOT(openAddContactPanel()));
 }
 
 ContactPanel::~ContactPanel()
 {
     delete ui;
     delete m_contactListModel;
+    delete m_profileEditor;
+    delete m_addContactPanel;
 }
 
 void
@@ -74,12 +81,11 @@
 
 void
 ContactPanel::openProfileEditor()
-{
-  if(m_profileEditor == NULL)
-    m_profileEditor = new ProfileEditor(m_contactStorage);
+{ m_profileEditor->show(); }
 
-  m_profileEditor->show();
-}
+void
+ContactPanel::openAddContactPanel()
+{ m_addContactPanel->show(); }
 
 #if WAF
 #include "contactpanel.moc"
diff --git a/src/contactpanel.h b/src/contactpanel.h
index 5ee8ce7..4dd78d3 100644
--- a/src/contactpanel.h
+++ b/src/contactpanel.h
@@ -16,6 +16,7 @@
 #include <QtSql/QSqlDatabase>
 
 #include "profileeditor.h"
+#include "addcontactpanel.h"
 
 #ifndef Q_MOC_RUN
 #include "contact-storage.h"
@@ -41,11 +42,15 @@
   void
   openProfileEditor();
 
+  void
+  openAddContactPanel();
+
 private:
   Ui::ContactPanel *ui;
   ndn::Ptr<ContactStorage> m_contactStorage;
   QStringListModel* m_contactListModel;
   ProfileEditor* m_profileEditor;
+  AddContactPanel* m_addContactPanel;
 };
 
 #endif // CONTACTPANEL_H
diff --git a/src/contactpanel.ui b/src/contactpanel.ui
index f0ee709..d2f156e 100644
--- a/src/contactpanel.ui
+++ b/src/contactpanel.ui
@@ -56,7 +56,7 @@
       <item>
        <widget class="QTabWidget" name="ContactInfo">
         <property name="currentIndex">
-         <number>0</number>
+         <number>2</number>
         </property>
         <widget class="QWidget" name="General">
          <attribute name="title">
@@ -224,7 +224,7 @@
          <attribute name="title">
           <string>Endorse</string>
          </attribute>
-         <widget class="QTableView" name="endorseList">
+         <widget class="QTableWidget" name="endorseList">
           <property name="geometry">
            <rect>
             <x>20</x>
