diff --git a/fsl/data/imagewrapper.py b/fsl/data/imagewrapper.py
index 0334248aa9296f68fec8e58a9631a56bdd9ad42b..d2aae5540aa4846527d75b40180c39a7ea797048 100644
--- a/fsl/data/imagewrapper.py
+++ b/fsl/data/imagewrapper.py
@@ -461,20 +461,22 @@ class ImageWrapper(notifier.Notifier):
         # coverage and data range.
         for exp in expansions:
 
-            data = self.__getData(exp, isTuple=True)
-            data = data.squeeze(squeezeDims)
-
+            data     = self.__getData(exp, isTuple=True)
+            data     = data.squeeze(squeezeDims)
             vlo, vhi = exp[self.__numRealDims - 1]
 
             for vi, vol in enumerate(range(vlo, vhi)):
 
                 oldvlo, oldvhi = self.__volRanges[vol, :]
                 voldata        = data[..., vi]
-
                 newvlo, newvhi = naninfrange(voldata)
 
-                if (not np.isnan(oldvlo)) and oldvlo < newvlo: newvlo = oldvlo
-                if (not np.isnan(oldvhi)) and oldvhi > newvhi: newvhi = oldvhi
+                if np.isnan(newvlo) or \
+                   (not np.isnan(oldvlo) and oldvlo < newvlo):
+                    newvlo = oldvlo
+                if np.isnan(newvhi) or \
+                   (not np.isnan(oldvhi) and oldvhi > newvhi):
+                    newvhi = oldvhi
 
                 # Update the stored range and
                 # coverage for each volume
@@ -720,7 +722,7 @@ def naninfrange(data):
     use an alternate approach to calculating the minimum/maximum.
     """
 
-    if not np.issubdtype(data.dtype, np.float):
+    if not np.issubdtype(data.dtype, np.floating):
         return data.min(), data.max()
 
     # But np.nanmin/nanmax are substantially