diff --git a/fsl/data/atlases.py b/fsl/data/atlases.py
index 28ca1825a5b3804ca4e6e5cbabad9084a1470fb4..fa30529fb12cba90cd8d97bb5f8cc27de900331f 100644
--- a/fsl/data/atlases.py
+++ b/fsl/data/atlases.py
@@ -58,7 +58,6 @@ import fsl.utils.image.resample as resample
 import fsl.transform.affine     as affine
 import fsl.utils.notifier       as notifier
 import fsl.utils.settings       as fslsettings
-import fsl.utils.deprecated     as deprecated
 
 
 log = logging.getLogger(__name__)
@@ -1085,24 +1084,6 @@ class StatisticAtlas(Atlas):
         return avgvals
 
 
-    @deprecated.deprecated('2.6.0', '3.0.0', 'Use values instead')
-    def proportions(self, *args, **kwargs):
-        """Deprecated - use :meth:`values` instead. """
-        return self.values(*args, **kwargs)
-
-
-    @deprecated.deprecated('2.6.0', '3.0.0', 'Use coordValues instead')
-    def coordProportions(self, *args, **kwargs):
-        """Deprecated - use :meth:`coordValues` instead. """
-        return self.coordValues(*args, **kwargs)
-
-
-    @deprecated.deprecated('2.6.0', '3.0.0', 'Use maskValues instead')
-    def maskProportions(self, *args, **kwargs):
-        """Deprecated - use :meth:`maskValues` instead. """
-        return self.maskValues(*args, **kwargs)
-
-
 class ProbabilisticAtlas(StatisticAtlas):
     """A 4D atlas which contains one volume for each region. Each volume
     contains probabiliy values for one region, between 0 and 100.
diff --git a/fsl/data/image.py b/fsl/data/image.py
index d54c75b045ac70d24950ec33990bc1588e8cc694..8cc5c62087b25ebe9f463dcc7e95b1f57f3fe484 100644
--- a/fsl/data/image.py
+++ b/fsl/data/image.py
@@ -52,7 +52,6 @@ import fsl.transform.affine  as affine
 import fsl.utils.notifier    as notifier
 import fsl.utils.memoize     as memoize
 import fsl.utils.path        as fslpath
-import fsl.utils.deprecated  as deprecated
 import fsl.utils.bids        as fslbids
 import fsl.data.constants    as constants
 import fsl.data.imagewrapper as imagewrapper
@@ -993,7 +992,6 @@ class Image(Nifti):
                  xform=None,
                  loadData=True,
                  calcRange=True,
-                 indexed=False,
                  threaded=False,
                  dataSource=None,
                  loadMeta=False,
@@ -1035,9 +1033,6 @@ class Image(Nifti):
                          incrementally updated as more data is read from memory
                          or disk.
 
-        :arg indexed:    Deprecated. Has no effect, and will be removed in
-                         ``fslpy`` 3.0.
-
         :arg threaded:   If ``True``, the :class:`.ImageWrapper` will use a
                          separate thread for data range calculation. Defaults
                          to ``False``. Ignored if ``loadData`` is ``True``.
@@ -1059,12 +1054,6 @@ class Image(Nifti):
         nibImage = None
         saved    = False
 
-        if indexed is not False:
-            warnings.warn('The indexed argument is deprecated '
-                          'and has no effect',
-                          category=DeprecationWarning,
-                          stacklevel=2)
-
         if loadData:
             threaded = False
 
@@ -1463,14 +1452,6 @@ class Image(Nifti):
         self.notify(topic='saveState')
 
 
-    @deprecated.deprecated('2.2.0', '3.0.0',
-                           'Use fsl.utils.image.resample instead.')
-    def resample(self, *args, **kwargs):
-        """Deprecated - use :func:`.image.resample` instead. """
-        from fsl.utils.image.resample import resample
-        return resample(self, *args, **kwargs)
-
-
     def __getitem__(self, sliceobj):
         """Access the image data with the specified ``sliceobj``.
 
@@ -1661,9 +1642,3 @@ def defaultExt():
     outputType = os.environ.get('FSLOUTPUTTYPE', 'NIFTI_GZ')
 
     return options.get(outputType, '.nii.gz')
-
-
-@deprecated.deprecated('2.0.0', '3.0.0', 'Use nibabel.load instead.')
-def loadIndexedImageFile(filename):
-    """Deprecated - this call is equivalent to calling ``nibabel.load``. """
-    return nib.load(filename)
diff --git a/fsl/utils/filetree/query.py b/fsl/utils/filetree/query.py
index d371bcdf37a7d31d7ed333e602ba50f992477ade..a83982083515261bb7cefd063fe697e03d5ed698 100644
--- a/fsl/utils/filetree/query.py
+++ b/fsl/utils/filetree/query.py
@@ -31,8 +31,7 @@ from typing import Dict, List, Tuple
 
 import numpy as np
 
-from fsl.utils.deprecated import deprecated
-from .                    import FileTree
+from . import FileTree
 
 
 log = logging.getLogger(__name__)
@@ -207,15 +206,6 @@ class FileTreeQuery(object):
         return list(self.__templatevars.keys())
 
 
-    @property
-    @deprecated('2.6.0', '3.0.0', 'Use templates instead')
-    def short_names(self) -> List[str]:
-        """Returns a list containing all templates of the ``FileTree`` that
-        are present in the directory.
-        """
-        return self.templates
-
-
     def query(self, template, asarray=False, **variables):
         """Search for files of the given ``template``, which match
         the specified ``variables``. All hits are returned for variables
@@ -292,12 +282,6 @@ class Match(object):
         return self.__filename
 
 
-    @property
-    @deprecated('2.6.0', '3.0.0', 'Use template instead')
-    def short_name(self):
-        return self.template
-
-
     @property
     def template(self):
         return self.__template
diff --git a/fsl/utils/idle.py b/fsl/utils/idle.py
index d2c93aeb08e0928df4e0dcceb84adf32dc98550f..bef726633b40f8977a3a77a429d77917f7c398b0 100644
--- a/fsl/utils/idle.py
+++ b/fsl/utils/idle.py
@@ -85,8 +85,6 @@ from   collections import abc
 try:                import queue
 except ImportError: import Queue as queue
 
-from fsl.utils.deprecated import deprecated
-
 
 log = logging.getLogger(__name__)
 
@@ -597,36 +595,6 @@ def idleWhen(*args, **kwargs):
     idleLoop.idleWhen(*args, **kwargs)
 
 
-@deprecated('2.7.0', '3.0.0', 'Use idleLoop.inIdle instead')
-def inIdle(taskName):
-    """Deprecated - use ``idleLoop.inIdle`` instead. """
-    return idleLoop.inIdle(taskName)
-
-
-@deprecated('2.7.0', '3.0.0', 'Use idleLoop.cancelIdle instead')
-def cancelIdle(taskName):
-    """Deprecated - use ``idleLoop.cancelIdle`` instead. """
-    return idleLoop.cancelIdle(taskName)
-
-
-@deprecated('2.7.0', '3.0.0', 'Use idleLoop.reset instead')
-def idleReset():
-    """Deprecated - use ``idleLoop.reset`` instead. """
-    return idleLoop.reset()
-
-
-@deprecated('2.7.0', '3.0.0', 'Use idleLoop.callRate instead')
-def getIdleTimeout():
-    """Deprecated - use ``idleLoop.callRate`` instead. """
-    return idleLoop.callRate
-
-
-@deprecated('2.7.0', '3.0.0', 'Use idleLoop.callRate instead')
-def setIdleTimeout(timeout=None):
-    """Deprecated - use ``idleLoop.callRate`` instead. """
-    idleLoop.callRate = timeout
-
-
 def block(secs, delta=0.01, until=None):
     """Blocks for the specified number of seconds, yielding to the main ``wx``
     loop.
diff --git a/fsl/utils/image/resample.py b/fsl/utils/image/resample.py
index 371e87b602c60b777bc6e8587aec32b185f08e1d..f5918fad29f18ff0912968c56293ed67ac44c0ae 100644
--- a/fsl/utils/image/resample.py
+++ b/fsl/utils/image/resample.py
@@ -18,7 +18,6 @@ import numpy                as np
 import scipy.ndimage        as ndimage
 
 import fsl.transform.affine as affine
-import fsl.utils.deprecated as deprecated
 
 
 def resampleToPixdims(image, newPixdims, **kwargs):
@@ -282,13 +281,3 @@ def applySmoothing(data, matrix, newShape):
     sigma[ratio >= 1.1] *= 0.425
 
     return ndimage.gaussian_filter(data, sigma)
-
-
-@deprecated.deprecated('2.8.0', '3.0.0',
-                       'Use fsl.transform.affine.rescale instead')
-def calculateMatrix(oldShape, newShape, origin):
-    """Deprecated - use :func:`.affine.rescale` instead. """
-    xform = affine.rescale(oldShape, newShape, origin)
-    if np.all(np.isclose(xform, np.eye(len(oldShape) + 1))):
-        return None
-    return xform[:-1, :]
diff --git a/fsl/utils/transform.py b/fsl/utils/transform.py
deleted file mode 100644
index b3d51afb21f0e5a5a861458d4fde9e2e62daebc2..0000000000000000000000000000000000000000
--- a/fsl/utils/transform.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env python
-#
-# transforms.py - Deprecated
-#
-# Author: Paul McCarthy <pauldmccarthy@gmail.com>
-#
-"""The ``fsl.utils.transform`` module is deprecated - use the
-:mod:`fsl.transform` module instead.
-"""
-
-
-import fsl.utils.deprecated as     deprecated
-from   fsl.transform.affine import *                     # noqa
-from   fsl.transform.flirt  import (flirtMatrixToSform,  # noqa
-                                    sformToFlirtMatrix)
-
-
-deprecated.warn('fsl.utils.transform',
-                vin='2.4.0',
-                rin='3.0.0',
-                msg='Use the fsl.transform module instead')