diff --git a/src/contactpanel.h b/src/contactpanel.h
index 222bf0b..fd76b0b 100644
--- a/src/contactpanel.h
+++ b/src/contactpanel.h
@@ -41,12 +41,16 @@
   Q_OBJECT
 
 public:
-  explicit ContactPanel(ndn::Ptr<ContactManager> contactManager, QWidget *parent = 0);
+  explicit ContactPanel(ndn::Ptr<ContactManager> contactManager, 
+                        QWidget *parent = 0);
 
   ~ContactPanel();
 
 private:
   void
+  createAction();
+
+  void
   openDB();
 
   void
@@ -59,37 +63,44 @@
   onLocalPrefixVerified(ndn::Ptr<ndn::Data> data);
   
   void
-  onLocalPrefixTimeout(ndn::Ptr<ndn::Closure> closure, ndn::Ptr<ndn::Interest> interest);
+  onLocalPrefixTimeout(ndn::Ptr<ndn::Closure> closure, 
+                       ndn::Ptr<ndn::Interest> interest);
 
   void
-  onUnverified(ndn::Ptr<ndn::Data> data);
-  
-  void
-  onTimeout(ndn::Ptr<ndn::Closure> closure, ndn::Ptr<ndn::Interest> interest);
-    
-  void
   setInvitationListener();
 
   void
   onInvitation(ndn::Ptr<ndn::Interest> interest);
 
   void
+  onUnverified(ndn::Ptr<ndn::Data> data);
+  
+  void
+  onTimeout(ndn::Ptr<ndn::Closure> closure, 
+            ndn::Ptr<ndn::Interest> interest);
+    
+  void
   onInvitationCertVerified(ndn::Ptr<ndn::Data> data,
                            ndn::Ptr<ChronosInvitation> invitation);
 
   void
+  popChatInvitation(ndn::Ptr<ChronosInvitation> invitation,
+                    const ndn::Name& inviterNameSpace,
+                    ndn::Ptr<ndn::security::IdentityCertificate> certificate);
+
+  void
   collectEndorsement();
 
   void
-  onDnsEndoreeVerified(ndn::Ptr<ndn::Data> data, int count);
+  onDnsEndorseeVerified(ndn::Ptr<ndn::Data> data, int count);
 
   void
-  onDnsEndoreeTimeout(ndn::Ptr<ndn::Closure> closure, 
+  onDnsEndorseeTimeout(ndn::Ptr<ndn::Closure> closure, 
                       ndn::Ptr<ndn::Interest> interest, 
                       int count);
   
   void
-  onDnsEndoreeUnverified(ndn::Ptr<ndn::Data> data, int count);
+  onDnsEndorseeUnverified(ndn::Ptr<ndn::Data> data, int count);
 
   void 
   updateCollectStatus(int count);
@@ -97,11 +108,6 @@
   std::string
   getRandomString();
 
-  void
-  popChatInvitation(ndn::Ptr<ChronosInvitation> invitation,
-                    const ndn::Name& inviterNameSpace,
-                    ndn::Ptr<ndn::security::IdentityCertificate> certificate);
-
 signals:
   void
   newInvitationReady();
@@ -112,7 +118,8 @@
                   const QItemSelection &deselected);
 
   void
-  updateDefaultIdentity(const QString& identity);
+  updateDefaultIdentity(const QString& identity,
+                        const QString& nickName);
 
   void
   openProfileEditor();
@@ -139,7 +146,9 @@
   showContextMenu(const QPoint& pos);
 
   void
-  startChatroom(const QString& chatroom, const QString& invitee, bool isIntroducer);
+  startChatroom(const QString& chatroom, 
+                const QString& invitee, 
+                bool isIntroducer);
 
   void 
   startChatroom2(const ChronosInvitation& invitation, 
@@ -166,6 +175,9 @@
 
   void
   endorseButtonClicked();
+  
+  void
+  removeChatDialog(const ndn::Name& chatroomName);
 
   
 
@@ -190,17 +202,14 @@
   ndn::Ptr<ndn::Wrapper> m_handler;
 
   ndn::Name m_defaultIdentity;
+  std::string m_nickName;
   ndn::Name m_localPrefix;
   ndn::Name m_inviteListenPrefix;
 
-  // std::string m_currentSelectedContactAlias;
-  // std::string m_currentSelectedContactNamespace;
   ndn::Ptr<ContactItem> m_currentSelectedContact;
   QSqlTableModel* m_trustScopeModel;
   QSqlTableModel* m_endorseDataModel;
   EndorseComboBoxDelegate* m_endorseComboBoxDelegate;
-
-
 };
 
 #endif // CONTACTPANEL_H
