diff --git a/scripts/assemble_changelog.py b/scripts/assemble_changelog.py
index b9a647f..3d82c11 100755
--- a/scripts/assemble_changelog.py
+++ b/scripts/assemble_changelog.py
@@ -21,6 +21,7 @@
 # This file is part of Mbed Crypto (https://tls.mbed.org)
 
 import argparse
+from collections import OrderedDict
 import glob
 import os
 import re
@@ -78,16 +79,6 @@
         level = re.match(self._title_re, line).end()
         return level, line[level:].strip()
 
-    def add_sections(self, *sections):
-        """Add the specified section titles to the list of known sections.
-
-        Sections will be printed back out in the order they were added.
-        """
-        for section in sections:
-            if section not in self.section_content:
-                self.section_list.append(section)
-                self.section_content[section] = []
-
     def __init__(self, input_stream):
         """Create a changelog object.
 
@@ -96,9 +87,9 @@
         can be any generator returning the lines to read.
         """
         self.header = []
-        self.section_list = []
-        self.section_content = {}
-        self.add_sections(*STANDARD_SECTIONS)
+        self.section_content = OrderedDict()
+        for section in STANDARD_SECTIONS:
+            self.section_content[section] = []
         self.trailer = []
         self.read_main_file(input_stream)
 
@@ -121,7 +112,7 @@
                     self.trailer.append(line)
             elif level == 3 and level_2_seen == 1:
                 current_section = content
-                self.add_sections(current_section)
+                self.section_content.setdefault(content, [])
             elif level_2_seen == 1 and current_section != None:
                 if line.strip():
                     self.section_content[current_section].append(line)
@@ -169,8 +160,7 @@
         with open(filename, 'wb') as out:
             for line in self.header:
                 out.write(line)
-            for section in self.section_list:
-                lines = self.section_content[section]
+            for section, lines in self.section_content.items():
                 while lines and not lines[0].strip():
                     del lines[0]
                 while lines and not lines[-1].strip():
