diff --git a/pelicanext/multi_part/README.md b/pelicanext/multi_part/README.md
new file mode 100644
index 0000000..ec553eb
--- /dev/null
+++ b/pelicanext/multi_part/README.md
@@ -0,0 +1,30 @@
+Multi parts posts
+-----------------
+
+The multi-part posts plugin allow you to write multi-part posts.
+
+In order to mark posts as part of a multi-part post, use the `:parts:` metadata:
+
+ :parts: MY_AWESOME_MULTI_PART_POST
+
+You can then use the `article.related_posts` variable in your templates to display other parts of current post.
+For example:
+
+ {% if article.metadata.parts_articles %}
+
+ - Post parts
+ {% for part_article in article.metadata.parts_articles %}
+ {% if part_article == article %}
+ -
+ {{ part_article.title }}
+
+
+ {% else %}
+ -
+ {{ part_article.title }}
+
+
+ {% endif %}
+ {% endfor %}
+
+ {% endif %}
diff --git a/pelicanext/multi_part/multi_part.py b/pelicanext/multi_part/multi_part.py
new file mode 100644
index 0000000..0581b50
--- /dev/null
+++ b/pelicanext/multi_part/multi_part.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+"""
+Copyright (c) FELD Boris
+
+Multiple part support
+=====================
+
+Create a navigation menu for multi-part related_posts
+
+Article metadata:
+------------------
+
+:parts: a unique identifier for multi-part posts, must be the same in each
+post part.
+
+Usage
+-----
+ {% if article.metadata.parts_articles %}
+
+ {% for part_article in article.metadata.parts_articles %}
+ {% if part_article == article %}
+ -
+ {{ part_article.title }}
+
+
+ {% else %}
+ -
+ {{ part_article.title }}
+
+
+ {% endif %}
+ {% endfor %}
+
+ {% endif %}
+"""
+from collections import defaultdict
+
+from pelican import signals
+
+
+def aggregate_multi_part(generator):
+ multi_part = defaultdict(list)
+
+ for article in generator.articles:
+ if 'parts' in article.metadata:
+ multi_part[article.metadata['parts']].append(article)
+
+ for part_id in multi_part:
+ parts = multi_part[part_id]
+
+ # Sort by date
+ parts.sort(key=lambda x: x.metadata['date'])
+
+ for article in parts:
+ article.metadata['parts_articles'] = parts
+
+
+def register():
+ signals.article_generator_finalized.connect(aggregate_multi_part)