diff --git a/src/chatdialog.h b/src/chatdialog.h
index ba6c6c8..77feea1 100644
--- a/src/chatdialog.h
+++ b/src/chatdialog.h
@@ -1,145 +1,51 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 /*
  * Copyright (c) 2013, Regents of the University of California
- *                     Alexander Afanasyev
- *                     Zhenkai Zhu
+ *                     Yingdi Yu
  *
- * GNU v3.0 license, See the LICENSE file for more information
+ * BSD license, See the LICENSE file for more information
  *
- * Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
- *         Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ * Author: Yingdi Yu <yingdi@cs.ucla.edu>
  */
 
 #ifndef CHATDIALOG_H
 #define CHATDIALOG_H
 
-#ifndef Q_MOC_RUN
-#include <boost/function.hpp>
-#include <boost/thread/recursive_mutex.hpp>
+#include <QDialog>
 
-#include <vector>
-#include "digesttreescene.h"
-#include "ui_chatdialog.h"
-#include "chatbuf.pb.h"
-#include <ccnx/sync-app-socket.h>
-#include <sync-logic.h>
-#include <sync-seq-no.h>
+#ifndef Q_MOC_RUN
+#include <ndn.cxx/data.h>
 #endif
 
-#include <QSystemTrayIcon>
-#include <QMainWindow>
-#include <QQueue>
+namespace Ui {
+class ChatDialog;
+}
 
-#define ORGANIZATION "irl.cs.ucla.edu"
-#define APPLICATION "ChronoChat"
-#define MAX_HISTORY_ENTRY   20
-
-class QAction;
-class QMenu;
-class QStringListModel;
-class QTextTable;
-
-class ChatDialog : public QDialog, private Ui::ChatDialog
+class ChatDialog : public QDialog
 {
-	Q_OBJECT
+  Q_OBJECT
 
 public:
-  ChatDialog(QWidget *parent = 0);
+  explicit ChatDialog(const ndn::Name& chatroomPrefix,
+                      const ndn::Name& localPrefix,
+                      QWidget *parent = 0);
   ~ChatDialog();
-  void setVisible(bool visible);
-  void appendMessage(const SyncDemo::ChatMessage msg, bool isHistory = false);
-  void processTreeUpdateWrapper(const std::vector<Sync::MissingDataInfo>, Sync::SyncAppSocket *);
-  void processDataWrapper(std::string, const char *buf, size_t len);
-  void processDataNoShowWrapper(std::string, const char *buf, size_t len);
-  void processDataHistoryWrapper(std::string, const char *buf, size_t len);
-  void processRemoveWrapper(std::string);
-  void respondHistoryRequest(std::string interest);
 
-protected:
-  void closeEvent(QCloseEvent *e);
-  void changeEvent(QEvent *e);
+  const ndn::Name&
+  getChatroomPrefix() const
+  { return m_chatroomPrefix; }
 
-public slots:
-  void processTreeUpdate(const std::vector<Sync::MissingDataInfo>);
-  void processData(QString name, const char *buf, size_t len, bool show, bool isHistory);
-  void processRemove(QString);
+  const ndn::Name&
+  getLocalPrefix() const
+  { return m_localPrefix; }
+
+  void
+  sendInvitation();
 
 private:
-  void fetchHistory(std::string name);
-  QString getRandomString();
-  void formChatMessage(const QString &text, SyncDemo::ChatMessage &msg);
-  void formControlMessage(SyncDemo::ChatMessage &msg, SyncDemo::ChatMessage::ChatMessageType type);
-  void sendMsg(SyncDemo::ChatMessage &msg);
-  bool readSettings();
-  void writeSettings();
-  void updateLabels();
-  void resizeEvent(QResizeEvent *);
-  void showEvent(QShowEvent *);
-  void fitView();
-  void testDraw();
-  void createTrayIcon();
-  void createActions();
-  QString formatTime(time_t);
-  void printTimeInCell(QTextTable *, time_t);
-  void disableTreeDisplay();
-  bool getLocalPrefix();
-  void initializeSync();
-
-private slots:
-  void returnPressed();
-  void buttonPressed();
-  void treeButtonPressed();
-  void checkSetting();
-  void settingUpdated(QString, QString, QString);
-  void sendHello();
-  void sendJoin();
-  void sendLeave();
-  void replot();
-  void updateRosterList(QStringList);
-  void enableTreeDisplay();
-  void updateLocalPrefix();
-  void reap();
-  void summonReaper();
-
-  // icon related
-  void iconActivated(QSystemTrayIcon::ActivationReason reason);
-  void showMessage(QString, QString);
-  void messageClicked();
-
-signals:
-  void dataReceived(QString name, const char *buf, size_t len, bool show, bool isHistory);
-  void treeUpdated(const std::vector<Sync::MissingDataInfo>);
-  void removeReceived(QString prefix);
-
-private:
-  User m_user; 
-  Sync::SyncAppSocket *m_sock;
-  uint32_t m_session;
-  DigestTreeScene *m_scene;
-  boost::recursive_mutex m_msgMutex;
-  boost::recursive_mutex m_sceneMutex;
-  time_t m_lastMsgTime;
-  int m_randomizedInterval;
-  QTimer *m_timer;
-  QStringListModel *m_rosterModel;
-  bool m_minimaniho;
-
-  QQueue<SyncDemo::ChatMessage> m_history;
-  bool m_historyInitialized;
-  bool m_joined;
-
-  QList<QString> m_zombieList;
-  int m_zombieIndex;
-
-  // icon related
-  QAction *minimizeAction;
-  QAction *maximizeAction;
-  QAction *restoreAction;
-  QAction *settingsAction;
-  QAction *updateLocalPrefixAction;
-  QAction *quitAction;
-  QSystemTrayIcon *trayIcon;
-  // QMenu *menuBar;
-  QMenu *trayIconMenu;
+  Ui::ChatDialog *ui;
+  ndn::Name m_chatroomPrefix;
+  ndn::Name m_localPrefix;
 };
-#endif
+
+#endif // ChatDIALOG_H
