diff --git a/src/sound/music.cpp b/src/sound/music.cpp
index d0b0aa0ae..458c7570e 100644
--- a/src/sound/music.cpp
+++ b/src/sound/music.cpp
@@ -226,13 +226,15 @@ local int PlayCDRom(const char* name)
 {
     if (!strcmp(CDMode, ":off")) {
 	if (!strncmp(name, ":", 1)) {
-	    if (cd_init() < 0) {
+	    if (cd_init()) {
 		fprintf(stderr, "Error initialising libcda \n");
+		CDMode = ":off";
 		return 1;
 	    }
-	    if (cd_get_tracks(&CDTrack, &NumCDTracks) == -1)
+	    if (cd_get_tracks(&CDTrack, &NumCDTracks))
 		return 1;
 	    if (NumCDTracks == 0) {
+		CDMode = ":off";
 		return 1;
 	    }
 	    --CDTrack;
diff --git a/src/ui/menus.cpp b/src/ui/menus.cpp
index 8e1e51ce5..f16be502e 100644
--- a/src/ui/menus.cpp
+++ b/src/ui/menus.cpp
@@ -1752,6 +1752,8 @@ global void SoundOptions(void)
 #if defined(USE_LIBCDA) || defined(USE_SDLCD)
     if (strcmp(":off", CDMode) && strcmp(":stopped", CDMode))
 	SoundOptionsMenuItems[i].d.gem.state = MI_GSTATE_CHECKED;
+    else
+	SoundOptionsMenuItems[i].d.gem.state = MI_GSTATE_UNCHECKED;
 #ifdef USE_LIBCDA
     cd_get_volume(&i, &i);
     SoundOptionsMenuItems[14].d.hslider.percent = (i * 100) / 255;
@@ -1837,14 +1839,14 @@ local void SetCdPower(Menuitem *mi)
     /// Start Playing CD
     if (!strcmp(":off", CDMode) || !strcmp(":stopped", CDMode)) {
 	PlayMusic(":random");
-	if (!cd_current_track())
-	    SoundOptionsMenuItems[i].d.gem.state = MI_GSTATE_UNCHECKED;
     } else {
     /// Stop Playing CD
         cd_stop();
 	CDMode = ":stopped";
     }
 #endif
+    EndMenu();
+    SoundOptions();
 }
 
 local void SetFogOfWar(Menuitem *mi)