diff --git a/misc/mke2fs.c b/misc/mke2fs.c
index bbf477a..e68c705 100644
--- a/misc/mke2fs.c
+++ b/misc/mke2fs.c
@@ -2307,6 +2307,32 @@ static int mke2fs_discard_device(ext2_filsys fs)
 	return retval;
 }
 
+static int mke2fs_wipe_btrfs(ext2_filsys fs)
+{
+	int blocks;	/* nr of blocks to zero */
+	blk64_t start;	/* location to zero out */
+	int retval = 0; /* accumulate any failures */
+
+	blocks = 1;
+	if (fs->blocksize < 4096)
+		blocks = 4096 / fs->blocksize;
+	/*
+	 * Wipe out any old btrfs superblocks, at
+	 * 64k, 64M, and 256G.
+	 */
+	start = 64ULL * 1024 / fs->blocksize;
+	retval += ext2fs_zero_blocks2(fs, start, blocks, NULL, NULL);
+	start = 64ULL * 1024 * 1024 / fs->blocksize;
+	if (start + blocks <= ext2fs_blocks_count(fs->super))
+		retval += ext2fs_zero_blocks2(fs, start, blocks, NULL, NULL);
+	start = 256ULL * 1024 * 1024 * 1024 / fs->blocksize;
+	if (start + blocks <= ext2fs_blocks_count(fs->super))
+		retval += ext2fs_zero_blocks2(fs, start, blocks, NULL, NULL);
+	/* free the static zeroing buffer */
+	ext2fs_zero_blocks2(0, 0, 0, 0, 0);
+	return retval;
+}
+
 static void fix_cluster_bg_counts(ext2_filsys fs)
 {
 	blk64_t	cluster, num_clusters, tot_free;
@@ -2439,6 +2465,9 @@ int main (int argc, char *argv[])
 			itable_zeroed = 1;
 		}
 	}
+		retval = mke2fs_wipe_btrfs(fs);
+		if (retval)
+			printf(_("Failed to wipe old btrfs super locations\n"));
 
 	sprintf(tdb_string, "tdb_data_size=%d", fs->blocksize <= 4096 ?
 		32768 : fs->blocksize * 8);
