diff -urNad xcdroast-0.98+0alpha16~/src/io.c xcdroast-0.98+0alpha16/src/io.c
--- xcdroast-0.98+0alpha16~/src/io.c	2008-08-21 15:11:40.000000000 +0200
+++ xcdroast-0.98+0alpha16/src/io.c	2009-12-29 22:54:08.571188849 +0100
@@ -10062,6 +10062,7 @@
 
 gint check_version_cdda2wav(gchar *match, gchar *found) {
 gchar line[MAXLINE];
+gchar vline[MAXLINE];
 gchar ver[MAXLINE];
 FILE *fpin;
 gchar *p;
@@ -10076,32 +10077,38 @@
         }
 
 	strcpy(line,"");
+	strcpy(vline,"");
         for (;;) {
                 if (fgets(line,MAXLINE,fpin) == NULL) 
                         break;
 		dodebug(10,"got: %s",line);
+
+	        /* only get first line */
+        	if (strcmp(vline,"") == 0) {
+                	strncpy(vline, line, MAXLINE);
+        	}
         }
 
         if (pclose(fpin) == -1) {
                 g_error("pclose error\n");
         }
 
-	if (strcmp(line,"") == 0 || strstr(line,"sh:") != NULL) {
+	if (strcmp(vline,"") == 0 || strstr(vline,"sh:") != NULL) {
 		/* failed to open - permission denied */
 		return 2;
 	}
 
-	/* now line contains the version string of cdda2wav */
+	/* now vline contains the version string of cdda2wav */
 	/* try to extract the version number */
 
-	p = strstr(line,"version");
+	p = strstr(vline,"version");
 	if (p != NULL) {
 		p = strtok(p+8, " _");
 		if (p != NULL) {
 			strcpy(ver,p);
 		}
 	} else {
-		p = strstr(line,"cdda2wav");
+		p = strstr(vline,"cdda2wav");
 		if (p != NULL) {
 			p = strtok(p+9, " ");
 			if (p != NULL) {
