diff --git a/common/aboot.c b/common/aboot.c
index 7f412ac0ad4f6620f6e150ba5a25248b6bc408e8..6d76c1e758f9a517cb1e09a5053244bbf55c2e4d 100644
--- a/common/aboot.c
+++ b/common/aboot.c
@@ -52,6 +52,8 @@ typedef struct sparse_buffer {
 	u16	type;
 } sparse_buffer_t;
 
+static uint32_t last_offset;
+
 static unsigned int sparse_get_chunk_data_size(sparse_header_t *sparse,
 					       chunk_header_t *chunk)
 {
@@ -301,10 +303,19 @@ int store_sparse_image(sparse_storage_t *storage, void *storage_priv,
 		return -EINVAL;
 	}
 
-	puts("Flashing Sparse Image\n");
+	/*
+	 * If it's a new flashing session, start at the beginning of
+	 * the partition. If not, then simply resume where we were.
+	 */
+	if (session_id > 0)
+		start = last_offset;
+	else
+		start = storage->start;
+
+	printf("Flashing sparse image on partition %s at offset 0x%x (ID: %d)\n",
+	       storage->name, start * storage->block_sz, session_id);
 
 	/* Start processing chunks */
-	start = storage->start;
 	for (chunk = 0; chunk < sparse_header->total_chunks; chunk++) {
 		uint32_t blkcnt;
 
@@ -376,5 +387,7 @@ int store_sparse_image(sparse_storage_t *storage, void *storage_priv,
 		return -EIO;
 	}
 
+	last_offset = start + total_blocks;
+
 	return 0;
 }