diff --git a/pulse_lib/qblox/pulsar_sequencers.py b/pulse_lib/qblox/pulsar_sequencers.py
index fca2837334256a349042f7cc008ac04380d8d4aa..7cbfcc57942186015e4d51abfbcc4ee2121cdd1a 100644
--- a/pulse_lib/qblox/pulsar_sequencers.py
+++ b/pulse_lib/qblox/pulsar_sequencers.py
@@ -176,6 +176,7 @@ class IQSequenceBuilder(SequenceBuilderBase):
                  mixer_gain=None, mixer_phase_offset=None):
         super().__init__(name, sequencer)
         self.seq.nco_frequency = nco_frequency
+        self._pulsing = False
         self.add_comment(f'IQ: NCO={nco_frequency/1e6:7.2f} MHz')
 
         if mixer_gain is not None:
@@ -184,6 +185,7 @@ class IQSequenceBuilder(SequenceBuilderBase):
             self.seq.mixer_phase_offset_degree = mixer_phase_offset/np.pi*180
 
     def pulse(self, t, duration, amplitude, waveform):
+        self._pulsing = True
         t += self.offset_ns
         self._update_time_and_markers(t, duration)
         self.add_comment(f'MW pulse {waveform.frequency/1e6:6.2f} MHz {waveform.duration} ns')
@@ -239,6 +241,7 @@ class IQSequenceBuilder(SequenceBuilderBase):
         self.seq.shift_phase(norm_phase, t_offset=t)
 
     def chirp(self, t, duration, amplitude, start_frequency, stop_frequency):
+        self._pulsing = True
         if hasattr(self.seq, 'chirp'):
             t += self.offset_ns
             self._update_time_and_markers(t, 0.0)
@@ -254,6 +257,10 @@ class IQSequenceBuilder(SequenceBuilderBase):
                                     0.0, 1.0, phmod)
             self.pulse(t, duration, amplitude, waveform)
 
+    def finalize(self):
+        super().finalize()
+        if self._pulsing and abs(self.seq.nco_frequency) > 450e6:
+            raise Exception(f'{self.name}: NCO frequency {self.nco_frequency/1e6:5.1f} MHz out of range')
 
 @dataclass
 class _SeqCommand:
diff --git a/pulse_lib/qblox/pulsar_uploader.py b/pulse_lib/qblox/pulsar_uploader.py
index 821caa3e797ee9f3a20e86ee49cbe81981170ef7..a31965bbc8aa9416a55e63f9ece8dfc66716024a 100644
--- a/pulse_lib/qblox/pulsar_uploader.py
+++ b/pulse_lib/qblox/pulsar_uploader.py
@@ -3,6 +3,7 @@ from uuid import UUID
 from datetime import datetime
 import numpy as np
 import logging
+import math
 from dataclasses import dataclass, field
 from typing import Dict, Optional, List, Union
 from numbers import Number
@@ -23,7 +24,7 @@ from pulse_lib.segments.data_classes.data_pulse import (
 
 
 def iround(value):
-    return int(value+0.5)
+    return math.floor(value+0.5)
 
 
 class PulsarUploader:
@@ -678,13 +679,10 @@ class UploadAggregator:
             raise Exception(f'I/Q Channel delays must be equal ({channel_name})')
         t_offset = PulsarConfig.align(self.max_pre_start_ns + delays[0])
 
-        # TODO @@@ Check: LO frequency can change during sweep
         lo_freq = qubit_channel.iq_channel.LO
         if qubit_channel.reference_frequency is None:
             raise Exception(f'Qubit idle frequency not set for {channel_name}')
         nco_freq = qubit_channel.reference_frequency-lo_freq
-        if abs(nco_freq) > 300e6:
-            raise Exception(f'NCO frequency {nco_freq/1e6:5.1f} MHz out of range')
 
         seq = IQSequenceBuilder(channel_name, self.program[channel_name],
                                 nco_freq,
@@ -797,7 +795,10 @@ class UploadAggregator:
                     seq.acquire(t, t_measure)
 
         t_end = PulsarConfig.align(seg_render.t_end)
-        seq.wait_till(t_end)
+        try:
+            seq.wait_till(t_end)
+        except:
+            raise Exception(f"Acquisition doesn't fit in sequence. Add a wait to extend the sequence.")
         seq.finalize()
         job.acq_data_scaling[channel_name] = seq.get_data_scaling()