diff --git a/ctapipe_io_magic/__init__.py b/ctapipe_io_magic/__init__.py
index 7abeed810c94d0e3712b583fa55caa1d1f6716a8..5be58f310953d4211763c1b9ee28b077355f4a0c 100644
--- a/ctapipe_io_magic/__init__.py
+++ b/ctapipe_io_magic/__init__.py
@@ -969,9 +969,16 @@ class MarsRun:
 
         #MC Header information, dictionary always created, but filled only in case of MC run
         mcheader_data = dict()
-    
+
         event_data['file_edges'] = [0]
 
+        drive_data = dict()
+        drive_data['mjd'] = np.array([])
+        drive_data['zd']  = np.array([])
+        drive_data['az']  = np.array([])
+        drive_data['ra']  = np.array([])
+        drive_data['dec'] = np.array([])
+
         degrees_per_hour = 15.0
         seconds_per_day = 86400.0
         seconds_per_hour = 3600.
@@ -1183,7 +1190,7 @@ class MarsRun:
                         "Pedestals tree not present in file. Cleaning algorithm may fail.")
 
             # Reading pointing information (in units of degrees):
-            if 'MPointingPos.' in input_file['Events']:
+            if is_mc:
                 # Retrieving the telescope pointing direction
                 pointing = input_file['Events'].arrays(pointing_array_list)
 
@@ -1196,8 +1203,6 @@ class MarsRun:
                                pointing[b'MPointingPos.fDevHa']) * degrees_per_hour
                 pointing_dec = pointing[b'MPointingPos.fDec'] - \
                     pointing[b'MPointingPos.fDevDec']
-
-                
             else:
                 # Getting the telescope drive info
                 drive = input_file['Drive'].arrays(drive_array_list)
@@ -1208,43 +1213,14 @@ class MarsRun:
                 drive_ra = drive[b'MReportDrive.fRa'] * degrees_per_hour
                 drive_dec = drive[b'MReportDrive.fDec']
 
-                # Finding only non-repeating drive entries
-                # Repeating entries lead to failure in pointing interpolation
-                non_repeating = scipy.diff(drive_mjd) > 0
-                non_repeating = scipy.concatenate((non_repeating, [True]))
-
-                # Filtering out the repeating ones
-                drive_mjd = drive_mjd[non_repeating]
-                drive_zd = drive_zd[non_repeating]
-                drive_az = drive_az[non_repeating]
-                drive_ra = drive_ra[non_repeating]
-                drive_dec = drive_dec[non_repeating]
-
-                if len(drive_zd) > 2:
-                    # If there are enough drive data, creating azimuth and zenith angles interpolators
-                    drive_zd_pointing_interpolator = scipy.interpolate.interp1d(
-                        drive_mjd, drive_zd, fill_value="extrapolate")
-                    drive_az_pointing_interpolator = scipy.interpolate.interp1d(
-                        drive_mjd, drive_az, fill_value="extrapolate")
-
-                    # Creating azimuth and zenith angles interpolators
-                    drive_ra_pointing_interpolator = scipy.interpolate.interp1d(
-                        drive_mjd, drive_ra, fill_value="extrapolate")
-                    drive_dec_pointing_interpolator = scipy.interpolate.interp1d(
-                        drive_mjd, drive_dec, fill_value="extrapolate")
-
-                    # Interpolating the drive pointing to the event time stamps
-                    pointing_zd = drive_zd_pointing_interpolator(event_mjd)
-                    pointing_az = drive_az_pointing_interpolator(event_mjd)
-                    pointing_ra = drive_ra_pointing_interpolator(event_mjd)
-                    pointing_dec = drive_dec_pointing_interpolator(event_mjd)
+                drive_data['mjd'] = np.concatenate((drive_data['mjd'],drive_mjd))
+                drive_data['zd']  = np.concatenate((drive_data['zd'],drive_zd))
+                drive_data['az']  = np.concatenate((drive_data['az'],drive_az))
+                drive_data['ra']  = np.concatenate((drive_data['ra'],drive_ra))
+                drive_data['dec'] = np.concatenate((drive_data['dec'],drive_dec))
 
-                else:
-                    # Not enough data to interpolate the pointing direction.
-                    pointing_zd = scipy.repeat(-1, len(event_mjd))
-                    pointing_az = scipy.repeat(-1, len(event_mjd))
-                    pointing_ra = scipy.repeat(-1, len(event_mjd))
-                    pointing_dec = scipy.repeat(-1, len(event_mjd))
+                if len(drive_mjd) < 3:
+                    LOGGER.warning(f"File {file_name} has only {len(drive_mjd)} drive reports.")
 
             # check for bit flips in the stereo event ID:
             d_x = np.diff(stereo_event_number.astype(np.int))
@@ -1288,17 +1264,16 @@ class MarsRun:
                 (event_data['trigger_pattern'], trigger_pattern))
             event_data['stereo_event_number'] = scipy.concatenate(
                 (event_data['stereo_event_number'], stereo_event_number))
-            event_data['pointing_zd'] = scipy.concatenate(
-                (event_data['pointing_zd'], pointing_zd))
-            event_data['pointing_az'] = scipy.concatenate(
-                (event_data['pointing_az'], pointing_az))
-            event_data['pointing_ra'] = scipy.concatenate(
-                (event_data['pointing_ra'], pointing_ra))
-            event_data['pointing_dec'] = scipy.concatenate(
-                (event_data['pointing_dec'], pointing_dec))
-
-            # Reading MC only information:
             if is_mc:
+                event_data['pointing_zd'] = scipy.concatenate(
+                    (event_data['pointing_zd'], pointing_zd))
+                event_data['pointing_az'] = scipy.concatenate(
+                    (event_data['pointing_az'], pointing_az))
+                event_data['pointing_ra'] = scipy.concatenate(
+                    (event_data['pointing_ra'], pointing_ra))
+                event_data['pointing_dec'] = scipy.concatenate(
+                    (event_data['pointing_dec'], pointing_dec))
+
                 mc_info = input_file['Events'].arrays(mc_list)
                 # N.B.: For MC, there is only one subrun, so do not need to 'append'
                 event_data['true_energy'] = mc_info[b'MMcEvt.fEnergy']
@@ -1327,9 +1302,40 @@ class MarsRun:
                     monitoring_data['PedestalFromExtractor'][quantity])
                 monitoring_data['PedestalFromExtractorRndm'][quantity] = np.array(
                     monitoring_data['PedestalFromExtractorRndm'][quantity])
-        
+
+            # get only drive reports with unique times, otherwise interpolation fails.
+            drive_mjd_unique, unique_indices = np.unique(drive_data['mjd'], return_index=True)
+            drive_zd_unique  = drive_data['zd'][unique_indices]
+            drive_az_unique  = drive_data['az'][unique_indices]
+            drive_ra_unique  = drive_data['ra'][unique_indices]
+            drive_dec_unique = drive_data['dec'][unique_indices]
+
+            first_drive_report_time = Time(drive_mjd_unique[0], scale='utc', format='mjd')
+            last_drive_report_time  = Time(drive_mjd_unique[-1], scale='utc', format='mjd')
+
+            LOGGER.info(f"Interpolating event information from {len(drive_data['mjd'])} drive reports.")
+            LOGGER.info(f"Drive reports available from {first_drive_report_time.iso} to {last_drive_report_time.iso}.")
+
+            # Creating azimuth and zenith angles interpolators
+            drive_zd_pointing_interpolator = scipy.interpolate.interp1d(
+                drive_mjd_unique, drive_zd_unique, fill_value="extrapolate")
+            drive_az_pointing_interpolator = scipy.interpolate.interp1d(
+                drive_mjd_unique, drive_az_unique, fill_value="extrapolate")
+
+            # Creating RA and DEC interpolators
+            drive_ra_pointing_interpolator = scipy.interpolate.interp1d(
+                drive_mjd_unique, drive_ra_unique, fill_value="extrapolate")
+            drive_dec_pointing_interpolator = scipy.interpolate.interp1d(
+                drive_mjd_unique, drive_dec_unique, fill_value="extrapolate")
+
+            # Interpolating the drive pointing to the event time stamps
+            event_data['pointing_zd'] = drive_zd_pointing_interpolator(event_data['MJD'])
+            event_data['pointing_az'] = drive_az_pointing_interpolator(event_data['MJD'])
+            event_data['pointing_ra'] = drive_ra_pointing_interpolator(event_data['MJD'])
+            event_data['pointing_dec'] = drive_dec_pointing_interpolator(event_data['MJD'])
+
         return event_data, monitoring_data, mcheader_data
-       
+
 
     def _find_pedestal_events(self):
         """