diff --git a/qt/applications/workbench/workbench/app/mainwindow.py b/qt/applications/workbench/workbench/app/mainwindow.py
index d67e54aa691f46953ed6a4c3efc62b2c392dfd08..87fb6461eb4e07d5738b4b122111e31c8a5ddb24 100644
--- a/qt/applications/workbench/workbench/app/mainwindow.py
+++ b/qt/applications/workbench/workbench/app/mainwindow.py
@@ -113,9 +113,6 @@ class MainWindow(QMainWindow):
         # -- instance attributes --
         self.setWindowTitle("Mantid Workbench")
 
-        # uses default configuration as necessary
-        self.readSettings(CONF)
-
         # widgets
         self.messagedisplay = None
         self.ipythonconsole = None
@@ -184,6 +181,9 @@ class MainWindow(QMainWindow):
         self.workspacewidget.register_plugin()
         self.widgets.append(self.workspacewidget)
 
+        # uses default configuration as necessary
+        self.readSettings(CONF)
+
         self.setup_layout()
         self.create_actions()
         self.populate_menus()
@@ -397,16 +397,22 @@ class MainWindow(QMainWindow):
         else:
             self.setWindowState(Qt.WindowMaximized)
 
-        # have algorithm dialogs do their thing
+        # read in settings for children
         AlgorithmInputHistory().readSettings(settings)
+        for widget in self.widgets:
+            if hasattr(widget, 'readSettings'):
+                widget.readSettings(settings)
 
     def writeSettings(self, settings):
         settings.set('main/window/size', self.size()) # QSize
         settings.set('main/window/position', self.pos()) # QPoint
         settings.set('main/window/state', self.saveState()) # QByteArray
 
-        # have algorithm dialogs do their thing
+        # write out settings for children
         AlgorithmInputHistory().writeSettings(settings)
+        for widget in self.widgets:
+            if hasattr(widget, 'writeSettings'):
+                widget.writeSettings(settings)
 
 
 def initialize():
diff --git a/qt/applications/workbench/workbench/plugins/logmessagedisplay.py b/qt/applications/workbench/workbench/plugins/logmessagedisplay.py
index bf1344c4d02ea6a09f0aecfc4f9f0b4cb2b1a2b5..264a2cbd57724bffeaac95456f1b926f410bc311 100644
--- a/qt/applications/workbench/workbench/plugins/logmessagedisplay.py
+++ b/qt/applications/workbench/workbench/plugins/logmessagedisplay.py
@@ -19,6 +19,7 @@ from qtpy.QtWidgets import QHBoxLayout
 
 # local imports
 from workbench.plugins.base import PluginWidget
+from mantidqt.utils.qt import toQSettings
 
 # Default logs at notice
 DEFAULT_LOG_PRIORITY = 5
@@ -47,8 +48,11 @@ class LogMessageDisplay(PluginWidget):
     def get_plugin_title(self):
         return "Messages"
 
-    def read_user_settings(self, qsettings):
-        self.display.readSettings(qsettings)
+    def readSettings(self, settings):
+        self.display.readSettings(toQSettings(settings))
+
+    def writeSettings(self, settings):
+        self.display.writeSettings(toQSettings(settings))
 
     def register_plugin(self, menu=None):
         self.display.attachLoggingChannel(DEFAULT_LOG_PRIORITY)
diff --git a/qt/python/mantidqt/algorithminputhistory.py b/qt/python/mantidqt/algorithminputhistory.py
index a249753536a0179f9827ecd561e1661c6f99b468..5ca6c0ede225a3d30d7a0f48ba156df834479cab 100644
--- a/qt/python/mantidqt/algorithminputhistory.py
+++ b/qt/python/mantidqt/algorithminputhistory.py
@@ -9,21 +9,12 @@
 #
 from __future__ import (absolute_import)
 
-from mantidqt.utils.qt import import_qt
+from mantidqt.utils.qt import import_qt, toQSettings
 
 
 _AlgorithmInputHistory = import_qt('._common', 'mantidqt', 'AlgorithmInputHistory')
 
 
-def _toQSettings(settings):
-    '''Utility function to convert supplied settings object to a qtpy.QtCore.QSettings
-    '''
-    try: # workbench.config.user
-        return settings.qsettings
-    except: # must be a QSettings already
-        return settings
-
-
 class AlgorithmInputHistory(object):
     '''Wrapper class around MantidQtWidgets::Common::AlgorithmInputHistory
     '''
@@ -33,7 +24,7 @@ class AlgorithmInputHistory(object):
         pass
 
     def readSettings(self, settings):
-        self._singleton.readSettings(_toQSettings(settings))
+        self._singleton.readSettings(toQSettings(settings))
 
     def writeSettings(self, settings):
-        self._singleton.writeSettings(_toQSettings(settings))
+        self._singleton.writeSettings(toQSettings(settings))
diff --git a/qt/python/mantidqt/utils/qt/__init__.py b/qt/python/mantidqt/utils/qt/__init__.py
index 3f8a38b877b3260c22ed6eb6a24e658d29b81fd7..a622bdb6e198cbb743d6af2aff49d97fc7e7ce11 100644
--- a/qt/python/mantidqt/utils/qt/__init__.py
+++ b/qt/python/mantidqt/utils/qt/__init__.py
@@ -152,3 +152,12 @@ def add_actions(target, actions):
         else:
             raise ValueError("Unexpected action type. "
                              "Expected one of (QAction,QMenu) but found '{}'".format(type(action)))
+
+
+def toQSettings(settings):
+    '''Utility function to convert supplied settings object to a qtpy.QtCore.QSettings
+    '''
+    if hasattr(settings, 'qsettings'):  # workbench.config.user
+        return settings.qsettings
+    else:  # must be a QSettings already
+        return settings