diff --git a/scripts/assemble_changelog.py b/scripts/assemble_changelog.py
index ba4a01d..9afe3db 100755
--- a/scripts/assemble_changelog.py
+++ b/scripts/assemble_changelog.py
@@ -83,6 +83,9 @@
         Return ``(header, top_version_title, top_version_body, trailer)``
         where ``changelog_file_content == header + top_version_title +
                                           top_version_body + trailer``.
+
+        If the top version is already released, create a new top
+        version section for an unreleased version.
         """
         raise NotImplementedError
 
@@ -108,6 +111,12 @@
 class TextChangelogFormat(ChangelogFormat):
     """The traditional Mbed TLS changelog format."""
 
+    _unreleased_version_text = b'= mbed TLS x.x.x branch released xxxx-xx-xx'
+    @classmethod
+    def is_released_version(cls, title):
+        # Look for an incomplete release date
+        return not re.search(br'[0-9x]{4}-[0-9x]{2}-[0-9x]?x', title)
+
     _top_version_re = re.compile(br'(?:\A|\n)(=[^\n]*\n+)(.*?\n)(?:=|$)',
                                  re.DOTALL)
     @classmethod
@@ -116,8 +125,14 @@
         m = re.search(cls._top_version_re, changelog_file_content)
         top_version_start = m.start(1)
         top_version_end = m.end(2)
+        top_version_title = m.group(1)
+        top_version_body = m.group(2)
+        if cls.is_released_version(top_version_title):
+            top_version_end = top_version_start
+            top_version_title = cls._unreleased_version_text + b'\n\n'
+            top_version_body = b''
         return (changelog_file_content[:top_version_start],
-                m.group(1), m.group(2),
+                top_version_title, top_version_body,
                 changelog_file_content[top_version_end:])
 
     @classmethod
@@ -173,27 +188,6 @@
     _version_number_re = re.compile(br'[0-9]+\.[0-9A-Za-z.]+')
     _incomplete_version_number_re = re.compile(br'.*\.[A-Za-z]')
 
-    def section_is_released_version(self, title):
-        """Whether this section is for a released version.
-
-        True if the given level-2 section title indicates that this section
-        contains released changes, otherwise False.
-        """
-        # Assume that a released version has a numerical version number
-        # that follows a particular pattern. These criteria may be revised
-        # as needed in future versions of this script.
-        version_number = re.search(self._version_number_re, title)
-        if version_number:
-            return not re.search(self._incomplete_version_number_re,
-                                 version_number.group(0))
-        else:
-            return False
-
-    def unreleased_version_title(self):
-        """The title to use if creating a new section for an unreleased version."""
-        # pylint: disable=no-self-use; this method may be overridden
-        return b'Unreleased changes'
-
     def add_categories_from_text(self, filename, line_offset,
                                  text, allow_unknown_category):
         """Parse a version section or entry file."""
