diff --git a/src/sound/music.cpp b/src/sound/music.cpp
index b480d37ed..cf39e7e71 100644
--- a/src/sound/music.cpp
+++ b/src/sound/music.cpp
@@ -242,6 +242,11 @@ local Sample* LoadMod(const char* name,int flags __attribute__((unused)))
 */
 global int PlayCDRom(int name)
 {
+    if (name == CDModeOff) {
+	CDMode = CDModeOff;
+	return 1;
+    }
+
     // Old mode off, starting cdrom play.
     if (CDMode == CDModeOff) {
         if (SDL_Init(SDL_INIT_CDROM) < 0) {
@@ -298,6 +303,11 @@ global int PlayCDRom(int name)
     int i;
     int data_cd;
 
+    if (name == CDModeOff) {
+	CDMode = CDModeOff;
+	return 1;
+    }
+
     if (CDMode == CDModeOff) {
         if (cd_init()) {
 	    fprintf(stderr, "Error initialising libcda \n");
@@ -373,6 +383,11 @@ global int PlayCDRom(int name)
     int i;
     Sample *sample;
 
+    if (name == CDModeOff) {
+	CDMode = CDModeOff;
+	return 1;
+    }
+
     if (CDMode == CDModeOff) {
 	CDDrive = open("/dev/cdrom", O_RDONLY | O_NONBLOCK);
 	ioctl(CDDrive, CDROMRESET);
diff --git a/src/sound/script_sound.cpp b/src/sound/script_sound.cpp
index ddaa5119d..a884f4a80 100644
--- a/src/sound/script_sound.cpp
+++ b/src/sound/script_sound.cpp
@@ -384,6 +384,8 @@ local SCM CclSetCdMode(SCM mode)
 	cdmode=CDModeRandom;
     } else if( gh_eq_p(mode,gh_symbol2scm("defined")) ) {
 	cdmode=CDModeDefined;
+    } else if ( gh_eq_p(mode,gh_symbol2scm("off")) ) {
+	cdmode=CDModeOff;
     } else {
 	cdmode=CDModeOff;
 	errl("Unsupported tag",mode);
diff --git a/src/stratagus/script.cpp b/src/stratagus/script.cpp
index 5ba326ae0..162f3c5cf 100644
--- a/src/stratagus/script.cpp
+++ b/src/stratagus/script.cpp
@@ -915,6 +915,10 @@ global void SavePreferences(void)
 	case CDModeDefined:
 	    strcpy(buf, "defined");
 	    break;
+	case CDModeStopped:
+	case CDModeOff:
+	    strcpy(buf, "off");
+	    break;
 	default:
 	    break;
     }