diff --git a/ChronoShare.desktop.in b/ChronoShare.desktop.in
new file mode 100755
index 0000000..ee6ada4
--- /dev/null
+++ b/ChronoShare.desktop.in
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Name=ChronoShare
+Comment=Peer-to-peer file sharing over NDN
+Exec=${BINDIR}/ChronoShare
+Icon=${DATADIR}/ChronoShare/chronoshare-big.png
+Terminal=false
+Type=Application
+StartupNotify=true
diff --git a/ccnx/ccnx-discovery.cpp b/ccnx/ccnx-discovery.cpp
index afb0307..e6c4e84 100644
--- a/ccnx/ccnx-discovery.cpp
+++ b/ccnx/ccnx-discovery.cpp
@@ -22,12 +22,12 @@
 TaggedFunction::GetRandomTag()
 {
   //boost::random::random_device rng;
-  boost::random::uniform_int_distribution<> dist(0, CHAR_SET.size() - 1);
+  //boost::random::uniform_int_distribution<> dist(0, CHAR_SET.size() - 1);
   ostringstream oss;
-  for (int i = 0; i < DEFAULT_TAG_SIZE; i++)
-  {
+  //for (int i = 0; i < DEFAULT_TAG_SIZE; i++)
+  //{
     //oss << CHAR_SET[dist(rng)];
-  }
+  //}
   return oss.str();
 }
 
diff --git a/ccnx/ccnx-discovery.h b/ccnx/ccnx-discovery.h
index 959167a..b03a937 100644
--- a/ccnx/ccnx-discovery.h
+++ b/ccnx/ccnx-discovery.h
@@ -28,8 +28,7 @@
 #include "scheduler.h"
 #include <boost/shared_ptr.hpp>
 #include <boost/function.hpp>
-#include <boost/random/random_device.hpp>
-#include <boost/random/uniform_int_distribution.hpp>
+#include <boost/random.hpp>
 #include <boost/thread/mutex.hpp>
 #include <boost/thread/locks.hpp>
 #include <list>
diff --git a/gui/chronosharegui.cpp b/gui/chronosharegui.cpp
index 0d3580e..2ec6770 100644
--- a/gui/chronosharegui.cpp
+++ b/gui/chronosharegui.cpp
@@ -22,6 +22,7 @@
  */
 
 #include "chronosharegui.h"
+#include "config.h"
 
 #include "logging.h"
 #include "ccnx-wrapper.h"
@@ -42,7 +43,8 @@
 #else
 static const string DOC_ROOT = ":/html";
 #endif
-static const QString ICON_PICTURE_QSTRING(":/images/friends-group-icon.png");
+static const QString ICON_BIG_FILE(":/images/chronoshare-big.png");
+static const QString ICON_TRAY_FILE(":/images/" TRAY_ICON);
 
 INIT_LOGGER ("Gui");
 
@@ -250,7 +252,7 @@
   messageBox.setWindowTitle(title);
   messageBox.setText(text);
 
-  messageBox.setIconPixmap(QPixmap(ICON_PICTURE_QSTRING));
+  messageBox.setIconPixmap(QPixmap(ICON_BIG_FILE));
 
   messageBox.exec();
 }
@@ -262,7 +264,7 @@
   messageBox.setText(text);
   messageBox.setInformativeText(infotext);
 
-  messageBox.setIconPixmap(QPixmap(ICON_PICTURE_QSTRING));
+  messageBox.setIconPixmap(QPixmap(ICON_BIG_FILE));
 
   messageBox.exec();
 }
@@ -343,10 +345,8 @@
   // create new tray icon
   m_trayIcon = new QSystemTrayIcon(this);
 
-#ifdef ADHOC_SUPPORTED
   // associate the menu with the tray icon
   m_trayIcon->setContextMenu(m_trayIconMenu);
-#endif
 
   // handle left click of icon
   connect(m_trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayIconClicked(QSystemTrayIcon::ActivationReason)));
@@ -404,7 +404,7 @@
 void ChronoShareGui::setIcon()
 {
   // set the icon image
-  m_trayIcon->setIcon(QIcon(ICON_PICTURE_QSTRING));
+  m_trayIcon->setIcon(QIcon(ICON_TRAY_FILE));
 }
 
 void ChronoShareGui::openSharedFolder()
diff --git a/gui/images.qrc b/gui/images.qrc
index 29a8104..0c4f852 100644
--- a/gui/images.qrc
+++ b/gui/images.qrc
@@ -1,5 +1,6 @@
 <RCC>
     <qresource prefix="/">
-        <file>images/friends-group-icon.png</file>
+        <file>images/chronoshare-big.png</file>
+	<file>images/chronoshare-ubuntu.png</file>
     </qresource>
 </RCC>
diff --git a/gui/images/friends-group-icon.png b/gui/images/chronoshare-big.png
similarity index 100%
rename from gui/images/friends-group-icon.png
rename to gui/images/chronoshare-big.png
Binary files differ
diff --git a/gui/images/chronoshare-ubuntu.png b/gui/images/chronoshare-ubuntu.png
new file mode 100644
index 0000000..cbf98d3
--- /dev/null
+++ b/gui/images/chronoshare-ubuntu.png
Binary files differ
diff --git a/server/server.cpp b/server/server.cpp
index df790ed..11b74cb 100644
--- a/server/server.cpp
+++ b/server/server.cpp
@@ -20,7 +20,7 @@
 server::server(const std::string& address, const std::string& port,
     const std::string& doc_root)
   : io_service_(),
-    signals_(io_service_),
+    // signals_(io_service_),
     acceptor_(io_service_),
     connection_manager_(),
     new_connection_(),
@@ -29,12 +29,12 @@
   // Register to handle the signals that indicate when the server should exit.
   // It is safe to register for the same signal multiple times in a program,
   // provided all registration for the specified signal is made through Asio.
-  signals_.add(SIGINT);
-  signals_.add(SIGTERM);
-#if defined(SIGQUIT)
-  signals_.add(SIGQUIT);
-#endif // defined(SIGQUIT)
-  signals_.async_wait(boost::bind(&server::handle_stop, this));
+//  signals_.add(SIGINT);
+//  signals_.add(SIGTERM);
+//#if defined(SIGQUIT)
+//  signals_.add(SIGQUIT);
+//#endif // defined(SIGQUIT)
+//  signals_.async_wait(boost::bind(&server::handle_stop, this));
 
   // Open the acceptor with the option to reuse the address (i.e. SO_REUSEADDR).
   boost::asio::ip::tcp::resolver resolver(io_service_);
diff --git a/server/server.hpp b/server/server.hpp
index b82088b..8a81b06 100644
--- a/server/server.hpp
+++ b/server/server.hpp
@@ -51,7 +51,7 @@
   boost::asio::io_service io_service_;
 
   /// The signal_set is used to register for process termination notifications.
-  boost::asio::signal_set signals_;
+  // boost::asio::signal_set signals_;
 
   /// Acceptor used to listen for incoming connections.
   boost::asio::ip::tcp::acceptor acceptor_;
diff --git a/src/dispatcher.cc b/src/dispatcher.cc
index 717fadb..390cb4a 100644
--- a/src/dispatcher.cc
+++ b/src/dispatcher.cc
@@ -235,7 +235,13 @@
     {
       m_actionLog->AddLocalActionUpdate (relativeFilePath.generic_string(),
                                          *hash,
-                                         last_write_time (absolutePath), status (absolutePath).permissions (), seg_num);
+                                         last_write_time (absolutePath), 
+#if BOOST_VERSION >= 104900
+                                         status (absolutePath).permissions (), 
+#else
+                                         0,
+#endif
+                                         seg_num);
 
       // notify SyncCore to propagate the change
       m_core->localStateChangedDelayed ();
@@ -473,7 +479,9 @@
         {
           if (filesystem::exists (filePath) &&
               filesystem::last_write_time (filePath) == file->mtime () &&
+#if BOOST_VERSION >= 104900
               filesystem::status (filePath).permissions () == static_cast<filesystem::perms> (file->mode ()) &&
+#endif
               *Hash::FromFileContent (filePath) == hash)
             {
               _LOG_DEBUG ("Asking to assemble a file, but file already exists on a filesystem");
@@ -491,7 +499,9 @@
         if (ok)
           {
             last_write_time (filePath, file->mtime ());
+#if BOOST_VERSION >= 104900
             permissions (filePath, static_cast<filesystem::perms> (file->mode ()));
+#endif
 
             m_fileState->SetFileComplete (file->filename ());
           }
diff --git a/src/fetcher.h b/src/fetcher.h
index 0a0fe9d..515b2e9 100644
--- a/src/fetcher.h
+++ b/src/fetcher.h
@@ -28,6 +28,9 @@
 #include "executor.h"
 #include <boost/intrusive/list.hpp>
 #include <boost/date_time/posix_time/posix_time_types.hpp>
+#include <set>
+
+#include <set>
 
 class FetchManager;
 
diff --git a/src/state-server.cc b/src/state-server.cc
index 89b6095..2d1d96a 100644
--- a/src/state-server.cc
+++ b/src/state-server.cc
@@ -135,7 +135,7 @@
   Object id;
 
   id.push_back (Pair ("userName", boost::lexical_cast<string> (name)));
-  id.push_back (Pair ("seqNo",    seq_no));
+  id.push_back (Pair ("seqNo",    static_cast<int64_t> (seq_no)));
 
   json.push_back (Pair ("id", id));
 
@@ -463,7 +463,9 @@
         {
           if (filesystem::exists (filePath) &&
               filesystem::last_write_time (filePath) == file->mtime () &&
+#if BOOST_VERSION >= 104900
               filesystem::status (filePath).permissions () == static_cast<filesystem::perms> (file->mode ()) &&
+#endif
               *Hash::FromFileContent (filePath) == hash)
             {
               m_ccnx->publishData (interest, "OK: File already exists", 1);
@@ -481,7 +483,9 @@
       if (m_objectManager.objectsToLocalFile (deviceName, hash, filePath))
         {
           last_write_time (filePath, file->mtime ());
+#if BOOST_VERSION >= 104900
           permissions (filePath, static_cast<filesystem::perms> (file->mode ()));
+#endif
           m_ccnx->publishData (interest, "OK", 1);
         }
       else
diff --git a/wscript b/wscript
index c86104e..d82ce50 100644
--- a/wscript
+++ b/wscript
@@ -13,10 +13,10 @@
     if Utils.unversioned_sys_platform () == "darwin":
         opt.add_option('--auto-update', action='store_true',default=False,dest='autoupdate',help='''(OSX) Download sparkle framework and enable autoupdate feature''')
 
-    opt.load('compiler_c compiler_cxx boost ccnx protoc qt4')
+    opt.load('compiler_c compiler_cxx boost ccnx protoc qt4 gnu_dirs')
 
 def configure(conf):
-    conf.load("compiler_c compiler_cxx")
+    conf.load("compiler_c compiler_cxx gnu_dirs")
 
     if conf.options.debug:
         conf.define ('_DEBUG', 1)
@@ -48,6 +48,10 @@
     conf.check_cfg(package='libevent', args=['--cflags', '--libs'], uselib_store='LIBEVENT', mandatory=True)
     conf.check_cfg(package='libevent_pthreads', args=['--cflags', '--libs'], uselib_store='LIBEVENT_PTHREADS', mandatory=True)
 
+    conf.define ("TRAY_ICON", "chronoshare-big.png")
+    if Utils.unversioned_sys_platform () == "linux":
+        conf.define ("TRAY_ICON", "chronoshare-ubuntu.png")
+
     if Utils.unversioned_sys_platform () == "darwin":
         conf.check_cxx(framework_name='Foundation', uselib_store='OSX_FOUNDATION', mandatory=False, compile_filename='test.mm')
         conf.check_cxx(framework_name='AppKit',     uselib_store='OSX_APPKIT',     mandatory=False, compile_filename='test.mm')
@@ -261,6 +265,16 @@
             if bld.env['HAVE_LOCAL_SPARKLE']:
                 qt.mac_frameworks = "osx/Frameworks/Sparkle.framework"
 
+    if Utils.unversioned_sys_platform () == "linux":
+        bld (
+            features = "process_in",
+            target = "ChronoShare.desktop",
+            source = "ChronoShare.desktop.in",
+            install_prefix = "${DATADIR}/applications",
+            )
+        bld.install_files ("${DATADIR}/applications", "ChronoShare.desktop")
+        bld.install_files ("${DATADIR}/ChronoShare", "gui/images/chronoshare-big.png")
+
     cmdline = bld (
         target = "csd",
 	features = "qt4 cxx cxxprogram",
@@ -284,10 +298,22 @@
     """Alias .mm files to be compiled the same as .cc files, gcc/clang will do the right thing."""
     return self.create_compiled_task('cxx', node)
 
-@TaskGen.extension('.js', '.png', '.css', '.html', '.gif', '.ico')
+@TaskGen.extension('.js', '.png', '.css', '.html', '.gif', '.ico', '.in')
 def sig_hook(self, node):
     node.sig=Utils.h_file (node.abspath())
 
+@TaskGen.feature('process_in')
+@TaskGen.after_method('process_source')
+def create_process_in(self):
+    dst = self.bld.path.find_or_declare (self.target)
+    tsk = self.create_task ('process_in', self.source, dst)
+
+class process_in(Task.Task):
+    color='PINK'
+
+    def run (self):
+        self.outputs[0].write (Utils.subst_vars(self.inputs[0].read (), self.env))
+
 @TaskGen.feature('html_resources')
 @TaskGen.before_method('process_source')
 def create_qrc_task(self):
