diff --git a/pulse_lib/examples/configuration/init_keysight.py b/pulse_lib/examples/configuration/init_keysight.py
index 2bb5bd34b2fb890e28b09c05a1e52b88bc427f52..c171ec661370eaa34aa0ba1000ff82961f7034a9 100644
--- a/pulse_lib/examples/configuration/init_keysight.py
+++ b/pulse_lib/examples/configuration/init_keysight.py
@@ -1,7 +1,20 @@
 import qcodes as qc
 
-from pulse_lib.tests.mock_m3202a import MockM3202A_fpga
-from pulse_lib.tests.mock_m3102a import MockM3102A
+_use_mock = True
+_use_core_tools = True
+
+if _use_mock:
+    from pulse_lib.tests.mock_m3202a import MockM3202A_fpga
+    from pulse_lib.tests.mock_m3102a import MockM3102A
+elif _use_core_tools:
+    from keysight_fpga.qcodes.M3202A_fpga import M3202A_fpga
+    from core_tools.drivers.M3102A import SD_DIG, MODES
+    from keysight_fpga.sd1.dig_iq import load_iq_image
+else:
+    from projects.keysight_fpga.M3202A_fpga import M3202A_fpga
+    from projects.keysight_measurement.M3102A import SD_DIG, MODES
+    from projects.keysight_fpga.dig_iq import load_iq_image
+
 
 if not qc.Station.default:
     station = qc.Station()
@@ -21,18 +34,25 @@ def station_get_or_create(func):
 
 @station_get_or_create
 def add_awg(name, slot_nr):
-    return MockM3202A_fpga(name, 0, slot_nr)
+    if _use_mock:
+        return MockM3202A_fpga(name, 0, slot_nr)
+    else:
+        return M3202A_fpga(name, 1, slot_nr)
 
 @station_get_or_create
 def add_digitizer(name, slot_nr):
-    return MockM3102A(name, 0, slot_nr)
+    if _use_mock:
+        return MockM3102A(name, 0, slot_nr)
+    else:
+        dig = SD_DIG(name, 1, slot_nr)
+        load_iq_image(dig.SD_AIN)
+        dig.set_acquisition_mode(MODES.AVERAGE)
+        return dig
 
 
 #%%
 
-_use_dummy=True
-
-awg1 = add_awg('AWG1', 2)
-awg2 = add_awg('AWG2', 3)
-dig1 = add_digitizer('DIG1', 6)
+awg1 = add_awg('AWG1', 3)
+awg2 = add_awg('AWG2', 7)
+dig1 = add_digitizer('DIG1', 5)
 
diff --git a/pulse_lib/examples/example_dig_acquire.py b/pulse_lib/examples/example_dig_acquire.py
index 30c4f6c89fe8efe96109952007b8474804798d6b..04d642d9a322220ba3302b7c48df191e4943350b 100644
--- a/pulse_lib/examples/example_dig_acquire.py
+++ b/pulse_lib/examples/example_dig_acquire.py
@@ -7,6 +7,7 @@ import qcodes.logger as logger
 from qcodes.logger import start_all_logging
 
 from pulse_lib.tests.hw_schedule_mock import HardwareScheduleMock
+#from core_tools.HVI2.hvi2_schedule_loader import Hvi2ScheduleLoader
 
 from configuration.medium import init_hardware, init_pulselib
 from utils.plot import plot_awgs
@@ -34,12 +35,12 @@ def create_seq(pulse_lib):
     s.vP3.add_block(2e4, 3e4, 50)
     s.vP3.add_ramp_ss(3e4, 3.5e4, 50, 0)
     s.vP1.add_block(2e4, 3e4, -100)
+    s.vP2.add_block(2e4, 3e4, 120)
     s.SD1.acquire(2e4)
     s.SD2.acquire(2e4)
 
     # generate the sequence and upload it.
     my_seq = pulse_lib.mk_sequence([seg1, seg2, seg3])
-    my_seq.set_hw_schedule(HardwareScheduleMock())
     my_seq.n_rep = 10
     my_seq.sample_rate = 1e9
 
@@ -60,6 +61,9 @@ my_seq.set_acquisition(t_measure=1e4)
 # with Downsampling:
 # my_seq.set_acquisition(t_measure=1e4, sample_rate=0.5e6)
 
+my_seq.set_hw_schedule(HardwareScheduleMock())
+# my_seq.set_hw_schedule(Hvi2ScheduleLoader(pulse, "SingleShot", digs[0]))
+
 logging.info(f'sequence shape: {my_seq.shape}')
 
 job = my_seq.upload()
diff --git a/pulse_lib/examples/example_dig_param.py b/pulse_lib/examples/example_dig_param.py
index e65ccc3bd5c6bf5a389ee8c608ca313a6fe119c7..9844043969e19d4ba08396fa52b31658649700c9 100644
--- a/pulse_lib/examples/example_dig_param.py
+++ b/pulse_lib/examples/example_dig_param.py
@@ -2,13 +2,15 @@ import logging
 from pprint import pprint
 import numpy as np
 import matplotlib.pyplot as pt
+from collections.abc import Sequence
 
 import qcodes.logger as logger
 from qcodes.logger import start_all_logging
 
-from pulse_lib.tests.hw_schedule_mock import HardwareScheduleMock
+#from pulse_lib.tests.hw_schedule_mock import HardwareScheduleMock
+from projects.keysight_measurement.hvi2.hvi2_schedule_loader import Hvi2ScheduleLoader
 
-from configuration.medium import init_hardware, init_pulselib
+from configuration.medium_iq import init_hardware, init_pulselib
 from utils.plot import plot_awgs
 
 #start_all_logging()
@@ -19,12 +21,16 @@ def create_seq(pulse_lib):
 
     seg1 = pulse_lib.mk_segment(name='init')
     s = seg1
-    s.vP1.add_block(0, 500, 50)
+    s.vP1.add_block(0, 2000, 50)
+    s.vP2.add_ramp_ss(0, 100, 50, 100)
+    s.vP2.add_ramp_ss(100, 200, 100, 50)
 
     seg2 = pulse_lib.mk_segment('manip')
     s = seg2
     s.vP2.add_ramp_ss(0, 100, 50, 100)
-    s.vP2.add_ramp_ss(100, 200, 100, 50)
+    s.vP2.add_ramp_ss(100, 2000, 100, 50)
+    s.reset_time()
+    s.q1.add_MW_pulse(100, 200, 50, 2.45e9)
 
     seg3 = pulse_lib.mk_segment('measure')
     s = seg3
@@ -34,12 +40,13 @@ def create_seq(pulse_lib):
     s.vP3.add_block(2e4, 3e4, 50)
     s.vP3.add_ramp_ss(3e4, 3.5e4, 50, 0)
     s.vP1.add_block(2e4, 3e4, -100)
-    s.SD1.acquire(2e4, ref='m1')
-    s.SD2.acquire(2e4, ref='m2')
+    s.vP2.add_block(2e4, 3e4, 120)
+    s.SD1.acquire(2e4, ref='m1', threshold=10, zero_on_high=True)
+    s.SD2.acquire(2e4, ref='m2', threshold=50)
 
     # generate the sequence and upload it.
     my_seq = pulse_lib.mk_sequence([seg1, seg2, seg3])
-    my_seq.set_hw_schedule(HardwareScheduleMock())
+#    my_seq.set_hw_schedule(HardwareScheduleMock())
     my_seq.n_rep = 10
 
     return my_seq
@@ -57,6 +64,7 @@ t_measure = 5_000
 pulse.set_digitizer_phase('SD2', -0.228*np.pi)
 
 my_seq = create_seq(pulse)
+my_seq.set_hw_schedule(Hvi2ScheduleLoader(pulse, "SingleShot", digs[0]))
 my_seq.set_acquisition(t_measure=t_measure)
 
 param = my_seq.get_measurement_param('Test', upload='auto', iq_complex=False)
@@ -66,15 +74,18 @@ param.add_derived_param('m2_phase', lambda d:np.angle(d['m2_I']+1j*d['m2_Q']))
 # Reading param uploads, plays and returns data
 data = param()
 
+data = param()
+
 # plot_awgs(awgs+digs)
 
 pt.figure()
 for ch_name,values in zip(param.names, data):
     print(ch_name, values)
-    if isinstance(values[0], complex):
-        pt.plot(values.real, label=ch_name+' I')
-        pt.plot(values.imag, label=ch_name+' Q')
-    else:
-        pt.plot(values, label=ch_name)
+    if isinstance(values, (Sequence, np.ndarray)):
+        if isinstance(values[0], complex):
+            pt.plot(values.real, label=ch_name+' I')
+            pt.plot(values.imag, label=ch_name+' Q')
+        else:
+            pt.plot(values, label=ch_name)
 pt.legend()
 
diff --git a/pulse_lib/examples/example_param_sweep_qc.py b/pulse_lib/examples/example_param_sweep_qc.py
index 2114664a5993c6d39235398303cff87dd1d6b4a5..0b2951561bdd29cc0fa27abaa3b1031844744a6b 100644
--- a/pulse_lib/examples/example_param_sweep_qc.py
+++ b/pulse_lib/examples/example_param_sweep_qc.py
@@ -9,7 +9,8 @@ from qcodes.loops import Loop
 from qcodes.actions import Task
 
 from configuration.small import init_hardware, init_pulselib
-#from utils.plot import plot_awgs
+from utils.plot import plot_awgs
+#from core_tools.HVI2.hvi2_schedule_loader import Hvi2ScheduleLoader
 
 def upload_play(seq):
     seq.upload()
@@ -65,12 +66,13 @@ seg2.reset_time()
 seg2.SD1.acquire(150)
 seg2.P1.add_block(0, 300, v_param)
 seg2.P2.add_block(0, 300, v_param)
-seg2.SD1.wait(1000)
+seg2.SD1.wait(1500)
 
 # create sequence
 seq = p.mk_sequence([seg1,seg2])
 seq.n_rep=5
 seq.set_hw_schedule(HardwareScheduleMock())
+#seq.set_hw_schedule(Hvi2ScheduleLoader(p, "SingleShot", digs[0]))
 seq.set_acquisition(t_measure=100)
 param = seq.get_measurement_param()