diff -ur ScummVM-cvs20030705/scummvm/sky/intro.cpp ScummVM-cvs20030705+hack/scummvm/sky/intro.cpp
--- ScummVM-cvs20030705/scummvm/sky/intro.cpp	2003-07-05 18:23:50.000000000 +0200
+++ ScummVM-cvs20030705+hack/scummvm/sky/intro.cpp	2003-07-05 23:03:51.000000000 +0200
@@ -32,6 +32,7 @@
             _mixer->stopAll();
 #define CHECK_ESC if (_key_pressed == 27) { _skyScreen->stopSequence(); REMOVE_INTRO return false; }
 #define WAIT_SEQUENCE while (_skyScreen->sequenceRunning()) { checkCommands(commandPtr); delay(50); CHECK_ESC }
+#define WAIT_MUSIC while (_skyMusic->musicIsPlaying()) { delay(50); CHECK_ESC }
 
 #define INTRO_TEXT_WIDTH    128
 
@@ -349,6 +350,18 @@
 		commandPtr = (uint32 *)anim5Commands;
 		
 		WAIT_SEQUENCE;
+
+		// There is no synchronization mechanism between the music and
+		// the graphics. Which means that there is no guarantee that
+		// they both end at the same time. So just to be safe, wait
+		// for the music to stop before continuing with the final part.
+		//
+		// This part of the intro looks pretty nice even as a static
+		// image, so it makes sense to do the waiting before fading
+		// down the palette.
+
+		WAIT_MUSIC;
+		
 		_skyDisk->prefetchFile(FN_6_PAL);
 		_skyDisk->prefetchFile(FN_6_LOG);
 		_skyDisk->prefetchFile(FN_6A);
diff -ur ScummVM-cvs20030705/scummvm/sky/music/adlibchannel.cpp ScummVM-cvs20030705+hack/scummvm/sky/music/adlibchannel.cpp
--- ScummVM-cvs20030705/scummvm/sky/music/adlibchannel.cpp	2003-06-01 23:21:09.000000000 +0200
+++ ScummVM-cvs20030705+hack/scummvm/sky/music/adlibchannel.cpp	2003-07-05 22:15:04.000000000 +0200
@@ -61,6 +61,11 @@
 	_musicVolume = 0x100;
 }
 
+bool SkyAdlibChannel::isActive(void) {
+
+	return _channelData.channelActive != 0;
+}
+
 void SkyAdlibChannel::updateVolume(uint16 pVolume) {
 
 	_musicVolume = pVolume;
diff -ur ScummVM-cvs20030705/scummvm/sky/music/adlibchannel.h ScummVM-cvs20030705+hack/scummvm/sky/music/adlibchannel.h
--- ScummVM-cvs20030705/scummvm/sky/music/adlibchannel.h	2003-06-01 23:21:10.000000000 +0200
+++ ScummVM-cvs20030705+hack/scummvm/sky/music/adlibchannel.h	2003-07-05 22:10:57.000000000 +0200
@@ -64,6 +64,7 @@
 	virtual void stopNote(void);
 	virtual uint8 process(uint16 aktTime);
 	virtual void updateVolume(uint16 pVolume);
+	virtual bool isActive(void);
 private:
 	uint8 *_musicData;
 	uint16 _musicVolume;
diff -ur ScummVM-cvs20030705/scummvm/sky/music/gmchannel.cpp ScummVM-cvs20030705+hack/scummvm/sky/music/gmchannel.cpp
--- ScummVM-cvs20030705/scummvm/sky/music/gmchannel.cpp	2003-07-02 08:51:43.000000000 +0200
+++ ScummVM-cvs20030705+hack/scummvm/sky/music/gmchannel.cpp	2003-07-05 22:14:56.000000000 +0200
@@ -63,6 +63,11 @@
 	_musicVolume = 0x100;
 }
 
+bool SkyGmChannel::isActive(void) {
+
+	return _channelData.channelActive != 0;
+}
+
 void SkyGmChannel::updateVolume(uint16 pVolume) {
 
 	_musicVolume = pVolume;
diff -ur ScummVM-cvs20030705/scummvm/sky/music/gmchannel.h ScummVM-cvs20030705+hack/scummvm/sky/music/gmchannel.h
--- ScummVM-cvs20030705/scummvm/sky/music/gmchannel.h	2003-05-29 01:31:43.000000000 +0200
+++ ScummVM-cvs20030705+hack/scummvm/sky/music/gmchannel.h	2003-07-05 22:11:10.000000000 +0200
@@ -42,6 +42,7 @@
 	virtual void stopNote(void);
 	virtual uint8 process(uint16 aktTime);
 	virtual void updateVolume(uint16 pVolume);
+	virtual bool isActive(void);
 private:
 	byte *_mt32_to_gm;
 	static uint8 _veloTab[128];
diff -ur ScummVM-cvs20030705/scummvm/sky/music/musicbase.cpp ScummVM-cvs20030705+hack/scummvm/sky/music/musicbase.cpp
--- ScummVM-cvs20030705/scummvm/sky/music/musicbase.cpp	2003-07-01 17:50:31.000000000 +0200
+++ ScummVM-cvs20030705+hack/scummvm/sky/music/musicbase.cpp	2003-07-05 22:58:07.000000000 +0200
@@ -57,6 +57,14 @@
 	_system->unlock_mutex(_mutex);
 }
 
+bool SkyMusicBase::musicIsPlaying(void)
+{
+	for (uint8 cnt = 0; cnt < _numberOfChannels; cnt++)
+		if (_channels[cnt]->isActive())
+			return true;
+	return false;
+}
+
 void SkyMusicBase::musicCommand(uint16 command)
 {
 	if (_musicData == NULL) {
diff -ur ScummVM-cvs20030705/scummvm/sky/music/musicbase.h ScummVM-cvs20030705+hack/scummvm/sky/music/musicbase.h
--- ScummVM-cvs20030705/scummvm/sky/music/musicbase.h	2003-07-05 18:23:50.000000000 +0200
+++ ScummVM-cvs20030705+hack/scummvm/sky/music/musicbase.h	2003-07-05 22:18:21.000000000 +0200
@@ -38,6 +38,7 @@
 	virtual void stopNote(void) = 0;
 	virtual uint8 process(uint16 aktTime) = 0;
 	virtual void updateVolume(uint16 pVolume) = 0;
+	virtual bool isActive(void) = 0;
 private:
 };
 
@@ -48,6 +49,7 @@
 	void loadSection(uint8 pSection);
 	void musicCommand(uint16 command);
 	void startMusic(uint16 param) { _onNextPoll.musicToProcess = param & 0xF; }; // 4
+	bool musicIsPlaying(void);
 	virtual void setVolume(uint8 volume) = 0;
 	uint8 giveVolume(void) { return (uint8)_musicVolume; };
 	uint8 giveCurrentMusic(void) { return _currentMusic; };
