diff --git a/components/bl00mbox/bl00mbox_user.c b/components/bl00mbox/bl00mbox_user.c
index 3c31abad16e7f5f277c92d68fb1ea5cd5b8e4524..db84045d04815d50121f16d490feab915416eb99 100644
--- a/components/bl00mbox/bl00mbox_user.c
+++ b/components/bl00mbox/bl00mbox_user.c
@@ -705,6 +705,9 @@ int16_t bl00mbox_channel_bud_get_signal_value(uint8_t channel, uint32_t bud_inde
     radspa_signal_t * sig = radspa_signal_get_by_index(bud->plugin, bud_signal_index);
     if(sig == NULL) return false;
 
+    if((sig->hints & RADSPA_SIGNAL_HINT_OUTPUT) && (sig->buffer != NULL)){
+        return sig->buffer[0];
+    }
     return sig->value;
 }
 
diff --git a/components/bl00mbox/radspa/radspa_helpers.c b/components/bl00mbox/radspa/radspa_helpers.c
index f34cc3443ce1b3f32048a3e309ce874e15565573..a3c1a17995712f7c5d3af8d8b7272e1249469356 100644
--- a/components/bl00mbox/radspa/radspa_helpers.c
+++ b/components/bl00mbox/radspa/radspa_helpers.c
@@ -98,22 +98,41 @@ int16_t radspa_signal_add(radspa_t * plugin, char * name, uint32_t hints, int16_
 }
 
 int16_t radspa_signal_get_value(radspa_signal_t * sig, int16_t index, uint16_t num_samples, uint32_t render_pass_id){
-    if(sig->buffer != NULL){
-        if(sig->render_pass_id != render_pass_id){
-            radspa_host_request_buffer_render(sig->buffer, num_samples); //, render_pass_id);
-            sig->render_pass_id = render_pass_id;
-        }
-        return sig->buffer[index];
+    if(sig->buffer == NULL){
+        return radspa_signal_get_value_disconnected(sig, index, num_samples, render_pass_id);
+    } else {
+        return radspa_signal_get_value_connected(sig, index, num_samples, render_pass_id);
     }
+}
+
+inline int16_t radspa_signal_get_value_connected(radspa_signal_t * sig, int16_t index, uint16_t num_samples, uint32_t render_pass_id){
+    if(sig->render_pass_id != render_pass_id){
+        radspa_host_request_buffer_render(sig->buffer, num_samples); //, render_pass_id);
+        sig->render_pass_id = render_pass_id;
+    }
+    return sig->buffer[index];
+}
+
+inline int16_t radspa_signal_get_value_disconnected(radspa_signal_t * sig, int16_t index, uint16_t num_samples, uint32_t render_pass_id){
     return sig->value;
 }
 
 void radspa_signal_set_value(radspa_signal_t * sig, int16_t index, int16_t value, uint16_t num_samples, uint32_t render_pass_id){
-    if(!index) sig->value = value;
-    if(sig->buffer == NULL) return;
+    if(sig->buffer == NULL){
+        radspa_signal_set_value_disconnected(sig, index, value, num_samples, render_pass_id);
+    } else {
+        radspa_signal_set_value_connected(sig, index, value, num_samples, render_pass_id);
+    }
+}
+
+inline void radspa_signal_set_value_connected(radspa_signal_t * sig, int16_t index, int16_t value, uint16_t num_samples, uint32_t render_pass_id){
     sig->buffer[index] = value;
 }
 
+inline void radspa_signal_set_value_disconnected(radspa_signal_t * sig, int16_t index, int16_t value, uint16_t num_samples, uint32_t render_pass_id){
+    sig->value = value;
+}
+
 radspa_t * radspa_standard_plugin_create(radspa_descriptor_t * desc, uint8_t num_signals, size_t plugin_data_size, uint32_t plugin_table_size){
     radspa_t * ret = calloc(1, sizeof(radspa_t));
     if(ret == NULL) return NULL;
diff --git a/components/bl00mbox/radspa/radspa_helpers.h b/components/bl00mbox/radspa/radspa_helpers.h
index 6a46ce7fc259fd417bf2c0cda8a2e63ded538db4..29f1ebf97f6fac29743db469d5d82432a0a3e1b7 100644
--- a/components/bl00mbox/radspa/radspa_helpers.h
+++ b/components/bl00mbox/radspa/radspa_helpers.h
@@ -29,4 +29,9 @@ void radspa_signals_free(radspa_t * plugin);
  */
 int16_t radspa_signal_get_value(radspa_signal_t * sig, int16_t index, uint16_t num_samples, uint32_t render_pass_id);
 
+int16_t radspa_signal_get_value_connected(radspa_signal_t * sig, int16_t index, uint16_t num_samples, uint32_t render_pass_id);
+int16_t radspa_signal_get_value_disconnected(radspa_signal_t * sig, int16_t index, uint16_t num_samples, uint32_t render_pass_id);
+
 void radspa_signal_set_value(radspa_signal_t * sig, int16_t index, int16_t value, uint16_t num_samples, uint32_t render_pass_id);
+void radspa_signal_set_value_connected(radspa_signal_t * sig, int16_t index, int16_t value, uint16_t num_samples, uint32_t render_pass_id);
+void radspa_signal_set_value_disconnected(radspa_signal_t * sig, int16_t index, int16_t value, uint16_t num_samples, uint32_t render_pass_id);