diff --git a/fsl/wrappers/bet.py b/fsl/wrappers/bet.py
index 1eadd23d89db24cfb754790985307e9bfbc4cf9a..45e7870de684fb7a0d23c15a2994000b37869524 100644
--- a/fsl/wrappers/bet.py
+++ b/fsl/wrappers/bet.py
@@ -11,11 +11,11 @@
 
 
 import fsl.utils.assertions as asrt
-import fsl.utils.run        as run
 from . import wrapperutils  as wutils
 
 
 @wutils.fileOrImage('input', 'output')
+@wutils.fslwrapper
 def bet(input, output, **kwargs):
     """Wrapper for the ``bet`` command.
 
@@ -46,11 +46,12 @@ def bet(input, output, **kwargs):
     cmd  = ['bet', input, output]
     cmd += wutils.applyArgStyle('-', argmap=argmap, valmap=valmap, **kwargs)
 
-    return run.runfsl(*cmd)
+    return cmd
 
 
 @wutils.fileOrImage('input', 'output')
 @wutils.fileOrArray('matrix')
+@wutils.fslwrapper
 def robustfov(input, output=None, **kwargs):
     """Wrapper for the ``robustfov`` command. """
     asrt.assertIsNifti(input)
@@ -66,4 +67,4 @@ def robustfov(input, output=None, **kwargs):
     cmd  = ['robustfov', '-i', input]
     cmd += wutils.applyArgStyle('-', argmap=argmap, **kwargs)
 
-    return run.runfsl(cmd)
+    return cmd
diff --git a/fsl/wrappers/eddy.py b/fsl/wrappers/eddy.py
index c5d272ad2ccd89dcfc658d516ecd2c8bd90189a7..ae5c7bb4f0075c65fa363970237b26baf7797bd1 100644
--- a/fsl/wrappers/eddy.py
+++ b/fsl/wrappers/eddy.py
@@ -18,13 +18,13 @@ estimation and eddy-current distortion correction.
 """
 
 
-import fsl.utils.run        as run
 import fsl.utils.assertions as asrt
 from . import wrapperutils  as wutils
 
 
 @wutils.fileOrImage('imain', 'mask', 'field')
 @wutils.fileOrArray('index', 'acqp', 'bvecs', 'bvals', 'field_mat')
+@wutils.fslwrapper
 def eddy_cuda(imain, mask, index, acqp, bvecs, bvals, out, **kwargs):
     """Wrapper for the ``eddy_cuda`` command."""
 
@@ -58,11 +58,12 @@ def eddy_cuda(imain, mask, index, acqp, bvecs, bvals, out, **kwargs):
                    'out'   : out})
 
     cmd = ['eddy_cuda'] + wutils.applyArgStyle('--=', valmap=valmap, **kwargs)
-    return run.runfsl(cmd)
+    return cmd
 
 
 @wutils.fileOrImage('imain', 'fout', 'iout')
 @wutils.fileOrArray('datain')
+@wutils.fslwrapper
 def topup(imain, datain, **kwargs):
     """Wrapper for the ``topup`` command."""
 
@@ -76,4 +77,4 @@ def topup(imain, datain, **kwargs):
     cmd  = ['topup', '--imain={}'.format(imain), '--datain={}'.format(datain)]
     cmd += wutils.applyArgStyle('--=', valmap=valmap, **kwargs)
 
-    return run.runfsl(cmd)
+    return cmd
diff --git a/fsl/wrappers/flirt.py b/fsl/wrappers/flirt.py
index dd4dadbf685eba6e579333e14967b3d5b7ff21b1..dac853992d8256036739b14f0ec9cc92991b2434 100644
--- a/fsl/wrappers/flirt.py
+++ b/fsl/wrappers/flirt.py
@@ -20,14 +20,13 @@ tools.
 """
 
 
-import fsl.utils.run        as run
 import fsl.utils.assertions as asrt
 from . import wrapperutils  as wutils
 
 
-@wutils.required('src', 'ref')
 @wutils.fileOrImage('src', 'ref', 'out', 'wmseg', 'fieldmap', 'fieldmapmask')
 @wutils.fileOrArray('init', 'omat', 'wmcoords', 'wmnorms')
+@wutils.fslwrapper
 def flirt(src, ref, **kwargs):
     """Wrapper for the ``flirt`` command.
 
@@ -57,11 +56,9 @@ def flirt(src, ref, **kwargs):
     cmd  = ['flirt', '-in', src, '-ref', ref]
     cmd += wutils.applyArgStyle('-', argmap=argmap, valmap=valmap, **kwargs)
 
-    return run.runfsl(cmd)
+    return cmd
 
 
-@wutils.fileOrImage('src', 'ref', 'out')
-@wutils.fileOrArray('mat')
 def applyxfm(src, ref, mat, out, interp='spline'):
     """Convenience function which runs ``flirt -applyxfm ...``."""
     return flirt(src,
@@ -72,16 +69,16 @@ def applyxfm(src, ref, mat, out, interp='spline'):
                  interp=interp)
 
 
-@wutils.fileOrArray
+@wutils.fileOrArray()
+@wutils.fslwrapper
 def invxfm(inmat, omat):
     """Use ``convert_xfm`` to invert an affine."""
     asrt.assertFileExists(inmat)
-
-    cmd = 'convert_xfm -omat {} -inverse {}'.format(omat, inmat)
-    return run.runfsl(cmd)
+    return ['convert_xfm', '-omat', omat, '-inverse', inmat]
 
 
 @wutils.fileOrArray('inmat1', 'inmat2', 'outmat')
+@wutils.fslwrapper
 def concatxfm(inmat1, inmat2, outmat):
     """Use ``convert_xfm`` to concatenate two affines."""
 
@@ -94,11 +91,12 @@ def concatxfm(inmat1, inmat2, outmat):
            inmat2,
            inmat1]
 
-    return run.runfsl(cmd)
+    return cmd
 
 
 @wutils.fileOrImage('infile', 'out', 'reffile')
 @wutils.fileOrArray('init')
+@wutils.fslwrapper
 def mcflirt(infile, **kwargs):
     """Wrapper for the ``mcflirt`` command."""
 
@@ -107,4 +105,4 @@ def mcflirt(infile, **kwargs):
     cmd  = ['mcflirt', '-in', infile]
     cmd += wutils.applyArgStyle('-', **kwargs)
 
-    return run.runfsl(cmd)
+    return cmd
diff --git a/fsl/wrappers/fnirt.py b/fsl/wrappers/fnirt.py
index 3abcd51c97e11f88abcf59fd605f76a3638ef5d1..bd457337357694e3bb869ef8a0c516cebd1c7cb1 100644
--- a/fsl/wrappers/fnirt.py
+++ b/fsl/wrappers/fnirt.py
@@ -19,7 +19,6 @@ non-linear registration of 3D images.
 """
 
 
-import fsl.utils.run        as run
 import fsl.utils.assertions as asrt
 from . import wrapperutils  as wutils
 
@@ -27,6 +26,7 @@ from . import wrapperutils  as wutils
 @wutils.fileOrImage('src', 'ref', 'inwarp', 'cout', 'iout', 'fout', 'jout',
                     'refout', 'refmask', 'inmask')
 @wutils.fileOrArray('aff')
+@wutils.fslwrapper
 def fnirt(src, ref, **kwargs):
     """Wrapper for the ``fnirt`` command."""
 
@@ -35,11 +35,12 @@ def fnirt(src, ref, **kwargs):
     cmd  = ['fnirt', '--in={}'.format(src), '--ref={}'.format(ref)]
     cmd += wutils.applyArgStyle('--=', **kwargs)
 
-    return run.runfsl(cmd)
+    return cmd
 
 
 @wutils.fileOrImage('src', 'ref', 'out', 'warp', 'mask')
 @wutils.fileOrArray('premat', 'postmat')
+@wutils.fslwrapper
 def applywarp(src, ref, out, warp, **kwargs):
     """Wrapper for the ``applywarp`` command. """
 
@@ -59,10 +60,11 @@ def applywarp(src, ref, out, warp, **kwargs):
 
     cmd += wutils.applyArgStyle('--=', valmap=valmap, **kwargs)
 
-    return run.runfsl(cmd)
+    return cmd
 
 
 @wutils.fileOrImage('warp', 'ref', 'out')
+@wutils.fslwrapper
 def invwarp(warp, ref, out, **kwargs):
     """Wrapper for the ``invwarp`` command."""
 
@@ -83,11 +85,12 @@ def invwarp(warp, ref, out, **kwargs):
 
     cmd += wutils.applyArgStyle('--=', valmap=valmap, **kwargs)
 
-    return run.runfsl(cmd)
+    return cmd
 
 
 @wutils.fileOrImage('out', 'ref', 'warp1', 'warp2', 'shiftmap')
 @wutils.fileOrArray('premat', 'midmat', 'postmat')
+@wutils.fslwrapper
 def convertwarp(out, ref, **kwargs):
     """Wrapper for the ``convertwarp`` command."""
 
@@ -105,4 +108,4 @@ def convertwarp(out, ref, **kwargs):
     cmd  = ['convertwarp', '--ref={}'.format(ref), '--out={}'.format(out)]
     cmd += wutils.applyArgStyle('--=', valmap=valmap, **kwargs)
 
-    return run.runfsl(cmd)
+    return cmd
diff --git a/fsl/wrappers/fslmaths.py b/fsl/wrappers/fslmaths.py
index 3ad54b7848aaf18e9a96ec587427bcbacfaf9b83..db5858f04e9067a45c89eb3163ae8e0ee641f59f 100644
--- a/fsl/wrappers/fslmaths.py
+++ b/fsl/wrappers/fslmaths.py
@@ -9,7 +9,6 @@ for the ``fslmaths`` command-line tool.
 """
 
 
-import fsl.utils.run       as run
 from . import wrapperutils as wutils
 
 
@@ -155,6 +154,7 @@ class fslmaths(object):
         else:              return output
 
     @wutils.fileOrImage()
+    @wutils.fslwrapper
     def __run(self, *cmd):
         """Run the given ``fslmaths`` command. """
-        return run.runfsl([str(c) for c in cmd])
+        return [str(c) for c in cmd]
diff --git a/fsl/wrappers/fugue.py b/fsl/wrappers/fugue.py
index 7a4cf8e5fdf45833ad7d567d12531741899360f4..19fdcf94bef1b50018e4834e4814b489999a72c6 100644
--- a/fsl/wrappers/fugue.py
+++ b/fsl/wrappers/fugue.py
@@ -11,12 +11,12 @@ processing and distortion correction.
 """
 
 
-import fsl.utils.run       as run
 from . import wrapperutils as wutils
 
 
 @wutils.fileOrImage('in', 'unwarp', 'warp', 'phasemap', 'savefmap',
                     'loadfmap', 'saveshift', 'loadshift', 'mask')
+@wutils.fslwrapper
 def fugue(**kwargs):
     """Wrapper for the ``fugue`` command."""
 
@@ -39,9 +39,11 @@ def fugue(**kwargs):
 
     cmd = ['fugue'] + wutils.applyArgStyle('--=',  valmap=valmap, **kwargs)
 
-    return run.runfsl(cmd)
+    return cmd
 
 
+@wutils.fileOrImage('input', 'mask', 'sigloss')
+@wutils.fslwrapper
 def sigloss(input, sigloss, **kwargs):
     """Wrapper for the ``sigloss`` command."""
 
@@ -50,4 +52,4 @@ def sigloss(input, sigloss, **kwargs):
     cmd  = ['sigloss', '--in', input, '--sigloss', sigloss]
     cmd += wutils.applyArgStyle('--', valmap=valmap, **kwargs)
 
-    return run.runfsl(cmd)
+    return cmd
diff --git a/fsl/wrappers/melodic.py b/fsl/wrappers/melodic.py
index 16887284db65ed3951bfb192d53fae57c3d822a1..d95b33fa50c0b5b798b9124f0a965d4fece10408 100644
--- a/fsl/wrappers/melodic.py
+++ b/fsl/wrappers/melodic.py
@@ -17,14 +17,13 @@ related utilities.
 """
 
 
-
-import fsl.utils.run        as run
 import fsl.utils.assertions as asrt
 from . import wrapperutils  as wutils
 
 
 @wutils.fileOrArray('mix', 'Tdes', 'Tcon', 'Sdes', 'Scon')
 @wutils.fileOrImage('input', 'mask', 'ICs', 'bgimage')
+@wutils.fslwrapper
 def melodic(input, **kwargs):
     """Multivariate Exploratory Linear Optimised ICA."""
 
@@ -56,11 +55,12 @@ def melodic(input, **kwargs):
     cmd  = ['melodic', '--in', input]
     cmd += wutils.applyArgStyle('--=', valmap=valmap, **kwargs)
 
-    return run.runfsl(cmd)
+    return cmd
 
 
 @wutils.fileOrImage('input', 'out', 'mask', 'out_data')
 @wutils.fileOrArray('design', 'out_mix')
+@wutils.fslwrapper
 def fsl_regfilt(input, out, design, **kwargs):
     """Wrapper for the ``fsl_regfilt``command. """
 
@@ -79,4 +79,4 @@ def fsl_regfilt(input, out, design, **kwargs):
             '--design={}'.format(design)]
     cmd += wutils.applyArgStyle('--=', valmap=valmap, **kwargs)
 
-    return run.runfsl(cmd)
+    return cmd
diff --git a/fsl/wrappers/misc.py b/fsl/wrappers/misc.py
index 4d912dee26f7f163765617967ed55a6bb1b352d6..3b7a0615eb7f9f1be6220314c9ea611e8542f021 100644
--- a/fsl/wrappers/misc.py
+++ b/fsl/wrappers/misc.py
@@ -10,12 +10,12 @@
 """
 
 
-import fsl.utils.run        as run
 import fsl.utils.assertions as asrt
 from . import wrapperutils  as wutils
 
 
 @wutils.fileOrImage('input', 'output')
+@wutils.fslwrapper
 def fslreorient2std(input, output=None):
     """Wrapper for the ``fsreorient2std`` tool."""
 
@@ -26,10 +26,11 @@ def fslreorient2std(input, output=None):
     if output is not None:
         cmd.append(output)
 
-    return run.runfsl(cmd)
+    return cmd
 
 
 @wutils.fileOrImage('input', 'output')
+@wutils.fslwrapper
 def fslroi(input, output, xmin=None, xsize=None, ymin=None, ysize=None,
            zmin=None, zsize=None, tmin=None, tsize=None):
     """Wrapper for the ``fslroi`` tool."""
@@ -46,10 +47,11 @@ def fslroi(input, output, xmin=None, xsize=None, ymin=None, ysize=None,
     if tmin is not None:
         cmd += [str(tmin), str(tsize)]
 
-    return run.runfsl(cmd)
+    return cmd
 
 
 @wutils.fileOrImage('input', 'input2')
+@wutils.fslwrapper
 def slicer(input, input2=None, label=None, lut=None, intensity=None,
            edgethreshold=None, x=None, y=None, z=None):
     """Wrapper for the ``slicer`` command. """
@@ -73,14 +75,14 @@ def slicer(input, input2=None, label=None, lut=None, intensity=None,
     if z is not None:
         cmd += " -z {0} {1}".format(z[0], z[1])
 
-    return run.runfsl(cmd)
-
+    return cmd
 
 
 @wutils.fileOrImage('input', 'cope', 'oindex', 'othresh', 'olmaxim', 'osize',
                     'omax', 'omean', 'opvals', 'stdvol', 'warpvol',
                     'empiricalNull')
 @wutils.fileOrArray('xfm')
+@wutils.fslwrapper
 def cluster(input, thresh, **kwargs):
     """Wrapper for the ``cluster`` command. """
 
@@ -98,4 +100,4 @@ def cluster(input, thresh, **kwargs):
     cmd  = ['cluster', '--in={}'.format(input), '--thresh={}'.format(thresh)]
     cmd += wutils.applyArgStyle('--=', valmap=valmap, **kwargs)
 
-    return run.runfsl(cmd)
+    return cmd