diff --git a/tests/test_platform.py b/tests/test_platform.py
new file mode 100644
index 0000000000000000000000000000000000000000..c0b3a776573ea0c296c04fb4225091ae939564ff
--- /dev/null
+++ b/tests/test_platform.py
@@ -0,0 +1,134 @@
+#!/usr/bin/env python
+#
+# test_platform.py -
+#
+# Author: Paul McCarthy <pauldmccarthy@gmail.com>
+#
+
+
+import            os
+import os.path as op
+import            shutil
+import            tempfile
+
+
+import fsl.utils.platform as fslplatform
+
+
+def test_atts():
+    
+    p = fslplatform.platform
+    p.os
+    p.frozen
+    p.haveGui
+    p.canHaveGui
+    p.inSSHSession
+    p.wxPlatform
+    p.wxFlavour
+    p.fsldir
+    p.fslVersion
+    p.glVersion
+    p.glRenderer
+    p.glIsSoftwareRenderer
+
+
+def test_gui():
+
+    import wx
+    
+    p      = fslplatform.platform
+    app    = wx.App()
+    frame  = wx.Frame(None)
+    passed = [False]
+    frame.Show()
+
+    def runtest():
+
+        try:
+
+            p.haveGui
+            p.wxPlatform
+            p.wxFlavour
+            passed[0] = True
+        finally:
+            frame.Destroy()
+            app.ExitMainLoop()
+
+    wx.CallLater(500, runtest)
+
+    app.MainLoop()
+
+    assert passed[0]
+
+
+def test_gl():
+    
+    p = fslplatform.platform
+    
+    p.glVersion  = '2.1'
+    p.glRenderer = 'Fake renderer'
+
+    
+def test_fsldir():
+
+    # We have to make a dummy directory that looks like FSL
+    testdir = tempfile.mkdtemp()
+    fsldir  = op.join(testdir, 'fsl')
+
+    def makeFSL():
+        os.makedirs(op.join(fsldir, 'etc'))
+        with open(op.join(fsldir, 'etc', 'fslversion'), 'wt') as f:
+            f.write('Dummy FSL\n')
+
+    try:
+
+        makeFSL()
+
+        p         = fslplatform.platform
+        newFSLDir = [None]
+
+        def fsldirChanged(p, t, val):
+            newFSLDir[0] = val
+
+        p.register('callback', fsldirChanged)
+
+        p.fsldir = fsldir
+
+        p.deregister('callback')
+
+        assert os.environ['FSLDIR'] == fsldir
+        assert newFSLDir[0]         == fsldir
+        assert p.fsldir             == fsldir
+        assert p.fslVersion         == 'Dummy FSL'
+
+    finally:
+        shutil.rmtree(testdir)
+
+    
+def test_IsWidgetAlive():
+
+    import wx
+
+    passed = [False]
+    app    = wx.App()
+    frame  = wx.Frame(None)
+    btn    = wx.Button(frame)
+    frame.Show()
+
+    def runtest():
+
+        try:
+
+            passed[0] = fslplatform.isWidgetAlive(btn)
+
+            btn.Destroy()
+        
+            passed[0] = passed[0] and (not fslplatform.isWidgetAlive(btn))
+        finally:
+            frame.Destroy()
+            app.ExitMainLoop()
+
+    wx.CallLater(500, runtest)
+    app.MainLoop()
+
+    assert passed[0]
diff --git a/tests/test_settings.py b/tests/test_settings.py
new file mode 100644
index 0000000000000000000000000000000000000000..f2f5f5bf1dce77824313406f096645ff8f5369f3
--- /dev/null
+++ b/tests/test_settings.py
@@ -0,0 +1,101 @@
+#!/usr/bin/env python
+#
+# test_settings.py -
+#
+# Author: Paul McCarthy <pauldmccarthy@gmail.com>
+#
+
+import fsl.utils.settings as settings
+
+
+
+def test_strToBool():
+
+    assert settings.strToBool('FALSE') is False
+    assert settings.strToBool('False') is False
+    assert settings.strToBool('false') is False
+    assert settings.strToBool( False)  is False
+    assert settings.strToBool('TRUE')  is True
+    assert settings.strToBool('True')  is True
+    assert settings.strToBool('true')  is True
+    assert settings.strToBool( True)   is True
+
+
+def _do_wx_settings_test(func):
+
+    import wx 
+
+    passed = [False]
+    app    = wx.App()
+    frame  = wx.Frame(None)
+
+    def wrap():
+        try:
+            func()
+            passed[0] = True
+        finally:
+            frame.Destroy()
+            app.ExitMainLoop()
+    
+    frame.Show()
+
+    wx.CallLater(500, wrap)
+
+    app.MainLoop()
+    assert passed[0]
+
+
+def  test_readwrite(): _do_wx_settings_test(_test_readwrite)
+def _test_readwrite():
+
+    tests = [('string_setting', 'string_value'),
+             ('int_setting',     123),
+             ('float_setting',   123.0),
+             ('bool_setting1',   True),
+             ('bool_setting2',   True),
+             ('tuple_setting',  (1, 2, 'blah')),
+             ('list_setting',   [1, 2, 'blah'])]
+
+    for k, v in tests:
+        settings.write(k, v)
+        assert settings.read(k) == str(v)
+
+    assert settings.read('non-existent')            is None
+    assert settings.read('non-existent', 'default') == 'default'
+
+
+def  test_readdefault(): _do_wx_settings_test(_test_readdefault)
+def _test_readdefault():
+    assert settings.read('non-existent')            is None
+    assert settings.read('non-existent', 'default') == 'default' 
+
+
+def  test_delete(): _do_wx_settings_test(_test_delete)
+def _test_delete():
+
+    settings.delete('non-existent')
+    assert settings.read('non-existent') is None
+
+    settings.write('my_setting', 'abcdef')
+    assert settings.read('my_setting') == 'abcdef'
+    settings.delete('my_setting')
+    assert settings.read('my_setting') is None
+
+
+def  test_clear(): _do_wx_settings_test(_test_clear)
+def _test_clear():
+
+    tests = [('setting1', '1'),
+             ('setting2', '2'),
+             ('setting3', '3')]
+
+    for k, v in tests:
+        settings.write(k, v)
+
+    for k, v in tests:
+        assert settings.read(k) == v
+
+    settings.clear()
+
+    for k, v in tests:
+        assert settings.read(k) is None