diff --git a/fossils.py b/fossils.py
index 6091edc220cc1e532fd3727410e2cf2fd6241aea..2046afa5c2b22f320666136e830eb8c1c6c59d95 100644
--- a/fossils.py
+++ b/fossils.py
@@ -1,22 +1,12 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-# runs a test as if it was installed
-
-# import os
-# import platform
-# if 'Windows' in platform.uname():
-#     # remove tbb from the PATH
-#     #   otherwise: "Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll"
-#     paths = os.environ['PATH'].split(';')
-#     corr_path = [ p for p in paths if not 'tbb' in p]
-#     os.environ['PATH'] = ';'.join(corr_path)
-#     for p in corr_path:
-#         print(p)
 
 from PyQt5.QtCore import *
 from PyQt5.QtGui import *
 from PyQt5.QtWidgets import *
 from ui_fossils import Ui_Form
+import sys
+import os
 
 class Window(QWidget, Ui_Form):
     """Minimal GUI asking for a file and running it
@@ -70,23 +60,69 @@ class Window(QWidget, Ui_Form):
         event.accept()
 
 
+def run_simulation(testname):
+    """Runs a python file
+    """
 
-if __name__ == "__main__":
-    import sys
-    import os
-    # adds "." to the pythonpath
+    exec(open(testname, encoding='utf-8').read(), 
+        {'__file__': testname, '__name__':'__main__'})    
+
+
+def view_results():
+    """Load/display results in the current folder
+    """
+    import gmsh
+    if not gmsh.isInitialized():
+        gmsh.initialize()
+    # load empty mesh
+    gmsh.merge('mesh.msh')
+    gmsh.option.setNumber("General.Verbosity", 3)
+    # load views from the option file
+    views = []
+    with open('mesh.opt') as f:
+        import re
+        viewregex = re.compile('View\[(.+)\].FileName = "(.+)";')
+        for l in f.readlines():
+            match = viewregex.search(l)
+            if match:
+                g = match.groups()
+                views.append(g)
+    for v in views:
+        print(f'loading "{v[1]}"')
+        gmsh.merge(v[1])
+    print('loading options...')
+    gmsh.merge('mesh.opt')
+    print('starting Gmsh GUI, please wait...')
+    gmsh.fltk.run()
+
+
+def add_folder2path(folder):
+    if os.path.isdir(folder):
+        print(f'{folder} added to pythonpath')
+        sys.path.append(folder)
+
+
+def setup_pythonpath():
+    """setup PYTHONPATH
+    """
+    # adds script folder to the pythonpath
     thisdir = os.path.split(os.path.abspath(__file__))[0]
     thisdir = os.path.normcase(thisdir)
-    print(f'adding {thisdir} to pythonpath')
-    sys.path.append(thisdir)
+    add_folder2path(thisdir)
 
     # add binary dir to PYTHONPATH
     pyexe = os.path.basename(sys.executable)
-    print(f'pyexe={pyexe}')
-    sys.path.append(os.path.join(thisdir, 'cxxfem',
+    print(f'pyexe = {pyexe}')
+    add_folder2path(os.path.join(thisdir, 'cxxfem',
                     'build', 'bin'))  # gcc/mingw
-    sys.path.append(os.path.join(thisdir, 'cxxfem',
-                    'build', 'bin', 'Release'))  # msvc
+    add_folder2path(os.path.join(thisdir, 'cxxfem',
+                    'build', 'bin', 'Release'))  # msvc    
+
+
+if __name__ == "__main__":
+
+    # add main program folder and binaries dir to the PYTHONPATH
+    setup_pythonpath()
 
     # redirect C++ streams to Python
     import cxxfem
@@ -97,17 +133,6 @@ if __name__ == "__main__":
     os.environ['OMP_NUM_THREADS'] = str(args.k)
     cxxfem.set_num_threads(args.k)
 
-    # try:
-    #     ncpus1 = int(os.environ['NUMBER_OF_PROCESSORS'])
-    #     print(f'{ncpus1} CPUs detected')
-    #     import multiprocessing
-    #     ncpus2 = multiprocessing.cpu_count()
-    #     print(f'{ncpus2} CPUs detected')
-    #     ncpus3 = os.cpu_count()
-    #     print(f'{ncpus3} CPUs detected')
-    # except:
-    #     pass
-
     # display env variables
     try:
         print(f"OMP_NUM_THREADS={os.environ['OMP_NUM_THREADS']}")
@@ -126,6 +151,7 @@ if __name__ == "__main__":
         win.show()
         app.lastWindowClosed.connect(app.quit)
         app.exec_()
+
         workspace = win.wrkspLineEdit.text()
         action = win.action
         testname = win.inpFileLineEdit.text()
@@ -134,9 +160,9 @@ if __name__ == "__main__":
         action = 'run'
         testname = os.path.abspath(args.file)
 
-
-    # run the simulation
-    print(f'action={action}')
+    # run the simulation or display results
+    
+    print(f'action = {action}')
     if action=='run' or action=='post':
         testname = os.path.normcase(testname)  # F:/ => f:/ on Windows
         print(f'testname = {testname}')
@@ -152,7 +178,7 @@ if __name__ == "__main__":
             resdir = testname[len(common):].replace(os.sep, "_")
             resdir, ext = os.path.splitext(resdir)
             wdir = os.path.join('workspace', resdir)
-        print('workspace=', wdir)
+        print('workspace =', wdir)
 
         if not os.path.isdir(wdir):
             os.makedirs(wdir)
@@ -161,31 +187,6 @@ if __name__ == "__main__":
         tee = cxxfem.Tee('stdout.txt')  # split streams
 
         if action == 'run':
-            if ext == '.py':
-                # run python script
-                __file__ = testname
-                exec(open(testname, encoding='utf-8').read())
+            run_simulation(testname)
         elif action == 'post':
-            import gmsh
-            if not gmsh.isInitialized():
-                gmsh.initialize()
-            # load empty mesh
-            gmsh.merge('mesh.msh')
-            gmsh.option.setNumber("General.Verbosity", 3)
-            # load views from the option file
-            views = []
-            with open('mesh.opt') as f:
-                import re
-                viewregex = re.compile('View\[(.+)\].FileName = "(.+)";')
-                for l in f.readlines():
-                    match = viewregex.search(l)
-                    if match:
-                        g = match.groups()
-                        views.append(g)
-            for v in views:
-                print(f'loading "{v[1]}"')
-                gmsh.merge(v[1])
-            print('loading options...')
-            gmsh.merge('mesh.opt')
-            print('starting Gmsh GUI, please wait...')
-            gmsh.fltk.run()
+            view_results()