diff --git a/commonmark/src/main/java/org/commonmark/renderer/markdown/CoreMarkdownNodeRenderer.java b/commonmark/src/main/java/org/commonmark/renderer/markdown/CoreMarkdownNodeRenderer.java
index 207851113206effc11735c7819cd8f1bb20ddf10..30c6332b9d2e1ad478f652c40d97884d7c1c2579 100644
--- a/commonmark/src/main/java/org/commonmark/renderer/markdown/CoreMarkdownNodeRenderer.java
+++ b/commonmark/src/main/java/org/commonmark/renderer/markdown/CoreMarkdownNodeRenderer.java
@@ -86,6 +86,114 @@ public class CoreMarkdownNodeRenderer extends AbstractVisitor implements NodeRen
         writer.line();
     }
 
+    @Override
+    public void visit(ThematicBreak thematicBreak) {
+        writer.write("***");
+        writer.block();
+    }
+
+    @Override
+    public void visit(Heading heading) {
+        if (heading.getLevel() <= 2) {
+            LineBreakVisitor lineBreakVisitor = new LineBreakVisitor();
+            heading.accept(lineBreakVisitor);
+            boolean isMultipleLines = lineBreakVisitor.hasLineBreak();
+
+            if (isMultipleLines) {
+                // Setext headings: Can have multiple lines, but only level 1 or 2
+                visitChildren(heading);
+                writer.line();
+                if (heading.getLevel() == 1) {
+                    // Note that it would be nice to match the length of the contents instead of just using 3, but that's
+                    // not easy.
+                    writer.write("===");
+                } else {
+                    writer.write("---");
+                }
+                writer.block();
+                return;
+            }
+        }
+
+        // ATX headings: Can't have multiple lines, but up to level 6.
+        for (int i = 0; i < heading.getLevel(); i++) {
+            writer.write('#');
+        }
+        writer.write(' ');
+        visitChildren(heading);
+
+        writer.block();
+    }
+
+    @Override
+    public void visit(IndentedCodeBlock indentedCodeBlock) {
+        String literal = indentedCodeBlock.getLiteral();
+        // We need to respect line prefixes which is why we need to write it line by line (e.g. an indented code block
+        // within a block quote)
+        writer.writePrefix("    ");
+        writer.pushPrefix("    ");
+        List<String> lines = getLines(literal);
+        for (int i = 0; i < lines.size(); i++) {
+            String line = lines.get(i);
+            writer.write(line);
+            if (i != lines.size() - 1) {
+                writer.line();
+            }
+        }
+        writer.popPrefix();
+        writer.block();
+    }
+
+    @Override
+    public void visit(FencedCodeBlock fencedCodeBlock) {
+        String literal = fencedCodeBlock.getLiteral();
+        String fence = repeat(String.valueOf(fencedCodeBlock.getFenceChar()), fencedCodeBlock.getFenceLength());
+        int indent = fencedCodeBlock.getFenceIndent();
+
+        if (indent > 0) {
+            String indentPrefix = repeat(" ", indent);
+            writer.writePrefix(indentPrefix);
+            writer.pushPrefix(indentPrefix);
+        }
+
+        writer.write(fence);
+        if (fencedCodeBlock.getInfo() != null) {
+            writer.write(fencedCodeBlock.getInfo());
+        }
+        writer.line();
+        if (!literal.isEmpty()) {
+            List<String> lines = getLines(literal);
+            for (String line : lines) {
+                writer.write(line);
+                writer.line();
+            }
+        }
+        writer.write(fence);
+        if (indent > 0) {
+            writer.popPrefix();
+        }
+        writer.block();
+    }
+
+    @Override
+    public void visit(HtmlBlock htmlBlock) {
+        List<String> lines = getLines(htmlBlock.getLiteral());
+        for (int i = 0; i < lines.size(); i++) {
+            String line = lines.get(i);
+            writer.write(line);
+            if (i != lines.size() - 1) {
+                writer.line();
+            }
+        }
+        writer.block();
+    }
+
+    @Override
+    public void visit(Paragraph paragraph) {
+        visitChildren(paragraph);
+        writer.block();
+    }
+
     @Override
     public void visit(BlockQuote blockQuote) {
         writer.writePrefix("> ");
@@ -183,97 +291,15 @@ public class CoreMarkdownNodeRenderer extends AbstractVisitor implements NodeRen
     }
 
     @Override
-    public void visit(FencedCodeBlock fencedCodeBlock) {
-        String literal = fencedCodeBlock.getLiteral();
-        String fence = repeat(String.valueOf(fencedCodeBlock.getFenceChar()), fencedCodeBlock.getFenceLength());
-        int indent = fencedCodeBlock.getFenceIndent();
-
-        if (indent > 0) {
-            String indentPrefix = repeat(" ", indent);
-            writer.writePrefix(indentPrefix);
-            writer.pushPrefix(indentPrefix);
-        }
-
-        writer.write(fence);
-        if (fencedCodeBlock.getInfo() != null) {
-            writer.write(fencedCodeBlock.getInfo());
-        }
-        writer.line();
-        if (!literal.isEmpty()) {
-            List<String> lines = getLines(literal);
-            for (String line : lines) {
-                writer.write(line);
-                writer.line();
-            }
-        }
-        writer.write(fence);
-        if (indent > 0) {
-            writer.popPrefix();
-        }
-        writer.block();
-    }
-
-    @Override
-    public void visit(HardLineBreak hardLineBreak) {
-        writer.write("  ");
-        writer.line();
-    }
-
-    @Override
-    public void visit(Heading heading) {
-        if (heading.getLevel() <= 2) {
-            LineBreakVisitor lineBreakVisitor = new LineBreakVisitor();
-            heading.accept(lineBreakVisitor);
-            boolean isMultipleLines = lineBreakVisitor.hasLineBreak();
-
-            if (isMultipleLines) {
-                // Setext headings: Can have multiple lines, but only level 1 or 2
-                visitChildren(heading);
-                writer.line();
-                if (heading.getLevel() == 1) {
-                    // Note that it would be nice to match the length of the contents instead of just using 3, but that's
-                    // not easy.
-                    writer.write("===");
-                } else {
-                    writer.write("---");
-                }
-                writer.block();
-                return;
-            }
-        }
-
-        // ATX headings: Can't have multiple lines, but up to level 6.
-        for (int i = 0; i < heading.getLevel(); i++) {
-            writer.write('#');
-        }
-        writer.write(' ');
-        visitChildren(heading);
-
-        writer.block();
-    }
-
-    @Override
-    public void visit(ThematicBreak thematicBreak) {
-        writer.write("***");
-        writer.block();
-    }
-
-    @Override
-    public void visit(HtmlInline htmlInline) {
-        writer.write(htmlInline.getLiteral());
+    public void visit(StrongEmphasis strongEmphasis) {
+        writer.write("**");
+        super.visit(strongEmphasis);
+        writer.write("**");
     }
 
     @Override
-    public void visit(HtmlBlock htmlBlock) {
-        List<String> lines = getLines(htmlBlock.getLiteral());
-        for (int i = 0; i < lines.size(); i++) {
-            String line = lines.get(i);
-            writer.write(line);
-            if (i != lines.size() - 1) {
-                writer.line();
-            }
-        }
-        writer.block();
+    public void visit(Link link) {
+        writeLinkLike(link.getTitle(), link.getDestination(), link, "[");
     }
 
     @Override
@@ -282,33 +308,14 @@ public class CoreMarkdownNodeRenderer extends AbstractVisitor implements NodeRen
     }
 
     @Override
-    public void visit(IndentedCodeBlock indentedCodeBlock) {
-        String literal = indentedCodeBlock.getLiteral();
-        // We need to respect line prefixes which is why we need to write it line by line (e.g. an indented code block
-        // within a block quote)
-        writer.writePrefix("    ");
-        writer.pushPrefix("    ");
-        List<String> lines = getLines(literal);
-        for (int i = 0; i < lines.size(); i++) {
-            String line = lines.get(i);
-            writer.write(line);
-            if (i != lines.size() - 1) {
-                writer.line();
-            }
-        }
-        writer.popPrefix();
-        writer.block();
-    }
-
-    @Override
-    public void visit(Link link) {
-        writeLinkLike(link.getTitle(), link.getDestination(), link, "[");
+    public void visit(HtmlInline htmlInline) {
+        writer.write(htmlInline.getLiteral());
     }
 
     @Override
-    public void visit(Paragraph paragraph) {
-        visitChildren(paragraph);
-        writer.block();
+    public void visit(HardLineBreak hardLineBreak) {
+        writer.write("  ");
+        writer.line();
     }
 
     @Override
@@ -316,13 +323,6 @@ public class CoreMarkdownNodeRenderer extends AbstractVisitor implements NodeRen
         writer.line();
     }
 
-    @Override
-    public void visit(StrongEmphasis strongEmphasis) {
-        writer.write("**");
-        super.visit(strongEmphasis);
-        writer.write("**");
-    }
-
     @Override
     public void visit(Text text) {
         String literal = text.getLiteral();