diff --git a/misc/cdrom.c b/misc/cdrom.c
index 60f9cc053f612a274efdac3041b8fe15535633f1..ec89b8a7adfc62f31afd4c4af99a41e49b9c8e5d 100644
--- a/misc/cdrom.c
+++ b/misc/cdrom.c
@@ -612,21 +612,35 @@ int	CDROM_Reset(WINE_CDAUDIO* wcda, int parentdev)
     return ret;
 }
 
+/**************************************************************************
+ *                             CDROM_Data_FindBestVoldesc       [internal]
+ */
 WORD CDROM_Data_FindBestVoldesc(int fd)
 {
     BYTE cur_vd_type, max_vd_type = 0;
-    unsigned int offs, best_offs = 0;
+    unsigned int offs, best_offs=0, extra_offs = 0;
+    char sig[3];
+
 
     for (offs=0x8000; offs <= 0x9800; offs += 0x800)
     {
-        lseek(fd, offs, SEEK_SET);
+	/* if 'CDROM' occurs at position 8, this is a pre-iso9660 cd, and 
+	 * the volume label is displaced forward by 8
+	 */
+	lseek(fd, offs+11, SEEK_SET); /* check for non-ISO9660 signature */
+	read(fd, &sig, 3);
+	if ((sig[0]=='R')&&(sig[1]=='O')&&(sig[2]=='M'))
+	{
+	    extra_offs=8;
+	}
+        lseek(fd, offs+extra_offs, SEEK_SET);
         read(fd, &cur_vd_type, 1);
         if (cur_vd_type == 0xff) /* voldesc set terminator */
             break;
         if (cur_vd_type > max_vd_type)
         {
             max_vd_type = cur_vd_type;
-            best_offs = offs;
+            best_offs = offs + extra_offs;
         }
     }
     return best_offs;
@@ -858,6 +872,8 @@ DWORD CDROM_GetLabel(int drive, char *label)
 		if (!cdname) cdname = "XA 2.1";
 	    case CDS_XA_2_2:
 		if (!cdname) cdname = "XA 2.2";
+	    case CDS_MIXED:
+		if (!cdname) cdname = "Mixed mode";
 	    case -1:
 		if (!cdname) cdname = "Unknown/ISO file";
 
@@ -867,11 +883,6 @@ DWORD CDROM_GetLabel(int drive, char *label)
 			ret = 0;
 		break;
 
-	    case CDS_MIXED:
-		cdname = "Mixed mode";
-		FIXME("Need to get the label of a mixed mode CD: not implemented yet !\n");
-		/* fall through */
-
 	    case CDS_NO_INFO:
 		if (!cdname) cdname = "No_info";
 		ret = 0;