diff --git a/xgm.py b/xgm.py
index 9b62b14a332b21be5e3a4daf3388657f7c0fd935..b9a7a92f178cff3cf2734f078e6f2e5e9846e66f 100644
--- a/xgm.py
+++ b/xgm.py
@@ -335,21 +335,26 @@ def calibrateXGMs(data, rollingWindow=200, plot=False):
             print('not enough consecutive data points with the largest number of pulses per train')
         start += rollingWindow
         stop = np.min((ntrains, stop+rollingWindow))
+
+    # Calculate SASE3 slow data
+    sa3contrib = saseContribution(data, 'sase3', 'SA3_XGM')
+    SA3_SLOW = data['SA3_XGM_SLOW']*(data['npulses_sase3']+data['npulses_sase1'])*sa3contrib/data['npulses_sase3']
+    SA1_SLOW = data['SA3_XGM_SLOW']*(data['npulses_sase3']+data['npulses_sase1'])*(1-sa3contrib)/data['npulses_sase1']
+    SCS_SLOW = data['SCS_XGM_SLOW']*(data['npulses_sase3']+data['npulses_sase1'])*sa3contrib/data['npulses_sase3'] 
+
     # Calibrate SASE3 XGM with all signal from SASE1 and SASE3
     if not noSA3:
-        xgm_avg = data['SA3_XGM'].where(data['SA3_XGM'] != 1.0).mean(axis=1)
+        xgm_avg = selectSASEinXGM(data, 'sase3', 'SA3_XGM').mean(axis=1)
         rolling_sa3_xgm = xgm_avg.rolling(trainId=rollingWindow).mean()
-        ratio = data['SA3_XGM_SLOW']/rolling_sa3_xgm
+        ratio = SA3_SLOW/rolling_sa3_xgm
         sa3_calib_factor = ratio[start:stop].mean().values
         print('calibration factor SA3 XGM: %f'%sa3_calib_factor)
 
     # Calibrate SCS XGM with SASE3-only contribution
-    sa3contrib = saseContribution(data, 'sase3', 'SA3_XGM')
     if not noSCS:
         scs_sase3_fast = selectSASEinXGM(data, 'sase3', 'SCS_XGM').mean(axis=1)
         meanFast = scs_sase3_fast.rolling(trainId=rollingWindow).mean()
-        ratio = ((data['npulses_sase3']+data['npulses_sase1']) *
-                 data['SCS_XGM_SLOW'] * sa3contrib) / (meanFast * data['npulses_sase3'])
+        ratio = SCS_SLOW/meanFast
         scs_calib_factor = ratio[start:stop].median().values
         print('calibration factor SCS XGM: %f'%scs_calib_factor)
         
@@ -357,31 +362,26 @@ def calibrateXGMs(data, rollingWindow=200, plot=False):
         plt.figure(figsize=(8,8))
         plt.subplot(211)
         plt.title('E[uJ] = %.2f x IntensityTD' %(sa3_calib_factor))
-        plt.plot(data['SA3_XGM_SLOW'], label='SA3 slow', color='C1')
+        plt.plot(SA3_SLOW, label='SA3 slow', color='C1')
         plt.plot(rolling_sa3_xgm*sa3_calib_factor,
                  label='SA3 fast signal rolling avg', color='C4')
+        plt.plot(xgm_avg*sa3_calib_factor, label='SA3 fast signal train avg', alpha=0.2, color='C4')
         plt.ylabel('Energy [uJ]')
         plt.xlabel('train in run')
         plt.legend(loc='upper left', fontsize=10)
         plt.twinx()
-        plt.plot(xgm_avg*sa3_calib_factor, label='SA3 fast signal train avg', alpha=0.2, color='C4')
-        plt.ylabel('Calibrated SA3 fast signal [uJ]')
+        plt.plot(SA1_SLOW, label='SA1 slow', alpha=0.2, color='C2')
+        plt.ylabel('SA1 slow signal [uJ]')
         plt.legend(loc='lower right', fontsize=10)
 
         plt.subplot(212)
         plt.title('E[uJ] = %.2f x HAMP' %scs_calib_factor)
-        plt.plot(data['SCS_XGM_SLOW'], label='SCS slow (all SASE)', color='C0')
-        slow_avg_sase3 = data['SCS_XGM_SLOW']*(data['npulses_sase1']
-                                                    +data['npulses_sase3'])*sa3contrib/data['npulses_sase3']
-        plt.plot(slow_avg_sase3, label='SCS slow (SASE3 only)', color='C1')
+        plt.plot(SCS_SLOW, label='SCS slow', color='C1')
         plt.plot(meanFast*scs_calib_factor, label='SCS HAMP rolling avg', color='C2')
         plt.ylabel('Energy [uJ]')
         plt.xlabel('train in run')
-        plt.legend(loc='upper left', fontsize=10)
-        plt.twinx()
         plt.plot(scs_sase3_fast*scs_calib_factor, label='SCS HAMP train avg', alpha=0.2, color='C2')
-        plt.ylabel('Calibrated HAMP signal [uJ]')
-        plt.legend(loc='lower right', fontsize=10)
+        plt.legend(loc='upper left', fontsize=10)
         plt.tight_layout()
 
     return np.array([sa3_calib_factor, scs_calib_factor])