diff --git a/fsl/wrappers/flirt.py b/fsl/wrappers/flirt.py
index 7d3ef4769bf2292b5e7f7827e00ff3bb40852abd..dd4dadbf685eba6e579333e14967b3d5b7ff21b1 100644
--- a/fsl/wrappers/flirt.py
+++ b/fsl/wrappers/flirt.py
@@ -29,10 +29,18 @@ from . import wrapperutils  as wutils
 @wutils.fileOrImage('src', 'ref', 'out', 'wmseg', 'fieldmap', 'fieldmapmask')
 @wutils.fileOrArray('init', 'omat', 'wmcoords', 'wmnorms')
 def flirt(src, ref, **kwargs):
-    """Wrapper for the ``flirt`` command. """
+    """Wrapper for the ``flirt`` command.
+
+    The ``twod`` argument may be used in place of the ``2D`` command line
+    option.
+    """
 
     asrt.assertIsNifti(src, ref)
 
+    argmap = {
+        'twod' : '2D'
+    }
+
     valmap = {
         'usesqform'    : wutils.SHOW_IF_TRUE,
         'displayinit'  : wutils.SHOW_IF_TRUE,
@@ -47,7 +55,7 @@ def flirt(src, ref, **kwargs):
     }
 
     cmd  = ['flirt', '-in', src, '-ref', ref]
-    cmd += wutils.applyArgStyle('-', valmap=valmap, **kwargs)
+    cmd += wutils.applyArgStyle('-', argmap=argmap, valmap=valmap, **kwargs)
 
     return run.runfsl(cmd)
 
diff --git a/fsl/wrappers/melodic.py b/fsl/wrappers/melodic.py
index 82bf28844540bb10d4051d48ac36eaac351d85f4..16887284db65ed3951bfb192d53fae57c3d822a1 100644
--- a/fsl/wrappers/melodic.py
+++ b/fsl/wrappers/melodic.py
@@ -1,57 +1,82 @@
 #!/usr/bin/env python
 #
-# melodic.py -
+# melodic.py - Wrappers for melodic.
 #
+# Author: Sean Fitzgibbon <sean.fitzgibbon@ndcn.ox.ac.uk>
 # Author: Paul McCarthy <pauldmccarthy@gmail.com>
 #
+"""This module provides wrapper functions for the FSL `MELODIC
+<https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/MELODIC>`_ tool, and other
+related utilities.
+
+.. autosummary::
+   :nosignatures:
+
+   melodic
+   fsl_regfilt
+"""
+
 
 
 import fsl.utils.run        as run
 import fsl.utils.assertions as asrt
+from . import wrapperutils  as wutils
 
 
-def melodic(input, outdir, dim=None, tr=None, mmthresh=None, report=True,
-            prefix=None, nomask=False, updatemask=False, nobet=False,
-            mask=None):
+@wutils.fileOrArray('mix', 'Tdes', 'Tcon', 'Sdes', 'Scon')
+@wutils.fileOrImage('input', 'mask', 'ICs', 'bgimage')
+def melodic(input, **kwargs):
     """Multivariate Exploratory Linear Optimised ICA."""
+
+    valmap = {
+        'Oall'         : wutils.SHOW_IF_TRUE,
+        'Ounmix'       : wutils.SHOW_IF_TRUE,
+        'Ostats'       : wutils.SHOW_IF_TRUE,
+        'Opca'         : wutils.SHOW_IF_TRUE,
+        'Owhite'       : wutils.SHOW_IF_TRUE,
+        'Oorig'        : wutils.SHOW_IF_TRUE,
+        'Omean'        : wutils.SHOW_IF_TRUE,
+        'verbose'      : wutils.SHOW_IF_TRUE,
+        'debug'        : wutils.SHOW_IF_TRUE,
+        'report'       : wutils.SHOW_IF_TRUE,
+        'CIFTI'        : wutils.SHOW_IF_TRUE,
+        'varnorm'      : wutils.SHOW_IF_TRUE,
+        'nomask'       : wutils.SHOW_IF_TRUE,
+        'nobet'        : wutils.SHOW_IF_TRUE,
+        'sep_vn'       : wutils.SHOW_IF_TRUE,
+        'disableMigp'  : wutils.SHOW_IF_TRUE,
+        'update_mask'  : wutils.HIDE_IF_TRUE,
+        'migp_shuffle' : wutils.HIDE_IF_TRUE,
+        'no_mm'        : wutils.SHOW_IF_TRUE,
+        'logPower'     : wutils.SHOW_IF_TRUE,
+    }
+
     asrt.assertIsNifti(input)
 
-    cmd = "melodic -i {0} -v --Oall --outdir={1}".format(input, outdir)
-
-    if mmthresh:
-        cmd += " --mmthresh={0}".format(mmthresh)
-    if dim:
-        cmd += " -d -{0}".format(dim)
-    if report:
-        cmd += " --report"
-    if tr:
-        cmd += " --tr={0}".format(tr)
-    if nomask:
-        cmd += " --nomask"
-    if updatemask:
-        cmd += " --update_mask"
-    if nobet:
-        cmd += " --nobet"
-    if prefix:
-        cmd = prefix + " " + cmd
-    if mask is not None:
-        cmd += " --mask={0}".format(mask)
+    cmd  = ['melodic', '--in', input]
+    cmd += wutils.applyArgStyle('--=', valmap=valmap, **kwargs)
+
     return run.runfsl(cmd)
 
 
-def fsl_regfilt(infile, outfile, mix, ics):
-    """Data de-noising by regression.
+@wutils.fileOrImage('input', 'out', 'mask', 'out_data')
+@wutils.fileOrArray('design', 'out_mix')
+def fsl_regfilt(input, out, design, **kwargs):
+    """Wrapper for the ``fsl_regfilt``command. """
+
+    asrt.assertIsNifti(input, out)
 
-    Data de-noising by regressing out part of a design matrix
-    using simple OLS regression on 4D images
-    """
-    asrt.assertIsNifti(infile, outfile)
+    valmap = {
+        'freqfilt' : wutils.SHOW_IF_TRUE,
+        'freq_ic'  : wutils.HIDE_IF_TRUE,
+        'vn'       : wutils.SHOW_IF_TRUE,
+        'v'        : wutils.SHOW_IF_TRUE,
+    }
 
-    icstr = '"'
-    for i in range(0, len(ics) - 1):
-        icstr = icstr + '{0},'.format(ics[i] + 1)
-    icstr = icstr + '{0}"'.format(ics[-1] + 1)
+    cmd  = ['fsl_regfilt',
+            '--in={}'.format(input),
+            '--out={}'.format(out),
+            '--design={}'.format(design)]
+    cmd += wutils.applyArgStyle('--=', valmap=valmap, **kwargs)
 
-    cmd = "fsl_regfilt -i {0} -o {1} -d {2} -f {3}".format(infile, outfile,
-                                                           mix, icstr)
     return run.runfsl(cmd)