diff --git a/fs-watcher/README.md b/fs-watcher/README.md
deleted file mode 100644
index da229ca..0000000
--- a/fs-watcher/README.md
+++ /dev/null
@@ -1,65 +0,0 @@
-Overview:
-
-FileSystemWatcher reports changes that are made to a monitored directory by signaling a registered callback function and passing that function a list of changes that have occurred.  Each element of the list represents a file and the action that was performed on that file. 
-
-Example:
-
-    ADDED: /Users/jared/Desktop/test.txt
-
-The list is held in a vector of type sEventInfo, where sEventInfo is a struct defined as follows:
-
-    enum eEvent {
-        ADDED = 0,
-        MODIFIED,
-        DELETED
-    };
-
-    struct sEventInfo {
-        eEvent event;
-        std::string absFilePath;
-    };
-
-The eEvent enumerator specifies the action taken on the file and the string absFilePath is the absolute file path of the file.
-
-Usage:
-
-SimpleEventCatcher is a dummy class that serves as an example of how to register for signals from FileSystemWatcher.  These are the basic steps:
-
-    // invoke file system watcher on specified path
-    FileSystemWatcher watcher("/Users/jared/Desktop");
-
-    // pass the instance of FileSystemWatcher to the class
-    // that will register for event notifications
-    SimpleEventCatcher dirEventCatcher(&watcher);
-
-    // register for directory event signal (callback function)
-    QObject::connect(watcher, SIGNAL(dirEventSignal(std::vector<sEventInfo>)), this,
-                     SLOT(handleDirEvent(std::vector<sEventInfo>)));
-
-    // implement handleDirEvent
-    void SimpleEventCatcher::handleDirEvent(std::vector<sEventInfo>)
-    {
-        /* implementation here */
-    }
-
-Debug:
-
-The debug flag can be set in filesystemwatcher.h.  It is set to 1 by default and outputs the following information to the console:
-
-[BOOTSTRAP] 
-
-[TIMER] Triggered Path:  "/Users/jared/Desktop" 
-	 "ADDED: /Users/jared/Desktop/test2.txt" 
-	 "ADDED: /Users/jared/Desktop/test.txt" 
-
-[SIGNAL] From SimpleEventCatcher Slot: 
-	 "ADDED: /Users/jared/Desktop/test2.txt" 
-	 "ADDED: /Users/jared/Desktop/test.txt" 
-
-[\BOOTSTRAP] 
-
-[WATCHER] Triggered Path:  "/Users/jared/Desktop" 
-	 "DELETED: /Users/jared/Desktop/test2.txt" 
-
-[SIGNAL] From SimpleEventCatcher Slot: 
-	 "DELETED: /Users/jared/Desktop/test2.txt" 
diff --git a/fs-watcher/simpleeventcatcher.cpp b/fs-watcher/simpleeventcatcher.cpp
deleted file mode 100644
index 610903c..0000000
--- a/fs-watcher/simpleeventcatcher.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-// /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-// /*
-//  * Copyright (c) 2012-2013 University of California, Los Angeles
-//  *
-//  * This program is free software; you can redistribute it and/or modify
-//  * it under the terms of the GNU General Public License version 2 as
-//  * published by the Free Software Foundation;
-//  *
-//  * This program is distributed in the hope that it will be useful,
-//  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  * GNU General Public License for more details.
-//  *
-//  * You should have received a copy of the GNU General Public License
-//  * along with this program; if not, write to the Free Software
-//  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-//  *
-//  * Author: Jared Lindblom <lindblom@cs.ucla.edu>
-//  */
-
-// #include "simpleeventcatcher.h"
-
-// SimpleEventCatcher::SimpleEventCatcher(FileSystemWatcher* watcher, QObject *parent) :
-//   QObject(parent)
-// {
-//   // register for directory event signal (callback function)
-//   QObject::connect(watcher, SIGNAL(dirEventSignal(std::vector<sEventInfo>)), this, SLOT(handleDirEvent(std::vector<sEventInfo>)));
-// }
-
-// void SimpleEventCatcher::handleDirEvent(std::vector<sEventInfo> dirChanges)
-// {
-//   qDebug() << endl << "[SIGNAL] From SimpleEventCatcher Slot:";
-
-//   if(!dirChanges.empty())
-//     {
-//       for(size_t i = 0; i < dirChanges.size(); i++)
-//         {
-//           QString tempString;
-
-//           eEvent event = dirChanges[i].event;
-//           QString absFilePath = QString::fromStdString(dirChanges[i].absFilePath);
-
-//           switch(event)
-//             {
-//             case ADDED:
-//               tempString.append("ADDED: ");
-//               break;
-//             case MODIFIED:
-//               tempString.append("MODIFIED: ");
-//               break;
-//             case DELETED:
-//               tempString.append("DELETED: ");
-//               break;
-//             }
-
-//           tempString.append (absFilePath);
-
-//           qDebug() << "\t" << tempString;
-//         }
-//     }
-//   else
-//     {
-//       qDebug() << "\t[EMPTY]";
-//     }
-// }
-
-// #if WAF
-// #include "simpleeventcatcher.moc"
-// #include "simpleeventcatcher.cpp.moc"
-// #endif
diff --git a/fs-watcher/simpleeventcatcher.h b/fs-watcher/simpleeventcatcher.h
deleted file mode 100644
index a99d1f8..0000000
--- a/fs-watcher/simpleeventcatcher.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-// /*
-//  * Copyright (c) 2012-2013 University of California, Los Angeles
-//  *
-//  * This program is free software; you can redistribute it and/or modify
-//  * it under the terms of the GNU General Public License version 2 as
-//  * published by the Free Software Foundation;
-//  *
-//  * This program is distributed in the hope that it will be useful,
-//  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  * GNU General Public License for more details.
-//  *
-//  * You should have received a copy of the GNU General Public License
-//  * along with this program; if not, write to the Free Software
-//  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-//  *
-//  * Author: Jared Lindblom <lindblom@cs.ucla.edu>
-//  */
-
-// #ifndef SIMPLEEVENTCATCHER_H
-// #define SIMPLEEVENTCATCHER_H
-
-// #include "filesystemwatcher.h"
-// #include <QObject>
-// #include <QDebug>
-// #include <vector>
-// #include <structs.h>
-
-// class SimpleEventCatcher : public QObject
-// {
-//   Q_OBJECT
-// public:
-//   explicit SimpleEventCatcher(FileSystemWatcher* watcher, QObject *parent = 0);
-
-// public slots:
-//   // handle signal
-//   void handleDirEvent(std::vector<sEventInfo> dirChanges);
-// };
-
-// #endif // SIMPLEEVENTCATCHER_H
diff --git a/fs-watcher/structs.h b/fs-watcher/structs.h
deleted file mode 100644
index 93008b1..0000000
--- a/fs-watcher/structs.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2012-2013 University of California, Los Angeles
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Jared Lindblom <lindblom@cs.ucla.edu>
- */
-
-#ifndef STRUCTS_H
-#define STRUCTS_H
-
-enum eEvent {
-    ADDED = 0,
-    MODIFIED,
-    DELETED
-};
-
-struct sEventInfo {
-    eEvent event;
-    std::string absFilePath;
-};
-
-#endif // STRUCTS_H
diff --git a/gui/chronosharegui.cpp b/gui/chronosharegui.cpp
index 9fca3b3..f310594 100644
--- a/gui/chronosharegui.cpp
+++ b/gui/chronosharegui.cpp
@@ -20,6 +20,12 @@
 
 #include "chronosharegui.h"
 #include "logging.h"
+#include "ccnx-wrapper.h"
+
+#include <boost/make_shared.hpp>
+
+using namespace boost;
+using namespace Ccnx;
 
 INIT_LOGGER ("Gui");
 
@@ -81,14 +87,19 @@
   //            const std::string &sharedFolder, const boost::filesystem::path &rootDir,
   //            Ccnx::CcnxWrapperPtr ccnx, SchedulerPtr scheduler, int poolSize = 2);
 
+  m_dispatcher = new Dispatcher (m_username.toStdString (), m_sharedFolderName.toStdString (),
+                                 m_dirPath.toStdString (), make_shared<CcnxWrapper> ());
 
   // Alex: this **must** be here, otherwise m_dirPath will be uninitialized
-  m_watcher = new FsWatcher (m_dirPath);
+  m_watcher = new FsWatcher (m_dirPath,
+                             bind (&Dispatcher::Did_LocalFile_AddOrModify, m_dispatcher, _1),
+                             bind (&Dispatcher::Did_LocalFile_Delete,      m_dispatcher, _1));
 }
 
 ChronoShareGui::~ChronoShareGui()
 {
   delete m_watcher; // stop filewatching ASAP
+  delete m_dispatcher; // stop dispatcher ASAP, but after watcher (to prevent triggering callbacks on deleted object)
 
   // cleanup
   delete m_trayIcon;
diff --git a/gui/chronosharegui.h b/gui/chronosharegui.h
index 098a48e..bf42515 100644
--- a/gui/chronosharegui.h
+++ b/gui/chronosharegui.h
@@ -35,6 +35,7 @@
 #include <QApplication>
 
 #include "fs-watcher.h"
+#include "dispatcher.h"
 
 class ChronoShareGui : public QDialog
 {
@@ -101,7 +102,8 @@
   QString m_username; // username
   QString m_sharedFolderName; // shared folder name
 
-  FsWatcher* m_watcher;
+  FsWatcher  *m_watcher;
+  Dispatcher *m_dispatcher;
 
   QLabel* labelUsername;
   QPushButton* button;
diff --git a/fs-watcher/fs-watcher.cc b/gui/fs-watcher.cc
similarity index 96%
rename from fs-watcher/fs-watcher.cc
rename to gui/fs-watcher.cc
index 86c0f80..2c6f8a2 100644
--- a/fs-watcher/fs-watcher.cc
+++ b/gui/fs-watcher.cc
@@ -33,11 +33,15 @@
 
 INIT_LOGGER ("FsWatcher");
 
-FsWatcher::FsWatcher (QString dirPath, QObject* parent)
+FsWatcher::FsWatcher (QString dirPath,
+                      LocalFile_Change_Callback onChange, LocalFile_Change_Callback onDelete,
+                      QObject* parent)
   : QObject(parent)
   , m_watcher (new QFileSystemWatcher())
   , m_executor (1)
   , m_dirPath (dirPath)
+  , m_onChange (onChange)
+  , m_onDelete (onDelete)
 {
   _LOG_DEBUG ("Monitor dir: " << m_dirPath.toStdString ());
   // add main directory to monitor
diff --git a/fs-watcher/fs-watcher.h b/gui/fs-watcher.h
similarity index 85%
rename from fs-watcher/fs-watcher.h
rename to gui/fs-watcher.h
index 278a630..6ba6671 100644
--- a/fs-watcher/fs-watcher.h
+++ b/gui/fs-watcher.h
@@ -24,8 +24,7 @@
 
 #include <vector>
 #include <QFileSystemWatcher>
-
-#include "structs.h"
+#include <boost/filesystem.hpp>
 
 #include "executor.h"
 
@@ -34,8 +33,12 @@
   Q_OBJECT
 
 public:
+  typedef boost::function<void (const boost::filesystem::path &)> LocalFile_Change_Callback;
+
   // constructor
-  FsWatcher (QString dirPath, QObject* parent = 0);
+  FsWatcher (QString dirPath,
+             LocalFile_Change_Callback onChange, LocalFile_Change_Callback onDelete,
+             QObject* parent = 0);
 
   // destructor
   ~FsWatcher ();
@@ -76,6 +79,9 @@
   Executor m_executor;
 
   QString m_dirPath; // monitored path
+
+  LocalFile_Change_Callback m_onChange;
+  LocalFile_Change_Callback m_onDelete;
 };
 
 #endif // FILESYSTEMWATCHER_H
diff --git a/src/object-db.cc b/src/object-db.cc
index 6c2b786..7567c83 100644
--- a/src/object-db.cc
+++ b/src/object-db.cc
@@ -67,7 +67,7 @@
   res = sqlite3_exec (m_db, INIT_DATABASE.c_str (), NULL, NULL, &errmsg);
   if (res != SQLITE_OK && errmsg != 0)
     {
-      _LOG_DEBUG ("Init error: " << errmsg);
+      // _LOG_TRACE ("Init \"error\": " << errmsg);
       sqlite3_free (errmsg);
     }
 
@@ -98,7 +98,7 @@
           int countAll = sqlite3_column_int (stmt, 0);
           int countNonNull = sqlite3_column_int (stmt, 1);
 
-          _LOG_DEBUG ("Total segments: " << countAll << ", non-empty segments: " << countNonNull);
+          _LOG_TRACE ("Total segments: " << countAll << ", non-empty segments: " << countNonNull);
 
           if (countAll > 0 && countAll==countNonNull)
             {
diff --git a/wscript b/wscript
index 17e1e07..2300f7f 100644
--- a/wscript
+++ b/wscript
@@ -102,15 +102,6 @@
           includes = "ccnx scheduler src",
           )
 
-    qt = bld (
-        target = "fs-watcher",
-        features = "qt4 cxx",
-        defines = "WAF",
-          source = bld.path.ant_glob(['fs-watcher/*.cc']),
-        includes = "fs-watcher . src ",
-        use = "QTCORE QTGUI LOG4CXX"
-        )
-
     app_plist = '''<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
 <plist version="0.9">
@@ -136,7 +127,7 @@
         mac_plist = app_plist % "ChronoShare",
 	features = "qt4 cxx cxxprogram",
 	defines = "WAF",
-	source = bld.path.ant_glob(['gui/*.cpp', 'gui/*.qrc']),
-	includes = "src gui fs-watcher src . ",
+	source = bld.path.ant_glob(['gui/*.cpp', 'gui/*.cc', 'gui/*.qrc']),
+	includes = "ccnx scheduler src gui src . ",
 	use = "QTCORE QTGUI LOG4CXX fs-watcher ccnx database chronoshare"
 	)
