From cc30f910eba71efc522f72d03c8249d2ca86d934 Mon Sep 17 00:00:00 2001
From: PavelSindler <sindlerpa@gmail.com>
Date: Wed, 25 Jan 2017 18:54:54 +0100
Subject: [PATCH] Messages in Italian language corrected; added message when
 unloading filament; "yes", color is clear is default when loading filament

---
 Firmware/ConfigurationStore.cpp |   4 +-
 Firmware/Marlin_main.cpp        |  16 ++---
 Firmware/language_all.cpp       |  44 ++++++++-----
 Firmware/language_all.h         |   2 +
 Firmware/language_cz.h          |   7 ++-
 Firmware/language_en.h          |   4 +-
 Firmware/language_es.h          |   3 +-
 Firmware/language_it.h          |  23 +++----
 Firmware/language_pl.h          |   3 +-
 Firmware/ultralcd.cpp           | 107 ++++++++++++++++++--------------
 Firmware/ultralcd.h             |   2 +-
 11 files changed, 124 insertions(+), 91 deletions(-)

diff --git a/Firmware/ConfigurationStore.cpp b/Firmware/ConfigurationStore.cpp
index 7535d77c..7c900bd4 100644
--- a/Firmware/ConfigurationStore.cpp
+++ b/Firmware/ConfigurationStore.cpp
@@ -275,8 +275,8 @@ void Config_RetrieveSettings()
         EEPROM_READ_VAR(i,minsegmenttime);
         EEPROM_READ_VAR(i,max_jerk[X_AXIS]);
         EEPROM_READ_VAR(i,max_jerk[Y_AXIS]);
-	EEPROM_READ_VAR(i,max_jerk[Z_AXIS]);
-	EEPROM_READ_VAR(i,max_jerk[E_AXIS]);
+		EEPROM_READ_VAR(i,max_jerk[Z_AXIS]);
+		EEPROM_READ_VAR(i,max_jerk[E_AXIS]);
         EEPROM_READ_VAR(i,add_homing);
         #ifndef ULTIPANEL
         int plaPreheatHotendTemp, plaPreheatHPBTemp, plaPreheatFanSpeed;
diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp
index 4d666109..fde5e639 100644
--- a/Firmware/Marlin_main.cpp
+++ b/Firmware/Marlin_main.cpp
@@ -5078,7 +5078,7 @@ case 404:  //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
 		st_synchronize();
 
 		if (!farm_mode && loading_flag) {
-			bool clean = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_FILAMENT_CLEAN);
+			bool clean = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_FILAMENT_CLEAN, false, true);
 
 			while (!clean) {
 				lcd_update_enable(true);
@@ -5086,7 +5086,7 @@ case 404:  //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
 				current_position[E_AXIS] += 40;
 				plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 100 / 60, active_extruder); //slow sequence
 				st_synchronize();
-				clean = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_FILAMENT_CLEAN);
+				clean = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_FILAMENT_CLEAN, false, true);
 			}
 		}
 		lcd_update_enable(true);
@@ -5100,15 +5100,17 @@ case 404:  //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
 	break;
 	case 702:
 	{
-		/*custom_message = true;
+		custom_message = true;
 		custom_message_type = 2;
-		lcd_setstatuspgm(MSG_UNLOADING_FILAMENT); //need to be tranlated to other languages
-		*/
+		lcd_setstatuspgm(MSG_UNLOADING_FILAMENT); //need to be tranlated to spanish language
+		
 		current_position[E_AXIS] -= 80;
 		plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 7000 / 60, active_extruder);
-		/*custom_message = false;
+		st_synchronize();
+		lcd_setstatuspgm(WELCOME_MSG);
+		custom_message = false;
 		custom_message_type = 0;
-		*/
+		
 	}
 	break;
 
diff --git a/Firmware/language_all.cpp b/Firmware/language_all.cpp
index 3f1c5b5f..e94a3dd3 100644
--- a/Firmware/language_all.cpp
+++ b/Firmware/language_all.cpp
@@ -197,7 +197,7 @@ const char * const MSG_BED_DONE_LANG_TABLE[LANG_NUM] PROGMEM = {
 
 const char MSG_BED_HEATING_EN[] PROGMEM = "Bed Heating";
 const char MSG_BED_HEATING_CZ[] PROGMEM = "Zahrivani bed";
-const char MSG_BED_HEATING_IT[] PROGMEM = "Piatto riscaldam.";
+const char MSG_BED_HEATING_IT[] PROGMEM = "Riscald. letto";
 const char MSG_BED_HEATING_ES[] PROGMEM = "Base Calentando";
 const char MSG_BED_HEATING_PL[] PROGMEM = "Grzanie stolika..";
 const char * const MSG_BED_HEATING_LANG_TABLE[LANG_NUM] PROGMEM = {
@@ -465,7 +465,7 @@ const char * const MSG_CHANGE_EXTR_LANG_TABLE[LANG_NUM] PROGMEM = {
 
 const char MSG_CHANGE_SUCCESS_EN[] PROGMEM = "Change success!";
 const char MSG_CHANGE_SUCCESS_CZ[] PROGMEM = "Zmena uspesna!";
-const char MSG_CHANGE_SUCCESS_IT[] PROGMEM = "Cambia. riuscito!";
+const char MSG_CHANGE_SUCCESS_IT[] PROGMEM = "Cambio riuscito!";
 const char MSG_CHANGE_SUCCESS_ES[] PROGMEM = "Cambiar bien!";
 const char MSG_CHANGE_SUCCESS_PL[] PROGMEM = "Wymiana ok!";
 const char * const MSG_CHANGE_SUCCESS_LANG_TABLE[LANG_NUM] PROGMEM = {
@@ -478,7 +478,7 @@ const char * const MSG_CHANGE_SUCCESS_LANG_TABLE[LANG_NUM] PROGMEM = {
 
 const char MSG_CHANGING_FILAMENT_EN[] PROGMEM = "Changing filament!";
 const char MSG_CHANGING_FILAMENT_CZ[] PROGMEM = "Vymena filamentu!";
-const char MSG_CHANGING_FILAMENT_IT[] PROGMEM = "Mutevole fil.!";
+const char MSG_CHANGING_FILAMENT_IT[] PROGMEM = "Cambiando filam.";
 const char MSG_CHANGING_FILAMENT_ES[] PROGMEM = "Cambiando fil.!";
 const char MSG_CHANGING_FILAMENT_PL[] PROGMEM = "Wymiana filamentu";
 const char * const MSG_CHANGING_FILAMENT_LANG_TABLE[LANG_NUM] PROGMEM = {
@@ -633,11 +633,12 @@ const char * const MSG_END_FILE_LIST_LANG_TABLE[1] PROGMEM = {
 
 const char MSG_ERROR_EN[] PROGMEM = "ERROR:";
 const char MSG_ERROR_CZ[] PROGMEM = "CHYBA:";
+const char MSG_ERROR_IT[] PROGMEM = "ERRORE:";
 const char MSG_ERROR_PL[] PROGMEM = "BLAD:";
 const char * const MSG_ERROR_LANG_TABLE[LANG_NUM] PROGMEM = {
 	MSG_ERROR_EN,
 	MSG_ERROR_CZ,
-	MSG_ERROR_EN,
+	MSG_ERROR_IT,
 	MSG_ERROR_EN,
 	MSG_ERROR_PL
 };
@@ -947,7 +948,7 @@ const char * const MSG_HEATING_LANG_TABLE[LANG_NUM] PROGMEM = {
 
 const char MSG_HEATING_COMPLETE_EN[] PROGMEM = "Heating done.";
 const char MSG_HEATING_COMPLETE_CZ[] PROGMEM = "Zahrivani OK.";
-const char MSG_HEATING_COMPLETE_IT[] PROGMEM = "Riscaldamento fatto.";
+const char MSG_HEATING_COMPLETE_IT[] PROGMEM = "Riscald. completo";
 const char MSG_HEATING_COMPLETE_ES[] PROGMEM = "Calentando listo.";
 const char MSG_HEATING_COMPLETE_PL[] PROGMEM = "Grzanie OK.";
 const char * const MSG_HEATING_COMPLETE_LANG_TABLE[LANG_NUM] PROGMEM = {
@@ -1090,7 +1091,7 @@ const char * const MSG_LANGUAGE_SELECT_LANG_TABLE[LANG_NUM] PROGMEM = {
 
 const char MSG_LOADING_COLOR_EN[] PROGMEM = "Loading color";
 const char MSG_LOADING_COLOR_CZ[] PROGMEM = "Cisteni barvy";
-const char MSG_LOADING_COLOR_IT[] PROGMEM = "Cargando color";
+const char MSG_LOADING_COLOR_IT[] PROGMEM = "Caricando colore";
 const char MSG_LOADING_COLOR_ES[] PROGMEM = "Cargando color";
 const char MSG_LOADING_COLOR_PL[] PROGMEM = "Czyszcz. koloru";
 const char * const MSG_LOADING_COLOR_LANG_TABLE[LANG_NUM] PROGMEM = {
@@ -1103,7 +1104,7 @@ const char * const MSG_LOADING_COLOR_LANG_TABLE[LANG_NUM] PROGMEM = {
 
 const char MSG_LOADING_FILAMENT_EN[] PROGMEM = "Loading filament";
 const char MSG_LOADING_FILAMENT_CZ[] PROGMEM = "Zavadeni filamentu";
-const char MSG_LOADING_FILAMENT_IT[] PROGMEM = "Cargando fil.";
+const char MSG_LOADING_FILAMENT_IT[] PROGMEM = "Caricando filam.";
 const char MSG_LOADING_FILAMENT_ES[] PROGMEM = "Cargando fil.";
 const char MSG_LOADING_FILAMENT_PL[] PROGMEM = "Wprow. filamentu";
 const char * const MSG_LOADING_FILAMENT_LANG_TABLE[LANG_NUM] PROGMEM = {
@@ -1199,7 +1200,7 @@ const char * const MSG_MAIN_LANG_TABLE[LANG_NUM] PROGMEM = {
 };
 
 const char MSG_MARK_FIL_EN[] PROGMEM = "Mark filament 100mm from extruder body. Click when done.";
-const char MSG_MARK_FIL_CZ[] PROGMEM = "Oznacte filament 100 mm od tela extruderu. Potvrdte tlacitkem.";
+const char MSG_MARK_FIL_CZ[] PROGMEM = "Oznacte filament 100 mm od tela extruderu a po te potvrdte tlacitkem.";
 const char MSG_MARK_FIL_IT[] PROGMEM = "Segnare il filamento a 100 mm di distanza dal corpo dell'estrusore. Click per continuare.";
 const char MSG_MARK_FIL_ES[] PROGMEM = "Marque el filamento 100 mm por encima del final del extrusor. Hacer clic una vez terminado.";
 const char MSG_MARK_FIL_PL[] PROGMEM = "Prosze oznaczyc filament 100 mm od ciala ekstrudera. Potwierdzic przyciskiem.";
@@ -1418,7 +1419,7 @@ const char * const MSG_NO_LANG_TABLE[LANG_NUM] PROGMEM = {
 
 const char MSG_NOT_COLOR_EN[] PROGMEM = "Color not clear";
 const char MSG_NOT_COLOR_CZ[] PROGMEM = "Barva neni cista";
-const char MSG_NOT_COLOR_IT[] PROGMEM = "Color no claro";
+const char MSG_NOT_COLOR_IT[] PROGMEM = "Colore non puro";
 const char MSG_NOT_COLOR_ES[] PROGMEM = "Color no claro";
 const char MSG_NOT_COLOR_PL[] PROGMEM = "Kolor zanieczysz.";
 const char * const MSG_NOT_COLOR_LANG_TABLE[LANG_NUM] PROGMEM = {
@@ -1431,7 +1432,7 @@ const char * const MSG_NOT_COLOR_LANG_TABLE[LANG_NUM] PROGMEM = {
 
 const char MSG_NOT_LOADED_EN[] PROGMEM = "Filament not loaded";
 const char MSG_NOT_LOADED_CZ[] PROGMEM = "Filament nezaveden";
-const char MSG_NOT_LOADED_IT[] PROGMEM = "Fil. no cargado";
+const char MSG_NOT_LOADED_IT[] PROGMEM = "Fil. non caricato";
 const char MSG_NOT_LOADED_ES[] PROGMEM = "Fil. no cargado";
 const char MSG_NOT_LOADED_PL[] PROGMEM = "Brak filamentu";
 const char * const MSG_NOT_LOADED_LANG_TABLE[LANG_NUM] PROGMEM = {
@@ -1583,10 +1584,10 @@ const char * const MSG_PREHEAT_NOZZLE_LANG_TABLE[LANG_NUM] PROGMEM = {
 	MSG_PREHEAT_NOZZLE_PL
 };
 
-const char MSG_PRESS_EN[] PROGMEM = "And press the knob";
-const char MSG_PRESS_CZ[] PROGMEM = "A stisknete tlacitko";
-const char MSG_PRESS_IT[] PROGMEM = "Y pulse el mando";
-const char MSG_PRESS_ES[] PROGMEM = "Y pulse el mando";
+const char MSG_PRESS_EN[] PROGMEM = "and press the knob";
+const char MSG_PRESS_CZ[] PROGMEM = "a stisknete tlacitko";
+const char MSG_PRESS_IT[] PROGMEM = "e cliccare manopola";
+const char MSG_PRESS_ES[] PROGMEM = "y pulse el mando";
 const char MSG_PRESS_PL[] PROGMEM = "Nacisnij przycisk";
 const char * const MSG_PRESS_LANG_TABLE[LANG_NUM] PROGMEM = {
 	MSG_PRESS_EN,
@@ -2161,7 +2162,7 @@ const char * const MSG_SHOW_END_STOPS_LANG_TABLE[LANG_NUM] PROGMEM = {
 
 const char MSG_SILENT_MODE_OFF_EN[] PROGMEM = "Mode [high power]";
 const char MSG_SILENT_MODE_OFF_CZ[] PROGMEM = "Mod  [vys. vykon]";
-const char MSG_SILENT_MODE_OFF_IT[] PROGMEM = "Mode [prestante]";
+const char MSG_SILENT_MODE_OFF_IT[] PROGMEM = "Mode [forte]";
 const char MSG_SILENT_MODE_OFF_ES[] PROGMEM = "Modo [mas fuerza]";
 const char MSG_SILENT_MODE_OFF_PL[] PROGMEM = "Mod [w wydajnosc]";
 const char * const MSG_SILENT_MODE_OFF_LANG_TABLE[LANG_NUM] PROGMEM = {
@@ -2404,6 +2405,19 @@ const char * const MSG_UNKNOWN_COMMAND_LANG_TABLE[1] PROGMEM = {
 	MSG_UNKNOWN_COMMAND_EN
 };
 
+const char MSG_UNLOADING_FILAMENT_EN[] PROGMEM = "Unloading filament";
+const char MSG_UNLOADING_FILAMENT_CZ[] PROGMEM = "Vysouvam filament";
+const char MSG_UNLOADING_FILAMENT_IT[] PROGMEM = "Rilasc. filamento";
+const char MSG_UNLOADING_FILAMENT_ES[] PROGMEM = "Soltando filamento";
+const char MSG_UNLOADING_FILAMENT_PL[] PROGMEM = "Wysuwam filament";
+const char * const MSG_UNLOADING_FILAMENT_LANG_TABLE[LANG_NUM] PROGMEM = {
+	MSG_UNLOADING_FILAMENT_EN,
+	MSG_UNLOADING_FILAMENT_CZ,
+	MSG_UNLOADING_FILAMENT_IT,
+	MSG_UNLOADING_FILAMENT_ES,
+	MSG_UNLOADING_FILAMENT_PL
+};
+
 const char MSG_UNLOAD_FILAMENT_EN[] PROGMEM = "Unload filament";
 const char MSG_UNLOAD_FILAMENT_CZ[] PROGMEM = "Vyjmout filament";
 const char MSG_UNLOAD_FILAMENT_IT[] PROGMEM = "Scarica filamento";
diff --git a/Firmware/language_all.h b/Firmware/language_all.h
index c09f6395..cae53a98 100644
--- a/Firmware/language_all.h
+++ b/Firmware/language_all.h
@@ -518,6 +518,8 @@ extern const char* const MSG_TUNE_LANG_TABLE[LANG_NUM];
 #define MSG_TUNE LANG_TABLE_SELECT(MSG_TUNE_LANG_TABLE)
 extern const char* const MSG_UNKNOWN_COMMAND_LANG_TABLE[1];
 #define MSG_UNKNOWN_COMMAND LANG_TABLE_SELECT_EXPLICIT(MSG_UNKNOWN_COMMAND_LANG_TABLE, 0)
+extern const char* const MSG_UNLOADING_FILAMENT_LANG_TABLE[LANG_NUM];
+#define MSG_UNLOADING_FILAMENT LANG_TABLE_SELECT(MSG_UNLOADING_FILAMENT_LANG_TABLE)
 extern const char* const MSG_UNLOAD_FILAMENT_LANG_TABLE[LANG_NUM];
 #define MSG_UNLOAD_FILAMENT LANG_TABLE_SELECT(MSG_UNLOAD_FILAMENT_LANG_TABLE)
 extern const char* const MSG_USB_PRINTING_LANG_TABLE[LANG_NUM];
diff --git a/Firmware/language_cz.h b/Firmware/language_cz.h
index f9f7cca5..4759b172 100644
--- a/Firmware/language_cz.h
+++ b/Firmware/language_cz.h
@@ -88,7 +88,7 @@
 #define MSG_PLEASE_WAIT			"Prosim cekejte"
 #define MSG_LOADING_COLOR		"Cisteni barvy"
 #define MSG_CHANGE_SUCCESS		"Zmena uspesna!"
-#define MSG_PRESS				"A stisknete tlacitko"
+#define MSG_PRESS				"a stisknete tlacitko"
 #define MSG_INSERT_FILAMENT		"Vlozte filament"
 #define MSG_CHANGING_FILAMENT	"Vymena filamentu!"
 
@@ -258,7 +258,8 @@
 #define MSG_CONFIRM_NOZZLE_CLEAN_FIL_ADJ				"Filamenty jsou srovnany. Pro uspesnou kalibraci prosim ocistete trysku. Po te potvrdte tlacitkem."
 #define MSG_CALIBRATE_E									"Kalibrovat E"
 #define MSG_E_CAL_KNOB									"Otacejte tlacitkem dokud znacka nedosahne tela extruderu. Potvrdte tlacitkem."
-#define MSG_MARK_FIL									"Oznacte filament 100 mm od tela extruderu. Potvrdte tlacitkem."
+#define MSG_MARK_FIL									"Oznacte filament 100 mm od tela extruderu a po te potvrdte tlacitkem."
 #define MSG_CLEAN_NOZZLE_E								"E kalibrace ukoncena. Prosim ocistete trysku. Po te potvrdte tlacitkem."
 #define MSG_WAITING_TEMP								"Cekani na zchladnuti trysky a podlozky."
-#define MSG_FILAMENT_CLEAN								"Je barva cista?" 
\ No newline at end of file
+#define MSG_FILAMENT_CLEAN								"Je barva cista?" 
+#define MSG_UNLOADING_FILAMENT							"Vysouvam filament"
\ No newline at end of file
diff --git a/Firmware/language_en.h b/Firmware/language_en.h
index 12fd99b1..3d1649fa 100644
--- a/Firmware/language_en.h
+++ b/Firmware/language_en.h
@@ -85,7 +85,7 @@
 #define(length=20) MSG_PLEASE_WAIT			"Please wait"
 #define MSG_LOADING_COLOR		"Loading color"
 #define MSG_CHANGE_SUCCESS		"Change success!"
-#define(length=20) MSG_PRESS				"And press the knob"
+#define(length=20) MSG_PRESS				"and press the knob"
 #define(length=20) MSG_INSERT_FILAMENT		"Insert filament"
 #define(length=20) MSG_CHANGING_FILAMENT	"Changing filament!"
 
@@ -250,7 +250,7 @@
 #define(length=20, lines=8) MSG_CLEAN_NOZZLE_E				"E calibration finished. Please clean the nozzle. Click when done."
 #define(length=20, lines=3) MSG_WAITING_TEMP				"Waiting for heater and bed cooling"
 #define(length=20, lines=2) MSG_FILAMENT_CLEAN				"Is color clear?"
-//#define(lenght=20, lines=1) MSG_UNLOADING_FILAMENT			"Unloading filament"
+#define(lenght=20, lines=1) MSG_UNLOADING_FILAMENT			"Unloading filament"
 
 #define MSG_BED_CORRECTION_MENU									"Bed level correct"
 #define MSG_BED_CORRECTION_LEFT									"Left side  um"
diff --git a/Firmware/language_es.h b/Firmware/language_es.h
index 61085bbf..cd593172 100644
--- a/Firmware/language_es.h
+++ b/Firmware/language_es.h
@@ -59,7 +59,7 @@
 #define MSG_PLEASE_WAIT						"Espera"
 #define MSG_LOADING_COLOR					"Cargando color"
 #define MSG_CHANGE_SUCCESS					"Cambiar bien!"
-#define MSG_PRESS							"Y pulse el mando"
+#define MSG_PRESS							"y pulse el mando"
 #define MSG_INSERT_FILAMENT					"Inserta filamento"
 #define MSG_CHANGING_FILAMENT				"Cambiando fil.!"
 #define MSG_SILENT_MODE_ON					"Modo   [silencio]"
@@ -252,3 +252,4 @@
 #define MSG_CLEAN_NOZZLE_E								"E calibrado. Limpiar la boquilla. Haga clic una vez terminado."
 #define MSG_WAITING_TEMP								"Esperando enfriamiento de la cama y del extrusor."
 #define MSG_FILAMENT_CLEAN								"Es el nuevo color nitido?"
+#define MSG_UNLOADING_FILAMENT							"Soltando filamento"
\ No newline at end of file
diff --git a/Firmware/language_it.h b/Firmware/language_it.h
index 9e3e9c92..7940819c 100644
--- a/Firmware/language_it.h
+++ b/Firmware/language_it.h
@@ -64,27 +64,27 @@
 #define MSG_SUPPORT 						"Support"
 #define MSG_YES								"Si"
 #define MSG_NO								"No"
-#define MSG_NOT_LOADED 						"Fil. no cargado"
-#define MSG_NOT_COLOR 						"Color no claro"
-#define MSG_LOADING_COLOR					"Cargando color"
-#define MSG_CHANGE_SUCCESS					"Cambia. riuscito!"
-#define MSG_PRESS							"Y pulse el mando"
+#define MSG_NOT_LOADED 						"Fil. non caricato"
+#define MSG_NOT_COLOR 						"Colore non puro"
+#define MSG_LOADING_COLOR					"Caricando colore"
+#define MSG_CHANGE_SUCCESS					"Cambio riuscito!"
+#define MSG_PRESS							"e cliccare manopola"
 #define MSG_INSERT_FILAMENT					"Inserire filamento"
-#define MSG_CHANGING_FILAMENT				"Mutevole fil.!"
+#define MSG_CHANGING_FILAMENT				"Cambiando filam."
 
 #define MSG_PLEASE_WAIT						"Aspetta"
 #define MSG_PREHEAT_NOZZLE                  "Preris. ugello!"
-#define MSG_HEATING_COMPLETE                "Riscaldamento fatto."
-#define MSG_BED_HEATING                     "Piatto riscaldam."
+#define MSG_HEATING_COMPLETE                "Riscald. completo"
+#define MSG_BED_HEATING                     "Riscald. letto"
 #define MSG_BED_DONE                        "Piatto fatto."
-#define MSG_ERROR                        	"ERROR:"
+#define MSG_ERROR                        	"ERRORE:"
 #define MSG_CORRECTLY						"Cambiato corr.?"
-#define MSG_LOADING_FILAMENT				"Cargando fil."
+#define MSG_LOADING_FILAMENT				"Caricando filam."
 #define MSG_UNLOAD_FILAMENT                 "Scarica filamento"
 #define MSG_LOAD_FILAMENT                   "Carica filamento"
 
 #define MSG_SILENT_MODE_ON		    "Modo [silenzioso]"
-#define MSG_SILENT_MODE_OFF		    "Mode [prestante]" 
+#define MSG_SILENT_MODE_OFF		    "Mode [forte]" 
 #define MSG_REBOOT			    "Riavvia stampante"
 #define MSG_TAKE_EFFECT			    " per attualizzare"
 
@@ -247,3 +247,4 @@
 #define MSG_CLEAN_NOZZLE_E								"Calibrazione E terminata. Si prega di pulire l'ugello. Click per continuare."
 #define MSG_WAITING_TEMP								"In attesa del raffreddamento della testina e del piatto."
 #define MSG_FILAMENT_CLEAN								"Il colore e' nitido?"
+#define MSG_UNLOADING_FILAMENT							"Rilasc. filamento"
\ No newline at end of file
diff --git a/Firmware/language_pl.h b/Firmware/language_pl.h
index c471c076..24476d45 100644
--- a/Firmware/language_pl.h
+++ b/Firmware/language_pl.h
@@ -257,4 +257,5 @@
 #define MSG_MARK_FIL											"Prosze oznaczyc filament 100 mm od ciala ekstrudera. Potwierdzic przyciskiem."
 #define MSG_CLEAN_NOZZLE_E										"Kalibracja E skonczona. Prosze oczyscic dysze. Potem potwierdzic przyciskiem. "
 #define MSG_WAITING_TEMP										"Oczekiwanie na wychlodzenie dyszy i podkladki."
-#define MSG_FILAMENT_CLEAN										"Czy kolor jest czysty?"
\ No newline at end of file
+#define MSG_FILAMENT_CLEAN										"Czy kolor jest czysty?"
+#define MSG_UNLOADING_FILAMENT									"Wysuwam filament"
\ No newline at end of file
diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp
index 431343d5..9f045812 100644
--- a/Firmware/ultralcd.cpp
+++ b/Firmware/ultralcd.cpp
@@ -1712,49 +1712,58 @@ void lcd_wait_for_click()
     }
 }
 
-int8_t lcd_show_fullscreen_message_yes_no_and_wait_P(const char *msg, bool allow_timeouting)
+int8_t lcd_show_fullscreen_message_yes_no_and_wait_P(const char *msg, bool allow_timeouting, bool default_yes)
 {
-    lcd_display_message_fullscreen_P(msg);
 
-    lcd.setCursor(1, 2);
-    lcd_printPGM(MSG_YES);
-    lcd.setCursor(0, 3);
-    lcd_printPGM(PSTR(">"));
-    lcd_printPGM(MSG_NO);
-    bool yes = false;
+	lcd_display_message_fullscreen_P(msg);
+	
+	if (default_yes) {
+		lcd.setCursor(0, 2);
+		lcd_printPGM(PSTR(">"));
+		lcd_printPGM(MSG_YES);
+		lcd.setCursor(1, 3);
+		lcd_printPGM(MSG_NO);
+	}
+	else {
+		lcd.setCursor(1, 2);
+		lcd_printPGM(MSG_YES);
+		lcd.setCursor(0, 3);
+		lcd_printPGM(PSTR(">"));
+		lcd_printPGM(MSG_NO);
+	}
+	bool yes = default_yes ? true : false;
 
-    // Wait for user confirmation or a timeout.
-    unsigned long previous_millis_cmd = millis();
-    int8_t        enc_dif = encoderDiff;
-    for (;;) {
-        if (allow_timeouting && millis() - previous_millis_cmd > LCD_TIMEOUT_TO_STATUS)
-            return -1;
-        manage_heater();
-        manage_inactivity(true);
-        if (abs((enc_dif - encoderDiff)) > 4) {
-            if (abs(enc_dif - encoderDiff) > 1) {
-                lcd.setCursor(0, 2);
-                if (enc_dif > encoderDiff && yes) {
-                    lcd_printPGM((PSTR(" ")));
-                    lcd.setCursor(0, 3);
-                    lcd_printPGM((PSTR(">")));
-                    yes = false;
-                } else if (enc_dif < encoderDiff && ! yes) {
-                    lcd_printPGM((PSTR(">")));
-                    lcd.setCursor(0, 3);
-                    lcd_printPGM((PSTR(" ")));
-                    yes = true;
-                }
-                enc_dif = encoderDiff;
-            }
-        }
-        if (lcd_clicked()) {
-            while (lcd_clicked()) ;
-            delay(10);
-            while (lcd_clicked()) ;
-            return yes;
-        }
-    }
+	// Wait for user confirmation or a timeout.
+	unsigned long previous_millis_cmd = millis();
+	int8_t        enc_dif = encoderDiff;
+	for (;;) {
+		if (allow_timeouting && millis() - previous_millis_cmd > LCD_TIMEOUT_TO_STATUS)
+			return -1;
+		manage_heater();
+		manage_inactivity(true);
+		if (abs(enc_dif - encoderDiff) > 4) {
+			lcd.setCursor(0, 2);
+				if (enc_dif > encoderDiff && yes) {
+					lcd_printPGM((PSTR(" ")));
+					lcd.setCursor(0, 3);
+					lcd_printPGM((PSTR(">")));
+					yes = false;
+				}
+				else if (enc_dif < encoderDiff && !yes) {
+					lcd_printPGM((PSTR(">")));
+					lcd.setCursor(0, 3);
+					lcd_printPGM((PSTR(" ")));
+					yes = true;
+				}
+				enc_dif = encoderDiff;
+		}
+		if (lcd_clicked()) {
+			while (lcd_clicked());
+			delay(10);
+			while (lcd_clicked());
+			return yes;
+		}
+	}
 }
 
 void lcd_bed_calibration_show_result(BedSkewOffsetDetectionResultType result, uint8_t point_too_far_mask)
@@ -2209,14 +2218,15 @@ void lcd_mesh_calibration_z()
 void lcd_calibrate_extruder() {
 	if (degHotend0() > EXTRUDE_MINTEMP)
 	{
-		current_position[E_AXIS] = 0;
+		current_position[E_AXIS] = 0;									//set initial position to zero
 		plan_set_e_position(current_position[E_AXIS]);
-			
-		long steps_start = current_position[E_AXIS]*axis_steps_per_unit[E_AXIS];
+		
+		//long steps_start = st_get_position(E_AXIS);
+
 		long steps_final;
 		float e_steps_per_unit;
-		float feedrate = (180 / axis_steps_per_unit[E_AXIS]) * 5;
-		float e_shift_calibration = (axis_steps_per_unit[E_AXIS] > 180 ) ? ((180 / axis_steps_per_unit[E_AXIS]) * 70): 70;
+		float feedrate = (180 / axis_steps_per_unit[E_AXIS]) * 3;		//initial automatic extrusion feedrate (depends on current value of axis_steps_per_unit to avoid too fast extrusion)
+		float e_shift_calibration = (axis_steps_per_unit[E_AXIS] > 180 ) ? ((180 / axis_steps_per_unit[E_AXIS]) * 70): 70; //length of initial automatic extrusion sequence
 		const char   *msg_e_cal_knob = MSG_E_CAL_KNOB;
 		const char   *msg_next_e_cal_knob = lcd_display_message_fullscreen_P(msg_e_cal_knob);
 		const bool    multi_screen = msg_next_e_cal_knob != NULL;
@@ -2243,7 +2253,7 @@ void lcd_calibrate_extruder() {
 
 			//manage_inactivity(true);
 			manage_heater();
-			if (abs(encoderDiff) >= ENCODER_PULSES_PER_STEP) {
+			if (abs(encoderDiff) >= ENCODER_PULSES_PER_STEP) {						//adjusting mark by knob rotation
 				delay_keep_alive(50);
 				//previous_millis_cmd = millis();
 				encoderPosition += (encoderDiff / ENCODER_PULSES_PER_STEP);
@@ -2258,9 +2268,10 @@ void lcd_calibrate_extruder() {
 		}
 		
 		steps_final = current_position[E_AXIS] * axis_steps_per_unit[E_AXIS];
+		//steps_final = st_get_position(E_AXIS);
 		lcdDrawUpdate = 1;
-		e_steps_per_unit = ((float)(steps_final - steps_start)) / 100.f;
-		if (e_steps_per_unit < MIN_E_STEPS_PER_UNIT) e_steps_per_unit = MIN_E_STEPS_PER_UNIT;
+		e_steps_per_unit = ((float)(steps_final)) / 100.0f;
+		if (e_steps_per_unit < MIN_E_STEPS_PER_UNIT) e_steps_per_unit = MIN_E_STEPS_PER_UNIT;				
 		if (e_steps_per_unit > MAX_E_STEPS_PER_UNIT) e_steps_per_unit = MAX_E_STEPS_PER_UNIT;
 
 		lcd_implementation_clear();
diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h
index 02b40e77..e2396a35 100644
--- a/Firmware/ultralcd.h
+++ b/Firmware/ultralcd.h
@@ -49,7 +49,7 @@ void lcd_mylang();
   extern void lcd_wait_for_click();
   extern void lcd_show_fullscreen_message_and_wait_P(const char *msg);
   // 0: no, 1: yes, -1: timeouted
-  extern int8_t lcd_show_fullscreen_message_yes_no_and_wait_P(const char *msg, bool allow_timeouting = true);
+  extern int8_t lcd_show_fullscreen_message_yes_no_and_wait_P(const char *msg, bool allow_timeouting = true, bool default_yes = false);
 
   // Ask the user to move the Z axis up to the end stoppers and let
   // the user confirm that it has been done.