diff --git a/gui/chronosharegui.cpp b/gui/chronosharegui.cpp
index 13c3a51..9fca3b3 100644
--- a/gui/chronosharegui.cpp
+++ b/gui/chronosharegui.cpp
@@ -21,21 +21,48 @@
 #include "chronosharegui.h"
 #include "logging.h"
 
-
-
 INIT_LOGGER ("Gui");
 
 ChronoShareGui::ChronoShareGui(QWidget *parent)
-  : QWidget(parent)
-  , m_watcher (0)
-  // , m_settingsFilePath(QDir::homePath() + "/.chronoshare")
+  : QDialog(parent)
 {
+
+  setWindowTitle("Preferences");
+
+  labelUsername = new QLabel("Username");
+  labelSharedFolder = new QLabel("Shared Folder Name");
+  labelSharedFolderPath = new QLabel("Shared Folder Path");
+  editUsername = new QLineEdit();
+  editSharedFolder = new QLineEdit();
+  editSharedFolderPath = new QLineEdit();
+  editSharedFolderPath->setReadOnly(true);
+  QPalette pal = editSharedFolderPath->palette();
+  pal.setColor(QPalette::Active, QPalette::Base, pal.color(QPalette::Disabled, QPalette::Base));
+  editSharedFolderPath->setPalette(pal);
+  button = new QPushButton("Submit");
+  label = new QLabel();
+
+  connect(button, SIGNAL(clicked()), this, SLOT(changeSettings()));
+
+  mainLayout = new QVBoxLayout; //vertically
+  mainLayout->addWidget(labelUsername);
+  mainLayout->addWidget(editUsername);
+  mainLayout->addWidget(labelSharedFolder);
+  mainLayout->addWidget(editSharedFolder);
+  mainLayout->addWidget(labelSharedFolderPath);
+  mainLayout->addWidget(editSharedFolderPath);
+  mainLayout->addWidget(button);
+  mainLayout->addWidget(label);
+  setLayout(mainLayout);
+
   // load settings
   if(!loadSettings())
     {
       // prompt user to choose folder
-      openMessageBox("First Time Setup", "Please select your shared folder location.");
+      openMessageBox("First Time Setup", "Please enter a username, shared folder name and choose the shared folder path on your local filesystem.");
+      viewSettings();
       openFileDialog();
+      viewSettings();
     }
 
   // create actions that result from clicking a menu option
@@ -54,15 +81,14 @@
   //            const std::string &sharedFolder, const boost::filesystem::path &rootDir,
   //            Ccnx::CcnxWrapperPtr ccnx, SchedulerPtr scheduler, int poolSize = 2);
 
+
+  // Alex: this **must** be here, otherwise m_dirPath will be uninitialized
   m_watcher = new FsWatcher (m_dirPath);
 }
 
 ChronoShareGui::~ChronoShareGui()
 {
-  if (!m_watcher)
-    {
-      delete m_watcher;
-    }
+  delete m_watcher; // stop filewatching ASAP
 
   // cleanup
   delete m_trayIcon;
@@ -71,6 +97,14 @@
   delete m_viewSettings;
   delete m_changeFolder;
   delete m_quitProgram;
+
+  delete labelUsername;
+  delete labelSharedFolder;
+  delete editUsername;
+  delete editSharedFolder;
+  delete button;
+  delete label;
+  delete mainLayout;
 }
 
 void ChronoShareGui::openMessageBox(QString title, QString text)
@@ -168,6 +202,22 @@
   QProcess::execute("/usr/bin/osascript", scriptArgs);
 }
 
+void ChronoShareGui::changeSettings()
+{
+  if(!editUsername->text().isEmpty())
+    m_username = editUsername->text();
+  else
+    editUsername->setText(m_username);
+
+  if(!editSharedFolder->text().isEmpty())
+    m_sharedFolderName = editSharedFolder->text();
+  else
+    editSharedFolder->setText(m_sharedFolderName);
+
+  saveSettings();
+  this->hide();
+}
+
 void ChronoShareGui::openFileDialog()
 {
   // prompt user for new directory
@@ -176,14 +226,17 @@
   QFileInfo qFileInfo (tempPath);
 
   if(qFileInfo.isDir())
-    m_dirPath = tempPath;
+    {
+      m_dirPath = tempPath;
+      editSharedFolderPath->setText(m_dirPath);
+    }
   else
-    openMessageBox ("Error", "Not a valid folder, Ignoring.");
+    {
+      openMessageBox ("Error", "Not a valid folder, Ignoring.");
+    }
 
   _LOG_DEBUG ("Selected path: " << m_dirPath.toStdString ());
 
-  openMessageBox("Current Folder", "Current Shared Folder:\n" + m_dirPath, "You may change the folder by selecting \"change folder\" from the icon in the system tray.");
-
   // save settings
   saveSettings();
 }
@@ -199,13 +252,13 @@
 
 void ChronoShareGui::viewSettings()
 {
-  // simple for now
-  openMessageBox("Chronoshare Settings", "CurrentFolder:\n" + m_dirPath);
+  //simple for now
+  this->show();
 }
 
 bool ChronoShareGui::loadSettings()
 {
-  bool successful = false;
+  bool successful = true;
 
   // Load Settings
   // QSettings settings(m_settingsFilePath, QSettings::NativeFormat);
@@ -213,18 +266,40 @@
 
   // _LOG_DEBUG (lexical_cast<string> (settings.allKeys()));
 
-  if(settings.contains("dirPath"))
+  if(settings.contains("username"))
     {
-      m_dirPath = settings.value("dirPath", QDir::homePath()).toString();
-      successful = true;
+      m_username = settings.value("username", "admin").toString();
     }
   else
     {
-      m_dirPath = QDir::homePath();
       successful = false;
     }
 
-  _LOG_DEBUG ("Found configured path: " << (successful? m_dirPath.toStdString () : std::string("no")));
+  editUsername->setText(m_username);
+
+  if(settings.contains("sharedfoldername"))
+    {
+      m_sharedFolderName = settings.value("sharedfoldername", "shared").toString();
+    }
+  else
+    {
+      successful = false;
+    }
+
+  editSharedFolder->setText(m_sharedFolderName);
+
+  if(settings.contains("dirPath"))
+    {
+      m_dirPath = settings.value("dirPath", QDir::homePath()).toString();
+    }
+  else
+    {
+      successful = false;
+    }
+
+  editSharedFolderPath->setText(m_dirPath);
+
+  _LOG_DEBUG ("Found configured path: " << (successful ? m_dirPath.toStdString () : std::string("no")));
 
   return successful;
 }
@@ -234,12 +309,16 @@
   // Save Settings
   // QSettings settings(m_settingsFilePath, QSettings::NativeFormat);
   QSettings settings (QSettings::NativeFormat, QSettings::UserScope, "irl.cs.ucla.edu", "ChronoShare");
+
   settings.setValue("dirPath", m_dirPath);
+  settings.setValue("username", m_username);
+  settings.setValue("sharedfoldername", m_sharedFolderName);
 }
 
 void ChronoShareGui::closeEvent(QCloseEvent* event)
 {
   _LOG_DEBUG ("Close Event")
+    this->hide();
   event->ignore(); // don't let the event propagate to the base class
 }
 
diff --git a/gui/chronosharegui.h b/gui/chronosharegui.h
index b0d459e..098a48e 100644
--- a/gui/chronosharegui.h
+++ b/gui/chronosharegui.h
@@ -21,6 +21,7 @@
 #ifndef CHRONOSHAREGUI_H
 #define CHRONOSHAREGUI_H
 
+#include <QtGui>
 #include <QWidget>
 #include <QSystemTrayIcon>
 #include <QMenu>
@@ -35,7 +36,7 @@
 
 #include "fs-watcher.h"
 
-class ChronoShareGui : public QWidget
+class ChronoShareGui : public QDialog
 {
   Q_OBJECT
 
@@ -59,6 +60,9 @@
   // view chronoshare settings
   void viewSettings();
 
+  // change chronoshare settings
+  void changeSettings();
+
 private:
   // create actions that result from clicking a menu option
   void createActions();
@@ -94,8 +98,21 @@
   QAction* m_quitProgram; // quit program action
 
   QString m_dirPath; // shared directory
+  QString m_username; // username
+  QString m_sharedFolderName; // shared folder name
 
-  FsWatcher *m_watcher;
+  FsWatcher* m_watcher;
+
+  QLabel* labelUsername;
+  QPushButton* button;
+  QLabel* labelSharedFolder;
+  QLabel* labelSharedFolderPath;
+  QLineEdit* editUsername;
+  QLineEdit* editSharedFolder;
+  QLineEdit* editSharedFolderPath;
+  QLabel *label;
+  QVBoxLayout *mainLayout;
+
   // QString m_settingsFilePath; // settings file path
   // QString m_settings;
 };
