diff --git a/tools/binman/etype/section.py b/tools/binman/etype/section.py
index f804329..7cbb500 100644
--- a/tools/binman/etype/section.py
+++ b/tools/binman/etype/section.py
@@ -159,17 +159,23 @@
             Contents of the entry along with any pad bytes before and
             after it (bytes)
         """
+        pad_byte = (entry._pad_byte if isinstance(entry, Entry_section)
+                    else self._pad_byte)
+
         data = b''
         # Handle padding before the entry
         if entry.pad_before:
-            data += tools.GetBytes(self._pad_byte, entry.pad_before)
+            data += tools.GetBytes(pad_byte, entry.pad_before)
 
         # Add in the actual entry data
         data += entry.GetData()
 
         # Handle padding after the entry
         if entry.pad_after:
-            data += tools.GetBytes(self._pad_byte, entry.pad_after)
+            data += tools.GetBytes(pad_byte, entry.pad_after)
+
+        if entry.size:
+            data += tools.GetBytes(pad_byte, entry.size - len(data))
 
         self.Detail('GetPaddedDataForEntry: size %s' % ToHexSize(self.data))
 
@@ -198,9 +204,6 @@
             # Add in the actual entry data
             section_data += data
 
-        if self.size:
-            section_data += tools.GetBytes(self._pad_byte,
-                                           self.size - len(section_data))
         self.Detail('GetData: %d entries, total size %#x' %
                     (len(self._entries), len(section_data)))
         return self.CompressData(section_data)
@@ -219,9 +222,8 @@
             Contents of the section along with any pad bytes before and
             after it (bytes)
         """
-        if self.section:
-            return super().GetPaddedData()
-        return self.GetData()
+        section = self.section or self
+        return section.GetPaddedDataForEntry(self)
 
     def GetData(self):
         return self._BuildSectionData()
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index 82be997..31e93c6 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -708,7 +708,6 @@
         """Test a simple binman run with debugging enabled"""
         self._DoTestFile('005_simple.dts', debug=True)
 
-    @unittest.skip('Disable for now until padding of images is supported')
     def testDual(self):
         """Test that we can handle creating two images
 
@@ -3872,9 +3871,7 @@
         before = tools.GetBytes(0, 8)
         after = tools.GetBytes(0, 4)
         all = before + U_BOOT_DATA + after
-
-        # This is not correct, but it is what binman currently produces
-        self.assertEqual(before + U_BOOT_DATA + tools.GetBytes(0, 16), data)
+        self.assertEqual(all, data)
 
         image = control.images['image']
         entries = image.GetEntries()
@@ -3882,6 +3879,7 @@
         self.assertEqual(0, section.offset)
         self.assertEqual(len(all), section.size)
         self.assertIsNone(section.data)
+        self.assertEqual(all, section.GetPaddedData())
 
         entry = section.GetEntries()['u-boot']
         self.assertEqual(16, entry.offset)
