diff -Naur mondo-2.2.2/src/common/libmondo-devices.c mondo-2.2.2m/src/common/libmondo-devices.c
--- mondo-2.2.2/src/common/libmondo-devices.c	2007-02-14 10:09:25.000000000 +0100
+++ mondo-2.2.2m/src/common/libmondo-devices.c	2007-02-14 14:10:31.000000000 +0100
@@ -1611,8 +1611,7 @@
 			finish(1);
 		}
 	case tape:
-
-		if (find_tape_device_and_size(bkpinfo->media_device, sz_size)) {
+		if (find_tape_device_and_size(bkpinfo->media_device, &sz_size)) {
 			mr_msg(3, "Ok, using vanilla scsi tape.");
 			strcpy(bkpinfo->media_device, VANILLA_SCSI_TAPE);
 			if ((fin = fopen(bkpinfo->media_device, "r"))) {
@@ -1634,7 +1633,14 @@
 					_("I think I've found your tape streamer at %s; am I right on the money?"),
 					bkpinfo->media_device);
 			if (!ask_me_yes_or_no(tmp)) {
-				bkpinfo->media_device[0] = '\0';
+			  bkpinfo->media_device[0] = '\0';
+			  if (!popup_and_get_string
+				  ("Device name?",
+				   "What is the /dev entry of your tape streamer?",
+				   bkpinfo->media_device, MAX_STR_LEN / 4)) {
+				log_to_screen("User has chosen not to backup the PC");
+				finish(1);
+			  }
 			}
 			mr_free(tmp);
 		} else {
@@ -1652,8 +1658,10 @@
 			finish(1);
 		}
 		mr_free(tmp);
-		mr_msg(4, "sz_size = %s", sz_size);
-		mr_free(sz_size);
+		if (sz_size) {
+		  mr_msg(4, "sz_size = %s", sz_size);
+		  mr_free(sz_size);
+		}
 		bkpinfo->media_size[0] = 0;
 		mr_msg(4, "media_size[0] = %ld", bkpinfo->media_size[0]);
 		if (bkpinfo->media_size[0] <= 0) {
diff -Naur mondo-2.2.2/src/common/libmondo-raid.h mondo-2.2.2m/src/common/libmondo-raid.h
--- mondo-2.2.2/src/common/libmondo-raid.h	2006-05-20 16:54:20.000000000 +0200
+++ mondo-2.2.2m/src/common/libmondo-raid.h	2007-02-14 14:10:31.000000000 +0100
@@ -1,3 +1,4 @@
+
 /* libmondo-raid.h
  * $Id: libmondo-raid.h 558 2006-05-20 14:54:20Z bcornec $
  */
@@ -39,7 +40,7 @@
 #undef raid_device_record
 #else
 void add_disk_to_raid_device(struct list_of_disks *disklist,
-							 char *device_to_add, int index);
+							 char *device_to_add, int idx);
 #endif
 
 int create_raidtab_from_mdstat(char *raidtab_fname);
diff -Naur mondo-2.2.2/src/common/libmondo-stream.c mondo-2.2.2m/src/common/libmondo-stream.c
--- mondo-2.2.2/src/common/libmondo-stream.c	2007-02-14 11:57:26.000000000 +0100
+++ mondo-2.2.2m/src/common/libmondo-stream.c	2007-02-14 14:10:31.000000000 +0100
@@ -250,24 +250,23 @@
  * @param siz Where to put the tape size (a string like "4GB")
  * @return 0 if success, nonzero if failure (in which @p dev and @p siz are undefined).
  */
-int find_tape_device_and_size(char *dev, char *siz)
+int find_tape_device_and_size(char *dev, char **siz)
 {
+	assert(dev);
+	assert(siz);
 	char *tmp = NULL;
 	char *command = NULL;
 	char *cdr_exe = NULL;
-//  char tape_description_[MAX_STR_LEN];
-//  char tape_manufacturer_cdr[MAX_STR_LEN];
-//  FILE*fin;
 	int res;
 
 	log_to_screen("I am looking for your tape streamer. Please wait.");
-	dev[0] = siz[0] = '\0';
+	dev[0] = '\0';
 	if (find_home_of_exe("cdrecord")) {
 		mr_asprintf(&cdr_exe, "cdrecord");
 	} else {
 		mr_asprintf(&cdr_exe, "dvdrecord");
 	}
-	mr_asprintf(command, "%s -scanbus 2> /dev/null | grep -i tape | wc -l",
+	mr_asprintf(&command, "%s -scanbus 2> /dev/null | grep -i tape | wc -l",
 			cdr_exe);
 	mr_asprintf(&tmp, call_program_and_get_last_line_of_output(command));
 	mr_free(command);
@@ -275,32 +274,14 @@
 		log_it
 			("Either too few or too many tape streamers for me to detect...");
 		strcpy(dev, VANILLA_SCSI_TAPE);
+		mr_free(cdr_exe);
+		mr_free(tmp);
 		return 1;
 	}
 	mr_free(tmp);
 
-	mr_asprintf(command,
-			"%s -scanbus 2> /dev/null | tr -s '\t' ' ' | grep \"[0-9]*,[0-9]*,[0-9]*\" | grep -v \"[0-9]*) \\*\" | grep -i TAPE | cut -d' ' -f2 | head -n1",
-			cdr_exe);
-
-	mr_asprintf(&tmp, call_program_and_get_last_line_of_output(command));
-	mr_free(command);
-	if (strlen(tmp) < 2) {
-		log_it("Could not find tape device");
-		return 1;
-	}
-	mr_free(tmp);
-
-	mr_asprintf(command,
-			"%s -scanbus 2> /dev/null | tr -s '\t' ' ' | grep \"[0-9]*,[0-9]*,[0-9]*\" | grep -v \"[0-9]*) \\*\" | grep -i TAPE | cut -d' ' -f3 | cut -d')' -f1 | head -n1",
-			cdr_exe);
-	mr_free(cdr_exe);
-	mr_asprintf(&tmp, call_program_and_get_last_line_of_output(command));
-	mr_free(command);
 	strcpy(dev, VANILLA_SCSI_TAPE);
 	dev[strlen(dev) - 1] = '\0';
-	strcat(dev, tmp);			// e.g. '/dev/st0' becomes '/dev/stN'
-	mr_free(tmp);
 
 	res = 0;
 	if (!mt_says_tape_exists(dev)) {
@@ -342,7 +323,6 @@
 		}
 	}
 
-	siz[0] = '\0';
 	log_it("res=%d; dev=%s", res, dev);
 
 	if (res) {
@@ -350,10 +330,10 @@
 	}
 
 	if (strlen(tmp) < 2) {
-		siz[0] = '\0';
+	    mr_asprintf(siz, "");
 		log_it("Warning - size of tape unknown");
 	} else {
-		strcpy(siz, tmp);
+		mr_asprintf(siz, tmp);
 	}
 	mr_free(tmp);
 	return (0);
diff -Naur mondo-2.2.2/src/common/libmondo-stream-EXT.h mondo-2.2.2m/src/common/libmondo-stream-EXT.h
--- mondo-2.2.2/src/common/libmondo-stream-EXT.h	2006-06-26 13:12:48.000000000 +0200
+++ mondo-2.2.2m/src/common/libmondo-stream-EXT.h	2007-02-14 14:10:31.000000000 +0100
@@ -4,7 +4,7 @@
 
 extern int closein_tape(struct s_bkpinfo *bkpinfo);
 extern int closeout_tape(struct s_bkpinfo *bkpinfo);
-extern int find_tape_device_and_size(char *dev, char *siz);
+extern int find_tape_device_and_size(char *dev, char **siz);
 extern void insist_on_this_tape_number(int tapeno);
 extern void log_tape_pos(void);
 extern int maintain_collection_of_recent_archives(char *td,
diff -Naur mondo-2.2.2/src/common/libmondo-stream.h mondo-2.2.2m/src/common/libmondo-stream.h
--- mondo-2.2.2/src/common/libmondo-stream.h	2006-06-26 13:12:48.000000000 +0200
+++ mondo-2.2.2m/src/common/libmondo-stream.h	2007-02-14 14:10:31.000000000 +0100
@@ -6,7 +6,7 @@
 
 int closein_tape(struct s_bkpinfo *bkpinfo);
 int closeout_tape(struct s_bkpinfo *bkpinfo);
-int find_tape_device_and_size(char *dev, char *siz);
+int find_tape_device_and_size(char *dev, char **siz);
 void insist_on_this_tape_number(int tapeno);
 void log_tape_pos(void);
 int maintain_collection_of_recent_archives(char *td, char *latest_fname);
diff -Naur mondo-2.2.2/src/include/mr_mem.h mondo-2.2.2m/src/include/mr_mem.h
--- mondo-2.2.2/src/include/mr_mem.h	2007-02-14 10:09:25.000000000 +0100
+++ mondo-2.2.2m/src/include/mr_mem.h	2007-02-14 14:10:30.000000000 +0100
@@ -14,10 +14,11 @@
 #endif
 #include <stdarg.h>
 #include <stdio.h>
+#include <assert.h>
 
 /* functions (public methods) */
 
-#define mr_free(x) mr_free_int((void **)&x,__LINE__,__FILE__)
+#define mr_free(x) assert(x); mr_free_int((void **)&x,__LINE__,__FILE__)
 #define mr_allocstr(x,y) mr_allocstr_int(x,y,__LINE__,__FILE__)
 #define mr_asprintf(x,y,args...) mr_asprintf_int(x,__LINE__,__FILE__,y,## args)
 #define mr_getline(x,y,z) mr_getline_int(x,y,z,__LINE__,__FILE__)
diff -Naur mondo-2.2.2/src/lib/mr_mem.c mondo-2.2.2m/src/lib/mr_mem.c
--- mondo-2.2.2/src/lib/mr_mem.c	2007-02-14 10:09:25.000000000 +0100
+++ mondo-2.2.2m/src/lib/mr_mem.c	2007-02-14 14:10:31.000000000 +0100
@@ -19,6 +19,8 @@
 
 #include "mr_err.h"
 #include "mr_msg.h"
+#include <assert.h>
+
 
 /*
  * Function that frees memory if necessary
@@ -31,6 +33,7 @@
 	/* free man pages says that if allocated is NULL 
 	 * nothing happens 
 	 */
+		assert(allocated);
 	if (*allocated != NULL) {
 		free(*allocated);
 		*allocated = NULL;
