diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml
index 756ab0991..c76e45a6b 100644
--- a/.github/workflows/push.yml
+++ b/.github/workflows/push.yml
@@ -25,7 +25,7 @@ jobs:
     runs-on: ubuntu-latest
     strategy:
       matrix:
-        target: [esp32, esp32s2, esp32s3, esp32c2, esp32c3, esp32c6, esp32h2, esp32p4]
+        target: [esp32, esp32s2, esp32s3, esp32c2, esp32c3, esp32c6, esp32h2, esp32p4, esp32c5]
       fail-fast: false
     steps:
     - name: Checkout repository
diff --git a/clean.sh b/clean.sh
new file mode 100755
index 000000000..5fbe754fa
--- /dev/null
+++ b/clean.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+rm -rf out build dist managed_components sdkconfig
diff --git a/configs/builds.json b/configs/builds.json
index ddfb8e4f8..1e161c683 100644
--- a/configs/builds.json
+++ b/configs/builds.json
@@ -4,7 +4,7 @@
 			"file":"libspi_flash.a",
 			"src":"build/esp-idf/spi_flash/libspi_flash.a",
 			"out":"lib/libspi_flash.a",
-			"targets":["esp32","esp32c2","esp32c3","esp32s2","esp32s3","esp32c6","esp32h2","esp32p4"]
+			"targets":["esp32","esp32c2","esp32c3","esp32s2","esp32s3","esp32c6","esp32h2","esp32p4","esp32c5"]
 		},
 		{
 			"file":"libesp_psram.a",
@@ -44,6 +44,20 @@
 		}
 	],
 	"targets":[
+		{
+			"target": "esp32c5",
+			"features":["qio_ram"],
+			"idf_libs":["qio","80m"],
+			"bootloaders":[
+				["qio","80m"],
+				["dio","80m"],
+				["qio","40m"],
+				["dio","40m"]
+			],
+			"mem_variants":[
+				["dio","80m"]
+			]
+		},
 		{
 			"target": "esp32p4",
 			"features":["qio_ram"],
diff --git a/configs/defconfig.esp32c5 b/configs/defconfig.esp32c5
new file mode 100644
index 000000000..efb756f15
--- /dev/null
+++ b/configs/defconfig.esp32c5
@@ -0,0 +1,57 @@
+CONFIG_XTAL_FREQ_AUTO=y
+CONFIG_XTAL_FREQ=0
+CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y
+CONFIG_SPIRAM=y
+
+CONFIG_BT_ENABLED=y
+CONFIG_BT_BLE_BLUFI_ENABLE=y
+CONFIG_RTC_CLK_CAL_CYCLES=576
+# CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 is not set
+CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=2304
+# This Enables RISCV LP for C6 - but it can't be used within Arduino at this time. 
+#CONFIG_ULP_COPROC_ENABLED=y
+#CONFIG_ULP_COPROC_LP_CORE=y
+#CONFIG_ULP_COPROC_RESERVE_MEM=4096
+
+#
+# OpenThread
+#
+CONFIG_OPENTHREAD_ENABLED=y
+# Border Router disabled
+# CONFIG_OPENTHREAD_BORDER_ROUTER=y
+# CONFIG_OPENTHREAD_RADIO_SPINEL_UART=y
+
+# DNS64 and NAT64 will be disabled for a while
+# OT IDF issue https://github.com/espressif/esp-idf/issues/15069
+# CONFIG_OPENTHREAD_DNS64_CLIENT=y
+
+# Radio for RPC
+# CONFIG_OPENTHREAD_RADIO=y 
+# CONFIG_OPENTHREAD_RADIO_NATIVE=y
+# CONFIG_OPENTHREAD_DIAG=n
+CONFIG_OPENTHREAD_COMMISSIONER=y
+CONFIG_OPENTHREAD_JOINER=y
+CONFIG_OPENTHREAD_CLI=y
+CONFIG_OPENTHREAD_SRP_CLIENT=y
+CONFIG_OPENTHREAD_DNS_CLIENT=y
+# Default dataset for quick start
+CONFIG_OPENTHREAD_NETWORK_NAME="OpenThread-ESP"
+CONFIG_OPENTHREAD_MESH_LOCAL_PREFIX="fd00:db8:a0:0::/64"
+CONFIG_OPENTHREAD_NETWORK_CHANNEL=15
+CONFIG_OPENTHREAD_NETWORK_PANID=0x1234
+CONFIG_OPENTHREAD_NETWORK_EXTPANID="dead00beef00cafe"
+CONFIG_OPENTHREAD_NETWORK_MASTERKEY="00112233445566778899aabbccddeeff"
+CONFIG_OPENTHREAD_NETWORK_PSKC="104810e2315100afd6bc9215a6bfac53"
+# end of OpenThread
+
+# Matter shall use only WiFi
+CONFIG_ENABLE_MATTER_OVER_THREAD=n
+
+#
+# Zigbee
+#
+CONFIG_ZB_ENABLED=y
+CONFIG_ZB_ZED=y
+CONFIG_ZB_RADIO_NATIVE=y
+# end of Zigbee
diff --git a/configs/defconfig.qio_ram b/configs/defconfig.qio_ram
index 902680b3a..c5c13e4dd 100644
--- a/configs/defconfig.qio_ram
+++ b/configs/defconfig.qio_ram
@@ -1 +1,2 @@
+# CONFIG_SPIRAM_BOOT_HW_INIT is not set
 # CONFIG_SPIRAM_BOOT_INIT is not set
\ No newline at end of file
diff --git a/patches/lwip_max_tcp_pcb.diff b/patches/lwip_max_tcp_pcb.diff
deleted file mode 100644
index 6b9e73cb6..000000000
--- a/patches/lwip_max_tcp_pcb.diff
+++ /dev/null
@@ -1,118 +0,0 @@
-diff --git a/components/lwip/lwip/src/core/memp.c b/components/lwip/lwip/src/core/memp.c
-index 352ce5a55127a658b6b3c9d8541298c42df332ff..39433cf476b3456b046e337e9b1f016299964a84 100644
---- a/components/lwip/lwip/src/core/memp.c
-+++ b/components/lwip/lwip/src/core/memp.c
-@@ -240,6 +240,10 @@ memp_init(void)
- #endif /* MEMP_OVERFLOW_CHECK >= 2 */
- }
- 
-+#if MEMP_MEM_MALLOC && ESP_LWIP && LWIP_TCP
-+static u32_t num_tcp_pcb = 0;
-+#endif
-+
- static void *
- #if !MEMP_OVERFLOW_CHECK
- do_memp_malloc_pool(const struct memp_desc *desc)
-@@ -251,6 +255,16 @@ do_memp_malloc_pool_fn(const struct memp_desc *desc, const char *file, const int
-   SYS_ARCH_DECL_PROTECT(old_level);
- 
- #if MEMP_MEM_MALLOC
-+#if ESP_LWIP
-+#if LWIP_TCP
-+  if(desc == memp_pools[MEMP_TCP_PCB]){
-+    if(num_tcp_pcb >= MEMP_NUM_TCP_PCB){
-+        return NULL;
-+    }
-+  }
-+#endif
-+#endif
-+
-   memp = (struct memp *)mem_malloc(MEMP_SIZE + MEMP_ALIGN_SIZE(desc->size));
-   SYS_ARCH_PROTECT(old_level);
- #else /* MEMP_MEM_MALLOC */
-@@ -260,6 +274,12 @@ do_memp_malloc_pool_fn(const struct memp_desc *desc, const char *file, const int
- #endif /* MEMP_MEM_MALLOC */
- 
-   if (memp != NULL) {
-+#if MEMP_MEM_MALLOC && ESP_LWIP && LWIP_TCP
-+  if (desc == memp_pools[MEMP_TCP_PCB]) {
-+    num_tcp_pcb++;
-+  }
-+#endif
-+
- #if !MEMP_MEM_MALLOC
- #if MEMP_OVERFLOW_CHECK == 1
-     memp_overflow_check_element(memp, desc);
-@@ -369,6 +389,12 @@ do_memp_free_pool(const struct memp_desc *desc, void *mem)
- 
-   SYS_ARCH_PROTECT(old_level);
- 
-+#if MEMP_MEM_MALLOC && ESP_LWIP && LWIP_TCP
-+  if (desc == memp_pools[MEMP_TCP_PCB]) {
-+    num_tcp_pcb--;
-+  }
-+#endif
-+
- #if MEMP_OVERFLOW_CHECK == 1
-   memp_overflow_check_element(memp, desc);
- #endif /* MEMP_OVERFLOW_CHECK */
-diff --git a/components/lwip/lwip/src/core/tcp.c b/components/lwip/lwip/src/core/tcp.c
-index 3fbdd89ae07807208ff7466abb50f90b5e7727e4..fe6baaf250927cb4b89f8d1dbd41c73def88692b 100644
---- a/components/lwip/lwip/src/core/tcp.c
-+++ b/components/lwip/lwip/src/core/tcp.c
-@@ -1765,7 +1765,9 @@ tcp_kill_state(enum tcp_state state)
-   struct tcp_pcb *pcb, *inactive;
-   u32_t inactivity;
- 
-+#if !ESP_LWIP
-   LWIP_ASSERT("invalid state", (state == CLOSING) || (state == LAST_ACK));
-+#endif
- 
-   inactivity = 0;
-   inactive = NULL;
-@@ -1870,17 +1872,41 @@ tcp_alloc(u8_t prio)
-         tcp_kill_state(CLOSING);
-         /* Try to allocate a tcp_pcb again. */
-         pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB);
-+#if ESP_LWIP
-         if (pcb == NULL) {
--          /* Try killing oldest active connection with lower priority than the new one. */
--          LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing oldest connection with prio lower than %d\n", prio));
--          tcp_kill_prio(prio);
--          /* Try to allocate a tcp_pcb again. */
-+          /* Try killing oldest connection in FIN_WAIT_2. */
-+          LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing off oldest FIN_WAIT_2 connection\n"));
-+          tcp_kill_state(FIN_WAIT_2);
-           pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB);
-+          if (pcb == NULL) {
-+            /* Try killing oldest connection in FIN_WAIT_1. */
-+            LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing off oldest FIN_WAIT_1 connection\n"));
-+            tcp_kill_state(FIN_WAIT_1);
-+            pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB);
-+#endif
-+            if (pcb == NULL) {
-+              /* Try killing oldest active connection with lower priority than the new one. */
-+              LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing oldest connection with prio lower than %d\n", prio));
-+              tcp_kill_prio(prio);
-+              /* Try to allocate a tcp_pcb again. */
-+              pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB);
-+              if (pcb != NULL) {
-+                /* adjust err stats: memp_malloc failed multiple times before */
-+                MEMP_STATS_DEC(err, MEMP_TCP_PCB);
-+              }
-+            }
-+#if ESP_LWIP
-+            if (pcb != NULL) {
-+            /* adjust err stats: memp_malloc failed multiple times before */
-+            MEMP_STATS_DEC(err, MEMP_TCP_PCB);
-+            }
-+          }
-           if (pcb != NULL) {
-             /* adjust err stats: memp_malloc failed multiple times before */
-             MEMP_STATS_DEC(err, MEMP_TCP_PCB);
-           }
-         }
-+#endif
-         if (pcb != NULL) {
-           /* adjust err stats: memp_malloc failed multiple times before */
-           MEMP_STATS_DEC(err, MEMP_TCP_PCB);
diff --git a/tools/config.sh b/tools/config.sh
index 4f17d8a12..707867a90 100755
--- a/tools/config.sh
+++ b/tools/config.sh
@@ -6,11 +6,11 @@ if [ -z $IDF_PATH ]; then
 fi
 
 if [ -z $IDF_BRANCH ]; then
-    IDF_BRANCH="release/v5.4"
+    IDF_BRANCH="release/v5.5"
 fi
 
 if [ -z $AR_PR_TARGET_BRANCH ]; then
-    AR_PR_TARGET_BRANCH="master"
+    AR_PR_TARGET_BRANCH="release/v3.3.x"
 fi
 
 if [ -z $IDF_TARGET ]; then
diff --git a/tools/gen_pioarduino_manifest.py b/tools/gen_pioarduino_manifest.py
index 9d2b99c19..2a76d6cd8 100644
--- a/tools/gen_pioarduino_manifest.py
+++ b/tools/gen_pioarduino_manifest.py
@@ -23,6 +23,9 @@ def convert_version(version_string):
     'v7.7.7' becomes '7.7.7'
     """
 
+    if version_string == 'heads/master':
+        return ".".join(("5", "5", "0")) #temporary
+
     regex_pattern = (
         r"v(?P<MAJOR>0|[1-9]\d*)\.(?P<MINOR>0|[1-9]\d*)\.*(?P<PATCH>0|[1-9]\d*)*"
     )
diff --git a/tools/install-esp-idf.sh b/tools/install-esp-idf.sh
index 06a67c354..45c63d200 100755
--- a/tools/install-esp-idf.sh
+++ b/tools/install-esp-idf.sh
@@ -39,10 +39,9 @@ if [ ! -x $idf_was_installed ] || [ ! -x $commit_predefined ]; then
 	export IDF_BRANCH=$(git -C "$IDF_PATH" symbolic-ref --short HEAD || git -C "$IDF_PATH" tag --points-at HEAD)
 
 	# Temporarily patch the ESP32-S2 I2C LL driver to keep the clock source
-	cd $IDF_PATH
-	patch -p1 -N -i $AR_PATCHES/esp32s2_i2c_ll_master_init.diff
-	patch -p1 -N -i $AR_PATCHES/lwip_max_tcp_pcb.diff
-	cd -
+	#cd $IDF_PATH
+	#patch -p1 -N -i $AR_PATCHES/esp32s2_i2c_ll_master_init.diff
+	#cd -
 fi
 
 #