diff --git a/README.md b/README.md
index af75622748a4e7cb3b85f6fe8aaf20486c7d0d13..009902ff64965bbd7447ad2f27f76e6ea02e3c03 100644
--- a/README.md
+++ b/README.md
@@ -26,7 +26,7 @@ Please transfer all .py files in python_payload/ for using the demo payload.
 $ cd ~
 $ git clone https://github.com/espressif/esp-idf.git
 $ cd esp-idf
-$ git checkout v4.4
+$ git checkout v4.4.4
 $ git submodule update --init --recursive
 
 $ cd esp-idf
diff --git a/components/badge23/espan.c b/components/badge23/espan.c
index 9c24a28b6fd3cf3ece0ea7bbbd1e9117a93874e2..9392c103116e8061b279d277adce7a2e5f933570 100644
--- a/components/badge23/espan.c
+++ b/components/badge23/espan.c
@@ -34,6 +34,9 @@ static const char *TAG = "espan";
 #error "i2c not implemented for this badge generation"
 #endif
 
+static QueueHandle_t i2c_queue = NULL;
+static uint8_t dummy_data;
+
 static esp_err_t i2c_master_init(void)
 {
     int i2c_master_port = I2C_MASTER_NUM;
@@ -52,12 +55,19 @@ static esp_err_t i2c_master_init(void)
     return i2c_driver_install(i2c_master_port, conf.mode, I2C_MASTER_RX_BUF_DISABLE, I2C_MASTER_TX_BUF_DISABLE, 0);
 }
 
-#define CAPTOUCH_POLLING_PERIOD 23
+#define CAPTOUCH_POLLING_PERIOD 10
 static uint8_t hw_init_done = 0;
 
-void i2c_task(TimerHandle_t data){
-    update_button_state();
-    captouch_read_cycle();
+void i2c_timer(TimerHandle_t data){
+    xQueueSend(i2c_queue, &dummy_data, 0);
+}
+
+void i2c_task(void * data){
+    while(1){
+        xQueueReceive(i2c_queue, &dummy_data, portMAX_DELAY);
+        captouch_read_cycle();
+        update_button_state();
+    }
 }
 
 void os_app_main(void)
@@ -73,8 +83,15 @@ void os_app_main(void)
     captouch_init();
     display_init();
 
-    TimerHandle_t i2c = xTimerCreate("I2C task", pdMS_TO_TICKS(CAPTOUCH_POLLING_PERIOD), pdTRUE, (void *) 0, *i2c_task);
-    if( xTimerStart(i2c, 0 ) != pdPASS) ESP_LOGI(TAG, "I2C task initialization failed");
+    i2c_queue = xQueueCreate(1,1);
+
+    TaskHandle_t i2c_task_handle;
+    //xTaskCreate(&i2c_task, "I2C task", 4096, NULL, configMAX_PRIORITIES , &i2c_task_handle);
+    xTaskCreatePinnedToCore(&i2c_task, "I2C task", 4096, NULL, configMAX_PRIORITIES-1, &i2c_task_handle, 0);
+
+
+    TimerHandle_t i2c_timer_handle = xTimerCreate("I2C timer", pdMS_TO_TICKS(CAPTOUCH_POLLING_PERIOD), pdTRUE, (void *) 0, *i2c_timer);
+    if( xTimerStart(i2c_timer_handle, 0 ) != pdPASS) ESP_LOGI(TAG, "I2C task initialization failed");
     hw_init_done = 1;
 }