diff --git a/DSSC.py b/DSSC.py
index 90373df2b79ce684ffa25e2524ff4d0680956db7..52eb8a1a11cb21af295c02b1945bc42b9d315e94 100644
--- a/DSSC.py
+++ b/DSSC.py
@@ -106,9 +106,9 @@ class DSSC:
         # create a dummy scan variable for dark run
         # for other type or run, use DSSC.define_run function to overwrite it
         self.scan = xr.DataArray(np.ones_like(self.run.train_ids), dims=['trainId'],
-                                 coords={'trainId': self.run.train_ids})
+                                 coords={'trainId': self.run.train_ids}).to_dataset(
+                        name='scan_variable')
         self.scan_vname = 'dummy'
-        self.vds_scan = None
         
     def define_scan(self, vname, bins):
         """
@@ -121,30 +121,24 @@ class DSSC:
         """
 
         if type(vname) is dict:
-            self.scan = self.run.get_array(vname['source'], vname['key'])
+            scan = self.run.get_array(vname['source'], vname['key'])
         elif type(vname) is str:
             if vname not in tb.mnemonics:
                 raise ValueError(f'{vname} not found in the ToolBox mnemonics table')
-            self.scan = self.run.get_array(tb.mnemonics[vname]['source'], tb.mnemonics[vname]['key'])
+            scan = self.run.get_array(tb.mnemonics[vname]['source'], tb.mnemonics[vname]['key'])
         else:
             raise ValueError(f'vname should be a string or a dict. We got {type(vname)}')
             
         if (type(bins) is int) or (type(bins) is float):
-            self.scan = bins * np.round(self.scan / bins)
+            scan = bins * np.round(scan / bins)
         else:
             # TODO: digitize the data
             raise ValueError(f'To be implemented')
         self.scan_vname = vname
-        
-        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 = scan.to_dataset(name='scan_variable')
         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'],
@@ -297,15 +291,6 @@ class DSSC:
         """ Bin the DSSC data by the predifined scan type (DSSC.define()) using multiprocessing
         
         """
-        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.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
@@ -316,10 +301,6 @@ class DSSC:
         
         print('processing', self.chunksize, 'trains per chunk')
                    
-        # load scan variable
-        scan = xr.load_dataset(self.vds_scan, group='data')['scan_variable']
-        scan.name = 'scan'
- 
         jobs = []
         for m in range(16):
             jobs.append(dict(
@@ -327,7 +308,7 @@ class DSSC:
             fpt=self.fpt,
             vdf_module=os.path.join(self.tempdir, f'dssc{m}_vds.h5'),
             chunksize=self.chunksize,
-            scan=scan,
+            scan=self.scan['scan_variable'],
             nbunches=self.nbunches,
             run_nr=self.run_nr,
             do_pulse_mean=do_pulse_mean