Index: engines/scumm/imuse_digi/dimuse.cpp
===================================================================
--- engines/scumm/imuse_digi/dimuse.cpp	(revision 25927)
+++ engines/scumm/imuse_digi/dimuse.cpp	(working copy)
@@ -76,6 +76,21 @@
 	free(_audioNames);
 }
 
+int32 IMuseDigital::makeMixerFlags(int32 flags) {
+	int32 mixerFlags = 0;
+	if (flags & kFlagUnsigned)
+		mixerFlags |= Audio::Mixer::FLAG_UNSIGNED;
+	if (flags & kFlag16Bits)
+		mixerFlags |= Audio::Mixer::FLAG_16BITS;
+	if (flags & kFlagLittleEndian)
+		mixerFlags |= Audio::Mixer::FLAG_LITTLE_ENDIAN;
+	if (flags & kFlagStereo)
+		mixerFlags |= Audio::Mixer::FLAG_STEREO;
+	if (flags & kFlagReverseStereo)
+		mixerFlags |= Audio::Mixer::FLAG_REVERSE_STEREO;
+	return mixerFlags;
+}
+
 void IMuseDigital::resetState() {
 	_curMusicState = 0;
 	_curMusicSeq = 0;
@@ -122,7 +137,7 @@
 		MKLINE(Track, soundType, sleInt32, VER(31)),
 		MKLINE(Track, iteration, sleInt32, VER(31)),
 		MKLINE(Track, mod, sleInt32, VER(31)),
-		MKLINE(Track, mixerFlags, sleInt32, VER(31)),
+		MKLINE(Track, flags, sleInt32, VER(31)),
 		MK_OBSOLETE(Track, mixerVol, sleInt32, VER(31), VER(42)),
 		MK_OBSOLETE(Track, mixerPan, sleInt32, VER(31), VER(42)),
 		MKLINE(Track, compressed, sleByte, VER(45)),
@@ -171,25 +186,25 @@
 			int channels = _sound->getChannels(track->soundHandle);
 			int freq = _sound->getFreq(track->soundHandle);
 			track->iteration = freq * channels;
-			track->mixerFlags = 0;
+			track->flags = 0;
 			if (channels == 2)
-				track->mixerFlags = Audio::Mixer::FLAG_STEREO | Audio::Mixer::FLAG_REVERSE_STEREO;
+				track->flags = kFlagStereo | kFlagReverseStereo;
 
 			if ((bits == 12) || (bits == 16)) {
-				track->mixerFlags |= Audio::Mixer::FLAG_16BITS;
+				track->flags |= kFlag16Bits;
 				track->iteration *= 2;
 			} else if (bits == 8) {
-				track->mixerFlags |= Audio::Mixer::FLAG_UNSIGNED;
+				track->flags |= kFlagUnsigned;
 			} else
 				error("IMuseDigital::saveOrLoad(): Can't handle %d bit samples", bits);
 
 #ifdef SCUMM_LITTLE_ENDIAN
 			if (track->compressed)
-				track->mixerFlags |= Audio::Mixer::FLAG_LITTLE_ENDIAN;
+				track->flags |= kFlagLittleEndian;
 #endif
 
 			track->stream2 = NULL;
-			track->stream = Audio::makeAppendableAudioStream(freq, track->mixerFlags);
+			track->stream = Audio::makeAppendableAudioStream(freq, makeMixerFlags(track->flags));
 
 			const int pan = (track->pan != 64) ? 2 * track->pan - 127 : 0;
 			const int vol = track->vol / 1000;
Index: engines/scumm/imuse_digi/dimuse_track.cpp
===================================================================
--- engines/scumm/imuse_digi/dimuse_track.cpp	(revision 25927)
+++ engines/scumm/imuse_digi/dimuse_track.cpp	(working copy)
@@ -103,7 +103,7 @@
 	track->dataOffset = 0;
 	track->regionOffset = 0;
 	track->mod = 0;
-	track->mixerFlags = 0;
+	track->flags = 0;
 	track->toBeRemoved = false;
 	track->readyToRemove = false;
 	track->soundType = soundType;
@@ -143,19 +143,19 @@
 
 		track->iteration = freq * channels;
 		if (channels == 2)
-			track->mixerFlags = Audio::Mixer::FLAG_STEREO | Audio::Mixer::FLAG_REVERSE_STEREO;
+			track->flags = kFlagStereo | kFlagReverseStereo;
 
 		if ((bits == 12) || (bits == 16)) {
-			track->mixerFlags |= Audio::Mixer::FLAG_16BITS;
+			track->flags |= kFlag16Bits;
 			track->iteration *= 2;
 		} else if (bits == 8) {
-			track->mixerFlags |= Audio::Mixer::FLAG_UNSIGNED;
+			track->flags |= kFlagUnsigned;
 		} else
 			error("IMuseDigital::startSound(): Can't handle %d bit samples", bits);
 
 #ifdef SCUMM_LITTLE_ENDIAN
 		if (track->compressed)
-			track->mixerFlags |= Audio::Mixer::FLAG_LITTLE_ENDIAN;
+			track->flags |= kFlagLittleEndian;
 #endif
 	}
 
@@ -177,7 +177,7 @@
 
 		// setup 1 second stream wrapped buffer
 		track->stream2 = NULL;
-		track->stream = Audio::makeAppendableAudioStream(freq, track->mixerFlags);
+		track->stream = Audio::makeAppendableAudioStream(freq, makeMixerFlags(track->flags));
 		_mixer->playInputStream(type, &track->handle, track->stream, -1, vol, pan, false);
 		track->started = true;
 	}
@@ -328,7 +328,7 @@
 	fadeTrack->curRegion = track->curRegion;
 	fadeTrack->curHookId = track->curHookId;
 	fadeTrack->iteration = track->iteration;
-	fadeTrack->mixerFlags = track->mixerFlags;
+	fadeTrack->flags = track->flags;
 	fadeTrack->mod = track->mod;
 	fadeTrack->toBeRemoved = track->toBeRemoved;
 	fadeTrack->readyToRemove = track->readyToRemove;
@@ -355,7 +355,7 @@
 		type = Audio::Mixer::kMusicSoundType;
 
 	// setup 1 second stream wrapped buffer
-	fadeTrack->stream = Audio::makeAppendableAudioStream(_sound->getFreq(fadeTrack->soundHandle), fadeTrack->mixerFlags);
+	fadeTrack->stream = Audio::makeAppendableAudioStream(_sound->getFreq(fadeTrack->soundHandle), makeMixerFlags(fadeTrack->flags));
 	_mixer->playInputStream(type, &fadeTrack->handle, fadeTrack->stream, -1, fadeTrack->vol / 1000, fadeTrack->pan, false);
 	fadeTrack->started = true;
 	fadeTrack->used = true;
Index: engines/scumm/imuse_digi/dimuse.h
===================================================================
--- engines/scumm/imuse_digi/dimuse.h	(revision 25927)
+++ engines/scumm/imuse_digi/dimuse.h	(working copy)
@@ -44,6 +44,21 @@
 class Serializer;
 class ScummEngine_v7;
 
+// These flag bits correspond exactly to the sound mixer flags of March 2007.
+// We define our own so that savegames won't break, even if the mixer flags
+// change after this point.
+
+enum {
+	kFlagUnsigned = 1 << 0,
+	kFlag16Bits = 1 << 1,
+	kFlagLittleEndian = 1 << 2,
+	kFlagStereo = 1 << 3,
+	kFlagReverseStereo = 1 << 4
+
+	// kFlagAutoFree = 1 << 5,
+	// kFlagLoop = 1 << 6
+};
+
 class IMuseDigital : public MusicEngine {
 private:
 
@@ -76,7 +91,7 @@
 		int32 soundType;
 		int32 iteration;
 		int32 mod;
-		int32 mixerFlags;
+		int32 flags;
 
 		ImuseDigiSndMgr::soundStruct *soundHandle;
 		Audio::SoundHandle handle;
@@ -104,6 +119,7 @@
 	int32 _curMusicSeq;
 	int32 _curMusicCue;
 
+	int32 makeMixerFlags(int32 flags);
 	static void timer_handler(void *refConf);
 	void callback();
 	void switchToNextRegion(Track *track);
