diff --git a/Marlin/language.h b/Marlin/language.h
index 9e70814fb4e0142887956f9ae6eb848545d2d42b..ed94cc36ed0f1811ac95dfdf11f79a0ed8ae8e8c 100644
--- a/Marlin/language.h
+++ b/Marlin/language.h
@@ -77,8 +77,18 @@
 	#define MSG_AUTO_HOME "Auto home"
 	#define MSG_SET_ORIGIN "Set origin"
 	#define MSG_PREHEAT_PLA "Preheat PLA"
+	#define MSG_PREHEAT_PLA0 "Preheat PLA 1"
+	#define MSG_PREHEAT_PLA1 "Preheat PLA 2"
+	#define MSG_PREHEAT_PLA2 "Preheat PLA 3"
+	#define MSG_PREHEAT_PLA012 "Preheat PLA All"
+	#define MSG_PREHEAT_PLA_BEDONLY "Preheat PLA Bed"
 	#define MSG_PREHEAT_PLA_SETTINGS "Preheat PLA conf"
 	#define MSG_PREHEAT_ABS "Preheat ABS"
+	#define MSG_PREHEAT_ABS0 "Preheat ABS 1"
+	#define MSG_PREHEAT_ABS1 "Preheat ABS 2"
+	#define MSG_PREHEAT_ABS2 "Preheat ABS 3"
+	#define MSG_PREHEAT_ABS012 "Preheat ABS All"
+	#define MSG_PREHEAT_ABS_BEDONLY "Preheat ABS Bed"
 	#define MSG_PREHEAT_ABS_SETTINGS "Preheat ABS conf"
 	#define MSG_COOLDOWN "Cooldown"
 	#define MSG_SWITCH_PS_ON "Switch power on"
@@ -251,7 +261,6 @@
 
 #if LANGUAGE_CHOICE == 2
 
-
 // LCD Menu Messages
 // Please note these are limited to 17 characters!
 
@@ -264,8 +273,18 @@
 	#define MSG_AUTO_HOME "Auto. poz. zerowa"
 	#define MSG_SET_ORIGIN "Ustaw punkt zero"
 	#define MSG_PREHEAT_PLA "Rozgrzej PLA"
+	#define MSG_PREHEAT_PLA0 "Rozgrzej PLA 1"
+	#define MSG_PREHEAT_PLA1 "Rozgrzej PLA 2"
+	#define MSG_PREHEAT_PLA2 "Rozgrzej PLA 3"
+	#define MSG_PREHEAT_PLA012 "Roz. PLA Wszystko"
+	#define MSG_PREHEAT_PLA_BEDONLY "Rozgrzej PLA Loze"
 	#define MSG_PREHEAT_PLA_SETTINGS "Ustaw. rozg. PLA"
 	#define MSG_PREHEAT_ABS "Rozgrzej ABS"
+	#define MSG_PREHEAT_ABS0 "Rozgrzej ABS 1"
+	#define MSG_PREHEAT_ABS1 "Rozgrzej ABS 2"
+	#define MSG_PREHEAT_ABS2 "Rozgrzej ABS 3"
+	#define MSG_PREHEAT_ABS012 "Roz. ABS Wszystko"
+	#define MSG_PREHEAT_ABS_BEDONLY "Rozgrzej ABS Loze"
 	#define MSG_PREHEAT_ABS_SETTINGS "Ustaw. rozg. ABS"
 	#define MSG_COOLDOWN "Chlodzenie"
 	#define MSG_SWITCH_PS_ON "Wlacz zasilacz"
@@ -453,8 +472,18 @@
 	#define MSG_AUTO_HOME "Home auto."
 	#define MSG_SET_ORIGIN "Regler origine"
 	#define MSG_PREHEAT_PLA " Prechauffage PLA"
-	#define MSG_PREHEAT_PLA_SETTINGS " Regl. prech. PLA"
+	#define MSG_PREHEAT_PLA0 "Prechauff. PLA 1"
+        #define MSG_PREHEAT_PLA1 "Prechauff. PLA 2"
+	#define MSG_PREHEAT_PLA2 "Prechauff. PLA 3"
+	#define MSG_PREHEAT_PLA012 "Prech. PLA Tout"
+	#define MSG_PREHEAT_PLA_BEDONLY "Prech. PLA Plateau"
+	#define MSG_PREHEAT_PLA_SETTINGS "Regl. prech. PLA"
 	#define MSG_PREHEAT_ABS "Prechauffage ABS"
+	#define MSG_PREHEAT_ABS0 "Prechauff. ABS 1"
+	#define MSG_PREHEAT_ABS1 "Prechauff. ABS 2"
+	#define MSG_PREHEAT_ABS2 "Prechauff. ABS 3"
+	#define MSG_PREHEAT_ABS012 "Prech. ABS Tout"
+	#define MSG_PREHEAT_ABS_BEDONLY "Prech. ABS Plateau"
 	#define MSG_PREHEAT_ABS_SETTINGS "Regl. prech. ABS"
 	#define MSG_COOLDOWN "Refroidir"
 	#define MSG_SWITCH_PS_ON "Allumer alim."
@@ -643,8 +672,18 @@
 	#define MSG_AUTO_HOME        "Auto Nullpunkt"
 	#define MSG_SET_ORIGIN       "Setze Nullpunkt"
 	#define MSG_PREHEAT_PLA      "Vorwärmen PLA"
+	#define MSG_PREHEAT_PLA0     "Vorwärmen PLA 1"
+	#define MSG_PREHEAT_PLA1     "Vorwärmen PLA 2"
+	#define MSG_PREHEAT_PLA2     "Vorwärmen PLA 3"
+	#define MSG_PREHEAT_PLA012   "Vorw. PLA Alle"
+	#define MSG_PREHEAT_PLA_BEDONLY "Vorw. PLA Bett"
 	#define MSG_PREHEAT_PLA_SETTINGS "Vorwärm. PLA Ein."
 	#define MSG_PREHEAT_ABS      "Vorwärmen ABS"
+	#define MSG_PREHEAT_ABS0     "Vorwärmen ABS 1"
+	#define MSG_PREHEAT_ABS1     "Vorwärmen ABS 2"
+	#define MSG_PREHEAT_ABS2     "Vorwärmen ABS 3"
+	#define MSG_PREHEAT_ABS012   "Vorw. ABS Alle"
+	#define MSG_PREHEAT_ABS_BEDONLY "Vorw. ABS Bett"
 	#define MSG_PREHEAT_ABS_SETTINGS "Vorwärm. ABS Ein."
 	#define MSG_COOLDOWN         "Abkühlen"
 	#define MSG_SWITCH_PS_ON     "Switch Power On"
@@ -832,8 +871,18 @@
 	#define MSG_AUTO_HOME "Llevar al origen"
 	#define MSG_SET_ORIGIN "Establecer cero"
 	#define MSG_PREHEAT_PLA "Precalentar PLA"
+	#define MSG_PREHEAT_PLA0 "Precalentar PLA 1"
+	#define MSG_PREHEAT_PLA1 "Precalentar PLA 2"
+	#define MSG_PREHEAT_PLA2 "Precalentar PLA 3"
+	#define MSG_PREHEAT_PLA012 "Precal. PLA Todo"
+	#define MSG_PREHEAT_PLA_BEDONLY "Precal. PLA Base"
 	#define MSG_PREHEAT_PLA_SETTINGS "Ajustar temp. PLA"
 	#define MSG_PREHEAT_ABS "Precalentar ABS"
+	#define MSG_PREHEAT_ABS0 "Precalentar ABS 1"
+	#define MSG_PREHEAT_ABS1 "Precalentar ABS 2"
+	#define MSG_PREHEAT_ABS2 "Precalentar ABS 3"
+	#define MSG_PREHEAT_ABS012 "Precal. ABS Todo"
+	#define MSG_PREHEAT_ABS_BEDONLY "Precal. ABS Base"
 	#define MSG_PREHEAT_ABS_SETTINGS "Ajustar temp. ABS"
 	#define MSG_COOLDOWN "Enfriar"
 	#define MSG_SWITCH_PS_ON "Switch Power On"
@@ -1017,17 +1066,27 @@
 // LCD Menu Messages
 // Please note these are limited to 17 characters!
 
-	#define WELCOME_MSG MACHINE_NAME			" Готов."
+	#define WELCOME_MSG MACHINE_NAME			        "Готов."
 	#define MSG_SD_INSERTED						"Карта вставлена"
 	#define MSG_SD_REMOVED						"Карта извлечена"
-	#define MSG_MAIN							"Меню            \003"
+	#define MSG_MAIN							"Меню \003"
 	#define MSG_AUTOSTART						"Автостарт"
 	#define MSG_DISABLE_STEPPERS 				"Выкл. двигатели"
 	#define MSG_AUTO_HOME						"Парковка"
 	#define MSG_SET_ORIGIN						"Запомнить ноль"
 	#define MSG_PREHEAT_PLA 					"Преднагрев PLA"
+	#define MSG_PREHEAT_PLA0					"Преднагрев PLA0"
+	#define MSG_PREHEAT_PLA1					"Преднагрев PLA1"
+	#define MSG_PREHEAT_PLA2					"Преднагрев PLA2"
+	#define MSG_PREHEAT_PLA012 					"Преднаг. PLA все"
+	#define MSG_PREHEAT_PLA_BEDONLY 			"Пред. PLA Кровать"
 	#define MSG_PREHEAT_PLA_SETTINGS  			"Настройки PLA"
 	#define MSG_PREHEAT_ABS						"Преднагрев ABS"
+	#define MSG_PREHEAT_ABS0					"Преднагрев ABS0"
+	#define MSG_PREHEAT_ABS1					"Преднагрев ABS1"
+	#define MSG_PREHEAT_ABS2					"Преднагрев ABS2"
+	#define MSG_PREHEAT_ABS012 					"Преднаг. ABS все "
+	#define MSG_PREHEAT_ABS_BEDONLY 			"Пред. ABS Кровать"
 	#define MSG_PREHEAT_ABS_SETTINGS  			"Настройки ABS"
 	#define MSG_COOLDOWN						"Охлаждение"
 	#define MSG_SWITCH_PS_ON					"Switch Power On"
@@ -1091,8 +1150,8 @@
 	#define MSG_WATCH							"Обзор           \003"
 	#define MSG_PREPARE							"Действия        \x7E"
 	#define MSG_TUNE							"Настройки       \x7E"
-	#define MSG_RESUME_PRINT  					"Продолжить печать"
-	#define MSG_RESUME_PRINT					"Продолжить печать"
+	#define MSG_PAUSE_PRINT  					"Продолжить печать"
+	#define MSG_RESUME_PRINT					"возобн. печать"
 	#define MSG_STOP_PRINT 						"Остановить печать"
 	#define MSG_CARD_MENU						"Меню карты      \x7E"
 	#define MSG_NO_CARD							"Нет карты"
@@ -1211,8 +1270,18 @@
 	#define MSG_AUTO_HOME            "Auto Home"
 	#define MSG_SET_ORIGIN           "Imposta Origine"
 	#define MSG_PREHEAT_PLA          "Preriscalda PLA"
+	#define MSG_PREHEAT_PLA0         "Preriscalda PLA 1"
+	#define MSG_PREHEAT_PLA1         "Preriscalda PLA 2"
+	#define MSG_PREHEAT_PLA2         "Preriscalda PLA 3"
+	#define MSG_PREHEAT_PLA012       "Preris. PLA Tutto"
+	#define MSG_PREHEAT_PLA_BEDONLY  "Preri. PLA Piatto"
 	#define MSG_PREHEAT_PLA_SETTINGS "Preris. PLA Conf"
 	#define MSG_PREHEAT_ABS          "Preriscalda ABS"
+	#define MSG_PREHEAT_ABS0         "Preriscalda ABS 1"
+	#define MSG_PREHEAT_ABS1         "Preriscalda ABS 2"
+	#define MSG_PREHEAT_ABS2         "Preriscalda ABS 3"
+	#define MSG_PREHEAT_ABS012       "Preris. ABS Tutto"
+	#define MSG_PREHEAT_ABS_BEDONLY  "Preri. ABS Piatto"
 	#define MSG_PREHEAT_ABS_SETTINGS "Preris. ABS Conf"
 	#define MSG_COOLDOWN             "Raffredda"
 	#define MSG_SWITCH_PS_ON         "Switch Power On"
@@ -1398,8 +1467,18 @@
 	#define MSG_AUTO_HOME "Ir para origen"
 	#define MSG_SET_ORIGIN "Estabelecer orig."
 	#define MSG_PREHEAT_PLA "Pre-aquecer PLA"
+	#define MSG_PREHEAT_PLA0 " pre-aquecer PLA 1"
+	#define MSG_PREHEAT_PLA1 " pre-aquecer PLA 2"
+	#define MSG_PREHEAT_PLA2 " pre-aquecer PLA 3"
+	#define MSG_PREHEAT_PLA012 " pre-aq. PLA Tudo"
+	#define MSG_PREHEAT_PLA_BEDONLY  " pre-aq. PLA \002Base"
 	#define MSG_PREHEAT_PLA_SETTINGS "PLA setting"
 	#define MSG_PREHEAT_ABS "Pre-aquecer ABS"
+	#define MSG_PREHEAT_ABS0 " pre-aquecer ABS 1"
+	#define MSG_PREHEAT_ABS1 " pre-aquecer ABS 2"
+	#define MSG_PREHEAT_ABS2 " pre-aquecer ABS 3"
+	#define MSG_PREHEAT_ABS012 " pre-aq. ABS Tudo"
+	#define MSG_PREHEAT_ABS_BEDONLY  " pre-aq. ABS \002Base"
 	#define MSG_PREHEAT_ABS_SETTINGS "ABS setting"
 	#define MSG_COOLDOWN "Esfriar"
 	#define MSG_SWITCH_PS_ON "Switch Power On"
@@ -1592,8 +1671,18 @@
 	#define MSG_AUTO_HOME "Aja referenssiin"
 	#define MSG_SET_ORIGIN "Aseta origo"
 	#define MSG_PREHEAT_PLA "Esilammita PLA"
+	#define MSG_PREHEAT_PLA0 "Esilammita PLA 1"
+	#define MSG_PREHEAT_PLA1 "Esilammita PLA 2"
+	#define MSG_PREHEAT_PLA2 "Esilammita PLA 3"
+	#define MSG_PREHEAT_PLA012 "Esila. PLA Kaikki"
+	#define MSG_PREHEAT_PLA_BEDONLY  "Esila. PLA Alusta"
 	#define MSG_PREHEAT_PLA_SETTINGS "Esilamm. PLA konf"
 	#define MSG_PREHEAT_ABS "Esilammita ABS"
+	#define MSG_PREHEAT_ABS0 "Esilammita ABS 1"
+	#define MSG_PREHEAT_ABS1 "Esilammita ABS 2"
+	#define MSG_PREHEAT_ABS2 "Esilammita ABS 3"
+	#define MSG_PREHEAT_ABS012 "Esila. ABS Kaikki"
+	#define MSG_PREHEAT_ABS_BEDONLY  "Esila. ABS Alusta"
 	#define MSG_PREHEAT_ABS_SETTINGS "Esilamm. ABS konf"
 	#define MSG_COOLDOWN "Jaahdyta"
 	#define MSG_SWITCH_PS_ON "Virta paalle"
@@ -1779,8 +1868,18 @@
 	#define MSG_AUTO_HOME "Levar a l'orichen"
 	#define MSG_SET_ORIGIN "Establir zero"
 	#define MSG_PREHEAT_PLA "Precalentar PLA"
+	#define MSG_PREHEAT_PLA0 "Precalentar PLA0"
+	#define MSG_PREHEAT_PLA1 "Precalentar PLA1"
+	#define MSG_PREHEAT_PLA2 "Precalentar PLA2"
+	#define MSG_PREHEAT_PLA012 "Precalentar PLA a"
+	#define MSG_PREHEAT_PLA_BEDONLY  "Prec. PLA Base"
 	#define MSG_PREHEAT_PLA_SETTINGS "Achustar tem. PLA"
 	#define MSG_PREHEAT_ABS "Precalentar ABS"
+	#define MSG_PREHEAT_ABS0 "Precalentar ABS0"
+	#define MSG_PREHEAT_ABS1 "Precalentar ABS1"
+	#define MSG_PREHEAT_ABS2 "Precalentar ABS2"
+	#define MSG_PREHEAT_ABS012 "Precalentar ABS a"
+	#define MSG_PREHEAT_ABS_BEDONLY  "Prec. ABS Base"
 	#define MSG_PREHEAT_ABS_SETTINGS "Achustar tem. ABS"
 	#define MSG_COOLDOWN "Enfriar"
 	#define MSG_SWITCH_PS_ON "Enchegar Fuent"
@@ -1972,8 +2071,18 @@
 	#define MSG_AUTO_HOME "Auto home"
 	#define MSG_SET_ORIGIN "Nulpunt instellen"
 	#define MSG_PREHEAT_PLA "PLA voorverwarmen"
+	#define MSG_PREHEAT_PLA0 "PLA voorverw. 0"
+	#define MSG_PREHEAT_PLA1 "PLA voorverw. 1"
+	#define MSG_PREHEAT_PLA2 "PLA voorverw. 2"
+	#define MSG_PREHEAT_PLA012 "PLA voorverw. aan"
+	#define MSG_PREHEAT_PLA_BEDONLY  "PLA voorverw. Bed"
 	#define MSG_PREHEAT_PLA_SETTINGS "PLA verw. conf"
 	#define MSG_PREHEAT_ABS "ABS voorverwarmen"
+	#define MSG_PREHEAT_ABS0 "ABS voorverw. 0"
+	#define MSG_PREHEAT_ABS1 "ABS voorverw. 1"
+	#define MSG_PREHEAT_ABS2 "ABS voorverw. 2"
+	#define MSG_PREHEAT_ABS012 "ABS voorverw. aan"
+	#define MSG_PREHEAT_ABS_BEDONLY  "ABS voorverw. Bed"
 	#define MSG_PREHEAT_ABS_SETTINGS "ABS verw. conf"
 	#define MSG_COOLDOWN "Afkoelen"
 	#define MSG_SWITCH_PS_ON "Stroom aan"
@@ -1995,6 +2104,9 @@
 	#define MSG_BED "Bed"
 	#define MSG_FAN_SPEED "Fan snelheid"
 	#define MSG_FLOW "Flow"
+	#define MSG_FLOW0 "Flow 0"
+	#define MSG_FLOW1 "Flow 1"
+	#define MSG_FLOW2 "Flow 2"
 	#define MSG_CONTROL "Control"
 	#define MSG_MIN " \002 Min"
 	#define MSG_MAX " \002 Max"
@@ -2087,6 +2199,7 @@
 	#define MSG_M105_INVALID_EXTRUDER "M105 Ongeldige extruder "
 	#define MSG_M200_INVALID_EXTRUDER "M200 Ongeldige extruder "
 	#define MSG_M218_INVALID_EXTRUDER "M218 Ongeldige extruder "
+	#define MSG_M221_INVALID_EXTRUDER "M221 Ongeldige extruder "
 	#define MSG_ERR_NO_THERMISTORS "Geen thermistors - geen temperatuur"
 	#define MSG_M109_INVALID_EXTRUDER "M109 Ongeldige extruder "
 	#define MSG_HEATING "Opwarmen..."
diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp
index 4c8df66deb8b37a0cb28c0c131f9f2d4edc33a50..8ae977d2112ba48e9781710da3be2a68646541bd 100644
--- a/Marlin/ultralcd.cpp
+++ b/Marlin/ultralcd.cpp
@@ -304,37 +304,6 @@ static void lcd_autostart_sd()
 }
 #endif
 
-void lcd_preheat_pla()
-{
-    setTargetHotend0(plaPreheatHotendTemp);
-    setTargetHotend1(plaPreheatHotendTemp);
-    setTargetHotend2(plaPreheatHotendTemp);
-    setTargetBed(plaPreheatHPBTemp);
-    fanSpeed = plaPreheatFanSpeed;
-    lcd_return_to_status();
-    setWatch(); // heater sanity check timer
-}
-
-void lcd_preheat_abs()
-{
-    setTargetHotend0(absPreheatHotendTemp);
-    setTargetHotend1(absPreheatHotendTemp);
-    setTargetHotend2(absPreheatHotendTemp);
-    setTargetBed(absPreheatHPBTemp);
-    fanSpeed = absPreheatFanSpeed;
-    lcd_return_to_status();
-    setWatch(); // heater sanity check timer
-}
-
-static void lcd_cooldown()
-{
-    setTargetHotend0(0);
-    setTargetHotend1(0);
-    setTargetHotend2(0);
-    setTargetBed(0);
-    lcd_return_to_status();
-}
-
 #ifdef BABYSTEPPING
 static void lcd_babystep_x()
 {
@@ -435,6 +404,154 @@ static void lcd_tune_menu()
     END_MENU();
 }
 
+void lcd_preheat_pla0()
+{
+    setTargetHotend0(plaPreheatHotendTemp);
+    setTargetBed(plaPreheatHPBTemp);
+    fanSpeed = plaPreheatFanSpeed;
+    lcd_return_to_status();
+    setWatch(); // heater sanity check timer
+}
+
+void lcd_preheat_abs0()
+{
+    setTargetHotend0(absPreheatHotendTemp);
+    setTargetBed(absPreheatHPBTemp);
+    fanSpeed = absPreheatFanSpeed;
+    lcd_return_to_status();
+    setWatch(); // heater sanity check timer
+}
+
+#if TEMP_SENSOR_1 != 0 //2nd extruder preheat
+void lcd_preheat_pla1()
+{
+    setTargetHotend1(plaPreheatHotendTemp);
+    setTargetBed(plaPreheatHPBTemp);
+    fanSpeed = plaPreheatFanSpeed;
+    lcd_return_to_status();
+    setWatch(); // heater sanity check timer
+}
+
+void lcd_preheat_abs1()
+{
+    setTargetHotend1(absPreheatHotendTemp);
+    setTargetBed(absPreheatHPBTemp);
+    fanSpeed = absPreheatFanSpeed;
+    lcd_return_to_status();
+    setWatch(); // heater sanity check timer
+}
+#endif //2nd extruder preheat
+
+#if TEMP_SENSOR_2 != 0 //3 extruder preheat
+void lcd_preheat_pla2()
+{
+    setTargetHotend2(plaPreheatHotendTemp);
+    setTargetBed(plaPreheatHPBTemp);
+    fanSpeed = plaPreheatFanSpeed;
+    lcd_return_to_status();
+    setWatch(); // heater sanity check timer
+}
+
+void lcd_preheat_abs2()
+{
+    setTargetHotend2(absPreheatHotendTemp);
+    setTargetBed(absPreheatHPBTemp);
+    fanSpeed = absPreheatFanSpeed;
+    lcd_return_to_status();
+    setWatch(); // heater sanity check timer
+}
+#endif //3 extruder preheat
+
+#if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 //more than one extruder present
+void lcd_preheat_pla012()
+{
+    setTargetHotend0(plaPreheatHotendTemp);
+    setTargetHotend1(plaPreheatHotendTemp);
+    setTargetHotend2(plaPreheatHotendTemp);
+    setTargetBed(plaPreheatHPBTemp);
+    fanSpeed = plaPreheatFanSpeed;
+    lcd_return_to_status();
+    setWatch(); // heater sanity check timer
+}
+
+void lcd_preheat_abs012()
+{
+    setTargetHotend0(absPreheatHotendTemp);
+    setTargetHotend1(absPreheatHotendTemp);
+    setTargetHotend2(absPreheatHotendTemp);
+    setTargetBed(absPreheatHPBTemp);
+    fanSpeed = absPreheatFanSpeed;
+    lcd_return_to_status();
+    setWatch(); // heater sanity check timer
+}
+#endif //more than one extruder present
+
+void lcd_preheat_pla_bedonly()
+{
+    setTargetBed(plaPreheatHPBTemp);
+    fanSpeed = plaPreheatFanSpeed;
+    lcd_return_to_status();
+    setWatch(); // heater sanity check timer
+}
+
+void lcd_preheat_abs_bedonly()
+{
+    setTargetBed(absPreheatHPBTemp);
+    fanSpeed = absPreheatFanSpeed;
+    lcd_return_to_status();
+    setWatch(); // heater sanity check timer
+}
+
+static void lcd_preheat_pla_menu()
+{
+    START_MENU();
+    MENU_ITEM(back, MSG_PREPARE, lcd_prepare_menu);
+    MENU_ITEM(function, MSG_PREHEAT_PLA0, lcd_preheat_pla0);
+#if TEMP_SENSOR_1 != 0 //2 extruder preheat
+    MENU_ITEM(function, MSG_PREHEAT_PLA1, lcd_preheat_pla1);
+#endif //2 extruder preheat
+#if TEMP_SENSOR_2 != 0 //3 extruder preheat
+    MENU_ITEM(function, MSG_PREHEAT_PLA2, lcd_preheat_pla2);
+#endif //3 extruder preheat
+#if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 //all extruder preheat
+    MENU_ITEM(function, MSG_PREHEAT_PLA012, lcd_preheat_pla012);
+#endif //2 extruder preheat
+#if TEMP_SENSOR_BED != 0
+    MENU_ITEM(function, MSG_PREHEAT_PLA_BEDONLY, lcd_preheat_pla_bedonly);
+#endif
+    END_MENU();
+}
+
+static void lcd_preheat_abs_menu()
+{
+    START_MENU();
+    MENU_ITEM(back, MSG_PREPARE, lcd_prepare_menu);
+    MENU_ITEM(function, MSG_PREHEAT_ABS0, lcd_preheat_abs0);
+#if TEMP_SENSOR_1 != 0 //2 extruder preheat
+    MENU_ITEM(function, MSG_PREHEAT_ABS1, lcd_preheat_abs1);
+#endif //2 extruder preheat
+#if TEMP_SENSOR_2 != 0 //3 extruder preheat
+    MENU_ITEM(function, MSG_PREHEAT_ABS2, lcd_preheat_abs2);
+#endif //3 extruder preheat
+#if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 //all extruder preheat
+    MENU_ITEM(function, MSG_PREHEAT_ABS012, lcd_preheat_abs012);
+#endif //2 extruder preheat
+#if TEMP_SENSOR_BED != 0
+    MENU_ITEM(function, MSG_PREHEAT_ABS_BEDONLY, lcd_preheat_abs_bedonly);
+#endif
+    END_MENU();
+}
+
+void lcd_cooldown()
+{
+    setTargetHotend0(0);
+    setTargetHotend1(0);
+    setTargetHotend2(0);
+    setTargetBed(0);
+    fanSpeed = 0;
+    lcd_return_to_status();
+}
+
 static void lcd_prepare_menu()
 {
     START_MENU();
@@ -447,8 +564,15 @@ static void lcd_prepare_menu()
     MENU_ITEM(gcode, MSG_DISABLE_STEPPERS, PSTR("M84"));
     MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28"));
     //MENU_ITEM(gcode, MSG_SET_ORIGIN, PSTR("G92 X0 Y0 Z0"));
-    MENU_ITEM(function, MSG_PREHEAT_PLA, lcd_preheat_pla);
-    MENU_ITEM(function, MSG_PREHEAT_ABS, lcd_preheat_abs);
+#if TEMP_SENSOR_0 != 0
+  #if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_BED != 0
+    MENU_ITEM(submenu, MSG_PREHEAT_PLA, lcd_preheat_pla_menu);
+    MENU_ITEM(submenu, MSG_PREHEAT_ABS, lcd_preheat_abs_menu);
+  #else
+    MENU_ITEM(function, MSG_PREHEAT_PLA, lcd_preheat_pla0);
+    MENU_ITEM(function, MSG_PREHEAT_ABS, lcd_preheat_abs0);
+  #endif
+#endif
     MENU_ITEM(function, MSG_COOLDOWN, lcd_cooldown);
 #if PS_ON_PIN > -1
     if (powersupply)