diff --git a/DSSC.py b/DSSC.py
index 5aebd93d58574d08da0eb57754bdd6caed525a36..8a95d3a001c70b7aa61ca4221cae7a2cf5376fa7 100644
--- a/DSSC.py
+++ b/DSSC.py
@@ -136,7 +136,7 @@ class DSSC:
             raise ValueError(f'To be implemented')
         self.scan_vname = vname
         
-        self.vds_scan = os.path.join(self.tempdir, 'scan_variable.h5')
+        self.vds_scan = os.path.join(self.tempdir, 'scan_variable.nc')
         if os.path.isfile(self.vds_scan):
             os.remove(self.vds_scan)
             
@@ -144,6 +144,7 @@ class DSSC:
         self.scan['xgm_pumped'] = self.xgm[:, :self.nbunches:2].mean('dim_0')
         self.scan['xgm_unpumped'] = self.xgm[:, 1:self.nbunches:2].mean('dim_0')
         self.scan.to_netcdf(self.vds_scan, group='data')
+        self.scan.close()
 
         self.scan_counts = xr.DataArray(np.ones(len(self.scan['scan_variable'])),
                                         dims=['scan_variable'],
@@ -298,12 +299,13 @@ class DSSC:
         """
         if self.vds_scan is None:
             # probably a dark run with a dummy scan variable
-            self.vds_scan = os.path.join(self.tempdir, 'scan_variable.h5')
+            self.vds_scan = os.path.join(self.tempdir, 'scan_variable.nc')
             if os.path.isfile(self.vds_scan):
                 os.remove(self.vds_scan)
             
             self.scan = self.scan.to_dataset(name='scan_variable')
             self.scan.to_netcdf(self.vds_scan, group='data')
+            self.scan.close()
 
         # get available memory in GB, we will try to use 80 % of it
         max_GB = psutil.virtual_memory().available/1024**3
@@ -366,9 +368,9 @@ class DSSC:
             save_folder = self.save_folder
 
         if self.isDark:
-            fname = f'run{self.run_nr}_dark.h5'  # no scan
+            fname = f'run{self.run_nr}_dark.nc'  # no scan
         else:
-            fname = f'run{self.run_nr}.h5'  # run with delay scan (change for other scan types!)
+            fname = f'run{self.run_nr}.nc'  # run with delay scan (change for other scan types!)
 
 
         save_path = os.path.join(save_folder, fname)
@@ -379,6 +381,7 @@ class DSSC:
                 warnings.warn(f'Overwriting file: {save_path}')
                 os.remove(save_path)
             self.module_data.to_netcdf(save_path, group='data')
+            self.module_data.close()
             os.chmod(save_path, 0o664)
             print('saving: ', save_path)
         else:
@@ -399,8 +402,10 @@ class DSSC:
 
         self.plot_title = f'{self.proposal} run: {runNB} dark: {dark_runNB}'
                    
-        dark = xr.open_dataset(os.path.join(save_folder, f'run{dark_runNB}_dark.h5'), group='data')
-        binned = xr.open_dataset(os.path.join(save_folder, f'run{runNB}.h5'), group='data')
+        dark = xr.load_dataset(os.path.join(save_folder, f'run{dark_runNB}_dark.nc'), group='data',
+            engine='netcdf4')
+        binned = xr.load_dataset(os.path.join(save_folder, f'run{runNB}.nc'), group='data',
+            engine='netcdf4')
 
         binned['pumped'] = (binned['pumped'] - dark['pumped'].values)
         binned['unpumped'] = (binned['unpumped'] - dark['unpumped'].values)