diff --git a/tracking/monitors/__init__.py b/tracking/monitors/__init__.py
index 1bc0337a13289a0fd75ad425d437d363cbc65cb7..7f5ba519d883ab4516678a510da8a8848cedb89c 100644
--- a/tracking/monitors/__init__.py
+++ b/tracking/monitors/__init__.py
@@ -25,4 +25,4 @@ from mbtrack2.tracking.monitors.plotting import (plot_bunchdata,
                                                  plot_beamspectrum,
                                                  streak_beamspectrum)
 
-from mbtrack2.tracking.monitors.tools import merge_files
\ No newline at end of file
+from mbtrack2.tracking.monitors.tools import (merge_files, copy_files)
\ No newline at end of file
diff --git a/tracking/monitors/tools.py b/tracking/monitors/tools.py
index 9735a6e767e14fe22018747866eb2060ff59515c..d79a6ff70418b49ba51723dd2c1c2f81784fe5cd 100644
--- a/tracking/monitors/tools.py
+++ b/tracking/monitors/tools.py
@@ -71,5 +71,36 @@ def merge_files(files_prefix, files_number, file_name=None):
                     f[group][dataset_name][tuple(slice_list)] = fi[group][dataset_name]
         fi.close()
     f.close()
+    
+def copy_files(source, copy, version=None):
+    """
+    Copy a source hdf5 file into another hdf5 file using a different HDF5 
+    version.
+    
+    The function assumes that the source file has only a single group layer.
+
+    Parameters
+    ----------
+    source : str
+        Name of the source file.
+    copy : str
+        Name of the copy file.
+    version : str, optional
+        Version number of the copy file.
+
+    """
+    if version == None:
+        version = 'v108'
+    f = hp.File(source + ".hdf5", "r")
+    h = hp.File(copy + ".hdf5", "a", libver=('earliest', version))
+    
+    ## Copy file
+    for group in list(f):
+        h.require_group(group)
+        for dataset_name in list(f[group]):
+            h[group][dataset_name] = f[group][dataset_name][()]
+            
+    f.close()
+    h.close()
 
             
\ No newline at end of file