diff --git a/src/osk_gui.cpp b/src/osk_gui.cpp
index 42ff5b5bf2..80a87edd58 100644
--- a/src/osk_gui.cpp
+++ b/src/osk_gui.cpp
@@ -299,14 +299,22 @@ void GetKeyboardLayout()
 	if (StrEmpty(_keyboard_opt[1])) {
 		GetString(keyboard[1], STR_OSK_KEYBOARD_LAYOUT_CAPS, lastof(keyboard[1]));
 	} else {
-		strncpy(keyboard[0], _keyboard_opt[0], lengthof(keyboard[1]));
+		strncpy(keyboard[1], _keyboard_opt[1], lengthof(keyboard[1]));
 	}
 
 	for (uint j = 0; j < 2; j++) {
 		const char *kbd = keyboard[j];
+		bool ended = false;
 		for (uint i = 0; i < OSK_KEYBOARD_ENTRIES; i++) {
 			_keyboard[j][i] = Utf8Consume(&kbd);
 
+			/* Be lenient when the last characters are missing (is quite normal) */
+			if (_keyboard[j][i] == '\0' || ended) {
+				ended = true;
+				_keyboard[j][i] = ' ';
+				continue;
+			}
+
 			if (IsPrintable(_keyboard[j][i])) {
 				errormark[j][i] = ' ';
 			} else {