diff --git a/tools/releasetools/build_image.py b/tools/releasetools/build_image.py
index a615d1a..94a9fda 100755
--- a/tools/releasetools/build_image.py
+++ b/tools/releasetools/build_image.py
@@ -21,9 +21,22 @@
 
 """
 import os
+import os.path
 import subprocess
 import sys
 
+def RunCommand(cmd):
+  """ Echo and run the given command
+
+  Args:
+    cmd: the command represented as a list of strings.
+  Returns:
+    The exit code.
+  """
+  print "Running: ", " ".join(cmd)
+  p = subprocess.Popen(cmd)
+  p.communicate()
+  return p.returncode
 
 def BuildImage(in_dir, prop_dict, out_file):
   """Build an image to out_file from in_dir with property prop_dict.
@@ -38,10 +51,12 @@
   """
   build_command = []
   fs_type = prop_dict.get("fs_type", "")
+  run_fsck = False
   if fs_type.startswith("ext"):
     build_command = ["mkuserimg.sh"]
     if "extfs_sparse_flag" in prop_dict:
       build_command.append(prop_dict["extfs_sparse_flag"])
+      run_fsck = True
     build_command.extend([in_dir, out_file, fs_type,
                           prop_dict["mount_point"]])
     if "partition_size" in prop_dict:
@@ -58,10 +73,27 @@
       build_command.append(prop_dict["selinux_fc"])
       build_command.append(prop_dict["mount_point"])
 
-  print "Running: ", " ".join(build_command)
-  p = subprocess.Popen(build_command);
-  p.communicate()
-  return p.returncode == 0
+  exit_code = RunCommand(build_command)
+  if exit_code != 0:
+    return False
+
+  if run_fsck:
+    # Inflate the sparse image
+    unsparse_image = os.path.join(
+        os.path.dirname(out_file), "unsparse_" + os.path.basename(out_file))
+    inflate_command = ["simg2img", out_file, unsparse_image]
+    exit_code = RunCommand(inflate_command)
+    if exit_code != 0:
+      os.remove(unsparse_image)
+      return False
+
+    # Run e2fsck on the inflated image file
+    e2fsck_command = ["e2fsck", "-f", "-n", unsparse_image]
+    exit_code = RunCommand(e2fsck_command)
+
+    os.remove(unsparse_image)
+
+  return exit_code == 0
 
 
 def ImagePropFromGlobalDict(glob_dict, mount_point):
