diff --git a/misc/mke2fs.8.in b/misc/mke2fs.8.in
index e12b42e..1e9a203 100644
--- a/misc/mke2fs.8.in
+++ b/misc/mke2fs.8.in
@@ -189,7 +189,7 @@
 filesystem blocks. This is the number of blocks read or written to disk
 before moving to next disk. This mostly affects placement of filesystem
 metadata like bitmaps at
-.BR mke2fs (2)
+.B mke2fs
 time to avoid placing them on a single disk, which can hurt the performanace.
 It may also be used by block allocator.
 .TP
@@ -205,6 +205,15 @@
 Reserve enough space so that the block group descriptor table can grow
 to support a filesystem that has max-online-resize blocks.
 .TP
+.B lazy_itable_init= \fI<0 to disable, 1 to enable>
+If enabled and the uninit_bg feature is enabled, the inode table will
+not fully initialized by 
+.BR mke2fs .
+This speeds up filesystem
+initialization noitceably, but it requires the kernel to finish
+initializing the filesystem in the background when the filesystem is
+first mounted.
+.TP
 .B test_fs
 Set a flag in the filesystem superblock indicating that it may be
 mounted using experimental kernel code, such as the ext4dev filesystem.
@@ -449,11 +458,20 @@
 @JDEV@must be created with the same
 @JDEV@block size as the filesystems that will be using it.
 .TP
+.B extent
+Instead of using the indirect block scheme for storing the location of
+data blocks in an inode, use extents instead.  This is a much more
+efficient encoding which speeds up filesystem access, especially for
+large files.
+.TP
 .B uninit_bg
-Create a filesystem without initializing all of the groups.  This speeds
-up filesystem creation time noticably, and can also reduce
+Create a filesystem without initializing all of the block groups.  This 
+feature also enables checksums and highest-inode-used statistics in each
+blockgroup.  This feature can
+speed up filesystem creation time noticably (if lazy_itable_init is
+enabled), and can also reduce
 .BR e2fsck time
-dramatically.  This feature is only supported by the ext4 filesystem in
+dramatically.  It is only supported by the ext4 filesystem in
 recent Linux kernels.
 .TP
 .B resize_inode
@@ -523,7 +541,7 @@
 .B mke2fs
 will pick a single default usage type based on the size of the filesystem to
 be created.  If the filesystem size is less than or equal to 3 megabytes,
-.BR mke2fs (8)
+.B mke2fs
 will use the filesystem type
 .IR floppy .
 If the filesystem size is greater than 3 but less than or equal to
diff --git a/misc/mke2fs.c b/misc/mke2fs.c
index a58b116..9940d3f 100644
--- a/misc/mke2fs.c
+++ b/misc/mke2fs.c
@@ -77,6 +77,7 @@
 int	noaction;
 int	journal_size;
 int	journal_flags;
+int	lazy_itable_init;
 char	*bad_blocks_filename;
 __u32	fs_stride;
 
@@ -399,14 +400,13 @@
 	return 0;
 }	
 
-static void write_inode_tables(ext2_filsys fs)
+static void write_inode_tables(ext2_filsys fs, int lazy_flag)
 {
 	errcode_t	retval;
 	blk_t		blk;
 	dgrp_t		i;
 	int		num;
 	struct progress_struct progress;
-	int		lazy_flag = 0;
 
 	if (quiet)
 		memset(&progress, 0, sizeof(progress));
@@ -886,6 +886,13 @@
 			}
 		} else if (!strcmp(token, "test_fs")) {
 			param->s_flags |= EXT2_FLAGS_TEST_FILESYS;
+		} else if (!strcmp(token, "lazy_itable_init")) {
+			if (!arg) {
+				r_usage++;
+				badopt = token;
+				continue;
+			}
+			lazy_itable_init = strtoul(arg, &p, 0);
 		} else {
 			r_usage++;
 			badopt = token;
@@ -899,8 +906,9 @@
 			"Valid extended options are:\n"
 			"\tstride=<RAID per-disk data chunk in blocks>\n"
 			"\tstripe-width=<RAID stride * data disks in blocks>\n"
-			"\tresize=<resize maximum size in blocks>\n\n"
-			"\ttest_fs\n"),
+			"\tresize=<resize maximum size in blocks>\n"
+			"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
+			"\ttest_fs\n\n"),
 			badopt ? badopt : "");
 		free(buf);
 		exit(1);
@@ -1120,6 +1128,16 @@
 	return ret;
 }
 
+static int get_bool_from_profile(char **fs_types, const char *opt, int def_val)
+{
+	int ret;
+	char **cpp;
+
+	profile_get_boolean(profile, "defaults", opt, 0, def_val, &ret);
+	for (cpp = fs_types; *cpp; cpp++)
+		profile_get_boolean(profile, "fs_types", *cpp, opt, ret, &ret);
+	return ret;
+}
 
 extern const char *mke2fs_default_profile;
 static const char *default_files[] = { "<default>", 0 };
@@ -1645,6 +1663,9 @@
 		int_log2(blocksize >> EXT2_MIN_BLOCK_LOG_SIZE);
 
 	blocksize = EXT2_BLOCK_SIZE(&fs_param);
+
+	lazy_itable_init = get_bool_from_profile(fs_types, 
+						 "lazy_itable_init", 0);
 	
 	if (extended_opts)
 		parse_extended_opts(&fs_param, extended_opts);
@@ -1660,6 +1681,17 @@
 		exit(1);
 	}
 
+	if (EXT2_HAS_RO_COMPAT_FEATURE(&fs_param,
+				       EXT4_FEATURE_RO_COMPAT_GDT_CSUM) &&
+	    EXT2_HAS_COMPAT_FEATURE(&fs_param, EXT2_FEATURE_COMPAT_LAZY_BG)) {
+		com_err(program_name, 0,
+			_("lazy_bg and uninit_bg can not be enabled "
+			  "at the same time;\n\t"
+			  "use -E lazy_itable_init=1 to defer zeroing the "
+			  "inode table."));
+		exit(1);
+	}
+
 	if (fs_param.s_blocks_per_group) {
 		if (fs_param.s_blocks_per_group < 256 ||
 		    fs_param.s_blocks_per_group > 8 * (unsigned) blocksize) {
@@ -1886,7 +1918,7 @@
 				ret_blk);
 		}
 		setup_lazy_bg(fs);
-		write_inode_tables(fs);
+		write_inode_tables(fs, lazy_itable_init);
 		create_root_dir(fs);
 		create_lost_and_found(fs);
 		reserve_inodes(fs);
diff --git a/misc/mke2fs.conf.5.in b/misc/mke2fs.conf.5.in
index 1fc16e7..6734bf3 100644
--- a/misc/mke2fs.conf.5.in
+++ b/misc/mke2fs.conf.5.in
@@ -282,6 +282,18 @@
 This relation specifies the default blocksize if the user does not
 specify a blocksize on the command line.
 .TP
+.I lazy_itable_init
+This relation is a boolean which specifies whether the inode table should 
+be lazily initialized.  It only has meaning if the uninit_bg feature is
+enabled.  If lazy_itable_init is true and the uninit_bg feature is
+enabled,  the inode table will
+not fully initialized by 
+.BR mke2fs (8).
+This speeds up filesystem
+initialization noitceably, but it requires the kernel to finish
+initializing the filesystem in the background when the filesystem is
+first mounted.
+.TP
 .I inode_ratio
 This relation specifies the default inode ratio if the user does not
 specify one on the command line.
