diff --git a/mu_map/file/dicom_to_interfile.py b/mu_map/file/dicom_to_interfile.py
index 5c8005ffe035cb73a4565a2727db8b31470be013..98a4c4eb50842ade37a83a62c418462475532d45 100644
--- a/mu_map/file/dicom_to_interfile.py
+++ b/mu_map/file/dicom_to_interfile.py
@@ -3,7 +3,7 @@ from typing import Dict, Tuple
 import numpy as np
 from pydicom.dataset import FileDataset as DCMImage
 
-from mu_map.file.interfile import HEADER_TEMPLATE, parse_interfile_header_str
+from mu_map.file.interfile import TEMPLATE_HEADER_IMAGE, parse_interfile_header_str
 
 
 def to_interfile(dcm: DCMImage, image: np.ndarray) -> Tuple[Dict[str, str], np.ndarray]:
@@ -14,7 +14,7 @@ def to_interfile(dcm: DCMImage, image: np.ndarray) -> Tuple[Dict[str, str], np.n
     :param image: the image as a numpy array
     :return: the header and image in INTERFILE format
     """
-    header = HEADER_TEMPLATE.replace("{ROWS}", str(dcm.Rows))
+    header = TEMPLATE_HEADER_IMAGE.replace("{ROWS}", str(dcm.Rows))
     header = header.replace("{SPACING_X}", f"{dcm.PixelSpacing[0]:.4f}")
     header = header.replace("{COLUMNS}", str(dcm.Columns))
     header = header.replace("{SPACING_Y}", f"{dcm.PixelSpacing[1]:.4f}")
diff --git a/mu_map/file/interfile.py b/mu_map/file/interfile.py
index c879af12639f7eddfd27013fd09731d4f73379ec..0bb63896a2e36db3e33450fc6dc559cde97b78e2 100644
--- a/mu_map/file/interfile.py
+++ b/mu_map/file/interfile.py
@@ -3,56 +3,58 @@ from typing import Dict, Tuple
 
 import numpy as np
 
+Interfile = Tuple[Dict[str, str], np.ndarray]
+
 
 """
 Several keys defined in INTERFILE headers.
 """
-KEY_DIM_1 = "!matrix size [1]"
-KEY_DIM_2 = "!matrix size [2]"
-KEY_DIM_3 = "!matrix size [3]"
+KEY_DIM_1 = "matrix size [1]"
+KEY_DIM_2 = "matrix size [2]"
+KEY_DIM_3 = "matrix size [3]"
 KEY_SPACING_1 = "scaling factor (mm/pixel) [1]"
 KEY_SPACING_2 = "scaling factor (mm/pixel) [2]"
 KEY_SPACING_3 = "scaling factor (mm/pixel) [2]"
-KEY_NPROJECTIONS = "!number of projections"
+KEY_NPROJECTIONS = "number of projections"
 
 KEY_DATA_FILE = "name of data file"
 
-KEY_BYTES_PER_PIXEL = "!number of bytes per pixel"
-KEY_NUMBER_FORMAT = "!number format"
+KEY_BYTES_PER_PIXEL = "number of bytes per pixel"
+KEY_NUMBER_FORMAT = "number format"
 
 
 """
 A template of an INTERFILE header.
 """
-HEADER_TEMPLATE = """
-!INTERFILE  :=
-!imaging modality := nucmed
-!version of keys := STIR4.0
+TEMPLATE_HEADER_IMAGE = """
+INTERFILE  :=
+imaging modality := nucmed
+version of keys := STIR4.0
 name of data file := {DATA_FILE}
-!GENERAL DATA :=
-!GENERAL IMAGE DATA :=
-!type of data := Tomographic
+GENERAL DATA :=
+GENERAL IMAGE DATA :=
+type of data := Tomographic
 imagedata byte order := LITTLEENDIAN
 isotope name := ^99m^Technetium
-!SPECT STUDY (General) :=
+SPECT STUDY (General) :=
 process status := Reconstructed
-!number format := float
-!number of bytes per pixel := 4
+number format := float
+number of bytes per pixel := 4
 number of dimensions := 3
 matrix axis label [1] := x
-!matrix size [1] := {ROWS}
+matrix size [1] := {ROWS}
 scaling factor (mm/pixel) [1] := {SPACING_X}
 matrix axis label [2] := y
-!matrix size [2] := {COLUMNS}
+matrix size [2] := {COLUMNS}
 scaling factor (mm/pixel) [2] := {SPACING_Y}
 matrix axis label [3] := z
-!matrix size [3] := {SLICES}
+matrix size [3] := {SLICES}
 scaling factor (mm/pixel) [3] := {SPACING_Z}
 first pixel offset (mm) [1] := {OFFSET_X}
 first pixel offset (mm) [2] := {OFFSET_Y}
 first pixel offset (mm) [3] := 0
 number of time frames := 1
-!END OF INTERFILE :=
+END OF INTERFILE :=
 """
 
 
@@ -80,6 +82,7 @@ def parse_interfile_header_str(header: str) -> Dict[str, str]:
     :param header: the text of an INTERFILE header
     :return: a dictionary of value in the header
     """
+    header = header.replace("!", "")
     lines = header.strip().split("\n")
     items = map(lambda line: line.split(":="), lines)
     items = filter(lambda item: len(item) == 2, items)