diff --git a/src/main.cpp b/src/main.cpp
index 4c718a1..d03f0cd 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2016, Regents of the University of California,
+ * Copyright (c) 2013-2017, Regents of the University of California,
  *
  * This file is part of NFD Control Center.  See AUTHORS.md for complete list of NFD
  * authors and contributors.
@@ -18,9 +18,9 @@
  */
 
 #include <QtQml/QQmlApplicationEngine>
+#include <QtQml/QQmlContext>
 #include <QtWidgets/QApplication>
 #include <QtWidgets/QPushButton>
-#include <QtQml/QQmlContext>
 
 #include "forwarder-status.hpp"
 #include "fib-status.hpp"
diff --git a/src/main.qml b/src/main.qml
index 6eb7b18..7ef1990 100644
--- a/src/main.qml
+++ b/src/main.qml
@@ -7,7 +7,7 @@
     visible: false
     id: window
     title: "NFD Control Center"
-    minimumWidth: 600
+    minimumWidth: 750
     minimumHeight: 400
 
     TabView {
@@ -44,19 +44,11 @@
                             text: "Automatically start NFD Control Center on login"
                         }
                         CheckBox {
-                            id: discoverHub
-                            text: "Discover nearest NDN hub"
-                            onCheckedChanged: {
-                                if (this.checked) {
-                                    trayModel.autoConfig()
-                                }
-                            }
+                            id: autoConfig
+                            text: "Automatically start NDN auto configuration"
+                            checked: trayModel.isAutoConfigEnabled()
+                            onCheckedChanged: trayModel.startStopAutoConfig(this.checked)
                         }
-                        // CheckBox {
-                        //     id: checkUpdate
-                        //     enabled: false
-                        //     text: "Check for software updates"
-                        // }
                     }
                 }
                 GroupBox {
@@ -98,7 +90,7 @@
                     anchors.rightMargin: 20
                     anchors.bottomMargin: 20
 
-                    onClicked: trayModel.startStopNfd()
+                    onClicked: trayModel.startStopNfd(autoConfig.checked)
                 }
             }
         }
@@ -150,6 +142,19 @@
             }
         }
         Tab {
+            title: "Auto-config status"
+            TextArea {
+                id: autoConfigText
+                anchors.fill: parent
+                anchors.topMargin: 20
+                anchors.bottomMargin: 20
+                anchors.leftMargin: 20
+                anchors.rightMargin: 20
+                readOnly: true
+                text: acText
+            }
+        }
+        Tab {
             title: "Security"
             Column {
                 spacing: 2
diff --git a/src/tray-menu.cpp b/src/tray-menu.cpp
index 3d3afe7..28b6d36 100644
--- a/src/tray-menu.cpp
+++ b/src/tray-menu.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2016, Regents of the University of California.
+ * Copyright (c) 2013-2017, Regents of the University of California.
  *
  * This file is part of NFD Control Center.  See AUTHORS.md for complete list of NFD
  * authors and contributors.
@@ -37,7 +37,6 @@
 
 #ifdef WAF
 #include "tray-menu.moc"
-// #include "tray-menu.cpp.moc"
 #endif
 
 namespace ndn {
@@ -54,8 +53,11 @@
   , m_entryQuit(new QAction("Quit", m_menu))
   , m_keyViewerDialog(new ncc::KeyViewerDialog)
   , m_face(face)
+  , m_acProc(new QProcess())
+  , m_settings(new QSettings())
 {
   connect(m_entryPref, SIGNAL(triggered()), this, SIGNAL(showApp()));
+  connect(this, SIGNAL(showApp()), this, SLOT(showPref()));
   connect(m_entrySec, SIGNAL(triggered()), m_keyViewerDialog, SLOT(present()));
   connect(m_entryQuit, SIGNAL(triggered()), this, SLOT(quitApp()));
 
@@ -67,9 +69,8 @@
           Qt::QueuedConnection);
 
   m_context->setContextProperty("startStopButtonText", QVariant::fromValue(QString("Start NFD")));
+  m_context->setContextProperty("acText", QVariant::fromValue(QString("")));
 
-  // m_menu->addAction(start);
-  // m_menu->addAction(stop);
   m_menu->addAction(m_entryPref);
   m_menu->addAction(m_entrySec);
 #ifdef OSX_BUILD
@@ -82,19 +83,108 @@
           this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
   m_tray->setIcon(QIcon(DISCONNECT_ICON));
   m_tray->show();
+  if (isAutoConfigEnabled()) {
+    stopAutoConfig(); // Make sure no more than one auto-config process exist
+    QTimer* mTimer = new QTimer(this);
+    mTimer->setSingleShot(true);
+    connect(mTimer, SIGNAL(timeout()), SLOT(startAutoConfig()));
+    mTimer->start(2000);
+  }
 }
 
 TrayMenu::~TrayMenu()
 {
 }
 
-Q_INVOKABLE void
-TrayMenu::autoConfig()
+void
+TrayMenu::appendMsg(QString &target, QString source)
 {
-  std::cout << "auto config" << std::endl;
+  int maxLine = 100; // Max line that will show in auto-config status tab view
+  if (target.count(QString("\n")) > maxLine) { // Only when target QString has more line than maxLine, it needs remove line
+    int end = target.indexOf(QString("\n"));
+    target.remove(0, end + 1); // Remove the first line of target
+  }
+  target.append(source);
+}
+
+void
+TrayMenu::showPref()
+{
+  m_context->setContextProperty("acText", QVariant::fromValue(m_autoConfigMsg)); // Update auto-config status tab view
+}
+
+void
+TrayMenu::processOutput()
+{
+  std::string msg = m_acProc->readAllStandardOutput().toStdString();
+  if (msg != "") {
+    appendMsg(m_autoConfigMsg, QString::fromStdString(msg));
+  }
+  msg = m_acProc->readAllStandardError().toStdString();
+  if (msg != "") {
+    appendMsg(m_autoConfigMsg, QString::fromStdString(msg));
+  }
+  m_context->setContextProperty("acText", QVariant::fromValue(m_autoConfigMsg));
+}
+
+Q_INVOKABLE bool
+TrayMenu::isAutoConfigEnabled()
+{
+  bool sAutoConfig = m_settings.value("main/auto-config", QVariant(false)).toBool();
+  return sAutoConfig;
+}
+
+void
+TrayMenu::startAutoConfig()
+{
+  if (m_isNfdRunning) {
+    appendMsg(m_autoConfigMsg, QString("NDN auto configuration will start...\n"));
+    connect(m_acProc, SIGNAL(readyReadStandardOutput()), this, SLOT(processOutput()));
+    connect(m_acProc, SIGNAL(readyReadStandardError()), this, SLOT(processOutput()));
+    m_acProc->start((QCoreApplication::applicationDirPath().toStdString() + "/../Platform/ndn-autoconfig").c_str(),
+                      QStringList()
+                        << "--daemon");
+  }
+}
+
+void
+TrayMenu::stopAutoConfig()
+{
+#ifdef OSX_BUILD
   QProcess* proc = new QProcess();
   connect(proc, SIGNAL(finished(int)), proc, SLOT(deleteLater()));
-  // proc->start(NFD_AUTOCONFIG_COMMAND);
+  proc->startDetached("killall", QStringList() << "ndn-autoconfig");
+#endif
+}
+
+Q_INVOKABLE void
+TrayMenu::startStopAutoConfig(bool autoConfig)
+{
+  if (m_isNfdRunning) {
+    if (autoConfig) {
+      stopAutoConfig(); // Make sure no more than one auto-config process exist
+      QTimer* mTimer = new QTimer(this);
+      mTimer->setSingleShot(true);
+      connect(mTimer, SIGNAL(timeout()), SLOT(startAutoConfig()));
+      mTimer->start(2000);
+      m_context->setContextProperty("acText", QVariant::fromValue(m_autoConfigMsg));
+      m_settings.setValue("main/auto-config", true);
+    }
+    else {
+      stopAutoConfig();
+      appendMsg(m_autoConfigMsg, QString("NDN auto configuration will be stopped!\n"));
+      m_context->setContextProperty("acText", QVariant::fromValue(m_autoConfigMsg));
+      m_settings.setValue("main/auto-config", false);
+    }
+  }
+  else { // No need to start or stop auto-config when NFD is not running, but it needs to update settings
+    if (autoConfig) {
+      m_settings.setValue("main/auto-config", true);
+    }
+    else {
+      m_settings.setValue("main/auto-config", false);
+    }
+  }
 }
 
 void
@@ -118,13 +208,24 @@
 }
 
 Q_INVOKABLE void
-TrayMenu::startStopNfd()
+TrayMenu::startStopNfd(bool autoConfig)
 {
   if (!m_isNfdRunning) {
     startNfd();
+    if (autoConfig) {
+      stopAutoConfig(); // Make sure no more than one auto-config process exist
+      QTimer* mTimer = new QTimer(this);
+      mTimer->setSingleShot(true);
+      connect(mTimer, SIGNAL(timeout()), SLOT(startAutoConfig()));
+      mTimer->start(2000);
+      m_context->setContextProperty("acText", QVariant::fromValue(m_autoConfigMsg));
+    }
   }
   else {
     stopNfd();
+    stopAutoConfig();
+    appendMsg(m_autoConfigMsg, QString("NDN auto configuration will be stopped!\n"));
+    m_context->setContextProperty("acText", QVariant::fromValue(m_autoConfigMsg));
   }
 }
 
@@ -138,15 +239,17 @@
                       QStringList()
                         << "--config"
                         << (QCoreApplication::applicationDirPath().toStdString() + "/../etc/ndn/nfd.conf").c_str());
-// #endif
-//   QProcess * proc = new QProcess();
-//   connect(proc, SIGNAL(finished(int)), proc, SLOT(deleteLater()));
-// #ifdef __linux__
-//   proc->start("gksudo", QStringList() << NFD_START_COMMAND);
-// #else
-//   proc->start("osascript", QStringList()
-//               << "-e"
-//               << "do shell script \"" NFD_START_COMMAND "\" with administrator privileges");
+
+
+  // #endif
+  //   QProcess * proc = new QProcess();
+  //   connect(proc, SIGNAL(finished(int)), proc, SLOT(deleteLater()));
+  // #ifdef __linux__
+  //   proc->start("gksudo", QStringList() << NFD_START_COMMAND);
+  // #else
+  //   proc->start("osascript", QStringList()
+  //               << "-e"
+  //               << "do shell script \"" NFD_START_COMMAND "\" with administrator privileges");
 #endif
 }
 
@@ -175,9 +278,6 @@
   connect(addNewRoute,SIGNAL(finished(int)), addNewRoute, SLOT(deleteLater()));
   addNewRoute->start("bash", QStringList() << "-c" << cmd);
   std::cout << "Done" << std::endl;
-
-
-//   QProcess * proc = new QProcess();
 }
 
 void
@@ -192,7 +292,6 @@
 
 }
 
-
 void
 TrayMenu::updateNfdActivityIcon(bool isActive)
 {
diff --git a/src/tray-menu.hpp b/src/tray-menu.hpp
index cda18b8..3c7b0f0 100644
--- a/src/tray-menu.hpp
+++ b/src/tray-menu.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2014, Regents of the University of California,
+ * Copyright (c) 2013-2017, Regents of the University of California,
  *
  * This file is part of NFD Control Center.  See AUTHORS.md for complete list of NFD
  * authors and contributors.
@@ -25,10 +25,15 @@
 #include <QtCore/QObject>
 #include <QtCore/QProcess>
 #include <QtCore/QCoreApplication>
+#include <QtCore/QSettings>
 
+#include <QtWidgets/QWidget>
 #include <QtWidgets/QSystemTrayIcon>
 #include <QtWidgets/QAction>
 #include <QtWidgets/QMenu>
+#include <QtWidgets/QVBoxLayout>
+#include <QtWidgets/QPlainTextEdit>
+#include <QtWidgets/QPushButton>
 
 #include <QtQml/QQmlContext>
 
@@ -55,11 +60,14 @@
 
   ~TrayMenu();
 
-  Q_INVOKABLE void
-  autoConfig();
+  Q_INVOKABLE bool
+  isAutoConfigEnabled();
 
   Q_INVOKABLE void
-  startStopNfd();
+  startStopAutoConfig(bool autoConfig);
+
+  Q_INVOKABLE void
+  startStopNfd(bool autoConfig);
 
   Q_INVOKABLE void
   addDeleteRoute();
@@ -79,6 +87,12 @@
   iconActivated(QSystemTrayIcon::ActivationReason reason);
 
   void
+  startAutoConfig();
+
+  void
+  stopAutoConfig();
+
+  void
   startNfd();
 
   void
@@ -90,6 +104,15 @@
   void
   enableCli();
 
+  void
+  processOutput();
+
+  void
+  showPref();
+
+  static void
+  appendMsg(QString &target, QString source);
+
 private:
   QQmlContext* m_context;
   bool m_isNfdRunning;
@@ -97,6 +120,9 @@
   QMenu* m_menu;
   QAction* m_entryPref;
   QAction* m_entrySec;
+  QProcess* m_acProc;
+  QString m_autoConfigMsg;
+  QSettings m_settings;
 #ifdef OSX_BUILD
   QAction* m_entryEnableCli;
 #endif
