diff --git a/dynamicforms/admin.py b/dynamicforms/admin.py
index 2cbd214e5aa11a99ada2249a031a69020b0c4dee..7fe434eecefdae8ab0f387c361d70677287e7063 100644
--- a/dynamicforms/admin.py
+++ b/dynamicforms/admin.py
@@ -1,19 +1,20 @@
 """Dynamic forms admin panels."""
 
 from django.contrib import admin
+from adminsortable2.admin import SortableInlineAdminMixin
 
 from .models import Answer, File, Form, FormEntry, Question, Section
 from .views import download_multiple_forms_entries
 
 
-class SectionInline(admin.StackedInline):
+class SectionInline(SortableInlineAdminMixin, admin.StackedInline):
     """Inline for sections."""
 
     model = Section
     extra = 0
 
 
-class QuestionInline(admin.StackedInline):
+class QuestionInline(SortableInlineAdminMixin, admin.StackedInline):
     """Inline for questions."""
 
     model = Question
diff --git a/dynamicforms/migrations/0015_auto_20180616_2136.py b/dynamicforms/migrations/0015_auto_20180616_2136.py
new file mode 100644
index 0000000000000000000000000000000000000000..59bc79cb1a42d7b31a59d3b7ca2a11674ed53e13
--- /dev/null
+++ b/dynamicforms/migrations/0015_auto_20180616_2136.py
@@ -0,0 +1,31 @@
+# Generated by Django 2.0.6 on 2018-06-16 19:36
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('dynamicforms', '0014_auto_20180616_1812'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='question',
+            options={'ordering': ('order',)},
+        ),
+        migrations.AlterModelOptions(
+            name='section',
+            options={'ordering': ('order',)},
+        ),
+        migrations.AddField(
+            model_name='question',
+            name='order',
+            field=models.PositiveIntegerField(default=0, verbose_name='position'),
+        ),
+        migrations.AddField(
+            model_name='section',
+            name='order',
+            field=models.PositiveIntegerField(default=0, verbose_name='position'),
+        ),
+    ]
diff --git a/dynamicforms/models.py b/dynamicforms/models.py
index 9ca95806f8aeb2f58bc59330c6eaec4f7b47d394..e34223cccaa6121d71aa5b4fca5c099a16b78246 100644
--- a/dynamicforms/models.py
+++ b/dynamicforms/models.py
@@ -59,8 +59,17 @@ class Section(models.Model):
         verbose_name='formulaire',
         help_text="Formulaire associé à la section.")
 
+    order = models.PositiveIntegerField(
+        'position',
+        default=0,
+        blank=False,
+        null=False)
+
     questions: models.Manager
 
+    class Meta:  # noqa
+        ordering = ('order',)
+
     def __str__(self):
         return str(self.title)
 
@@ -108,8 +117,17 @@ class Question(models.Model):
         verbose_name='section',
         help_text="Section de formulaire associée à la question.")
 
+    order = models.PositiveIntegerField(
+        'position',
+        default=0,
+        blank=False,
+        null=False)
+
     answers: models.Manager
 
+    class Meta:  # noqa
+        ordering = ('order',)
+
     def __str__(self) -> str:
         return f'{self.text}{self.required and "*" or ""}'