diff --git a/.gitignore b/.gitignore
index 07a4e83768add5d50d539a4061ed6b02298fdfc5..66afdcdbab5a6e66c535b4f83f0bc70aadebc020 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
 **/build
 **/dist
 **/glassfish-resources.xml
+.idea
diff --git a/bin/12IDB/dm-12idb-daq b/bin/12IDB/dm-12idb-daq
new file mode 100755
index 0000000000000000000000000000000000000000..daed1d22c634a005247f6665f6b57c6587009ed1
--- /dev/null
+++ b/bin/12IDB/dm-12idb-daq
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# Run command
+
+if [ -z $DM_ROOT_DIR ]; then
+    cd `dirname $0` && myDir=`pwd`
+    setupFile=$myDir/../../setup.sh
+    if [ ! -f $setupFile ]; then
+        echo "Cannot find setup file: $setupFile"
+        exit 1
+    fi
+    source $setupFile > /dev/null
+fi
+source $DM_ROOT_DIR/bin/dm_command_setup.sh
+
+eval "$DM_ROOT_DIR/src/python/dm/aps_beamline_tools/cli/daqCli.py $DM_COMMAND_ARGS"
+
+
diff --git a/bin/12IDB/dm-12idb-upload b/bin/12IDB/dm-12idb-upload
new file mode 100755
index 0000000000000000000000000000000000000000..9f753a812397f21b40fb9e9308449d903925fdf7
--- /dev/null
+++ b/bin/12IDB/dm-12idb-upload
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# Run command
+
+if [ -z $DM_ROOT_DIR ]; then
+    cd `dirname $0` && myDir=`pwd`
+    setupFile=$myDir/../../setup.sh
+    if [ ! -f $setupFile ]; then
+        echo "Cannot find setup file: $setupFile"
+        exit 1
+    fi
+    source $setupFile > /dev/null
+fi
+source $DM_ROOT_DIR/bin/dm_command_setup.sh
+
+eval "$DM_ROOT_DIR/src/python/dm/aps_beamline_tools/cli/uploadCli.py $DM_COMMAND_ARGS"
+
+
diff --git a/doc/RELEASE_NOTES.txt b/doc/RELEASE_NOTES.txt
index 72ae398fe62cb21927feb99d076e4941c12fa75d..dae7eee7e03f724969c957875665fa65a515b13f 100644
--- a/doc/RELEASE_NOTES.txt
+++ b/doc/RELEASE_NOTES.txt
@@ -1,3 +1,17 @@
+Release 3.1.0
+=============================
+-DM GUI
+  - Add settings page
+    - Allow user to specify refresh rates per module. 
+
+Release 3.0.1 (08/09/2019)
+=============================
+- Fixed issue with unchecked additions to metadata catalog
+- Updated support software:
+  - OpenJDK (replaces Oracle JDK)
+  - Payara (replaces Glassfish)
+- Added 12IDB utilities
+
 Release 3.0.0 (07/26/2019)
 =============================
 - Added python web service API for downloading files 
diff --git a/etc/daq-web-service.conf.template b/etc/daq-web-service.conf.template
index 0a6ea49dce549f6d179e74d1a6ebc9a72957adea..b3206abd6a1ebac7cda6a8009072f040fedd1c2d 100644
--- a/etc/daq-web-service.conf.template
+++ b/etc/daq-web-service.conf.template
@@ -19,13 +19,14 @@ principalAuthenticator2=LdapPasswordPrincipalAuthenticator(serverUrl='ldaps://ph
 
 [FileSystemObserver]
 # Minimum file processing delay since last update
-minFileProcessingDelayInSeconds=10
+minFileProcessingDelayInSeconds=30
 fileSystemEventTimeoutInSeconds=10
-fileSystemObserverAgent=dm.daq_web_service.service.impl.watchdogFileSystemObserverAgent.WatchdogFileSystemObserverAgent()
+#fileSystemObserverAgent=dm.daq_web_service.service.impl.watchdogFileSystemObserverAgent.WatchdogFileSystemObserverAgent()
 #fileSystemObserverAgent=dm.daq_web_service.service.impl.ftpFileSystemObserverAgent.FtpFileSystemObserverAgent('dmdaq', 2811)
+fileSystemObserverAgent=dm.daq_web_service.service.impl.pollingFileSystemObserverAgent.PollingFileSystemObserverAgent(pollingPeriod=30)
 
 [FileProcessingManager]
-numberOfProcessingThreads=5
+numberOfProcessingThreads=10
 defaultNumberOfRetries=1
 defaultRetryWaitPeriodInSeconds=60
 statUtility=dm.common.utility.fileUtility.FileUtility()
diff --git a/sbin/11IDB/dm_11idb_system_test_daq.sh b/sbin/11IDB/dm_11idb_system_test_daq.sh
index 04e2b5fe71bc271869cf81308f4e6a1ed934eb90..664d6cb6d18f8c56cf630b1e8d46127d0a7096ad 100755
--- a/sbin/11IDB/dm_11idb_system_test_daq.sh
+++ b/sbin/11IDB/dm_11idb_system_test_daq.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
 cd `dirname $0`/.. && DM_SBIN_DIR=`pwd`
-$DM_SBIN_DIR/dm_system_test_daq.sh /gdata/dm/test/11IDB dtn-int-01:/gdata/dm/test/11IDB
+$DM_SBIN_DIR/dm_system_test_daq.sh /home/dm_idb/test
 
 
diff --git a/sbin/11IDB/dm_11idb_system_test_upload.sh b/sbin/11IDB/dm_11idb_system_test_upload.sh
index b8b4b58338b10da9d25e34d23036973673b9da70..af73933125fc04464d128438bce0cddb2033fe31 100755
--- a/sbin/11IDB/dm_11idb_system_test_upload.sh
+++ b/sbin/11IDB/dm_11idb_system_test_upload.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
 cd `dirname $0`/.. && DM_SBIN_DIR=`pwd`
-$DM_SBIN_DIR/dm_system_test_upload.sh /gdata/dm/test/11IDB dtn-int-01:/gdata/dm/test/11IDB
+$DM_SBIN_DIR/dm_system_test_upload.sh /home/dm_idb/test
 
 
diff --git a/sbin/11IDC/dm_11idc_system_test_daq.sh b/sbin/11IDC/dm_11idc_system_test_daq.sh
index b3ab1a4aebdcad38e53c98922ac6927d5dff05ba..f36c5d7e62b9dd2b28a2e6945393caf7066a1b75 100755
--- a/sbin/11IDC/dm_11idc_system_test_daq.sh
+++ b/sbin/11IDC/dm_11idc_system_test_daq.sh
@@ -1,5 +1,5 @@
 #!/bin/sh
 
 cd `dirname $0`/.. && DM_SBIN_DIR=`pwd`
-$DM_SBIN_DIR/dm_system_test_daq.sh /gdata/dm/test/11IDC dtn-int-01:/gdata/dm/test/11IDC
+$DM_SBIN_DIR/dm_system_test_daq.sh /home/dm_idc/test
 
diff --git a/sbin/11IDC/dm_11idc_system_test_upload.sh b/sbin/11IDC/dm_11idc_system_test_upload.sh
index 9e0462930b2a568ef0be5bd55516ce100b74971d..5ddcd19b7aab3fa0d033f57e76f8254b4ad3a3ed 100755
--- a/sbin/11IDC/dm_11idc_system_test_upload.sh
+++ b/sbin/11IDC/dm_11idc_system_test_upload.sh
@@ -1,5 +1,5 @@
 #!/bin/sh
 
 cd `dirname $0`/.. && DM_SBIN_DIR=`pwd`
-$DM_SBIN_DIR/dm_system_test_upload.sh /gdata/dm/test/11IDC dtn-int-01:/gdata/dm/test/11IDC
+$DM_SBIN_DIR/dm_system_test_upload.sh /home/dm_idc/test
 
diff --git a/sbin/12IDB/dm_12idb_system_test_daq.sh b/sbin/12IDB/dm_12idb_system_test_daq.sh
new file mode 100755
index 0000000000000000000000000000000000000000..664d6cb6d18f8c56cf630b1e8d46127d0a7096ad
--- /dev/null
+++ b/sbin/12IDB/dm_12idb_system_test_daq.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+cd `dirname $0`/.. && DM_SBIN_DIR=`pwd`
+$DM_SBIN_DIR/dm_system_test_daq.sh /home/dm_idb/test
+
+
diff --git a/sbin/12IDB/dm_12idb_system_test_upload.sh b/sbin/12IDB/dm_12idb_system_test_upload.sh
new file mode 100755
index 0000000000000000000000000000000000000000..af73933125fc04464d128438bce0cddb2033fe31
--- /dev/null
+++ b/sbin/12IDB/dm_12idb_system_test_upload.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+cd `dirname $0`/.. && DM_SBIN_DIR=`pwd`
+$DM_SBIN_DIR/dm_system_test_upload.sh /home/dm_idb/test
+
+
diff --git a/sbin/17BM/dm_17bm_system_test_daq.sh b/sbin/17BM/dm_17bm_system_test_daq.sh
index 3454d6eb007a75ab1f70cc4060bbce5cf18669d9..7127a19a7ab246689148cf2471fae72774dd41f5 100755
--- a/sbin/17BM/dm_17bm_system_test_daq.sh
+++ b/sbin/17BM/dm_17bm_system_test_daq.sh
@@ -1,5 +1,5 @@
 #!/bin/sh
 
 cd `dirname $0`/.. && DM_SBIN_DIR=`pwd`
-$DM_SBIN_DIR/dm_system_test_daq.sh /gdata/dm/test/17BM dtn-int-01:/gdata/dm/test/17BM
+$DM_SBIN_DIR/dm_system_test_daq.sh /home/dm_bm/test
 
diff --git a/sbin/17BM/dm_17bm_system_test_upload.sh b/sbin/17BM/dm_17bm_system_test_upload.sh
index 0ce5a3b903bb7a1e0031ed2385f5552e339d52ce..467a9cdbdfe4713f6361a655c7702a6abedcac10 100755
--- a/sbin/17BM/dm_17bm_system_test_upload.sh
+++ b/sbin/17BM/dm_17bm_system_test_upload.sh
@@ -1,5 +1,5 @@
 #!/bin/sh
 
 cd `dirname $0`/.. && DM_SBIN_DIR=`pwd`
-$DM_SBIN_DIR/dm_system_test_upload.sh /gdata/dm/test/17BM dtn-int-01:/gdata/dm/test/17BM
+$DM_SBIN_DIR/dm_system_test_upload.sh /home/dm_bm/test
 
diff --git a/sbin/dm_remove_catalog_duplicates.sh b/sbin/dm_remove_catalog_duplicates.sh
index fbede229fd4d0874ea26eae54d76d278ee5c0c0d..572e17e108ecc227a689499178f41b152353e3ad 100755
--- a/sbin/dm_remove_catalog_duplicates.sh
+++ b/sbin/dm_remove_catalog_duplicates.sh
@@ -51,7 +51,7 @@ while read -r f; do
     f=`echo $f | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//'`
     echo "**********"
     echo "Working on file: \"$f\" ($fCount / $nUnique)"
-    dm-stat-file --experiment=$EXPERIMENT_NAME --relative-path=$f --md5sum > $STAT_FILE || exit 1
+    dm-stat-file --experiment=$EXPERIMENT_NAME --relative-path="$f" --md5sum > $STAT_FILE || exit 1
     fileSize=`cat $STAT_FILE | sed -e '1,/STAT INFO/d' | awk '{print $2}' | sed 's?fileSize=??'`
     md5Sum=`cat $STAT_FILE | sed -e '1,/STAT INFO/d' | awk '{print $3}' | sed 's?md5Sum=??'`
     echo "File size: $fileSize, md5Sum: $md5Sum"
@@ -71,12 +71,12 @@ while read -r f; do
             else
                 echo "File $id is marked as duplicate of $goodId"
                 echo "$f $id" >> $DUPLICATE_LIST_FILE
-                echo dm-delete-file --keep-in-storage --experiment=$EXPERIMENT_NAME --file-$id >> $DELETED_LIST_FILE
+                echo dm-delete-file --keep-in-storage --force --experiment=$EXPERIMENT_NAME --file-$id >> $DELETED_LIST_FILE
             fi
         else
             echo "Catalog info is not correct for $f, file size: $catFileSize, md5Sum: $catMd5Sum"
             echo "$f $id" >> $BAD_LIST_FILE
-            echo dm-delete-file --keep-in-storage --experiment=$EXPERIMENT_NAME --file-$id >> $DELETED_LIST_FILE
+            echo dm-delete-file --keep-in-storage --force --experiment=$EXPERIMENT_NAME --file-$id >> $DELETED_LIST_FILE
         fi
     done
 done < "$UNIQUE_LIST_FILE"
diff --git a/sbin/dm_station_upgrade_stage4.sh b/sbin/dm_station_upgrade_stage4.sh
index 9a2955b914394c65e77a8616df577de95da3c9ae..fb0f7c542400664228e89b278abce11895285551 100755
--- a/sbin/dm_station_upgrade_stage4.sh
+++ b/sbin/dm_station_upgrade_stage4.sh
@@ -38,7 +38,7 @@ if [ -f $DM_UPLOAD_LIST_FILE ]; then
     while IFS='' read -r line || [[ -n "$line" ]]; do
         uploadArgs=`echo $line | sed 's?experimentName?--experiment?' | sed 's?dataDirectory?--data-directory?'`
         echo "Restarting upload: $uploadArgs"
-        dm-upload $uploadArgs || exit 1
+        dm-upload $uploadArgs --reprocess || exit 1
     done < "$DM_UPLOAD_LIST_FILE"
 else
     echo "There is no uploads file: $DM_UPLOAD_LIST_FILE"
diff --git a/src/python/dm/aps_beamline_tools/gui/dmStationUi.py b/src/python/dm/aps_beamline_tools/gui/dmStationUi.py
index dd38696e3794a966e232a27ca9ff9e16ea1b3c73..1be8bbc48aa3ce5a16361a0680d92e2fb893b31d 100755
--- a/src/python/dm/aps_beamline_tools/gui/dmStationUi.py
+++ b/src/python/dm/aps_beamline_tools/gui/dmStationUi.py
@@ -4,13 +4,15 @@ from __future__ import print_function
 
 import sys
 import os
-from PyQt4.QtGui import QMainWindow, QStackedLayout, QApplication, QWidget, QTabWidget, QSplashScreen, QPixmap, QMenu, QAction, QCursor, QMessageBox, QAbstractButton
+from PyQt4.QtGui import QMainWindow, QStackedLayout, QApplication, QWidget, QTabWidget, QSplashScreen, QPixmap, QMenu, \
+    QAction, QCursor, QMessageBox, QAbstractButton, QIcon
 from PyQt4.QtCore import Qt, QTimer
 from time import sleep, time
 import smtplib
 from email.mime.text import MIMEText
 from traceback import format_tb
 
+from dm.aps_beamline_tools.gui.settingsTab import SettingsTab
 from dm.common.constants import dmStatus
 from dm.common.exceptions.dmException import DmException
 from dm.common.exceptions.configurationError import ConfigurationError
@@ -104,6 +106,7 @@ class DmStationUi(QMainWindow):
         self.fileTab = FileTab(self.stationName, self)
         self.workflowTab = WorkflowTab(self.stationName, self)
         self.processingJobsTab = ProcessingJobsTab(self.stationName, self)
+        self.settingsTab = SettingsTab(self)
 
         # Add the windows to the stack.
         self.stackedLayout.addWidget(self.experimentsTab)
@@ -124,6 +127,19 @@ class DmStationUi(QMainWindow):
         # Hide until ready for release
         self.tabs.addTab(self.workflowTab, "Workflows")
         self.tabs.addTab(self.processingJobsTab, "Processing Jobs")
+        homeDir = os.path.dirname(sys.argv[0])
+        settingsIcon = QIcon(homeDir + '/images/settings.svg')
+        self.tabs.addTab(self.settingsTab, settingsIcon, "Settings")
+
+        self.refreshDaqsTimer = QTimer()
+        self.refreshDaqsTimer.timeout.connect(self.refreshDaqs)
+        self.refreshUploadsTimer = QTimer()
+        self.refreshUploadsTimer.timeout.connect(self.refreshUploads)
+        self.refreshExperimentsTimer = QTimer()
+        self.refreshExperimentsTimer.timeout.connect(self.refreshExperiments)
+        self.refreshJobsTimer = QTimer()
+        self.refreshJobsTimer.timeout.connect(self.refreshJobs)
+        self.setUpRefreshTimers()
 
         # Set a central widget to hold everything
         self.setCentralWidget(self.tabs)
@@ -204,6 +220,34 @@ class DmStationUi(QMainWindow):
     def clearSelection(self, table):
         table.clearSelection()
 
+    def setUpRefreshTimers(self):
+        self.refreshDaqsTimer.stop()
+        self.refreshExperimentsTimer.stop()
+        self.refreshUploadsTimer.stop()
+
+        self._startRefreshTimer(self.refreshDaqsTimer, self.settingsTab.fetchRefCycleDaqs())
+        self._startRefreshTimer(self.refreshUploadsTimer, self.settingsTab.fetchRefCycleUploads())
+        self._startRefreshTimer(self.refreshExperimentsTimer, self.settingsTab.fetchRefCycleExperiments())
+        self._startRefreshTimer(self.refreshJobsTimer, self.settingsTab.fetchRefCycleJobs())
+
+    def _startRefreshTimer(self, timer, seconds):
+        # 0 means that no refresh cycle will occur
+        if seconds != 0:
+            interval = seconds * 1000
+            timer.start(interval)
+
+    def refreshExperiments(self):
+        self.experimentsTab.updateList()
+
+    def refreshDaqs(self):
+        self.daqsTab.updateList()
+
+    def refreshUploads(self):
+        self.uploadsTab.updateList()
+
+    def refreshJobs(self):
+        self.processingJobsTab.updateList()
+
     # Refreshes the experiments, DAQ, and Uploads tables.
     def refreshTables(self):
         self.experimentsTab.updateList()
@@ -292,10 +336,6 @@ if __name__ == "__main__":
             sleep(0.001)
             app.processEvents()
         window = DmStationUi()
-        # Calls refreshTables every minute
-        timer = QTimer()
-        timer.timeout.connect(window.refreshTables)
-        timer.start(60000)
         splashScreen.finish(window)
         window.show()
         window.raise_()
diff --git a/src/python/dm/aps_beamline_tools/gui/images/settings.svg b/src/python/dm/aps_beamline_tools/gui/images/settings.svg
new file mode 100644
index 0000000000000000000000000000000000000000..672eed9b22067dcf00034a0a097a12e0033408f4
--- /dev/null
+++ b/src/python/dm/aps_beamline_tools/gui/images/settings.svg
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 478.703 478.703" style="enable-background:new 0 0 478.703 478.703;" xml:space="preserve">
+<g>
+	<g>
+		<path d="M454.2,189.101l-33.6-5.7c-3.5-11.3-8-22.2-13.5-32.6l19.8-27.7c8.4-11.8,7.1-27.9-3.2-38.1l-29.8-29.8
+			c-5.6-5.6-13-8.7-20.9-8.7c-6.2,0-12.1,1.9-17.1,5.5l-27.8,19.8c-10.8-5.7-22.1-10.4-33.8-13.9l-5.6-33.2
+			c-2.4-14.3-14.7-24.7-29.2-24.7h-42.1c-14.5,0-26.8,10.4-29.2,24.7l-5.8,34c-11.2,3.5-22.1,8.1-32.5,13.7l-27.5-19.8
+			c-5-3.6-11-5.5-17.2-5.5c-7.9,0-15.4,3.1-20.9,8.7l-29.9,29.8c-10.2,10.2-11.6,26.3-3.2,38.1l20,28.1
+			c-5.5,10.5-9.9,21.4-13.3,32.7l-33.2,5.6c-14.3,2.4-24.7,14.7-24.7,29.2v42.1c0,14.5,10.4,26.8,24.7,29.2l34,5.8
+			c3.5,11.2,8.1,22.1,13.7,32.5l-19.7,27.4c-8.4,11.8-7.1,27.9,3.2,38.1l29.8,29.8c5.6,5.6,13,8.7,20.9,8.7c6.2,0,12.1-1.9,17.1-5.5
+			l28.1-20c10.1,5.3,20.7,9.6,31.6,13l5.6,33.6c2.4,14.3,14.7,24.7,29.2,24.7h42.2c14.5,0,26.8-10.4,29.2-24.7l5.7-33.6
+			c11.3-3.5,22.2-8,32.6-13.5l27.7,19.8c5,3.6,11,5.5,17.2,5.5l0,0c7.9,0,15.3-3.1,20.9-8.7l29.8-29.8c10.2-10.2,11.6-26.3,3.2-38.1
+			l-19.8-27.8c5.5-10.5,10.1-21.4,13.5-32.6l33.6-5.6c14.3-2.4,24.7-14.7,24.7-29.2v-42.1
+			C478.9,203.801,468.5,191.501,454.2,189.101z M451.9,260.401c0,1.3-0.9,2.4-2.2,2.6l-42,7c-5.3,0.9-9.5,4.8-10.8,9.9
+			c-3.8,14.7-9.6,28.8-17.4,41.9c-2.7,4.6-2.5,10.3,0.6,14.7l24.7,34.8c0.7,1,0.6,2.5-0.3,3.4l-29.8,29.8c-0.7,0.7-1.4,0.8-1.9,0.8
+			c-0.6,0-1.1-0.2-1.5-0.5l-34.7-24.7c-4.3-3.1-10.1-3.3-14.7-0.6c-13.1,7.8-27.2,13.6-41.9,17.4c-5.2,1.3-9.1,5.6-9.9,10.8l-7.1,42
+			c-0.2,1.3-1.3,2.2-2.6,2.2h-42.1c-1.3,0-2.4-0.9-2.6-2.2l-7-42c-0.9-5.3-4.8-9.5-9.9-10.8c-14.3-3.7-28.1-9.4-41-16.8
+			c-2.1-1.2-4.5-1.8-6.8-1.8c-2.7,0-5.5,0.8-7.8,2.5l-35,24.9c-0.5,0.3-1,0.5-1.5,0.5c-0.4,0-1.2-0.1-1.9-0.8l-29.8-29.8
+			c-0.9-0.9-1-2.3-0.3-3.4l24.6-34.5c3.1-4.4,3.3-10.2,0.6-14.8c-7.8-13-13.8-27.1-17.6-41.8c-1.4-5.1-5.6-9-10.8-9.9l-42.3-7.2
+			c-1.3-0.2-2.2-1.3-2.2-2.6v-42.1c0-1.3,0.9-2.4,2.2-2.6l41.7-7c5.3-0.9,9.6-4.8,10.9-10c3.7-14.7,9.4-28.9,17.1-42
+			c2.7-4.6,2.4-10.3-0.7-14.6l-24.9-35c-0.7-1-0.6-2.5,0.3-3.4l29.8-29.8c0.7-0.7,1.4-0.8,1.9-0.8c0.6,0,1.1,0.2,1.5,0.5l34.5,24.6
+			c4.4,3.1,10.2,3.3,14.8,0.6c13-7.8,27.1-13.8,41.8-17.6c5.1-1.4,9-5.6,9.9-10.8l7.2-42.3c0.2-1.3,1.3-2.2,2.6-2.2h42.1
+			c1.3,0,2.4,0.9,2.6,2.2l7,41.7c0.9,5.3,4.8,9.6,10,10.9c15.1,3.8,29.5,9.7,42.9,17.6c4.6,2.7,10.3,2.5,14.7-0.6l34.5-24.8
+			c0.5-0.3,1-0.5,1.5-0.5c0.4,0,1.2,0.1,1.9,0.8l29.8,29.8c0.9,0.9,1,2.3,0.3,3.4l-24.7,34.7c-3.1,4.3-3.3,10.1-0.6,14.7
+			c7.8,13.1,13.6,27.2,17.4,41.9c1.3,5.2,5.6,9.1,10.8,9.9l42,7.1c1.3,0.2,2.2,1.3,2.2,2.6v42.1H451.9z"/>
+		<path d="M239.4,136.001c-57,0-103.3,46.3-103.3,103.3s46.3,103.3,103.3,103.3s103.3-46.3,103.3-103.3S296.4,136.001,239.4,136.001
+			z M239.4,315.601c-42.1,0-76.3-34.2-76.3-76.3s34.2-76.3,76.3-76.3s76.3,34.2,76.3,76.3S281.5,315.601,239.4,315.601z"/>
+	</g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/src/python/dm/aps_beamline_tools/gui/settingsTab.py b/src/python/dm/aps_beamline_tools/gui/settingsTab.py
new file mode 100644
index 0000000000000000000000000000000000000000..eb4cd3003eab0b116af2730f9875903f00a020dc
--- /dev/null
+++ b/src/python/dm/aps_beamline_tools/gui/settingsTab.py
@@ -0,0 +1,106 @@
+#!/usr/bin/env python
+
+from PyQt4.QtGui import QGridLayout, QSpacerItem, QSizePolicy, QPushButton, QWidget, \
+    QFont, QLabel, QTableWidget, QTableWidgetItem, QColor, QAbstractItemView, QHBoxLayout, QPalette, QFormLayout, \
+    QGroupBox, QLineEdit, QDoubleValidator, QIntValidator
+from PyQt4.QtCore import Qt, QSettings, QString
+
+from dm.aps_beamline_tools.gui.apiFactory import ApiFactory
+from .subclasses import customSelectionModel, customStyledDelegate
+
+
+# Define the Processing Jobs tab content:
+class SettingsTab(QWidget):
+
+    ORG_NAME="UChicagoArgonneLLC"
+    APP_NAME="dmStationUi"
+
+    REF_CYCLE_EXPERIMENTS = "experimentsRefreshCycle"
+    REF_CYCLE_DAQS = "daqsRefreshCycle"
+    REF_CYCLE_UPLOADS = "uploadsRefreshCycle"
+    REF_CYCLE_JOBS = "processingJobsRefreshCycle"
+
+    DEFAULT_INTERVAL = 60
+
+    def __init__(self, parent):
+        super(SettingsTab, self).__init__(parent)
+        self.parent = parent
+        self.settingsLayout()
+        self.settings = QSettings(SettingsTab.ORG_NAME, SettingsTab.APP_NAME, self)
+        self.loadSettings()
+
+    # GUI layout where each block is a row on the grid
+    def settingsLayout(self):
+        grid = QGridLayout()
+
+        labelFont = QFont('Arial', 18, QFont.Bold)
+        lbl = QLabel('Settings', self)
+        lbl.setAlignment(Qt.AlignCenter)
+        lbl.setFont(labelFont)
+        grid.addWidget(lbl, 0, 0)
+
+        refIntervalGroup = QGroupBox()
+        refIntervalGroup.setAlignment(Qt.AlignCenter)
+        refIntervalGroup.setTitle("Refresh Intervals (seconds)")
+
+        refIntervalsFormLayout = QFormLayout()
+        self.experimentsRefInternvalVal = self._createIntInput(refIntervalsFormLayout, "Experiments", "Specify the interval in seconds for experiments refresh cycle (0 for no refresh)")
+        self.daqsRefInternvalVal = self._createIntInput(refIntervalsFormLayout, "Daqs", "Specify the interval in seconds for daqs refresh cycle (0 for no refresh)")
+        self.uploadsRefInternvalVal = self._createIntInput(refIntervalsFormLayout, "Uploads", "Specify the interval in seconds for uploads refresh cycle (0 for no refresh)")
+        self.jobsRefInternvalVal = self._createIntInput(refIntervalsFormLayout, "Processing Jobs",
+                                                           "Specify the interval in seconds for processing jobs refresh cycle (0 for no refresh)")
+        refIntervalGroup.setLayout(refIntervalsFormLayout)
+
+        grid.addWidget(refIntervalGroup, 2, 0)
+
+        saveBtn = QPushButton('Save', self)
+        saveBtn.clicked.connect(self.saveSettings)
+
+        grid.addWidget(saveBtn, 3, 0, Qt.AlignCenter)
+        self.setLayout(grid)
+
+    def _createIntInput(self, formLayout, promptText, tooltip, min=0, max=1000):
+        minMaxText = " (" +str(min) + "-" + str(max)+")"
+        promptTextLabel = QLabel(promptText + minMaxText)
+        inputObject = QLineEdit()
+        inputObject.setValidator(QIntValidator(min, max, self))
+        inputObject.setToolTip(tooltip)
+
+        formLayout.addRow(promptTextLabel, inputObject)
+        return inputObject
+
+    def loadSettings(self):
+        self._loadIntervalSettings(SettingsTab.REF_CYCLE_UPLOADS, self.uploadsRefInternvalVal)
+        self._loadIntervalSettings(SettingsTab.REF_CYCLE_DAQS, self.daqsRefInternvalVal)
+        self._loadIntervalSettings(SettingsTab.REF_CYCLE_EXPERIMENTS, self.experimentsRefInternvalVal)
+        self._loadIntervalSettings(SettingsTab.REF_CYCLE_JOBS, self.jobsRefInternvalVal)
+
+    def _loadIntervalSettings(self, key, settingInputWidget):
+        refCycle = self.settings.value(key, SettingsTab.DEFAULT_INTERVAL).toString()
+        if (refCycle == ""):
+            refCycle = QString(str(SettingsTab.DEFAULT_INTERVAL))
+
+        settingInputWidget.setText(refCycle)
+
+    def saveSettings(self):
+        self.settings.setValue(SettingsTab.REF_CYCLE_DAQS, self.daqsRefInternvalVal.text())
+        self.settings.setValue(SettingsTab.REF_CYCLE_EXPERIMENTS, self.experimentsRefInternvalVal.text())
+        self.settings.setValue(SettingsTab.REF_CYCLE_UPLOADS, self.uploadsRefInternvalVal.text())
+        self.settings.setValue(SettingsTab.REF_CYCLE_JOBS, self.jobsRefInternvalVal.text())
+
+        self.loadSettings()
+
+        # Reload with the new values
+        self.parent.setUpRefreshTimers()
+
+    def fetchRefCycleExperiments(self):
+        return int(self.experimentsRefInternvalVal.text())
+
+    def fetchRefCycleDaqs(self):
+        return int(self.daqsRefInternvalVal.text())
+
+    def fetchRefCycleUploads(self):
+        return int(self.uploadsRefInternvalVal.text())
+
+    def fetchRefCycleJobs(self):
+        return int(self.jobsRefInternvalVal.text())
diff --git a/src/python/dm/common/objects/daqInfo.py b/src/python/dm/common/objects/daqInfo.py
index fe502676db20490d037b2ceec081e84ebce97a9f..6ef9e9d0e6942c70f685e4542522ff0b6e021476 100755
--- a/src/python/dm/common/objects/daqInfo.py
+++ b/src/python/dm/common/objects/daqInfo.py
@@ -114,11 +114,12 @@ class DaqInfo(DmObject):
         self['percentageProcessingErrors'] = '%.2f' % percentageProcessingErrors
 
         if self.get('endTime'):
-            daqStatus = dmProcessingStatus.DM_PROCESSING_STATUS_FINALIZING
             if nCompletedFiles >= nFiles:
                 daqStatus = dmProcessingStatus.DM_PROCESSING_STATUS_DONE
                 if nProcessingErrors:
                     daqStatus = dmProcessingStatus.DM_PROCESSING_STATUS_FAILED
+            else:
+                daqStatus = dmProcessingStatus.DM_PROCESSING_STATUS_FAILED
             lastFileProcessingErrorTime = self.get('lastFileProcessingErrorTime')
             lastFileProcessedTime = self.get('lastFileProcessedTime')
             endTime = lastFileProcessedTime
diff --git a/src/python/dm/common/processing/plugins/mongoDbFileCatalogPlugin.py b/src/python/dm/common/processing/plugins/mongoDbFileCatalogPlugin.py
index ce42abe32e3bfd6f8b1bd471c7a7c0a6a925ed69..977a1031f84d8bc458ca9117abd4d332ff27c110 100755
--- a/src/python/dm/common/processing/plugins/mongoDbFileCatalogPlugin.py
+++ b/src/python/dm/common/processing/plugins/mongoDbFileCatalogPlugin.py
@@ -161,9 +161,4 @@ class MongoDbFileCatalogPlugin(FileProcessor):
             fileMongoDbApi = self.acquireMongoApi()
             processingTimer = threading.Timer(self.PROCESSING_TIMER_DELAY_PERIOD, self.processFilePath, args=[fileMongoDbApi, filePath, filePathDict, experiment, dataDirectory, destDirectory, daqInfo, uploadId, processDirectoryInfo])
             processingTimer.start()
-                   
 
-#######################################################################
-# Testing.
-if __name__ == '__main__':
-    pass 
diff --git a/tools/conda/etc/BUILD.conf b/tools/conda/etc/BUILD.conf
index 8c66487fee2379667bf544daf383843f61e30e65..9e4b87fb1c2840b894ad949d262a4e272d055c7b 100644
--- a/tools/conda/etc/BUILD.conf
+++ b/tools/conda/etc/BUILD.conf
@@ -1,2 +1,2 @@
-EPICS_BASE_VERSION=7.0.2.2
+EPICS_BASE_VERSION=7.0.3
 SDDS_VERSION=4.1