diff --git a/debian/create_changelog.py b/debian/create_changelog.py
index 4be02a751692dd638a835dc65785491eef2f5f8f..b62f211c24403fbfb2a1465cbf58491b5616f5b6 100755
--- a/debian/create_changelog.py
+++ b/debian/create_changelog.py
@@ -9,6 +9,15 @@ import git
 
 package_name = 'UNKNOWN'
 
+alias_names = {
+	'julian': 'Julian Rother',
+	'Julian': 'Julian Rother',
+}
+
+ignore_commit_regexes = [
+	'^fixup!',
+]
+
 def print_release(tag=None, commits=tuple(), last_tag=None):
 	release_version = '0.0.0'
 	release_author = git.objects.util.Actor('None', 'undefined@example.com')
@@ -45,21 +54,29 @@ def print_release(tag=None, commits=tuple(), last_tag=None):
 	commit_author_names = {} # author name -> key
 	commit_author_commits = {} # key -> list of commits
 	for commit in commits:
+		if any(filter(lambda pattern: re.match(pattern, commit.summary), ignore_commit_regexes)):
+			continue
+		if len(commit.parents) > 1:
+			continue # Ignore merge commits
+		author_name = alias_names.get(commit.author.name, commit.author.name)
 		key = commit_author_emails.get(commit.author.email)
 		if key is None:
-			key = commit_author_names.get(commit.author.name)
+			key = commit_author_names.get(author_name)
 		if key is None:
 			key = commit.author.email
-			commit_authors.append((key, commit.author))
-			commit_author_emails[commit.author.email] = key
-			commit_author_names[commit.author.name] = key
+			commit_authors.append((key, author_name))
+		commit_author_emails[commit.author.email] = key
+		commit_author_names[author_name] = key
 		commit_author_commits[key] = commit_author_commits.get(key, []) + [commit]
-	for key, author in commit_authors:
-		print(f'  [ {author.name} ]')
+	commit_authors.sort(key=lambda args: len(commit_author_commits[args[0]]))
+	for key, author_name in commit_authors:
+		print(f'  [ {author_name} ]')
 		for commit in commit_author_commits[key]:
-			print(f'  * {commit.summary}')
+			lines = '\n'.join(textwrap.wrap(commit.summary, 90))
+			lines = '  * ' + textwrap.indent(lines, '    ').strip()
+			print(lines)
 		print()
-	print(f' -- {release_author.name} <{release_author.email}>  {email.utils.formatdate(release_date)}')
+	print(f' -- {alias_names.get(release_author.name, release_author.name)} <{release_author.email}>  {email.utils.formatdate(release_date)}')
 
 if __name__ == '__main__':
 	repo = git.Repo('.')
@@ -80,9 +97,10 @@ if __name__ == '__main__':
 	for commit in repo.iter_commits('HEAD'):
 		if commit.hexsha in version_commits:
 			prev_tag = version_commits[commit.hexsha]
-			print_release(tag, commits, last_tag=prev_tag)
-			print()
+			if commits:
+				print_release(tag, commits, last_tag=prev_tag)
+				print()
 			tag = prev_tag
 			commits = []
 		commits.append(commit)
-	print_release(tag, [])
+	print_release(tag, commits)