Index: engines/sword1/screen.h
===================================================================
--- engines/sword1/screen.h	(revision 36331)
+++ engines/sword1/screen.h	(working copy)
@@ -137,6 +137,7 @@
 	uint8  _rleBuffer[RLE_BUFFER_SIZE];
 	uint8  _shrinkBuffer[SHRINK_BUFFER_SIZE];
 	bool   _fullRefresh;
+	bool   _updatePalette;
 	uint16 _oldScrollX, _oldScrollY; // for drawing additional frames
 
 	uint32  _foreList[MAX_FORE];
Index: engines/sword1/screen.cpp
===================================================================
--- engines/sword1/screen.cpp	(revision 36331)
+++ engines/sword1/screen.cpp	(working copy)
@@ -55,6 +55,7 @@
 	_backLength = _foreLength = _sortLength = 0;
 	_fadingStep = 0;
 	_currentScreen = 0xFFFF;
+	_updatePalette = false;
 }
 
 Screen::~Screen(void) {
@@ -186,6 +187,11 @@
 }
 
 void Screen::updateScreen(void) {
+	if (_updatePalette) {
+		fnSetPalette(0, 184, _roomDefTable[_currentScreen].palettes[0], false);
+		fnSetPalette(184, 72, _roomDefTable[_currentScreen].palettes[1], false);
+		_updatePalette = false;
+	}
 	if (Logic::_scriptVars[NEW_PALETTE]) {
 		_fadingStep = 1;
 		_fadingDirection = FADE_UP;
@@ -338,8 +344,11 @@
 	if (_roomDefTable[_currentScreen].parallax[1])
 		_parallax[1] = (uint8*)_resMan->openFetchRes(_roomDefTable[_currentScreen].parallax[1]);
 
-	fnSetPalette(0, 184, _roomDefTable[_currentScreen].palettes[0], SwordEngine::_systemVars.wantFade);
-	fnSetPalette(184, 72, _roomDefTable[_currentScreen].palettes[1], SwordEngine::_systemVars.wantFade);
+	if (SwordEngine::_systemVars.wantFade) {
+		fnSetPalette(0, 184, _roomDefTable[_currentScreen].palettes[0], SwordEngine::_systemVars.wantFade);
+		fnSetPalette(184, 72, _roomDefTable[_currentScreen].palettes[1], SwordEngine::_systemVars.wantFade);
+	} else
+		_updatePalette = true;
 	_fullRefresh = true;
 }
 
