diff --git a/components/bl00mbox/plugins/sequencer.c b/components/bl00mbox/plugins/sequencer.c
index c642ae98fdbcea693ac4fccda046a6cf436ce9f2..ad679983a14529eea3e30b2af0d53c65f5c9d908 100644
--- a/components/bl00mbox/plugins/sequencer.c
+++ b/components/bl00mbox/plugins/sequencer.c
@@ -64,26 +64,31 @@ void sequencer_run(radspa_t * sequencer, uint16_t num_samples, uint32_t render_p
         data->bpm_prev = bpm;
         data->beat_div_prev = beat_div;
     }
-    if(data->counter_target){
-        for(uint16_t i = 0; i < num_samples; i++){
+
+    for(uint16_t i = 0; i < num_samples; i++){
+        int16_t sync_in = radspa_trigger_get(sync_in_sig->get_value(sync_in_sig, i, num_samples, render_pass_id),
+                &(data->sync_in_hist));
+        if(sync_in > 0){
+            data->counter = 0;
+            data->step = data->step_start;
+            data->sync_out_start = true;
+        } else if(sync_in < 0){
+            data->counter_target = 0; // stop signal
+            data->sync_out_stop = true;
+        }
+
+        if(data->counter_target){
             data->counter++;
+
             if(data->counter >= data->counter_target){
                 data->counter = 0;
                 data->step++;
                 if(data->step > data->step_end){
                     data->step = data->step_start;
-                    data->sync_out = -data->sync_out;
+                    data->sync_out_start = true;
                 }
             }
 
-            int16_t sync_in = sync_in_sig->get_value(sync_in_sig, i, num_samples, render_pass_id);
-            if(((sync_in > 0) && (data->sync_in_prev <= 0)) || ((sync_in > 0) && (data->sync_in_prev <= 0))){
-                data->counter = 0;
-                data->step = data->step_start;
-                data->sync_out = -data->sync_out;
-            }
-            data->sync_in_prev = sync_in;
-            
             if(!data->counter){ //event just happened
                 for(uint8_t j = 0; j < data->num_tracks; j++){
                     int16_t type = table[j * (data->track_step_len + 1)];
@@ -100,9 +105,16 @@ void sequencer_run(radspa_t * sequencer, uint16_t num_samples, uint32_t render_p
             for(uint8_t j = 0; j < data->num_tracks; j++){
                 track_sigs[j]->set_value(track_sigs[j], i, data->tracks[j].track_fill, num_samples, render_pass_id);
             }
-            sync_out_sig->set_value(sync_out_sig, i, data->sync_out, num_samples, render_pass_id);
-            step_sig->set_value(step_sig, i, data->step, num_samples, render_pass_id);
         }
+
+        int16_t sync_out = 0;
+        if(data->sync_out_start){
+            sync_out = radspa_trigger_start(sync_in, &(data->sync_out_hist));
+        } else if(data->sync_out_stop){
+            sync_out = radspa_trigger_stop(&(data->sync_out_hist));
+        }
+        sync_out_sig->set_value(sync_out_sig, i, sync_out, num_samples, render_pass_id);
+        step_sig->set_value(step_sig, i, data->step, num_samples, render_pass_id);
     }
 }
 
@@ -141,8 +153,10 @@ radspa_t * sequencer_create(uint32_t init_var){
             RADSPA_SIGNAL_HINT_OUTPUT | RADSPA_SIGNAL_HINT_TRIGGER, 0);
 
     data->counter = 0;
-    data->sync_in_prev = 0;
-    data->sync_out = 32767;
+    data->sync_in_hist = 0;
+    data->sync_out_hist = 0;
+    data->sync_out_start = false;
+    data->sync_out_stop = false;
 
     return sequencer;
 }
diff --git a/components/bl00mbox/plugins/sequencer.h b/components/bl00mbox/plugins/sequencer.h
index 57b478896be9da1869c5a18e0f093c4d05e58ca3..92024874690e45e5a5f2ac984fe4fbc22d0c7f64 100644
--- a/components/bl00mbox/plugins/sequencer.h
+++ b/components/bl00mbox/plugins/sequencer.h
@@ -16,8 +16,10 @@ typedef struct {
     uint8_t step;
     uint64_t counter;
     uint64_t counter_target;
-    int16_t sync_in_prev;
-    int16_t sync_out;
+    int16_t sync_in_hist;
+    int16_t sync_out_hist;
+    bool sync_out_start;
+    bool sync_out_stop;
     int16_t bpm_prev;
     int16_t beat_div_prev;
     sequencer_track_data_t tracks[];
diff --git a/python_payload/bl00mbox/_patches.py b/python_payload/bl00mbox/_patches.py
index 2e9b019b1c94ecc1cbb32290318a751cc09d32db..a4d3608a331299e1cbaad772ebfad53e5a05e031 100644
--- a/python_payload/bl00mbox/_patches.py
+++ b/python_payload/bl00mbox/_patches.py
@@ -284,7 +284,7 @@ class sequencer(_Patch):
         self.signals.step = self.plugins.seq.signals.step
         self.signals.step_end = self.plugins.seq.signals.step_end
         self.signals.step_start = self.plugins.seq.signals.step_start
-        self.signals.step_start = self.plugins.seq.signals.step_start
+        self.signals.sync_in = self.plugins.seq.signals.sync_in
 
         tracktable = [-32767] + ([0] * self.num_steps)
         self.plugins.seq.table = tracktable * self.num_tracks