diff --git a/fsl/scripts/resample_image.py b/fsl/scripts/resample_image.py
index 151c301bf3af108485a67f3d21fd65df9efedca2..37c7242bd1ae7877277e96a81fb5f690b417e32b 100644
--- a/fsl/scripts/resample_image.py
+++ b/fsl/scripts/resample_image.py
@@ -20,6 +20,40 @@ import fsl.utils.image.resample as resample
 import fsl.data.image           as fslimage
 
 
+def intlist(val):
+    """Turn a string of comma-separated ints into a list of ints. """
+    return [int(v) for v in val.split(',')]
+
+
+def floatlist(val):
+    """Turn a string of comma-separated floats into a list of floats. """
+    return [float(v) for v in val.split(',')]
+
+
+def sanitiseList(parser, vals, img, arg):
+    """Make sure that ``vals`` has the same number of elements as ``img`` has
+    dimensions. Used to sanitise the ``--shape`` and ``--dim`` options.
+    """
+
+    if vals is None:
+        return vals
+
+    nvals = len(vals)
+
+    if nvals < 3:
+        parser.error('At least three values are '
+                     'required for {}'.format(arg))
+
+    if nvals > img.ndim:
+        parser.error('Input only has {} dimensions - too many values '
+                     'specified for {}'.format(img.ndim, arg))
+
+    if nvals < img.ndim:
+        vals = list(vals) + list(img.shape[nvals:])
+
+    return vals
+
+
 ARGS = {
     'input'     : ('input',),
     'output'    : ('output',),
@@ -36,8 +70,8 @@ OPTS = {
     'input'     : dict(type=parse_data.Image),
     'output'    : dict(type=parse_data.ImageOut),
     'reference' : dict(type=parse_data.Image, metavar='IMAGE'),
-    'shape'     : dict(type=int,   nargs=3, metavar=('X', 'Y', 'Z')),
-    'dim'       : dict(type=float, nargs=3, metavar=('X', 'Y', 'Z')),
+    'shape'     : dict(type=intlist,   metavar=('X,Y,Z,...')),
+    'dim'       : dict(type=floatlist, metavar=('X,Y,Z,...')),
     'interp'    : dict(choices=('nearest', 'linear', 'cubic'),
                        default='linear'),
     'origin'    : dict(choices=('centre', 'corner'), default='centre'),
@@ -110,6 +144,8 @@ def parseArgs(argv):
     args        = parser.parse_args(argv)
     args.interp = INTERPS[   args.interp]
     args.dtype  = DTYPES.get(args.dtype, args.input.dtype)
+    args.shape  = sanitiseList(parser, args.shape, args.input, 'shape')
+    args.dim    = sanitiseList(parser, args.dim,   args.input, 'dim')
 
     return args