diff --git a/scripts/assemble.py b/scripts/assemble.py
index d8c824b..e895ee7 100755
--- a/scripts/assemble.py
+++ b/scripts/assemble.py
@@ -23,6 +23,14 @@
 import io
 import re
 import os.path
+import sys
+
+ZEPHYR_BASE = os.getenv("ZEPHYR_BASE")
+if not ZEPHYR_BASE:
+    sys.exit("$ZEPHYR_BASE environment variable undefined")
+
+sys.path.insert(0, os.path.join(ZEPHYR_BASE, "scripts", "dts"))
+import edtlib
 
 def same_keys(a, b):
     """Determine if the dicts a and b have the same keys in them"""
@@ -38,8 +46,8 @@
 size_re   = re.compile(r"^#define DT_FLASH_AREA_([0-9A-Z_]+)_SIZE(_0)?\s+(0x[0-9a-fA-F]+|[0-9]+)$")
 
 class Assembly():
-    def __init__(self, output, bootdir):
-        self.find_slots(bootdir)
+    def __init__(self, output, bootdir, edt):
+        self.find_slots(edt)
         try:
             os.unlink(output)
         except OSError as e:
@@ -47,29 +55,29 @@
                 raise
         self.output = output
 
-    def find_slots(self, bootdir):
+    def find_slots(self, edt):
         offsets = {}
         sizes = {}
-        with open(os.path.join(bootdir, 'zephyr', 'include', 'generated', 'devicetree_legacy_unfixed.h'), 'r') as fd:
-            for line in fd:
-                m = offset_re.match(line)
-                if m is not None:
-                    offsets[m.group(1)] = int(m.group(3), 0)
-                m = size_re.match(line)
-                if m is not None:
-                    sizes[m.group(1)] = int(m.group(3), 0)
+
+        part_nodes = edt.compat2nodes["fixed-partitions"]
+        for node in part_nodes:
+            for child in node.children.values():
+                if "label" in child.props:
+                    label = child.props["label"].val
+                    offsets[label] = child.regs[0].addr
+                    sizes[label] = child.regs[0].size
 
         if not same_keys(offsets, sizes):
             raise Exception("Inconsistent data in devicetree.h")
 
-        # We care about the MCUBOOT, IMAGE_0, and IMAGE_1 partitions.
-        if 'MCUBOOT' not in offsets:
+        # We care about the mcuboot, image-0, and image-1 partitions.
+        if 'mcuboot' not in offsets:
             raise Exception("Board partition table does not have mcuboot partition")
 
-        if 'IMAGE_0' not in offsets:
+        if 'image-0' not in offsets:
             raise Exception("Board partition table does not have image-0 partition")
 
-        if 'IMAGE_1' not in offsets:
+        if 'image-1' not in offsets:
             raise Exception("Board partition table does not have image-1 partition")
 
         self.offsets = offsets
@@ -103,12 +111,21 @@
             help='Filename to write full image to')
 
     args = parser.parse_args()
-    output = Assembly(args.output, args.bootdir)
 
-    output.add_image(os.path.join(args.bootdir, 'zephyr', 'zephyr.bin'), 'MCUBOOT')
-    output.add_image(args.primary, "IMAGE_0")
+    # Extract board name from path
+    board = os.path.split(os.path.split(args.bootdir)[0])[1]
+
+    dts_path = os.path.join(args.bootdir, "zephyr", board + ".dts.pre.tmp")
+
+    edt = edtlib.EDT(dts_path, [os.path.join(ZEPHYR_BASE, "dts", "bindings")],
+            warn_reg_unit_address_mismatch=False)
+
+    output = Assembly(args.output, args.bootdir, edt)
+
+    output.add_image(os.path.join(args.bootdir, 'zephyr', 'zephyr.bin'), 'mcuboot')
+    output.add_image(args.primary, "image-0")
     if args.secondary is not None:
-        output.add_image(args.secondary, "IMAGE_1")
+        output.add_image(args.secondary, "image-1")
 
 if __name__ == '__main__':
     main()
