Index: src/sas/qtgui/MainWindow/DataExplorer.py
===================================================================
--- src/sas/qtgui/MainWindow/DataExplorer.py	(revision 1942f63fd40fb768b5b323cfa92c277de4367c13)
+++ src/sas/qtgui/MainWindow/DataExplorer.py	(revision 859d96079a5138ca8455dab314a2125f2c1e2914)
@@ -49,4 +49,10 @@
         self.parent = guimanager
         self.loader = Loader()
+
+        # Read in default locations
+        self.default_save_location = None
+        self.default_load_location = os.path.join(os.path.dirname(sys.argv[0]), "test")
+        self.default_project_location = None
+
         self.manager = manager if manager is not None else DataManager()
         self.txt_widget = QtWidgets.QTextEdit(None)
@@ -207,14 +213,19 @@
         Opens the Qt "Open Folder..." dialog
         """
-        folder = QtWidgets.QFileDialog.getExistingDirectory(self, "Choose a directory", "",
-              QtWidgets.QFileDialog.ShowDirsOnly | QtWidgets.QFileDialog.DontUseNativeDialog)
+        kwargs = {
+            'parent'    : self,
+            'caption'   : 'Choose a directory',
+            'options'   : QtWidgets.QFileDialog.ShowDirsOnly | QtWidgets.QFileDialog.DontUseNativeDialog,
+            'directory' : self.default_load_location
+        }
+        folder = QtWidgets.QFileDialog.getExistingDirectory(**kwargs)
+
         if folder is None:
             return
 
         folder = str(folder)
-
         if not os.path.isdir(folder):
             return
-
+        self.default_load_location = folder
         # get content of dir into a list
         path_str = [os.path.join(os.path.abspath(folder), filename)
@@ -231,8 +242,10 @@
             'caption'   : 'Open Project',
             'filter'    : 'Project (*.json);;All files (*.*)',
-            'options'   : QtWidgets.QFileDialog.DontUseNativeDialog
+            'options'   : QtWidgets.QFileDialog.DontUseNativeDialog,
+            'directory' : self.default_project_location
         }
         filename = QtWidgets.QFileDialog.getOpenFileName(**kwargs)[0]
         if filename:
+            self.default_project_location = os.path.dirname(filename)
             load_thread = threads.deferToThread(self.readProject, filename)
             load_thread.addCallback(self.readProjectComplete)
@@ -283,9 +296,11 @@
             'caption'   : 'Save Project',
             'filter'    : 'Project (*.json)',
-            'options'   : QtWidgets.QFileDialog.DontUseNativeDialog
+            'options'   : QtWidgets.QFileDialog.DontUseNativeDialog,
+            'directory' : self.default_project_location
         }
         name_tuple = QtWidgets.QFileDialog.getSaveFileName(**kwargs)
         filename = name_tuple[0]
         if filename:
+            self.default_project_location = os.path.dirname(filename)
             _, extension = os.path.splitext(filename)
             if not extension:
@@ -818,9 +833,14 @@
         # List of known extensions
         wlist = self.getWlist()
-
         # Location is automatically saved - no need to keep track of the last dir
         # But only with Qt built-in dialog (non-platform native)
-        paths = QtWidgets.QFileDialog.getOpenFileNames(self, "Choose a file", "",
-                wlist, None, QtWidgets.QFileDialog.DontUseNativeDialog)[0]
+        kwargs = {
+            'parent'    : self,
+            'caption'   : 'Choose files',
+            'filter'    : wlist,
+            'options'   : QtWidgets.QFileDialog.DontUseNativeDialog,
+            'directory' : self.default_load_location
+        }
+        paths = QtWidgets.QFileDialog.getOpenFileNames(**kwargs)[0]
         if not paths:
             return
@@ -829,4 +849,5 @@
             paths = [paths]
 
+        self.default_load_location = os.path.dirname(paths[0])
         return paths
 
Index: src/sas/qtgui/Utilities/ReportDialog.py
===================================================================
--- src/sas/qtgui/Utilities/ReportDialog.py	(revision cb90b65b5c3464b4b73f28e8c3863bbbfdd3f599)
+++ src/sas/qtgui/Utilities/ReportDialog.py	(revision 859d96079a5138ca8455dab314a2125f2c1e2914)
@@ -10,4 +10,5 @@
 
 import sas.qtgui.Utilities.GuiUtils as GuiUtils
+import sas.qtgui.Utilities.ObjectLibrary as ObjectLibrary
 
 from sas.qtgui.Utilities.UI.ReportDialogUI import Ui_ReportDialogUI
@@ -27,4 +28,7 @@
 
         self.data_html, self.data_txt, self.data_images = report_list
+        #self.save_location = None
+        #if 'ReportDialog_directory' in ObjectLibrary.listObjects():
+        self.save_location = ObjectLibrary.getObject('ReportDialog_directory')
 
         # Fill in the table from input data
@@ -70,5 +74,8 @@
         """
         # Choose user's home directory
-        location = os.path.expanduser('~')
+        if self.save_location is None:
+            location = os.path.expanduser('~')
+        else:
+            location = self.save_location
         # Use a sensible filename default
         default_name = os.path.join(location, 'fit_report.pdf')
@@ -78,5 +85,5 @@
             'caption'  : 'Save Report',
             # don't use 'directory' in order to remember the previous user choice
-            #'directory': default_name,
+            'directory': default_name,
             'filter'   : 'PDF file (*.pdf);;HTML file (*.html);;Text file (*.txt)',
             'options'  : QtWidgets.QFileDialog.DontUseNativeDialog}
@@ -87,4 +94,7 @@
             return
         extension = filename_tuple[1]
+        self.save_location = os.path.dirname(filename)
+        # lifetime of this widget is short - keep the reference elsewhere
+        ObjectLibrary.addObject('ReportDialog_directory', self.save_location)
 
         try:
