diff --git a/klibc/arch/parisc/crt0.S b/klibc/arch/parisc/crt0.S
index 7adc6c4..7428443 100644
--- a/klibc/arch/parisc/crt0.S
+++ b/klibc/arch/parisc/crt0.S
@@ -1,34 +1,37 @@
-        .align 4
+	.align 4
 
-        .import $global$, data
-        .import __libc_init, code
+	.import $global$, data
+	.import __libc_init, code
  
-        .global _start
-        .export _start, ENTRY
-        .type _start,@function
+	.global _start
+	.export _start, ENTRY
+	.type _start,@function
 
-        .proc
-        .callinfo
+	.proc
+	.callinfo
 
 _start: 
 /* extend the stack by 64-bytes */
-        ldo     64(%sp), %sp
+	ldo	64(%sp), %sp
 	
 /* %r25 = argc
  * %r24 = argv
- * envp = argv + (argc + 1)        
+ * envp = argv + (argc + 1)	   
  * elfdata = (argv - 4)
  */
-        ldo     -4(%r24), %r26
+	ldo	-4(%r24), %r26
 
 /* load global data */
-        ldil	L%$global$, %dp
-        ldo	R%$global$(%dp), %dp
+	ldil	L%$global$, %dp
+	ldo	R%$global$(%dp), %dp
+
+/* Indicate that we don't need no stinkin' atexit callback */
+	ldi	0,%r25
 
 /* branch to __libc_init */
-        bl	__libc_init,%r2
-        nop
+	bl	__libc_init,%r2
+	nop
 /* break miserably if we ever return */
-        iitlbp	%r0,(%sr0,%r0) /* illegal instruction */
-        nop
-        .procend
+	iitlbp	%r0,(%sr0,%r0) /* illegal instruction */
+	nop
+	.procend
diff --git a/utils/fstype.c b/utils/fstype.c
index c7efbfe..e9cdf28 100644
--- a/utils/fstype.c
+++ b/utils/fstype.c
@@ -7,7 +7,7 @@
  *  FSSIZE - filesystem size (if known)
  *
  * We currently detect (in order):
- *  gzip, cramfs, romfs, xfs, minix, ext3, ext2, reiserfs
+ *  gzip, cramfs, romfs, xfs, minix, ext3, ext2, reiserfs, jfs
  *
  * MINIX, ext3 and Reiserfs bits are currently untested.
  */
@@ -16,8 +16,10 @@
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
+#include <fcntl.h>
 #include <endian.h>
 #include <netinet/in.h>
+#include <sys/vfs.h>
 
 #define cpu_to_be32(x) __cpu_to_be32(x)	/* Needed by romfs_fs.h */
 
@@ -29,6 +31,12 @@
 #include "xfs_sb.h"
 
 /*
+ * Slightly cleaned up version of jfs_superblock to
+ * avoid pulling in other kernel header files.
+ */
+#include "jfs_superblock.h"
+
+/*
  * reiserfs_fs.h is too sick to include directly.
  * Use a cleaned up version.
  */
@@ -174,6 +182,19 @@
 	return 0;
 }
 
+static int jfs_image(const unsigned char *buf, unsigned long *blocks)
+{
+	const struct jfs_superblock *sb =
+		(const struct jfs_superblock *)buf;
+
+	if (!memcmp(sb->s_magic, JFS_MAGIC, 4)) {
+		/* 512 is the VFS Block size */
+		*blocks = __le32_to_cpu(sb->s_size) * 512;;
+		return 1;
+	}
+	return 0;
+}
+
 struct imagetype {
 	off_t		block;
 	const char	name[12];
@@ -189,7 +210,8 @@
 	{ 1,	"ext3",		ext3_image	},
 	{ 1,	"ext2",		ext2_image	},
 	{ 8,	"reiserfs",	reiserfs_image	},
-	{ 64,	"reiserfs",	reiserfs_image	}
+	{ 64,	"reiserfs",	reiserfs_image	},
+	{ 32,	"jfs",		jfs_image	}
 };
 
 int main(int argc, char *argv[])
@@ -199,21 +221,30 @@
 	off_t cur_block = (off_t)-1;
 	unsigned int i;
 	int ret;
+	int fd = 0;
 
 	progname = argv[0];
 
-	if (argc != 1) {
-		fprintf(stderr, "Usage: %s < file\n", progname);
+	if (argc >= 2) {
+		fprintf(stderr, "Usage: %s [file]\n", progname);
 		return 1;
 	}
 
+	if (argc >= 1 && strcmp(argv[1], "-")) {
+		fd = open(argv[1], O_RDONLY);
+		if ( fd < 0 ) {
+			perror(argv[1]);
+			return 1;
+		}
+	}
+
 	for (i = 0; i < ARRAY_SIZE(images); i++) {
 		if (cur_block != images[i].block) {
 			/*
 			 * Read block.
 			 */
 			cur_block = images[i].block;
-			ret = readfile(0, cur_block * BLOCK_SIZE, buf,
+			ret = readfile(fd, cur_block * BLOCK_SIZE, buf,
 				       BLOCK_SIZE);
 			if (ret != 0)
 				return ret;
diff --git a/utils/jfs_superblock.h b/utils/jfs_superblock.h
new file mode 100644
index 0000000..7f60a8c
--- /dev/null
+++ b/utils/jfs_superblock.h
@@ -0,0 +1,114 @@
+/*
+ *   Copyright (C) International Business Machines Corp., 2000-2003
+ *
+ *   This program is free software;  you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or 
+ *   (at your option) any later version.
+ * 
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+ *   the GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program;  if not, write to the Free Software 
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#ifndef	_H_JFS_SUPERBLOCK
+#define _H_JFS_SUPERBLOCK
+
+struct timestruc_t {
+	__le32 tv_sec;
+	__le32 tv_nsec;
+};
+
+/*
+ * make the magic number something a human could read
+ */
+#define JFS_MAGIC 	"JFS1"	/* Magic word */
+
+#define JFS_VERSION	2	/* Version number: Version 2 */
+
+#define LV_NAME_SIZE	11	/* MUST BE 11 for OS/2 boot sector */
+
+/* 
+ *	aggregate superblock 
+ *
+ * The name superblock is too close to super_block, so the name has been
+ * changed to jfs_superblock.  The utilities are still using the old name.
+ */
+struct jfs_superblock {
+	char s_magic[4];	/* 4: magic number */
+	__le32 s_version;	/* 4: version number */
+
+	__le64 s_size;		/* 8: aggregate size in hardware/LVM blocks;
+				 * VFS: number of blocks
+				 */
+	__le32 s_bsize;		/* 4: aggregate block size in bytes; 
+				 * VFS: fragment size
+				 */
+	__le16 s_l2bsize;	/* 2: log2 of s_bsize */
+	__le16 s_l2bfactor;	/* 2: log2(s_bsize/hardware block size) */
+	__le32 s_pbsize;	/* 4: hardware/LVM block size in bytes */
+	__le16 s_l2pbsize;	/* 2: log2 of s_pbsize */
+	__le16 pad;		/* 2: padding necessary for alignment */
+
+	__le32 s_agsize;	/* 4: allocation group size in aggr. blocks */
+
+	__le32 s_flag;		/* 4: aggregate attributes:
+				 *    see jfs_filsys.h
+				 */
+	__le32 s_state;		/* 4: mount/unmount/recovery state: 
+				 *    see jfs_filsys.h
+				 */
+	__le32 s_compress;		/* 4: > 0 if data compression */
+
+	__le64 s_ait2;		/* 8: first extent of secondary
+				 *    aggregate inode table
+				 */
+
+	__le64 s_aim2;		/* 8: first extent of secondary
+				 *    aggregate inode map
+				 */
+	__le32 s_logdev;		/* 4: device address of log */
+	__le32 s_logserial;	/* 4: log serial number at aggregate mount */
+	__le64 s_logpxd;		/* 8: inline log extent */
+
+	__le64 s_fsckpxd;	/* 8: inline fsck work space extent */
+
+	struct timestruc_t s_time;	/* 8: time last updated */
+
+	__le32 s_fsckloglen;	/* 4: Number of filesystem blocks reserved for
+				 *    the fsck service log.  
+				 *    N.B. These blocks are divided among the
+				 *         versions kept.  This is not a per
+				 *         version size.
+				 *    N.B. These blocks are included in the 
+				 *         length field of s_fsckpxd.
+				 */
+	char s_fscklog;		/* 1: which fsck service log is most recent
+				 *    0 => no service log data yet
+				 *    1 => the first one
+				 *    2 => the 2nd one
+				 */
+	char s_fpack[11];	/* 11: file system volume name 
+				 *     N.B. This must be 11 bytes to
+				 *          conform with the OS/2 BootSector
+				 *          requirements
+				 *          Only used when s_version is 1
+				 */
+
+	/* extendfs() parameter under s_state & FM_EXTENDFS */
+	__le64 s_xsize;		/* 8: extendfs s_size */
+	__le64 s_xfsckpxd;	/* 8: extendfs fsckpxd */
+	__le64 s_xlogpxd;	/* 8: extendfs logpxd */
+	/* - 128 byte boundary - */
+
+	char s_uuid[16];	/* 16: 128-bit uuid for volume */
+	char s_label[16];	/* 16: volume label */
+	char s_loguuid[16];	/* 16: 128-bit uuid for log device */
+
+};
+
+#endif /*_H_JFS_SUPERBLOCK */
