diff --git a/tools/padjffs2/src/padjffs2.c b/tools/padjffs2/src/padjffs2.c
index 58d99140d926741a789310174514ad3db318e926..aa932efa6f1fe0de140dde89af4265530f0db1a8 100644
--- a/tools/padjffs2/src/padjffs2.c
+++ b/tools/padjffs2/src/padjffs2.c
@@ -19,6 +19,7 @@
 #include <sys/stat.h>
 
 static char *progname;
+static unsigned int xtra_offset;
 static unsigned char eof_mark[4] = {0xde, 0xad, 0xc0, 0xde};
 
 #define ERR(fmt, ...) do { \
@@ -63,6 +64,8 @@ static int pad_image(char *name, uint32_t pad_mask)
 
 	memset(buf, '\xff', BUF_SIZE);
 
+	in_len += xtra_offset;
+
 	out_len = in_len;
 	while (pad_mask) {
 		uint32_t mask;
@@ -83,7 +86,7 @@ static int pad_image(char *name, uint32_t pad_mask)
 				pad_mask &= ~mask;
 		}
 
-		printf("padding image to %08x\n", (unsigned int) in_len);
+		printf("padding image to %08x\n", (unsigned int) in_len - xtra_offset);
 
 		while (out_len < in_len) {
 			ssize_t len;
@@ -131,14 +134,22 @@ int main(int argc, char* argv[])
 
 	if (argc < 2) {
 		fprintf(stderr,
-			"Usage: %s file [pad0] [pad1] [padN]\n",
+			"Usage: %s file [-x <xtra offset>] [pad0] [pad1] [padN]\n",
 			progname);
 		goto out;
 	}
 
 	pad_mask = 0;
-	for (i = 2; i < argc; i++)
+	for (i = 2; i < argc; i++) {
+		if (i == 2 && strcmp(argv[i], "-x") == 0) {
+			i++;
+			xtra_offset = strtoul(argv[i], NULL, 0);
+			fprintf(stderr, "assuming %u bytes offset\n",
+				xtra_offset);
+			continue;
+		}
 		pad_mask |= strtoul(argv[i], NULL, 0) * 1024;
+	}
 
 	if (pad_mask == 0)
 		pad_mask = (4 * 1024) | (8 * 1024) | (64 * 1024) |