diff --git a/src/contact-storage.cpp b/src/contact-storage.cpp
index b8842d7..8026644 100644
--- a/src/contact-storage.cpp
+++ b/src/contact-storage.cpp
@@ -365,18 +365,13 @@
 void
 ContactStorage::updateProfileData(const Name& identity) const
 {
+   _LOG_DEBUG("Enter updateProfileData!");
   // Get current profile;
   Ptr<Profile> newProfile = getSelfProfile(identity);
   if(NULL == newProfile)
     return;
   Ptr<Blob> newProfileBlob = newProfile->toDerBlob();
 
-  Ptr<ProfileData> newProfileData = getSignedSelfProfileData(identity, *newProfile);
-  if(NULL != newProfileData)
-    return;
-  Ptr<Blob> newProfileDataBlob = newProfileData->encodeToWire();
-
-
   // Check if profile exists
   sqlite3_stmt *stmt;
   sqlite3_prepare_v2 (m_db, "SELECT profile_data FROM ProfileData where identity=?", -1, &stmt, 0);
@@ -385,9 +380,19 @@
   if(sqlite3_step (stmt) != SQLITE_ROW)
     {
       sqlite3_finalize (stmt);
+
+      Ptr<ProfileData> newProfileData = getSignedSelfProfileData(identity, *newProfile);
+      _LOG_DEBUG("Signing DONE!");
+      if(NULL == newProfileData)
+        return;
+      Ptr<Blob> newProfileDataBlob = newProfileData->encodeToWire();
+
+      _LOG_DEBUG("Before Inserting!");
+
       sqlite3_prepare_v2 (m_db, "INSERT INTO ProfileData (identity, profile_data) values (?, ?)", -1, &stmt, 0);
-      sqlite3_bind_text(stmt, 2, identity.toUri().c_str(), identity.toUri().size(), SQLITE_TRANSIENT);
-      sqlite3_bind_text(stmt, 1, newProfileDataBlob->buf(), newProfileDataBlob->size(), SQLITE_TRANSIENT);
+      sqlite3_bind_text(stmt, 1, identity.toUri().c_str(), identity.toUri().size(), SQLITE_TRANSIENT);
+      sqlite3_bind_text(stmt, 2, newProfileDataBlob->buf(), newProfileDataBlob->size(), SQLITE_TRANSIENT);
+      sqlite3_step(stmt);
     }
   else
     {
@@ -399,9 +404,18 @@
       if(oldProfileBlob == *newProfileBlob)
         return;
 
+      Ptr<ProfileData> newProfileData = getSignedSelfProfileData(identity, *newProfile);
+      _LOG_DEBUG("Signing DONE!");
+      if(NULL == newProfileData)
+        return;
+      Ptr<Blob> newProfileDataBlob = newProfileData->encodeToWire();
+
+      _LOG_DEBUG("Before Updating!");
+
       sqlite3_prepare_v2 (m_db, "UPDATE ProfileData SET profile_data=? WHERE identity=?", -1, &stmt, 0);
       sqlite3_bind_text(stmt, 1, newProfileDataBlob->buf(), newProfileDataBlob->size(), SQLITE_TRANSIENT);
       sqlite3_bind_text(stmt, 2, identity.toUri().c_str(), identity.toUri().size(), SQLITE_TRANSIENT);
+      sqlite3_step(stmt);
     }
 }
 
@@ -432,6 +446,8 @@
     return NULL;
 
   Ptr<ProfileData> profileData = Ptr<ProfileData>(new ProfileData(identity, profile));
+  _LOG_DEBUG("Get ProfileData, size: " << profileData->content().size());
+  _LOG_DEBUG("Get SigningCert, name: " << certificateName.toUri());
   m_identityManager->signByCertificate(*profileData, certificateName);
 
   return profileData;
diff --git a/src/contact-storage.h b/src/contact-storage.h
index 62a0e8b..5b87146 100644
--- a/src/contact-storage.h
+++ b/src/contact-storage.h
@@ -45,7 +45,11 @@
 
   void
   updateProfileData(const ndn::Name& identity) const;
-
+  
+  inline ndn::Ptr<ndn::security::IdentityManager> 
+  getIdentityManager()
+  { return m_identityManager; }
+  
 private:
   bool
   doesSelfEntryExist(const ndn::Name& identity, const std::string& profileType);
diff --git a/src/contactpanel.cpp b/src/contactpanel.cpp
index f103100..985d0a8 100644
--- a/src/contactpanel.cpp
+++ b/src/contactpanel.cpp
@@ -33,7 +33,6 @@
     , ui(new Ui::ContactPanel)
     , m_contactStorage(contactStorage)
     , m_contactListModel(new QStringListModel)
-    , m_profileEditor(new ProfileEditor(m_contactStorage))
     , m_addContactPanel(new AddContactPanel())
 {
   
@@ -45,6 +44,8 @@
     db.setDatabaseName(path);
     bool ok = db.open();
 
+    m_profileEditor = new ProfileEditor(m_contactStorage);
+
     QStringList contactNameList;
     contactNameList << "Alex" << "Wentao" << "Yingdi";
 
diff --git a/src/contactpanel.ui b/src/contactpanel.ui
index d2f156e..442fdae 100644
--- a/src/contactpanel.ui
+++ b/src/contactpanel.ui
@@ -56,7 +56,7 @@
       <item>
        <widget class="QTabWidget" name="ContactInfo">
         <property name="currentIndex">
-         <number>2</number>
+         <number>0</number>
         </property>
         <widget class="QWidget" name="General">
          <attribute name="title">
@@ -179,7 +179,7 @@
          <attribute name="title">
           <string>Trust Scope</string>
          </attribute>
-         <widget class="QWidget" name="">
+         <widget class="QWidget" name="layoutWidget">
           <property name="geometry">
            <rect>
             <x>20</x>
diff --git a/src/profileeditor.cpp b/src/profileeditor.cpp
index 9b75f50..14eeff4 100644
--- a/src/profileeditor.cpp
+++ b/src/profileeditor.cpp
@@ -23,31 +23,28 @@
 
 INIT_LOGGER("ProfileEditor");
 
-ProfileEditor::ProfileEditor(Ptr<ContactStorage> contactStorage, QWidget *parent) 
+ProfileEditor::ProfileEditor(Ptr<ContactStorage> contactStorage, 
+                             QWidget *parent) 
     : QDialog(parent)
     , ui(new Ui::ProfileEditor)
     , m_tableModel(new QSqlTableModel())
     , m_contactStorage(contactStorage)
 {
-    ui->setupUi(this);
+  ui->setupUi(this);
+  
+  Name defaultIdentity = contactStorage->getIdentityManager()->getDefaultIdentity();
+  ui->identityInput->setText(defaultIdentity.toUri().c_str());
 
-    connect(ui->addRowButton, SIGNAL(clicked()),
-            this, SLOT(onAddClicked()));
-    connect(ui->deleteRowButton, SIGNAL(clicked()),
-            this, SLOT(onDeleteClicked()));
-    connect(ui->okButton, SIGNAL(clicked()),
-            this, SLOT(onOkClicked()));
-    
-    m_tableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
-    m_tableModel->setTable("SelfProfile");
-    m_tableModel->select();
-    m_tableModel->setHeaderData(0, Qt::Horizontal, QObject::tr("Index"));
-    m_tableModel->setHeaderData(1, Qt::Horizontal, QObject::tr("Type"));
-    m_tableModel->setHeaderData(2, Qt::Horizontal, QObject::tr("Value"));
+  connect(ui->addRowButton, SIGNAL(clicked()),
+          this, SLOT(onAddClicked()));
+  connect(ui->deleteRowButton, SIGNAL(clicked()),
+          this, SLOT(onDeleteClicked()));
+  connect(ui->okButton, SIGNAL(clicked()),
+          this, SLOT(onOkClicked()));
+  connect(ui->getButton, SIGNAL(clicked()),
+          this, SLOT(onGetClicked()));
 
-    ui->profileTable->setModel(m_tableModel);
-    ui->profileTable->setColumnHidden(0, true);
-    ui->profileTable->show();
+
 
 }
 
@@ -61,19 +58,12 @@
 ProfileEditor::onAddClicked()
 {
   int rowCount = m_tableModel->rowCount();
-
-  // QSqlRecord record;
-  // QSqlField typeField("profile_type", QVariant::String);
-  // QSqlField valueField("profile_value", QVariant::String);
-  // record.append(typeField);
-  // record.append(valueField);
-  // record.setValue("profile_type", QString("N/A"));
-  // record.setValue("profile_value", QString("N/A"));
-
-  // bool res = m_tableModel->insertRecord(-1, record);
-
-  // res = m_tableModel->submitAll();
+  QSqlRecord record;
+  QSqlField identityField("profile_identity", QVariant::String);
+  record.append(identityField);
+  record.setValue("profile_identity", QString(m_currentIdentity.toUri().c_str()));
   m_tableModel->insertRow(rowCount);
+  m_tableModel->setRecord(rowCount, record);
 }
 
 void
@@ -84,10 +74,8 @@
 
   int i = indexList.size() - 1;  
   for(; i >= 0; i--)
-    {
-      if(0 != indexList[i].row())
-        m_tableModel->removeRow(indexList[i].row());
-    }
+    m_tableModel->removeRow(indexList[i].row());
+    
   m_tableModel->submitAll();
 }
 
@@ -95,9 +83,31 @@
 ProfileEditor::onOkClicked()
 {
   m_tableModel->submitAll();
+  m_contactStorage->updateProfileData(m_currentIdentity);
   this->hide();
 }
 
+void
+ProfileEditor::onGetClicked()
+{
+  QString inputIdentity = ui->identityInput->text();
+  m_currentIdentity = Name(inputIdentity.toUtf8().constData());
+  string filter("profile_identity = '");
+  filter.append(m_currentIdentity.toUri()).append("'");
+
+  m_tableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
+  m_tableModel->setTable("SelfProfile");
+  m_tableModel->setFilter(filter.c_str());
+  m_tableModel->select();
+  m_tableModel->setHeaderData(0, Qt::Horizontal, QObject::tr("Identity"));
+  m_tableModel->setHeaderData(1, Qt::Horizontal, QObject::tr("Type"));
+  m_tableModel->setHeaderData(2, Qt::Horizontal, QObject::tr("Value"));
+
+  ui->profileTable->setModel(m_tableModel);
+  ui->profileTable->setColumnHidden(0, true);
+  ui->profileTable->show();
+}
+
 #if WAF
 #include "profileeditor.moc"
 #include "profileeditor.cpp.moc"
diff --git a/src/profileeditor.h b/src/profileeditor.h
index 4bb073b..78d949d 100644
--- a/src/profileeditor.h
+++ b/src/profileeditor.h
@@ -27,7 +27,8 @@
     Q_OBJECT
 
 public:
-  explicit ProfileEditor(ndn::Ptr<ContactStorage> contactStorage, QWidget *parent = 0);
+  explicit ProfileEditor(ndn::Ptr<ContactStorage> contactStorage, 
+                         QWidget *parent = 0);
   
   ~ProfileEditor();
   
@@ -41,11 +42,16 @@
   void
   onOkClicked();
 
+  void
+  onGetClicked();
+
 
 private:
   Ui::ProfileEditor *ui;
   QSqlTableModel* m_tableModel;
   ndn::Ptr<ContactStorage> m_contactStorage;
+  ndn::Name m_defaultIdentity;
+  ndn::Name m_currentIdentity;
 };
 
 #endif // PROFILEEDITOR_H
diff --git a/src/profileeditor.ui b/src/profileeditor.ui
index 720d572..f3bdafd 100644
--- a/src/profileeditor.ui
+++ b/src/profileeditor.ui
@@ -46,6 +46,9 @@
         <property name="text">
          <string>Get Profile</string>
         </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
        </widget>
       </item>
      </layout>
@@ -76,6 +79,9 @@
         <property name="text">
          <string>Add</string>
         </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
        </widget>
       </item>
       <item>
@@ -83,6 +89,9 @@
         <property name="text">
          <string>Delete</string>
         </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
        </widget>
       </item>
       <item>
@@ -90,6 +99,9 @@
         <property name="text">
          <string>OK</string>
         </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
        </widget>
       </item>
      </layout>
