diff --git a/sbin/mount_hammer/mount_hammer.c b/sbin/mount_hammer/mount_hammer.c
index 44d6c60..ff3f261 100644
--- a/sbin/mount_hammer/mount_hammer.c
+++ b/sbin/mount_hammer/mount_hammer.c
@@ -39,7 +39,9 @@
 #include <sys/diskmbr.h>
 #include <sys/stat.h>
 #include <sys/time.h>
+#include <sys/syslimits.h>
 #include <vfs/hammer/hammer_mount.h>
+#include <vfs/hammer/hammer_disk.h>
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -77,12 +79,17 @@ main(int ac, char **av)
 {
 	struct hammer_mount_info info;
 	struct vfsconf vfc;
+	struct hammer_volume_ondisk *od;
 	int mount_flags = 0;
 	int error;
 	int ch;
 	int init_flags = 0;
+	int ax;
+	int fd;
+	int pr;
 	char *mountpt;
 	char *ptr;
+	char fdevs[PATH_MAX*HAMMER_MAX_VOLUMES+PATH_MAX-1]; /* this is ugly, memory should be allocated dynamically */
 
 	bzero(&info, sizeof(info));
 	info.asof = 0;
@@ -138,7 +145,7 @@ main(int ac, char **av)
 		}
 		mountpt = av[0];
 		if (mount(vfc.vfc_name, mountpt, mount_flags, &info))
-			err(1, NULL);
+			err(1, "mountpoint %s", mountpt);
 		exit(0);
 	}
 
@@ -167,8 +174,26 @@ main(int ac, char **av)
 	if (error)
 		errx(1, "hammer filesystem is not available");
 
-	if (mount(vfc.vfc_name, mountpt, mount_flags, &info))
-		err(1, NULL);
+
+	if (mount(vfc.vfc_name, mountpt, mount_flags, &info)) {
+		/* Build fdevs in case of error to report failed devices */
+		for (ax = 0; ax < ac - 1; ax++) {
+			fd = open(info.volumes[ax], O_RDONLY);
+			od = malloc(HAMMER_BUFSIZE);
+			bzero(od, HAMMER_BUFSIZE);
+			pr = pread(fd, od, HAMMER_BUFSIZE, 0);
+			if (fd < 0 ||
+				od == NULL ||
+				pr != HAMMER_BUFSIZE ||
+				od->vol_signature != HAMMER_FSBUF_VOLUME) {
+					printf("Not a valid HAMMER filesystem: %s\n", info.volumes[ax]);
+					strlcat(fdevs, info.volumes[ax], sizeof(fdevs));
+					if (ax < ac - 2)
+						strlcat(fdevs, " ", sizeof(fdevs));
+			}
+		}
+		err(1,"mount %s on %s", fdevs, mountpt);
+	}
 	exit(0);
 }
 
