diff --git a/pulse_lib/keysight/qs_uploader.py b/pulse_lib/keysight/qs_uploader.py
index c92dde2d4417ff806cfcdfdd1c4e5874d934cebe..0bd80147e7640d693dd949b54b9752e9db5fc0b1 100644
--- a/pulse_lib/keysight/qs_uploader.py
+++ b/pulse_lib/keysight/qs_uploader.py
@@ -932,22 +932,18 @@ class UploadAggregator:
                                          qubit_channel.iq_channel.LO)
             job.iq_sequences[channel_name] = sequence
 
-
             for iseg,(seg,seg_render) in enumerate(zip(job.sequence,segments)):
                 if not isinstance(seg, conditional_segment):
                     seg_ch = seg[channel_name]
                     data = seg_ch._get_data_all_at(job.index)
-                    # TODO @@@ Fix mw_pulses and phase shifts with same start !
-                    mw_data = {pulse.start:pulse for pulse in data.MW_pulse_data}
-                    mw_data.update({ps.time:ps for ps in data.phase_shifts if ps.phase_shift != 0})
-
-                    for mw_time,mw_entry in sorted(mw_data.items()):
-                        t_pulse = seg_render.t_start + mw_time
-
-                        if isinstance(mw_entry, IQ_data_single):
-                            sequence.pulse(t_pulse, mw_entry)
+                    entries = data.get_data_elements()
+                    # mw_pulses and phase shifts with same start are handled in IQSequenceBuilder
+                    for e in entries:
+                        t_pulse = seg_render.t_start + e.start
+                        if isinstance(e, IQ_data_single):
+                            sequence.pulse(t_pulse, e)
                         else:
-                            sequence.shift_phase(t_pulse, mw_entry.phase_shift)
+                            sequence.shift_phase(t_pulse, e.phase_shift)
                 else:
                     logging.debug(f'conditional for {channel_name}:{iseg} start:{seg_render.t_start}')
                     cond_ch = get_conditional_channel(seg, channel_name, sequenced=True, index=job.index)