diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index 87657af5f5..8af98c2d0e 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -1895,36 +1895,39 @@ class CuraApplication(QtApplication):
                 query = QUrlQuery(url.query())
                 model_url = QUrl(query.queryItemValue("file", options=QUrl.ComponentFormattingOption.FullyDecoded))
 
-                def on_finish(response):
-                    content_disposition_header_key = QByteArray("content-disposition".encode())
-
-                    filename = model_url.path().split("/")[-1] + ".stl"
-
-                    if response.hasRawHeader(content_disposition_header_key):
-                        # content_disposition is in the format
-                        # ```
-                        # content_disposition attachment; filename="[FILENAME]"
-                        # ```
-                        # Use a regex to extract the filename
-                        content_disposition = str(response.rawHeader(content_disposition_header_key).data(),
-                                                  encoding='utf-8')
-                        content_disposition_match = re.match(r'attachment; filename=(?P<filename>.*)',
-                                                             content_disposition)
-                        if content_disposition_match is not None:
-                            filename = content_disposition_match.group("filename").strip("\"")
-
-                    tmp = tempfile.NamedTemporaryFile(suffix=filename, delete=False)
-                    with open(tmp.name, "wb") as f:
-                        f.write(response.readAll())
-
-                    self.readLocalFile(QUrl.fromLocalFile(tmp.name), add_to_recent_files=False)
-
                 def on_error(*args, **kwargs):
-                    Logger.log("w", "Could not download file from {0}".format(model_url.url()))
-                    Message("Could not download file: " + str(model_url.url()),
+                    Logger.warning(f"Could not download file from {model_url.url()}")
+                    Message(f"Could not download file: {str(model_url.url())}",
                             title= "Loading Model failed",
                             message_type=Message.MessageType.ERROR).show()
-                    return
+
+                def on_finish(response):
+                    try:
+                        content_disposition_header_key = QByteArray("content-disposition".encode())
+
+                        filename = model_url.path().split("/")[-1] + ".stl"
+
+                        if response.hasRawHeader(content_disposition_header_key):
+                            # content_disposition is in the format
+                            # ```
+                            # content_disposition attachment; filename="[FILENAME]"
+                            # ```
+                            # Use a regex to extract the filename
+                            content_disposition = str(response.rawHeader(content_disposition_header_key).data(),
+                                                      encoding='utf-8')
+                            content_disposition_match = re.match(r'attachment; filename=(?P<filename>.*)',
+                                                                 content_disposition)
+                            if content_disposition_match is not None:
+                                filename = content_disposition_match.group("filename").strip("\"")
+
+                        tmp = tempfile.NamedTemporaryFile(suffix=filename, delete=False)
+                        with open(tmp.name, "wb") as f:
+                            f.write(response.readAll())
+
+                        self.readLocalFile(QUrl.fromLocalFile(tmp.name), add_to_recent_files=False)
+                    except Exception as ex:
+                        Logger.warning(f"Exception {str(ex)}")
+                        on_error()
 
                 self.getHttpRequestManager().get(
                     model_url.url(),
diff --git a/plugins/PostProcessingPlugin/scripts/FilamentChange.py b/plugins/PostProcessingPlugin/scripts/FilamentChange.py
index 6fe28ef2f2..f51ba73ffb 100644
--- a/plugins/PostProcessingPlugin/scripts/FilamentChange.py
+++ b/plugins/PostProcessingPlugin/scripts/FilamentChange.py
@@ -92,7 +92,7 @@ class FilamentChange(Script):
                     "type": "float",
                     "default_value": 0,
                     "minimum_value": 0,
-                    "enabled": "enabled"
+                    "enabled": "enabled and not firmware_config"
                 },
                 "retract_method":
                 {
diff --git a/resources/definitions/biqu_b2.def.json b/resources/definitions/biqu_b2.def.json
new file mode 100644
index 0000000000..85139b82c1
--- /dev/null
+++ b/resources/definitions/biqu_b2.def.json
@@ -0,0 +1,39 @@
+{
+    "version": 2,
+    "name": "Biqu B2",
+    "inherits": "biqu_b1",
+    "metadata":
+    {
+        "visible": true,
+        "author": "Boris Juraga",
+        "has_textured_buildplate": true,
+        "machine_extruder_trains":
+        {
+            "0": "biqu_b2_extruder_0",
+            "1": "biqu_b2_extruder_1"
+        },
+        "quality_definition": "biqu_b2"
+    },
+    "overrides":
+    {
+        "gantry_height": { "value": 27.5 },
+        "machine_end_gcode": { "default_value": ";BEGIN OF CUSTOM END GCODE\nM104 S0\nM140 S0\n;Retract the filament\nG91\nG1 E-30 F300\nG1 Z5\nG90\nG28 X0 Y{machine_depth}\n;END OF CUSTOM END GCODE" },
+        "machine_extruder_count": { "default_value": 2 },
+        "machine_extruders_share_heater": { "default_value": true },
+        "machine_extruders_share_nozzle": { "default_value": true },
+        "machine_extruders_shared_nozzle_initial_retraction": { "default_value": 30 },
+        "machine_head_with_fans_polygon":
+        {
+            "default_value": [
+                [-33, 35],
+                [-33, -23],
+                [33, -23],
+                [33, 35]
+            ]
+        },
+        "machine_name": { "default_value": "BIQU B2" },
+        "machine_start_gcode": { "default_value": ";BEGIN OF CUSTOM START GCODE\nG28 ;Home\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT1\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X6.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X6.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X6.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X6.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X6.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X6.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X7.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X7.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X7.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X7.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nG92 E0 \nT1\nG92 E0\nG1 F1200 E-30\nG92 E0\nT0\nG92 E0\nG1 F1200 E30\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X9.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X9.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X9.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X9.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X9.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X9.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X10.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X10.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X10.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X10.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nG92 E0\nT{initial_extruder_nr} ; RESET EXTRUDER TO INITIAL\n; start print\n;END OF CUSTOM START GCODE" },
+        "prime_tower_enable": { "default_value": true },
+        "prime_tower_mode": { "default_value": "interleaved" }
+    }
+}
\ No newline at end of file
diff --git a/resources/definitions/geeetech_M1.def.json b/resources/definitions/geeetech_M1.def.json
new file mode 100644
index 0000000000..2782c7c87c
--- /dev/null
+++ b/resources/definitions/geeetech_M1.def.json
@@ -0,0 +1,59 @@
+{
+    "version": 2,
+    "name": "Geeetech M1",
+    "inherits": "Geeetech_Base_Single_Extruder",
+    "metadata":
+    {
+        "visible": true,
+        "machine_extruder_trains": { "0": "Geeetech_Single_Extruder" }
+    },
+    "overrides":
+    {
+        "adhesion_type": { "value": "'brim'" },
+        "brim_width": { "value": 2 },
+        "gantry_height": { "value": 35 },
+        "machine_depth": { "default_value": 105 },
+        "machine_end_gcode": { "default_value": "G91 ;Switch to relative positioning\nG1 E-2.5 F2700 ;Retract filament\nG1 E-1.5 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Move away\nG1 Z10 ;lift print head\nG90 ;Switch to absolute positioning\nG28 X Y ;homing XY\nM106 S0 ;off Fan\nM104 S0 ;Cooldown hotend\nM140 S0 ;Cooldown bed\nM84 X Y E ;Disable steppers" },
+        "machine_head_with_fans_polygon":
+        {
+            "default_value": [
+                [-31, 31],
+                [34, 31],
+                [34, -40],
+                [-31, -40]
+            ]
+        },
+        "machine_height": { "default_value": 95 },
+        "machine_name": { "default_value": "Geeetech M1" },
+        "machine_start_gcode": { "default_value": ";Official wiki URL for Geeetech M1:https://www.geeetech.com/wiki/index.php/Geeetech_M1_3D_printer \nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM140 S{material_bed_temperature_layer_0} ; Set Bed Temperature\n;M190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder" },
+        "machine_width": { "default_value": 105 },
+        "material_bed_temperature": { "maximum_value": 60 },
+        "material_print_temperature": { "maximum_value": 230 },
+        "retraction_amount": { "value": 2 },
+        "speed_print":
+        {
+            "maximum_value_warning": "200",
+            "value": 120
+        },
+        "speed_topbottom":
+        {
+            "maximum_value_warning": "200",
+            "value": 60
+        },
+        "speed_wall":
+        {
+            "maximum_value_warning": "200",
+            "value": 80
+        },
+        "speed_wall_0":
+        {
+            "maximum_value_warning": "200",
+            "value": 50
+        },
+        "speed_wall_x":
+        {
+            "maximum_value_warning": "200",
+            "value": 80
+        }
+    }
+}
\ No newline at end of file
diff --git a/resources/definitions/geeetech_M1S.def.json b/resources/definitions/geeetech_M1S.def.json
new file mode 100644
index 0000000000..79bfec5a89
--- /dev/null
+++ b/resources/definitions/geeetech_M1S.def.json
@@ -0,0 +1,59 @@
+{
+    "version": 2,
+    "name": "Geeetech M1S",
+    "inherits": "Geeetech_Base_Single_Extruder",
+    "metadata":
+    {
+        "visible": true,
+        "machine_extruder_trains": { "0": "Geeetech_Single_Extruder" }
+    },
+    "overrides":
+    {
+        "adhesion_type": { "value": "'brim'" },
+        "brim_width": { "value": 2 },
+        "gantry_height": { "value": 35 },
+        "machine_depth": { "default_value": 105 },
+        "machine_end_gcode": { "default_value": "G91 ;Switch to relative positioning\nG1 E-2.5 F2700 ;Retract filament\nG1 E-1.5 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Move away\nG1 Z10 ;lift print head\nG90 ;Switch to absolute positioning\nG28 X Y ;homing XY\nM106 S0 ;off Fan\nM104 S0 ;Cooldown hotend\nM140 S0 ;Cooldown bed\nM84 X Y E ;Disable steppers" },
+        "machine_head_with_fans_polygon":
+        {
+            "default_value": [
+                [-31, 31],
+                [34, 31],
+                [34, -40],
+                [-31, -40]
+            ]
+        },
+        "machine_height": { "default_value": 95 },
+        "machine_name": { "default_value": "Geeetech M1S" },
+        "machine_start_gcode": { "default_value": ";Official wiki URL for Geeetech M1S:https://www.geeetech.com/wiki/index.php/Geeetech_M1S_3D_printer \nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM140 S{material_bed_temperature_layer_0} ; Set Bed Temperature\n;M190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder" },
+        "machine_width": { "default_value": 105 },
+        "material_bed_temperature": { "maximum_value": 85 },
+        "material_print_temperature": { "maximum_value": 250 },
+        "retraction_amount": { "value": 2 },
+        "speed_print":
+        {
+            "maximum_value_warning": "200",
+            "value": 120
+        },
+        "speed_topbottom":
+        {
+            "maximum_value_warning": "200",
+            "value": 60
+        },
+        "speed_wall":
+        {
+            "maximum_value_warning": "200",
+            "value": 80
+        },
+        "speed_wall_0":
+        {
+            "maximum_value_warning": "200",
+            "value": 50
+        },
+        "speed_wall_x":
+        {
+            "maximum_value_warning": "200",
+            "value": 80
+        }
+    }
+}
\ No newline at end of file
diff --git a/resources/definitions/geeetech_Thunder.def.json b/resources/definitions/geeetech_Thunder.def.json
index cc3e4044f8..cf0f9dd5e9 100644
--- a/resources/definitions/geeetech_Thunder.def.json
+++ b/resources/definitions/geeetech_Thunder.def.json
@@ -81,14 +81,10 @@
         "machine_max_jerk_xy": { "value": 45 },
         "machine_max_jerk_z": { "value": 0.8 },
         "machine_name": { "default_value": "Geeetech Thunder" },
-        "machine_start_gcode": { "default_value": ";Official viki homepage for Thunder:https://www.geeetech.com/wiki/index.php/Geeetech_Thunder_3D_printer  \n\nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 P0 ;Off Main Fan\nM107 P1 ;Off Aux Fan\nM2012 P8 S1 F100 ; ON Light\n;M106 P0 S383 ; ON MainFan 150% if need\n;M106 P1 S255 ; ON Aux Fan 100% if need\nG1 Z5.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z0.8 F5000 ; Move to start position\nG1 X0.1 Y200.0 Z1.2 F1500 E30 ; Draw the first line\nG92 E0 ; Reset Extruder\nG1 X0.4 Y200.0 Z1.2 F3000 ; Move to side a little\nG1 X0.4 Y20 Z1.2 F1500 E25 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.4 F3000.0 ; Scrape off nozzle residue" },
+        "machine_start_gcode": { "default_value": ";Official wiki URL for Thunder:https://www.geeetech.com/wiki/index.php/Geeetech_Thunder_3D_printer  \n\nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 P0 ;Off Main Fan\nM107 P1 ;Off Aux Fan\nM2012 P8 S1 F100 ; ON Light\n;M106 P0 S383 ; ON MainFan 150% if need\n;M106 P1 S255 ; ON Aux Fan 100% if need\nG1 Z5.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z0.8 F5000 ; Move to start position\nG1 X0.1 Y200.0 Z1.2 F1500 E30 ; Draw the first line\nG92 E0 ; Reset Extruder\nG1 X0.4 Y200.0 Z1.2 F3000 ; Move to side a little\nG1 X0.4 Y20 Z1.2 F1500 E25 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.4 F3000.0 ; Scrape off nozzle residue" },
         "machine_width": { "default_value": 250 },
         "material_flow_layer_0": { "value": 95 },
-        "material_print_temperature":
-        {
-            "maximum_value": "250",
-            "value": "200 if speed_infill <=150 else 205 if speed_infill <= 200 else 215 if speed_infill <= 260 else 220"
-        },
+        "material_print_temperature": { "maximum_value": "250" },
         "material_print_temperature_layer_0":
         {
             "maximum_value_warning": 300,
diff --git a/resources/definitions/hellbot_hidra.def.json b/resources/definitions/hellbot_hidra.def.json
index fe1d580354..bf8eb16608 100644
--- a/resources/definitions/hellbot_hidra.def.json
+++ b/resources/definitions/hellbot_hidra.def.json
@@ -21,7 +21,7 @@
             0,
             5
         ],
-        "platform_texture": "hellbot_hidra.png"
+        "platform_texture": "Hellbot_Hidra_and_Hidra_Plus_V2.png"
     },
     "overrides":
     {
diff --git a/resources/definitions/hellbot_hidra_plus.def.json b/resources/definitions/hellbot_hidra_plus.def.json
index dc718dc5f2..70938b5b00 100644
--- a/resources/definitions/hellbot_hidra_plus.def.json
+++ b/resources/definitions/hellbot_hidra_plus.def.json
@@ -21,7 +21,7 @@
             0,
             5
         ],
-        "platform_texture": "hellbot_hidra_plus.png"
+        "platform_texture": "Hellbot_Hidra_and_Hidra_Plus_V2.png"
     },
     "overrides":
     {
diff --git a/resources/definitions/sovol_sv01.def.json b/resources/definitions/sovol_sv01.def.json
index 9d77c1c3f6..5c87d8124e 100644
--- a/resources/definitions/sovol_sv01.def.json
+++ b/resources/definitions/sovol_sv01.def.json
@@ -1,11 +1,11 @@
 {
     "version": 2,
     "name": "Sovol SV01",
-    "inherits": "sovol_base_bowden",
+    "inherits": "sovol_base_titan",
     "metadata":
     {
         "visible": true,
-        "quality_definition": "sovol_base_bowden"
+        "quality_definition": "sovol_base_titan"
     },
     "overrides":
     {
diff --git a/resources/definitions/toybox_alpha_one_two.def.json b/resources/definitions/toybox_alpha_one_two.def.json
new file mode 100644
index 0000000000..6dc32a5fa7
--- /dev/null
+++ b/resources/definitions/toybox_alpha_one_two.def.json
@@ -0,0 +1,25 @@
+{
+    "version": 2,
+    "name": "Toybox Alpha One/Two",
+    "inherits": "fdmprinter",
+    "metadata":
+    {
+        "visible": true,
+        "author": "lukbrew25",
+        "manufacturer": "Toybox",
+        "file_formats": "text/x-gcode",
+        "has_machine_quality": false,
+        "machine_extruder_trains": { "0": "toybox_alpha_one_two_extruder_0" }
+    },
+    "overrides":
+    {
+        "gantry_height": { "value": "0.0" },
+        "machine_depth": { "default_value": 80 },
+        "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
+        "machine_height": { "default_value": 90 },
+        "machine_name": { "default_value": "Toybox Alpha One/Two" },
+        "machine_start_gcode": { "default_value": "G90\nM82" },
+        "machine_width": { "default_value": 70 },
+        "material_diameter": { "default_value": 1.75 }
+    }
+}
\ No newline at end of file
diff --git a/resources/definitions/ultimaker_s5.def.json b/resources/definitions/ultimaker_s5.def.json
index 46d46d33eb..fa6f5a9a38 100644
--- a/resources/definitions/ultimaker_s5.def.json
+++ b/resources/definitions/ultimaker_s5.def.json
@@ -72,7 +72,11 @@
         "brim_width": { "value": "3" },
         "build_volume_temperature": { "maximum_value": 50 },
         "cool_fan_speed": { "value": "50" },
-        "default_material_print_temperature": { "value": "200" },
+        "default_material_print_temperature":
+        {
+            "maximum_value_warning": "320",
+            "value": "200"
+        },
         "extruder_prime_pos_abs": { "default_value": true },
         "gantry_height": { "value": "55" },
         "infill_pattern": { "value": "'zigzag' if infill_sparse_density > 80 else 'triangles'" },
@@ -104,6 +108,7 @@
         "machine_nozzle_heat_up_speed": { "default_value": 1.4 },
         "machine_start_gcode": { "default_value": "" },
         "machine_width": { "default_value": 330 },
+        "material_print_temperature_layer_0": { "maximum_value_warning": "320" },
         "multiple_mesh_overlap": { "value": "0" },
         "optimize_wall_printing_order": { "value": "True" },
         "prime_blob_enable":
diff --git a/resources/definitions/ultimaker_s7.def.json b/resources/definitions/ultimaker_s7.def.json
index 14d9b21168..ac2f927ad4 100644
--- a/resources/definitions/ultimaker_s7.def.json
+++ b/resources/definitions/ultimaker_s7.def.json
@@ -46,8 +46,6 @@
     },
     "overrides":
     {
-        "default_material_print_temperature": { "maximum_value_warning": "320" },
-        "machine_name": { "default_value": "Ultimaker S7" },
-        "material_print_temperature_layer_0": { "maximum_value_warning": "320" }
+        "machine_name": { "default_value": "Ultimaker S7" }
     }
 }
\ No newline at end of file
diff --git a/resources/definitions/ultimaker_s8.def.json b/resources/definitions/ultimaker_s8.def.json
index fb8243cd60..b7de27722d 100644
--- a/resources/definitions/ultimaker_s8.def.json
+++ b/resources/definitions/ultimaker_s8.def.json
@@ -1,7 +1,7 @@
 {
     "version": 2,
     "name": "UltiMaker S8",
-    "inherits": "ultimaker_s7",
+    "inherits": "ultimaker_s5",
     "metadata":
     {
         "visible": true,
@@ -48,7 +48,6 @@
         "preferred_material": "ultimaker_pla_blue",
         "preferred_quality_type": "draft",
         "preferred_variant_name": "AA+ 0.4",
-        "quality_definition": "ultimaker_s8",
         "supported_actions": [ "DiscoverUM3Action" ],
         "supports_material_export": true,
         "supports_network_connection": true,
diff --git a/resources/extruders/biqu_b2_extruder_0.def.json b/resources/extruders/biqu_b2_extruder_0.def.json
new file mode 100644
index 0000000000..4bfb9686b3
--- /dev/null
+++ b/resources/extruders/biqu_b2_extruder_0.def.json
@@ -0,0 +1,16 @@
+{
+    "version": 2,
+    "name": "Extruder 1",
+    "inherits": "fdmextruder",
+    "metadata":
+    {
+        "machine": "biqu_b2",
+        "position": "0"
+    },
+    "overrides":
+    {
+        "extruder_nr": { "default_value": 0 },
+        "machine_nozzle_size": { "default_value": 0.4 },
+        "material_diameter": { "default_value": 1.75 }
+    }
+}
\ No newline at end of file
diff --git a/resources/extruders/biqu_b2_extruder_1.def.json b/resources/extruders/biqu_b2_extruder_1.def.json
new file mode 100644
index 0000000000..fc5778b071
--- /dev/null
+++ b/resources/extruders/biqu_b2_extruder_1.def.json
@@ -0,0 +1,16 @@
+{
+    "version": 2,
+    "name": "Extruder 2",
+    "inherits": "fdmextruder",
+    "metadata":
+    {
+        "machine": "biqu_b2",
+        "position": "1"
+    },
+    "overrides":
+    {
+        "extruder_nr": { "default_value": 1 },
+        "machine_nozzle_size": { "default_value": 0.4 },
+        "material_diameter": { "default_value": 1.75 }
+    }
+}
\ No newline at end of file
diff --git a/resources/extruders/toybox_alpha_one_two_extruder_0.def.json b/resources/extruders/toybox_alpha_one_two_extruder_0.def.json
new file mode 100644
index 0000000000..f7f773257c
--- /dev/null
+++ b/resources/extruders/toybox_alpha_one_two_extruder_0.def.json
@@ -0,0 +1,17 @@
+{
+    "version": 2,
+    "name": "Extruder 1",
+    "inherits": "fdmextruder",
+    "metadata":
+    {
+        "machine": "toybox_alpha_one_two",
+        "position": "0"
+    },
+    "overrides":
+    {
+        "extruder_nr": { "default_value": 0 },
+        "machine_nozzle_offset_x": { "default_value": -3.0 },
+        "machine_nozzle_size": { "default_value": 0.4 },
+        "material_diameter": { "default_value": 1.75 }
+    }
+}
\ No newline at end of file
diff --git a/resources/images/Hellbot_Hidra_and_Hidra_Plus_V2.png b/resources/images/Hellbot_Hidra_and_Hidra_Plus_V2.png
new file mode 100644
index 0000000000..1cbdea4aae
Binary files /dev/null and b/resources/images/Hellbot_Hidra_and_Hidra_Plus_V2.png differ
diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_adaptive.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_adaptive.inst.cfg
new file mode 100644
index 0000000000..b9f8323096
--- /dev/null
+++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_adaptive.inst.cfg
@@ -0,0 +1,14 @@
+[general]
+definition = biqu_b2
+name = Dynamic Quality
+version = 4
+
+[metadata]
+material = generic_pla_175
+quality_type = adaptive
+setting_version = 25
+type = quality
+variant = 0.4mm Nozzle
+
+[values]
+
diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_draft.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_draft.inst.cfg
new file mode 100644
index 0000000000..57b48a55a5
--- /dev/null
+++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_draft.inst.cfg
@@ -0,0 +1,14 @@
+[general]
+definition = biqu_b2
+name = Draft Quality
+version = 4
+
+[metadata]
+material = generic_pla_175
+quality_type = draft
+setting_version = 25
+type = quality
+variant = 0.4mm Nozzle
+
+[values]
+
diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_low.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_low.inst.cfg
new file mode 100644
index 0000000000..d11d6658d4
--- /dev/null
+++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_low.inst.cfg
@@ -0,0 +1,14 @@
+[general]
+definition = biqu_b2
+name = Low Quality
+version = 4
+
+[metadata]
+material = generic_pla_175
+quality_type = low
+setting_version = 25
+type = quality
+variant = 0.4mm Nozzle
+
+[values]
+
diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_standard.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_standard.inst.cfg
new file mode 100644
index 0000000000..fa641937bb
--- /dev/null
+++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_standard.inst.cfg
@@ -0,0 +1,14 @@
+[general]
+definition = biqu_b2
+name = Standard Quality
+version = 4
+
+[metadata]
+material = generic_pla_175
+quality_type = standard
+setting_version = 25
+type = quality
+variant = 0.4mm Nozzle
+
+[values]
+
diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_super.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_super.inst.cfg
new file mode 100644
index 0000000000..7aadcb580c
--- /dev/null
+++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_super.inst.cfg
@@ -0,0 +1,14 @@
+[general]
+definition = biqu_b2
+name = Super Quality
+version = 4
+
+[metadata]
+material = generic_pla_175
+quality_type = super
+setting_version = 25
+type = quality
+variant = 0.4mm Nozzle
+
+[values]
+
diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_ultra.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_ultra.inst.cfg
new file mode 100644
index 0000000000..fbd8a08905
--- /dev/null
+++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_ultra.inst.cfg
@@ -0,0 +1,14 @@
+[general]
+definition = biqu_b2
+name = Ultra Quality
+version = 4
+
+[metadata]
+material = generic_pla_175
+quality_type = ultra
+setting_version = 25
+type = quality
+variant = 0.4mm Nozzle
+
+[values]
+
diff --git a/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg
new file mode 100644
index 0000000000..54484e046e
--- /dev/null
+++ b/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg
@@ -0,0 +1,29 @@
+[general]
+definition = biqu_b2
+name = Dynamic Quality
+version = 4
+
+[metadata]
+global_quality = True
+quality_type = adaptive
+setting_version = 25
+type = quality
+weight = -2
+
+[values]
+adaptive_layer_height_enabled = true
+layer_height = 0.16
+layer_height_0 = 0.20
+material_final_print_temperature = 195
+material_initial_print_temperature = 195
+material_print_temperature = 190
+material_standby_temperature = 195
+optimize_wall_printing_order = True
+prime_tower_min_volume = 150
+support_interface_height = =layer_height*6
+switch_extruder_prime_speed = 10
+switch_extruder_retraction_amount = 40
+switch_extruder_retraction_speeds = 30
+top_bottom_thickness = =layer_height_0+layer_height*4
+wall_thickness = =line_width*3
+
diff --git a/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg
new file mode 100644
index 0000000000..e5ebe77ad2
--- /dev/null
+++ b/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg
@@ -0,0 +1,28 @@
+[general]
+definition = biqu_b2
+name = Draft Quality
+version = 4
+
+[metadata]
+global_quality = True
+quality_type = draft
+setting_version = 25
+type = quality
+weight = -5
+
+[values]
+layer_height = 0.32
+layer_height_0 = 0.32
+material_final_print_temperature = 195
+material_initial_print_temperature = 195
+material_print_temperature = 190
+material_standby_temperature = 195
+optimize_wall_printing_order = True
+prime_tower_min_volume = 150
+support_interface_height = =layer_height*4
+switch_extruder_prime_speed = 10
+switch_extruder_retraction_amount = 40
+switch_extruder_retraction_speeds = 30
+top_bottom_thickness = =layer_height_0+layer_height*3
+wall_thickness = =line_width*2
+
diff --git a/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg
new file mode 100644
index 0000000000..2a0f57981f
--- /dev/null
+++ b/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg
@@ -0,0 +1,28 @@
+[general]
+definition = biqu_b2
+name = Low Quality
+version = 4
+
+[metadata]
+global_quality = True
+quality_type = low
+setting_version = 25
+type = quality
+weight = -4
+
+[values]
+layer_height = 0.28
+layer_height_0 = 0.28
+material_final_print_temperature = 195
+material_initial_print_temperature = 195
+material_print_temperature = 190
+material_standby_temperature = 195
+optimize_wall_printing_order = True
+prime_tower_min_volume = 150
+support_interface_height = =layer_height*4
+switch_extruder_prime_speed = 10
+switch_extruder_retraction_amount = 40
+switch_extruder_retraction_speeds = 30
+top_bottom_thickness = =layer_height_0+layer_height*3
+wall_thickness = =line_width*3
+
diff --git a/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg
new file mode 100644
index 0000000000..e2860c23e3
--- /dev/null
+++ b/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg
@@ -0,0 +1,29 @@
+[general]
+definition = biqu_b2
+name = Standard Quality
+version = 4
+
+[metadata]
+global_quality = True
+position = 0
+quality_type = standard
+setting_version = 25
+type = quality
+weight = -3
+
+[values]
+layer_height = 0.2
+layer_height_0 = 0.2
+material_final_print_temperature = 195
+material_initial_print_temperature = 195
+material_print_temperature = 190
+material_standby_temperature = 195
+optimize_wall_printing_order = True
+prime_tower_min_volume = 150
+support_interface_height = =layer_height*4
+switch_extruder_prime_speed = 10
+switch_extruder_retraction_amount = 40
+switch_extruder_retraction_speeds = 30
+top_bottom_thickness = =layer_height_0+layer_height*3
+wall_thickness = =line_width*3
+
diff --git a/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg
new file mode 100644
index 0000000000..9343fe00df
--- /dev/null
+++ b/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg
@@ -0,0 +1,28 @@
+[general]
+definition = biqu_b2
+name = Super Quality
+version = 4
+
+[metadata]
+global_quality = True
+quality_type = super
+setting_version = 25
+type = quality
+weight = -1
+
+[values]
+layer_height = 0.12
+layer_height_0 = 0.12
+material_final_print_temperature = 195
+material_initial_print_temperature = 195
+material_print_temperature = 190
+material_standby_temperature = 195
+optimize_wall_printing_order = True
+prime_tower_min_volume = 150
+support_interface_height = =layer_height*8
+switch_extruder_prime_speed = 10
+switch_extruder_retraction_amount = 40
+switch_extruder_retraction_speeds = 30
+top_bottom_thickness = =layer_height_0+layer_height*6
+wall_thickness = =line_width*3
+
diff --git a/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg
new file mode 100644
index 0000000000..4625e672e3
--- /dev/null
+++ b/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg
@@ -0,0 +1,28 @@
+[general]
+definition = biqu_b2
+name = Ultra Quality
+version = 4
+
+[metadata]
+global_quality = True
+quality_type = ultra
+setting_version = 25
+type = quality
+weight = 0
+
+[values]
+layer_height = 0.08
+layer_height_0 = 0.12
+material_final_print_temperature = 195
+material_initial_print_temperature = 195
+material_print_temperature = 190
+material_standby_temperature = 195
+optimize_wall_printing_order = True
+prime_tower_min_volume = 150
+support_interface_height = =layer_height*12
+switch_extruder_prime_speed = 10
+switch_extruder_retraction_amount = 40
+switch_extruder_retraction_speeds = 30
+top_bottom_thickness = =layer_height_0+layer_height*10
+wall_thickness = =line_width*4
+
diff --git a/resources/variants/biqu/biqu_b2_0.2.inst.cfg b/resources/variants/biqu/biqu_b2_0.2.inst.cfg
new file mode 100644
index 0000000000..e86b85d50b
--- /dev/null
+++ b/resources/variants/biqu/biqu_b2_0.2.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = biqu_b2
+name = 0.2mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.2
+
diff --git a/resources/variants/biqu/biqu_b2_0.3.inst.cfg b/resources/variants/biqu/biqu_b2_0.3.inst.cfg
new file mode 100644
index 0000000000..8469c7e211
--- /dev/null
+++ b/resources/variants/biqu/biqu_b2_0.3.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = biqu_b2
+name = 0.3mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.3
+
diff --git a/resources/variants/biqu/biqu_b2_0.4.inst.cfg b/resources/variants/biqu/biqu_b2_0.4.inst.cfg
new file mode 100644
index 0000000000..472e03489b
--- /dev/null
+++ b/resources/variants/biqu/biqu_b2_0.4.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = biqu_b2
+name = 0.4mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.4
+
diff --git a/resources/variants/biqu/biqu_b2_0.5.inst.cfg b/resources/variants/biqu/biqu_b2_0.5.inst.cfg
new file mode 100644
index 0000000000..1ab4eb72d4
--- /dev/null
+++ b/resources/variants/biqu/biqu_b2_0.5.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = biqu_b2
+name = 0.5mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.5
+
diff --git a/resources/variants/biqu/biqu_b2_0.6.inst.cfg b/resources/variants/biqu/biqu_b2_0.6.inst.cfg
new file mode 100644
index 0000000000..0ac946844a
--- /dev/null
+++ b/resources/variants/biqu/biqu_b2_0.6.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = biqu_b2
+name = 0.6mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.6
+
diff --git a/resources/variants/biqu/biqu_b2_0.8.inst.cfg b/resources/variants/biqu/biqu_b2_0.8.inst.cfg
new file mode 100644
index 0000000000..53b6910342
--- /dev/null
+++ b/resources/variants/biqu/biqu_b2_0.8.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = biqu_b2
+name = 0.8mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.8
+
diff --git a/resources/variants/geeetech_variants/geeetech_M1S_0.2.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1S_0.2.inst.cfg
new file mode 100644
index 0000000000..2ed913b2a4
--- /dev/null
+++ b/resources/variants/geeetech_variants/geeetech_M1S_0.2.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = geeetech_M1S
+name = 0.2mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.2
+
diff --git a/resources/variants/geeetech_variants/geeetech_M1S_0.3.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1S_0.3.inst.cfg
new file mode 100644
index 0000000000..032e25592d
--- /dev/null
+++ b/resources/variants/geeetech_variants/geeetech_M1S_0.3.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = geeetech_M1S
+name = 0.3mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.3
+
diff --git a/resources/variants/geeetech_variants/geeetech_M1S_0.4.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1S_0.4.inst.cfg
new file mode 100644
index 0000000000..12306b7acc
--- /dev/null
+++ b/resources/variants/geeetech_variants/geeetech_M1S_0.4.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = geeetech_M1S
+name = 0.4mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.4
+
diff --git a/resources/variants/geeetech_variants/geeetech_M1S_0.5.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1S_0.5.inst.cfg
new file mode 100644
index 0000000000..59db9afec4
--- /dev/null
+++ b/resources/variants/geeetech_variants/geeetech_M1S_0.5.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = geeetech_M1S
+name = 0.5mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.5
+
diff --git a/resources/variants/geeetech_variants/geeetech_M1S_0.6.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1S_0.6.inst.cfg
new file mode 100644
index 0000000000..ee92dc8c93
--- /dev/null
+++ b/resources/variants/geeetech_variants/geeetech_M1S_0.6.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = geeetech_M1S
+name = 0.6mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.6
+
diff --git a/resources/variants/geeetech_variants/geeetech_M1S_0.8.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1S_0.8.inst.cfg
new file mode 100644
index 0000000000..0029d6101c
--- /dev/null
+++ b/resources/variants/geeetech_variants/geeetech_M1S_0.8.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = geeetech_M1S
+name = 0.8mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.8
+
diff --git a/resources/variants/geeetech_variants/geeetech_M1S_1.0.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1S_1.0.inst.cfg
new file mode 100644
index 0000000000..225b0b3c06
--- /dev/null
+++ b/resources/variants/geeetech_variants/geeetech_M1S_1.0.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = geeetech_M1S
+name = 1.0mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 1.0
+
diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.2.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.2.inst.cfg
new file mode 100644
index 0000000000..77bf14e06e
--- /dev/null
+++ b/resources/variants/geeetech_variants/geeetech_M1_0.2.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = geeetech_M1
+name = 0.2mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.2
+
diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.3.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.3.inst.cfg
new file mode 100644
index 0000000000..f9ecf2eec2
--- /dev/null
+++ b/resources/variants/geeetech_variants/geeetech_M1_0.3.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = geeetech_M1
+name = 0.3mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.3
+
diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.4.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.4.inst.cfg
new file mode 100644
index 0000000000..e3c124c614
--- /dev/null
+++ b/resources/variants/geeetech_variants/geeetech_M1_0.4.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = geeetech_M1
+name = 0.4mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.4
+
diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.5.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.5.inst.cfg
new file mode 100644
index 0000000000..5adccce2df
--- /dev/null
+++ b/resources/variants/geeetech_variants/geeetech_M1_0.5.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = geeetech_M1
+name = 0.5mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.5
+
diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.6.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.6.inst.cfg
new file mode 100644
index 0000000000..f61f2febc0
--- /dev/null
+++ b/resources/variants/geeetech_variants/geeetech_M1_0.6.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = geeetech_M1
+name = 0.6mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.6
+
diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.8.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.8.inst.cfg
new file mode 100644
index 0000000000..0677557124
--- /dev/null
+++ b/resources/variants/geeetech_variants/geeetech_M1_0.8.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = geeetech_M1
+name = 0.8mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 0.8
+
diff --git a/resources/variants/geeetech_variants/geeetech_M1_1.0.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_1.0.inst.cfg
new file mode 100644
index 0000000000..5df54b48df
--- /dev/null
+++ b/resources/variants/geeetech_variants/geeetech_M1_1.0.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = geeetech_M1
+name = 1.0mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 25
+type = variant
+
+[values]
+machine_nozzle_size = 1.0
+
diff --git a/resources/variants/ultimaker_s3_aa04.inst.cfg b/resources/variants/ultimaker_s3_aa04.inst.cfg
index 94d27e150b..e3f4aaff2b 100644
--- a/resources/variants/ultimaker_s3_aa04.inst.cfg
+++ b/resources/variants/ultimaker_s3_aa04.inst.cfg
@@ -12,6 +12,7 @@ type = variant
 brim_width = 7
 machine_nozzle_cool_down_speed = 0.9
 machine_nozzle_id = AA 0.4
+machine_nozzle_size = 0.4
 machine_nozzle_tip_outer_diameter = 1.0
 retraction_amount = 6.5
 speed_print = 70
diff --git a/resources/variants/ultimaker_s3_bb04.inst.cfg b/resources/variants/ultimaker_s3_bb04.inst.cfg
index 022b4f945c..7923a5a28e 100644
--- a/resources/variants/ultimaker_s3_bb04.inst.cfg
+++ b/resources/variants/ultimaker_s3_bb04.inst.cfg
@@ -15,6 +15,7 @@ acceleration_support_bottom = =math.ceil(acceleration_support_interface * 100 /
 acceleration_support_interface = =math.ceil(acceleration_support * 1500 / 2000)
 machine_nozzle_heat_up_speed = 1.5
 machine_nozzle_id = BB 0.4
+machine_nozzle_size = 0.4
 machine_nozzle_tip_outer_diameter = 1.0
 speed_prime_tower = =math.ceil(speed_print * 10 / 35)
 speed_support = =math.ceil(speed_print * 25 / 35)
diff --git a/resources/variants/ultimaker_s5_aa04.inst.cfg b/resources/variants/ultimaker_s5_aa04.inst.cfg
index ef846a089d..69aae0757e 100644
--- a/resources/variants/ultimaker_s5_aa04.inst.cfg
+++ b/resources/variants/ultimaker_s5_aa04.inst.cfg
@@ -12,6 +12,7 @@ type = variant
 brim_width = 7
 machine_nozzle_cool_down_speed = 0.9
 machine_nozzle_id = AA 0.4
+machine_nozzle_size = 0.4
 machine_nozzle_tip_outer_diameter = 1.0
 retraction_amount = 6.5
 speed_print = 70
diff --git a/resources/variants/ultimaker_s5_bb04.inst.cfg b/resources/variants/ultimaker_s5_bb04.inst.cfg
index ce287e127b..294b39b8c7 100644
--- a/resources/variants/ultimaker_s5_bb04.inst.cfg
+++ b/resources/variants/ultimaker_s5_bb04.inst.cfg
@@ -15,6 +15,7 @@ acceleration_support_bottom = =math.ceil(acceleration_support_interface * 100 /
 acceleration_support_interface = =math.ceil(acceleration_support * 1500 / 2000)
 machine_nozzle_heat_up_speed = 1.5
 machine_nozzle_id = BB 0.4
+machine_nozzle_size = 0.4
 machine_nozzle_tip_outer_diameter = 1.0
 speed_prime_tower = =math.ceil(speed_print * 10 / 35)
 speed_support = =math.ceil(speed_print * 25 / 35)
diff --git a/resources/variants/ultimaker_s7_aa04.inst.cfg b/resources/variants/ultimaker_s7_aa04.inst.cfg
index 7d5a08d117..ee4ebdceaf 100644
--- a/resources/variants/ultimaker_s7_aa04.inst.cfg
+++ b/resources/variants/ultimaker_s7_aa04.inst.cfg
@@ -12,6 +12,7 @@ type = variant
 brim_width = 7
 machine_nozzle_cool_down_speed = 0.9
 machine_nozzle_id = AA 0.4
+machine_nozzle_size = 0.4
 machine_nozzle_tip_outer_diameter = 1.0
 retraction_amount = 6.5
 speed_print = 70
diff --git a/resources/variants/ultimaker_s7_bb04.inst.cfg b/resources/variants/ultimaker_s7_bb04.inst.cfg
index 1bfa216167..18aa61ff4b 100644
--- a/resources/variants/ultimaker_s7_bb04.inst.cfg
+++ b/resources/variants/ultimaker_s7_bb04.inst.cfg
@@ -15,6 +15,7 @@ acceleration_support_bottom = =math.ceil(acceleration_support_interface * 100 /
 acceleration_support_interface = =math.ceil(acceleration_support * 1500 / 2000)
 machine_nozzle_heat_up_speed = 1.5
 machine_nozzle_id = BB 0.4
+machine_nozzle_size = 0.4
 machine_nozzle_tip_outer_diameter = 1.0
 retraction_amount = 4.5
 speed_prime_tower = =math.ceil(speed_print * 10 / 35)
diff --git a/resources/variants/ultimaker_s8_bb04.inst.cfg b/resources/variants/ultimaker_s8_bb04.inst.cfg
index 388ce27ec2..d92874e448 100644
--- a/resources/variants/ultimaker_s8_bb04.inst.cfg
+++ b/resources/variants/ultimaker_s8_bb04.inst.cfg
@@ -11,6 +11,7 @@ type = variant
 [values]
 machine_nozzle_heat_up_speed = 1.5
 machine_nozzle_id = BB 0.4
+machine_nozzle_size = 0.4
 machine_nozzle_tip_outer_diameter = 1.0
 retraction_amount = 4.5
 support_bottom_height = =layer_height * 2