diff --git a/src/simutrans/sys/simsys_s2.cc b/src/simutrans/sys/simsys_s2.cc
index 6b962887f..548364f59 100644
--- a/src/simutrans/sys/simsys_s2.cc
+++ b/src/simutrans/sys/simsys_s2.cc
@@ -1046,6 +1046,10 @@ static void internal_GetEvents()
 		case SDL_KEYUP: {
 			sys_event.type = SIM_KEYBOARD;
 			sys_event.code = 0;
+			// releasing a modifier has to be seen straight away: sys_event.key_mod
+			// is not cleared between events, so without this it keeps whatever the
+			// last key or mouse event left in it until the next one arrives
+			sys_event.key_mod = ModifierKeys();
 			break;
 		}
 		case SDL_QUIT: {
