diff --git a/src/leds.c b/src/leds.c
index 163ad70202eba3212a4185f4a2d896f25ce84b4b..ab94e1efec31860a2347467317d3b9735720f3c0 100644
--- a/src/leds.c
+++ b/src/leds.c
@@ -9,11 +9,22 @@
 #include "leds.h"
 #include "config/conf_board.h"
 #include <ioport.h>
+#include <util/atomic.h>
 
 void my_callback_cdc_set_rts(uint8_t port, uint8_t b_enable){
+    static uint8_t connected = 0;
+    
     #if BOARD_VER_MAJOR >= 1 && BOARD_VER_MINOR >= 2 && BOARD_VER_MICRO >=3
         ioport_set_pin_level(LED2, b_enable);
     #endif
+    
+    if (connected && !b_enable){
+        ATOMIC_BLOCK(ATOMIC_RESTORESTATE){
+            CCP = 0xD8;                        // Configuration change protection: allow protected IO regiser write
+            RST.CTRL = RST_SWRST_bm;           // Request software reset by writing to protected IO register
+        }
+    }
+    connected = b_enable;
 }