diff --git a/blast/blUtils.py b/blast/blUtils.py
index 2ff8b0ebfa6460cd8365adbb5643e28d000c6c55..37b09cb9bfa89c8dafc4bff0843b97a8617abeb4 100644
--- a/blast/blUtils.py
+++ b/blast/blUtils.py
@@ -52,7 +52,7 @@ def initBL(Re, Minf, CFL0, nSections, xtrF = [None, None], span=1.0, verb=None):
     solver = blast.Driver(Re, Minf, CFL0, nSections, xtrF_top=xtrF[0], xtrF_bot=xtrF[1], _span=span, _verbose=verbose)
     return solver
 
-def initBlast(iconfig, vconfig, iSolver='DART'):
+def initBlast(iconfig, vconfig, iSolver='DART', task='analysis'):
     """Initialize blast coupling objects.
     
     Params
@@ -83,7 +83,7 @@ def initBlast(iconfig, vconfig, iSolver='DART'):
     else:
         print(ccolors.ANSI_RED + 'Solver '+iSolver+' currently not implemented' + ccolors.ANSI_RESET)
         raise RuntimeError
-    iSolverAPI = interface(iconfig, vSolver, vconfig)
+    iSolverAPI = interface(iconfig, vSolver, vconfig, task)
 
     # Coupler
     import blast.blCoupler as blastCoupler
diff --git a/blast/interfaces/dart/blDartInterface.py b/blast/interfaces/dart/blDartInterface.py
index 007ac6b1d8589af21924a5ac5ed9d8b9e577d043..c89d1c98e317bcbd3aa0c8772a999ac7ec122304 100644
--- a/blast/interfaces/dart/blDartInterface.py
+++ b/blast/interfaces/dart/blDartInterface.py
@@ -18,13 +18,14 @@
 # Dart interface
 # Paul Dechamps
 
+from importlib import import_module
 import numpy as np
 
 from fwk.coloring import ccolors
 from blast.interfaces.blSolversInterface import SolversInterface
 
-dartflo_import_paths = {'local module': 'modules.dartflo.dart.api.core',
-                       'blaster install': 'blaster.dart.api.core'}
+dartflo_import_paths = {'local module': 'modules.dartflo.dart',
+                       'blaster install': 'blaster.dart'}
 
 class DartInterface(SolversInterface):
     """Interface to the Dart solver.
@@ -58,16 +59,18 @@ class DartInterface(SolversInterface):
         # Load DART module
         if 'dart_path' in dartCfg:
             # First try imposed path
-            try:
-                init_dart = __import__(dartCfg['dart_path'], fromlist=['init_dart']).init_dart
-                print(f'DART loaded from specified path {dartCfg["dart_path"]} for {task}.')
+            try:                
+                import_module(dartCfg['dart_path'])
+                dartflo_import_paths['found'] = dartCfg['dart_path']
+                print(f'DART loaded from specified path {dartCfg['dart_path']} for {task}.')
             except ImportError:
-                raise ImportError(f'{ccolors.ANSI_RED}Could not load DART from specified path: {dartCfg["dart_path"]}.{ccolors.ANSI_RESET}')
+                raise ImportError(f'{ccolors.ANSI_RED}Could not load DART from specified path: {dartCfg['dart_path']}.{ccolors.ANSI_RESET}')
         else:
             # Load from known paths
             for name, path in dartflo_import_paths.items():
                 try:
-                    init_dart = __import__(path, fromlist=['init_dart']).init_dart
+                    import_module(path)
+                    dartflo_import_paths['found'] = path
                     print(f'DART loaded from {name} path for {task}.')
                     break
                 except ImportError:
@@ -75,6 +78,7 @@ class DartInterface(SolversInterface):
             else:
                 raise ImportError(f'{ccolors.ANSI_RED}Could not load DART.{ccolors.ANSI_RESET}')
 
+        init_dart = getattr(import_module(dartflo_import_paths['found']+'.api.core'), 'init_dart')
         self.iobj = init_dart(dartCfg, task=task, viscous=True)
         self.solver = self.iobj.get('sol') # Solver
         self.blw = [self.iobj.get('blwb'), self.iobj.get('blww')]
@@ -136,11 +140,11 @@ class DartInterface(SolversInterface):
                     data[i,2] = n.pos[2]
                     data[i,3] = self.solver.Cp[n.row]
                 np.savetxt(self.iobj['msh'].name+'_Cp_surface'+sfx+'.dat', data, fmt='%1.6e', delimiter=', ', header='x, y, z, Cp', comments='')
-                import modules.dartflo.dart.utils as invUtils
                 if self.cfg['Format'] == 'vtk':
+                    write_slices = getattr(import_module(dartflo_import_paths['found']+'.utils'), 'write_slices')
                     if self.getVerbose() > 1:
                         print('Saving Cp files in vtk format. Msh {:s}, Tag {:.0f}'.format(self.iobj['msh'].name, self.cfg['saveTag']))
-                    invUtils.write_slices(self.iobj['msh'].name, self.cfg['writeSections'], self.cfg['saveTag'], sfx=sfx)
+                    write_slices(self.iobj['msh'].name, self.cfg['writeSections'], self.cfg['saveTag'], sfx=sfx)
 
     def save(self, sfx='inviscid'):
         """Save the solution.
diff --git a/blast/tests/dart/adjoint_2D.py b/blast/tests/dart/adjoint_2D.py
index be5955667443e0e14b61b78e5d880bf4e2aff568..634b479b2118a06ce8d86023b79a999d182c0040 100644
--- a/blast/tests/dart/adjoint_2D.py
+++ b/blast/tests/dart/adjoint_2D.py
@@ -36,8 +36,6 @@ def cfgInviscid(nthrds, verb):
     # Parameters
     return {
     # Options
-    'scenario' : 'aerodynamic',
-    'task' : 'optimization',
     'Threads' : nthrds, # number of threads
     'Verb' : verb, # verbosity
     # Model (geometry or mesh)
@@ -100,7 +98,7 @@ def main():
     dalpha = 1e-6 * np.pi/180
     daoa = [alpha - dalpha, alpha + dalpha]
 
-    coupler, isol, vsol = vutils.initBlast(icfg, vcfg)
+    coupler, isol, vsol = vutils.initBlast(icfg, vcfg, task='optimization')
     morpher = isol.iobj['mrf']
 
     # Adjoint objects