diff --git a/firmware/0x00000.bin b/firmware/0x00000.bin
index f71c07d..670b77b 100644
Binary files a/firmware/0x00000.bin and b/firmware/0x00000.bin differ
diff --git a/firmware/0x10000.bin b/firmware/0x10000.bin
index a3bf620..6af0a04 100644
Binary files a/firmware/0x10000.bin and b/firmware/0x10000.bin differ
diff --git a/firmware/sha1sums b/firmware/sha1sums
index 8176c10..963166e 100644
--- a/firmware/sha1sums
+++ b/firmware/sha1sums
@@ -1,2 +1,2 @@
-c36c175bf752ea6e3ad3fec38b296a0b7b6bb146  0x00000.bin
-32c3b4519d79fc041d2821db41ef99d802bcf45f  0x10000.bin
+4f6912f3f84f9ab6dfc10f3dcbf1f3aa0c567910  0x00000.bin
+f0a7a860f4d2881dfc6e8e0d9e7bad136e620b35  0x10000.bin
diff --git a/user/lang.c b/user/lang.c
index 00e3ec3..8a5182c 100644
--- a/user/lang.c
+++ b/user/lang.c
@@ -953,14 +953,14 @@ int ICACHE_FLASH_ATTR parse_action(int next_token, bool doit) {
 		lang_debug("setvar $%s\r\n", var_id);
 
 		if (flash_var) {
-		    if (var_len > FLASH_SLOT_LEN)
-			var_len = FLASH_SLOT_LEN;
+		    if (var_len > FLASH_SLOT_LEN-1)
+			var_len = FLASH_SLOT_LEN-1;
 
 		    slot_no--;
 		    uint8_t slots[MAX_FLASH_SLOTS*FLASH_SLOT_LEN];
 		    blob_load(1, (uint32_t *)slots, sizeof(slots));
 		    os_memcpy(&slots[slot_no*FLASH_SLOT_LEN], var_data, var_len);
-		    slots[slot_no*FLASH_SLOT_LEN+FLASH_SLOT_LEN-1] = '\0';
+		    slots[slot_no*FLASH_SLOT_LEN+var_len] = '\0';
 		    blob_save(1, (uint32_t *)slots, sizeof(slots));
 		} else {
 
diff --git a/user/user_config.h b/user/user_config.h
index d21be97..60578dc 100644
--- a/user/user_config.h
+++ b/user/user_config.h
@@ -1,7 +1,7 @@
 #ifndef _USER_CONFIG_
 #define _USER_CONFIG_
 
-#define ESP_UBROKER_VERSION "V2.0.1"
+#define ESP_UBROKER_VERSION "V2.0.2"
 
 #define WIFI_SSID            "ssid"
 #define WIFI_PASSWORD        "password"
@@ -120,7 +120,7 @@
 
 #define MAX_RETAINED_LEN 0x1000
 
-typedef enum {SIG_DO_NOTHING=0, SIG_START_SERVER=1, SIG_UART0, SIG_TOPIC_RECEIVED, SIG_SCRIPT_LOADED, SIG_SCRIPT_HTTP_LOADED, SIG_CONSOLE_TX_RAW, SIG_CONSOLE_TX, SIG_SERIAL_TX, SIG_CONSOLE_RX} USER_SIGNALS;
+typedef enum {SIG_DO_NOTHING=0, SIG_START_SERVER=1, SIG_UART0, SIG_TOPIC_RECEIVED, SIG_SCRIPT_LOADED, SIG_SCRIPT_HTTP_LOADED, SIG_CONSOLE_TX_RAW, SIG_CONSOLE_TX, SIG_CONSOLE_RX} USER_SIGNALS;
 
 #define LOCAL_ACCESS 0x01
 #define REMOTE_ACCESS 0x02
diff --git a/user/user_main.c b/user/user_main.c
index 989d9d2..a1753a6 100644
--- a/user/user_main.c
+++ b/user/user_main.c
@@ -266,7 +266,7 @@ void ICACHE_FLASH_ATTR console_send_response(struct espconn *pespconn, bool seri
     ringbuf_memcpy_from(payload, console_tx_buffer, len);
     if (pespconn != NULL) {
 	if (!client_sent_pending) {
-	    espconn_sent(pespconn, payload, len);
+	    espconn_send(pespconn, payload, len);
 	    client_sent_pending = true;
 	}
     } else {
@@ -292,8 +292,6 @@ void ICACHE_FLASH_ATTR con_print(uint8_t *str) {
 
 void ICACHE_FLASH_ATTR serial_out(uint8_t *str) {
     UART_Send(0, str, os_strlen(str));
-    //ringbuf_memcpy_into(console_tx_buffer, str, os_strlen(str));
-    //system_os_post(user_procTaskPrio, SIG_SERIAL_TX, (ETSParam) NULL);
 }
 
 bool ICACHE_FLASH_ATTR delete_retainedtopics() {
@@ -403,7 +401,7 @@ static void ICACHE_FLASH_ATTR tcp_client_connected_cb(void *arg) {
     ringbuf_reset(console_tx_buffer);
 
     os_sprintf(payload, "CMD>");
-    espconn_sent(pespconn, payload, os_strlen(payload));
+    espconn_send(pespconn, payload, os_strlen(payload));
     client_sent_pending = true;
     console_conn = pespconn;
 }
@@ -514,12 +512,6 @@ static void ICACHE_FLASH_ATTR user_procTask(os_event_t * events) {
 	}
 	break;
 
-    case SIG_SERIAL_TX:
-	{
-	    console_send_response(NULL, true);
-	}
-	break;
-
     case SIG_CONSOLE_RX:
 	{
 	    struct espconn *pespconn = (struct espconn *)events->par;