diff --git a/fsl/data/image.py b/fsl/data/image.py
index 2060aad046a95f998625ac0f2520240a500b845c..d39259a9e4882e3f308edd2913dc5d89ea75938a 100644
--- a/fsl/data/image.py
+++ b/fsl/data/image.py
@@ -254,7 +254,7 @@ class Nifti(notifier.Notifier, meta.Meta):
                                                          shape,
                                                          pixdim)
 
-        self.header           = header
+        self.__header         = header
         self.__shape          = shape
         self.__origShape      = origShape
         self.__pixdim         = pixdim
@@ -492,6 +492,24 @@ class Nifti(notifier.Notifier, meta.Meta):
         return ''.join([c for c in val if c in string.printable]).strip()
 
 
+    @property
+    def header(self):
+        """Return a reference to the ``nibabel`` header object. """
+        return self.__header
+
+
+    @header.setter
+    def header(self, header):
+        """Replace the ``nibabel`` header object managed by this ``Nifti``
+        with a new header. The new header must have the same dimensions,
+        voxel size, and orientation as the old one.
+        """
+        new = Nifti(header)
+        if not (self.sameSpace(new) and self.ndim == new.ndim):
+            raise ValueError('Incompatible header')
+        self.__header = new
+
+
     @property
     def niftiVersion(self):
         """Returns the NIFTI file version:
@@ -1411,12 +1429,6 @@ class Image(Nifti):
 
             nib.save(self.__nibImage, tmpfname)
 
-            # nibabel should close any old
-            # file handles when the image/
-            # header refs are deleted
-            self.__nibImage = None
-            self.header     = None
-
             # Copy to final destination,
             # and reload from there
             imcp.imcp(tmpfname, filename, overwrite=True)