diff --git a/CHANGELOG.md b/CHANGELOG.md
index b495c74..c5c9408 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,89 @@
 # Changelog
 
+## [1.4.4] - 2025-03-23
+### Added
+- add error handling for missing vendor IDs in filament data
+
+### Changed
+- update platformio.ini for version v1.4.4
+
+### Fixed
+- adjust weight threshold for tare check to allow negative values
+
+
+## [1.4.3] - 2025-03-23
+### Changed
+- update platformio.ini for version v1.4.3
+
+
+## [1.4.2] - 2025-03-23
+### Added
+- add WiFi connection check and restart Bambu if not connected
+
+### Changed
+- update platformio.ini for version v1.4.2
+- increase stack size for BambuMqtt task
+- update Discord Link
+- update Discord Link
+- remove commented-out subscription topic in MQTT setup
+
+### Fixed
+- use unique client ID for MQTT connection to avoid conflicts
+- reload page after firmware update completion
+- increase WiFi connection timeout from 5 to 10 seconds
+- ensure valid URL format and remove trailing slash in setupWebserver
+
+
+## [1.4.1] - 2025-03-10
+### Added
+- added new .step, now with correct individual parts
+- added changelog
+- Add files via upload
+- added .stp files of modifications
+- added merged picture
+- added pictures of components bought from AliE
+- Add files via upload
+- added pictures for heat insert location
+- added pictures showing heat insert location
+- remove unnecessary delay in MQTT setup and add delay before restart
+- add new 3D print file for Filaman scale
+- added Discord Server
+
+### Changed
+- update platformio.ini for version v1.4.1
+- refactor length calculation to convert total length to meters before formatting
+- Merge pull request #16 from spitzbirne32/main
+- improved housing to show display better
+- removed CAD, as they were all duplicates
+- typo in AliE link
+- Delete usermod/spitzbirne32/STL/README.md
+- Update README.md
+- moved pictures of parts into dedicated folders
+- Update README.md
+- Update README.md
+- Update README.md
+- Delete usermod/spitzbirne32/STL/ScaleTop_Heatinsert_Location_usermod_spitzbirne32_.png
+- Delete usermod/spitzbirne32/STL/Housing_Heatinsert_Location_usermod_spitzbirne32_.png
+- created folders
+- Update README.md
+- Update README.md
+- Create README.md
+- Update README.md
+- Update README.md
+- Create README.md
+- Merge pull request #15 from ManuelW77/main
+- Merge pull request #14 from janecker/scale-calibration-rework
+- Reworks the scale calibration handling
+- remove redundant scale calibration checks and enhance task management
+- enhance AMS data handling and streamline spool auto-setting logic
+- adjust stack size and improve scale calibration logic
+- update labels and input types for better clarity and functionality
+- update documentation for clarity and accuracy
+
+### Fixed
+- correct typo in console log for total length
+
+
 ## [1.4.0] - 2025-03-01
 ### Added
 - add support for Spoolman Octoprint Plugin in README files
diff --git a/README.de.md b/README.de.md
index 1dacfa4..eb81f18 100644
--- a/README.de.md
+++ b/README.de.md
@@ -9,7 +9,7 @@ Das System integriert sich nahtlos mit der [Spoolman](https://github.com/Donkie/
 Weitere Bilder finden Sie im [img Ordner](/img/)
 oder auf meiner Website: [FilaMan Website](https://www.filaman.app)  
 Deutsches Erklärvideo: [Youtube](https://youtu.be/uNDe2wh9SS8?si=b-jYx4I1w62zaOHU)  
-Discord Server: [https://discord.gg/vMAx2gf5](https://discord.gg/vMAx2gf5)
+Discord Server: [https://discord.gg/my7Gvaxj2v](https://discord.gg/my7Gvaxj2v)
 
 ### Es gibt jetzt auch ein Wiki, dort sind nochmal alle Funktionen beschrieben: [Wiki](https://github.com/ManuelW77/Filaman/wiki)
 
diff --git a/README.md b/README.md
index 1c97400..0415795 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@ The system integrates seamlessly with [Bambulab](https://bambulab.com/en-us) 3D
 More Images can be found in the [img Folder](/img/)  
 or my website: [FilaMan Website](https://www.filaman.app)  
 german explanatory video: [Youtube](https://youtu.be/uNDe2wh9SS8?si=b-jYx4I1w62zaOHU)  
-Discord Server: [https://discord.gg/vMAx2gf5](https://discord.gg/vMAx2gf5)
+Discord Server: [https://discord.gg/my7Gvaxj2v](https://discord.gg/my7Gvaxj2v)
 
 ### Now more detailed informations about the usage: [Wiki](https://github.com/ManuelW77/Filaman/wiki)
 
diff --git a/html/spoolman.js b/html/spoolman.js
index cbc9c67..5cc2f91 100644
--- a/html/spoolman.js
+++ b/html/spoolman.js
@@ -86,10 +86,10 @@ function populateVendorDropdown(data, selectedSmId = null) {
     });
 
     // Nach der Schleife: Formatierung der Gesamtlänge
-    console.log("Total Length: ", totalLength);
-    const formattedLength = totalLength > 1000 
-        ? (totalLength / 1000).toFixed(2) + " km" 
-        : totalLength.toFixed(2) + " m";
+    const lengthInM = totalLength / 1000;  // erst in m umrechnen
+    const formattedLength = lengthInM > 1000 
+        ? (lengthInM / 1000).toFixed(2) + " km" 
+        : lengthInM.toFixed(2) + " m";
 
     // Formatierung des Gesamtgewichts (von g zu kg zu t)
     const weightInKg = totalWeight / 1000;  // erst in kg umrechnen
@@ -147,6 +147,13 @@ function updateFilamentDropdown(selectedSmId = null) {
 
     if (vendorId) {
         const filteredFilaments = spoolsData.filter(spool => {
+            if (!spool?.filament?.vendor?.id) {
+                console.log('Problem aufgetreten bei: ', spool?.filament?.vendor);
+                console.log('Problematische Spulen:', 
+                    spoolsData.filter(spool => !spool?.filament?.vendor?.id));
+                return false;
+            }
+
             const hasValidNfcId = spool.extra && 
                                  spool.extra.nfc_id && 
                                  spool.extra.nfc_id !== '""' && 
@@ -240,18 +247,6 @@ async function fetchSpoolData() {
     }
 }
 
-/*
-// Exportiere Funktionen
-window.getSpoolData = () => spoolsData;
-window.reloadSpoolData = initSpoolman;
-window.populateVendorDropdown = populateVendorDropdown;
-window.updateFilamentDropdown = updateFilamentDropdown;
-window.toggleFilamentDropdown = () => {
-    const content = document.getElementById("filament-dropdown-content");
-    content.classList.toggle("show");
-};
-*/
-
 // Event Listener
 document.addEventListener('DOMContentLoaded', () => {
     initSpoolman();
diff --git a/html/upgrade.html b/html/upgrade.html
index 8e66721..48c2b33 100644
--- a/html/upgrade.html
+++ b/html/upgrade.html
@@ -129,6 +129,7 @@
                             if (data.status === 'success' || lastReceivedProgress >= 98) {
                                 clearTimeout(wsReconnectTimer);
                                 setTimeout(() => {
+                                    window.location.reload(true);
                                     window.location.href = '/';
                                 }, 30000);
                             }
@@ -148,6 +149,7 @@
                         status.style.display = 'block';
                         clearTimeout(wsReconnectTimer);
                         setTimeout(() => {
+                            window.location.reload(true);
                             window.location.href = '/';
                         }, 30000);
                     } else {
diff --git a/platformio.ini b/platformio.ini
index d77087e..5052653 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -9,7 +9,7 @@
 ; https://docs.platformio.org/page/projectconf.html
 
 [common]
-version = "1.4.0"
+version = "1.4.4"
 to_old_version = "1.4.0"
 
 ##
diff --git a/src/bambu.cpp b/src/bambu.cpp
index 9b9a67b..4efdac9 100644
--- a/src/bambu.cpp
+++ b/src/bambu.cpp
@@ -17,7 +17,7 @@ PubSubClient client(sslClient);
 
 TaskHandle_t BambuMqttTask;
 
-String report_topic = "";
+String topic = "";
 //String request_topic = "";
 const char* bambu_username = "bblp";
 const char* bambu_ip = nullptr;
@@ -91,7 +91,7 @@ bool loadBambuCredentials() {
         bambu_accesscode = g_bambu_accesscode.c_str();
         bambu_serialnr = g_bambu_serialnr.c_str();
 
-        report_topic = "device/" + String(bambu_serialnr) + "/report";
+        topic = "device/" + String(bambu_serialnr);
         //request_topic = "device/" + String(bambu_serialnr) + "/request";
         return true;
     }
@@ -199,7 +199,7 @@ FilamentResult findFilamentIdx(String brand, String type) {
 bool sendMqttMessage(const String& payload) {
     Serial.println("Sending MQTT message");
     Serial.println(payload);
-    if (client.publish(report_topic.c_str(), payload.c_str())) 
+    if (client.publish((String(topic) + "/request").c_str(), payload.c_str())) 
     {
         return true;
     }
@@ -553,10 +553,11 @@ void reconnect() {
         oledShowTopRow();
 
         // Attempt to connect
-        if (client.connect(bambu_serialnr, bambu_username, bambu_accesscode)) {
+        String clientId = String(bambu_serialnr) + "_" + String(random(0, 100));
+        if (client.connect(clientId.c_str(), bambu_username, bambu_accesscode)) {
             Serial.println("MQTT re/connected");
 
-            client.subscribe(report_topic.c_str());
+            client.subscribe((String(topic) + "/report").c_str());
             bambu_connected = true;
             oledShowTopRow();
         } else {
@@ -619,12 +620,12 @@ bool setupMqtt() {
 
         // Verbinden mit dem MQTT-Server
         bool connected = true;
-        if (client.connect(bambu_serialnr, bambu_username, bambu_accesscode)) 
+        String clientId = String(bambu_serialnr) + "_" + String(random(0, 100));
+        if (client.connect(clientId.c_str(), bambu_username, bambu_accesscode)) 
         {
             client.setCallback(mqtt_callback);
-            client.setBufferSize(5120);
-            // Optional: Topic abonnieren
-            client.subscribe(report_topic.c_str());
+            client.setBufferSize(15488);
+            client.subscribe((String(topic) + "/report").c_str());
             //client.subscribe(request_topic.c_str());
             Serial.println("MQTT-Client initialisiert");
 
@@ -635,7 +636,7 @@ bool setupMqtt() {
             xTaskCreatePinnedToCore(
                 mqtt_loop, /* Function to implement the task */
                 "BambuMqtt", /* Name of the task */
-                8192,  /* Stack size in words */
+                10240,  /* Stack size in words */
                 NULL,  /* Task input parameter */
                 mqttTaskPrio,  /* Priority of the task */
                 &BambuMqttTask,  /* Task handle. */
diff --git a/src/main.cpp b/src/main.cpp
index 84e45f1..d9ead63 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -92,12 +92,19 @@ void loop() {
   unsigned long currentMillis = millis();
 
   // Überprüfe regelmäßig die WLAN-Verbindung
-  if (intervalElapsed(currentMillis, lastWifiCheckTime, wifiCheckInterval)) {
+  if (intervalElapsed(currentMillis, lastWifiCheckTime, wifiCheckInterval)) 
+  {
     checkWiFiConnection();
   }
 
   // Wenn Bambu auto set Spool aktiv
-  if (autoSendToBambu && autoSetToBambuSpoolId > 0) {
+  if (autoSendToBambu && autoSetToBambuSpoolId > 0) 
+  {
+    if (!bambu_connected) 
+    {
+      bambu_restart();
+    }
+
     if (intervalElapsed(currentMillis, lastAutoSetBambuAmsTime, autoSetBambuAmsInterval)) 
     {
       if (hasReadRfidTag == 0)
@@ -152,7 +159,7 @@ void loop() {
     lastWeightReadTime = currentMillis;
 
     // Prüfen ob die Waage korrekt genullt ist
-    if ((weight > 0 && weight < 5) || weight < 0)
+    if ((weight > 0 && weight < 5) || weight < -1)
     {
       if(scaleTareCounter < 5)
       {
diff --git a/src/website.cpp b/src/website.cpp
index 9091d9e..2e01604 100644
--- a/src/website.cpp
+++ b/src/website.cpp
@@ -286,6 +286,14 @@ void setupWebserver(AsyncWebServer &server) {
         }
 
         String url = request->getParam("url")->value();
+        if (url.indexOf("http://") == -1 && url.indexOf("https://") == -1) {
+            url = "http://" + url;
+        }
+        // Remove trailing slash if exists
+        if (url.length() > 0 && url.charAt(url.length()-1) == '/') {
+            url = url.substring(0, url.length()-1);
+        }
+        
         bool octoEnabled = (request->getParam("octoEnabled")->value() == "true") ? true : false;
         String octoUrl = request->getParam("octoUrl")->value();
         String octoToken = (request->getParam("octoToken")->value() != "") ? request->getParam("octoToken")->value() : "";
@@ -300,7 +308,7 @@ void setupWebserver(AsyncWebServer &server) {
         request->send(200, "application/json", jsonResponse);
     });
 
-    // Route für das Überprüfen der Spoolman-Instanz
+    // Route für das Überprüfen der Bambu-Instanz
     server.on("/api/bambu", HTTP_GET, [](AsyncWebServerRequest *request){
         if (!request->hasParam("bambu_ip") || !request->hasParam("bambu_serialnr") || !request->hasParam("bambu_accesscode")) {
             request->send(400, "application/json", "{\"success\": false, \"error\": \"Missing parameter\"}");
diff --git a/src/wlan.cpp b/src/wlan.cpp
index d7c1781..cbbba38 100644
--- a/src/wlan.cpp
+++ b/src/wlan.cpp
@@ -59,7 +59,7 @@ void initWiFi() {
   if(wm_nonblocking) wm.setConfigPortalBlocking(false);
   //wm.setConfigPortalTimeout(320); // Portal nach 5min schließen
   wm.setWiFiAutoReconnect(true);
-  wm.setConnectTimeout(5);
+  wm.setConnectTimeout(10);
 
   oledShowTopRow();
   oledShowMessage("WiFi Setup");