diff --git a/scripts/imgtool.py b/scripts/imgtool.py
index f102111..f3bd016 100755
--- a/scripts/imgtool.py
+++ b/scripts/imgtool.py
@@ -116,8 +116,10 @@
 @click.argument('infile')
 @click.option('-M', '--max-sectors', type=int,
               help='When padding allow for this amount of sectors (defaults to 128)')
-@click.option('--pad', type=BasedIntParamType(),
-              help='Pad image to this many bytes, adding trailer magic')
+@click.option('--pad', default=False, is_flag=True,
+              help='Pad image to --slot-size bytes, adding trailer magic')
+@click.option('-S', '--slot-size', type=BasedIntParamType(), required=True,
+              help='Size of the slot where the image will be written')
 @click.option('--included-header', default=False, is_flag=True,
               help='Image has gap for header')
 @click.option('-H', '--header-size', type=BasedIntParamType(), required=True)
@@ -126,16 +128,18 @@
               required=True)
 @click.option('-k', '--key', metavar='filename')
 @click.command(help='Create a signed or unsigned image')
-def sign(key, align, version, header_size, included_header, pad, max_sectors,
-         infile, outfile):
+def sign(key, align, version, header_size, included_header, slot_size, pad,
+         max_sectors, infile, outfile):
     img = image.Image.load(infile, version=decode_version(version),
                            header_size=header_size,
-                           included_header=included_header, pad=pad)
+                           included_header=included_header, pad=pad,
+                           align=int(align), slot_size=slot_size,
+                           max_sectors=max_sectors)
     key = load_key(key) if key else None
     img.sign(key)
 
-    if pad is not None:
-        img.pad_to(pad, int(align), max_sectors)
+    if pad:
+        img.pad_to(slot_size)
 
     img.save(outfile)
 
diff --git a/scripts/imgtool/image.py b/scripts/imgtool/image.py
index cca8231..bb7a1f6 100644
--- a/scripts/imgtool/image.py
+++ b/scripts/imgtool/image.py
@@ -84,20 +84,27 @@
         obj.check()
         return obj
 
-    def __init__(self, version=None, header_size=IMAGE_HEADER_SIZE, pad=0):
+    def __init__(self, version=None, header_size=IMAGE_HEADER_SIZE, pad=0,
+                 align=1, slot_size=0, max_sectors=DEFAULT_MAX_SECTORS):
         self.version = version or versmod.decode_version("0")
         self.header_size = header_size or IMAGE_HEADER_SIZE
         self.pad = pad
+        self.align = align
+        self.slot_size = slot_size
+        self.max_sectors = max_sectors
 
     def __repr__(self):
-        return "<Image version={}, header_size={}, base_addr={}, pad={}, \
-                format={}, payloadlen=0x{:x}>".format(
-                self.version,
-                self.header_size,
-                self.base_addr if self.base_addr is not None else "N/A",
-                self.pad,
-                self.__class__.__name__,
-                len(self.payload))
+        return "<Image version={}, header_size={}, base_addr={}, \
+                align={}, slot_size={}, max_sectors={}, format={}, \
+                payloadlen=0x{:x}>".format(
+                    self.version,
+                    self.header_size,
+                    self.base_addr if self.base_addr is not None else "N/A",
+                    self.align,
+                    self.slot_size,
+                    self.max_sectors,
+                    self.__class__.__name__,
+                    len(self.payload))
 
     def check(self):
         """Perform some sanity checking of the image."""
@@ -106,6 +113,13 @@
         if self.header_size > 0:
             if any(v != 0 for v in self.payload[0:self.header_size]):
                 raise Exception("Padding requested, but image does not start with zeros")
+        if self.slot_size > 0:
+            tsize = self._trailer_size(self.align, self.max_sectors)
+            padding = self.slot_size - (len(self.payload) + tsize)
+            if padding < 0:
+                msg = "Image size (0x{:x}) + trailer (0x{:x}) exceeds requested size 0x{:x}".format(
+                        len(self.payload), tsize, self.slot_size)
+                raise Exception(msg)
 
     def sign(self, key):
         self.add_header(key)
@@ -174,19 +188,16 @@
         m = DEFAULT_MAX_SECTORS if max_sectors is None else max_sectors
         return m * 3 * write_size + 8 * 2 + 16
 
-    def pad_to(self, size, align, max_sectors):
+    def pad_to(self, size):
         """Pad the image to the given size, with the given flash alignment."""
-        tsize = self._trailer_size(align, max_sectors)
+        tsize = self._trailer_size(self.align, self.max_sectors)
         padding = size - (len(self.payload) + tsize)
-        if padding < 0:
-            msg = "Image size (0x{:x}) + trailer (0x{:x}) exceeds requested size 0x{:x}".format(
-                    len(self.payload), tsize, size)
-            raise Exception(msg)
         pbytes  = b'\xff' * padding
         pbytes += b'\xff' * (tsize - len(boot_magic))
         pbytes += boot_magic
         self.payload += pbytes
 
+
 class HexImage(Image):
 
     def load(self, path):
