diff --git a/fsl/fsleyes/plotting/powerspectrumseries.py b/fsl/fsleyes/plotting/powerspectrumseries.py
index d01e3b77f37fe233fcb751e76d649aecf2382e13..8fcbe2fd08c96f9ac5e211c84dcb75dcae415cdb 100644
--- a/fsl/fsleyes/plotting/powerspectrumseries.py
+++ b/fsl/fsleyes/plotting/powerspectrumseries.py
@@ -27,6 +27,8 @@ import props
 
 import dataseries
 
+import fsl.data.melodicimage as fslmelimage
+
 
 log = logging.getLogger(__name__)
 
@@ -93,6 +95,18 @@ class VoxelPowerSpectrumSeries(PowerSpectrumSeries):
     by the :attr:`.DisplayContext.location` property.
     """
 
+
+    def __init__(self, *args, **kwargs):
+        """Create a ``VoxelPowerSpectrumSeries``.  All arguments are passed
+        to the :meth:`PowerSpectrumSeries.__init__` method. A :exc:`ValueError`
+        is raised if the overlay is not a 4D :class:`.Image`.
+        """
+
+        PowerSpectrumSeries.__init__(self, *args, **kwargs)
+
+        if not self.overlay.is4DImage():
+            raise ValueError('Overlay is not a 4D image')
+
     
     def makeLabel(self):
         """Creates and returns a label for use with this
@@ -144,6 +158,10 @@ class MelodicPowerSpectrumSeries(PowerSpectrumSeries):
         through to the :meth:`PowerSpectrumSeries.__init__` method.
         """
         PowerSpectrumSeries.__init__(self, *args, **kwargs)
+
+        if not isinstance(self.overlay, fslmelimage.MelodicImage):
+            raise ValueError('Overlay is not a MelodicImage')
+        
         self.varNorm = False
         self.disableProperty('varNorm')
 
diff --git a/fsl/fsleyes/views/powerspectrumpanel.py b/fsl/fsleyes/views/powerspectrumpanel.py
index 2411236943fe20de6f38274ebbb64e83476ab203..76c901b3ecb63c5c872146ee2ffec2e4ddfd24e7 100644
--- a/fsl/fsleyes/views/powerspectrumpanel.py
+++ b/fsl/fsleyes/views/powerspectrumpanel.py
@@ -168,7 +168,8 @@ class PowerSpectrumPanel(plotpanel.OverlayPlotPanel):
             targets   = [self._displayCtx.getOpts(overlay)]
             propNames = ['volume']
             
-        elif isinstance(overlay, fslimage.Image):
+        elif isinstance(overlay, fslimage.Image) and \
+             overlay.is4DImage():
             
             ps        = psseries.VoxelPowerSpectrumSeries(overlay,
                                                           self._displayCtx)