diff --git a/arkindex/documents/models.py b/arkindex/documents/models.py
index 43eaff67f15d1d4d0695c0f8066224360337bf9c..211d9cd44aadec7809872db97ece1605327e7e0a 100644
--- a/arkindex/documents/models.py
+++ b/arkindex/documents/models.py
@@ -513,3 +513,28 @@ class MetaData(models.Model):
         unique_together = (
             ('element', 'name'),
         )
+
+    def is_single_line(self):
+        return self.type != MetaType.HTML and not self.is_list() and len(self.value.splitlines()) <= 1
+
+    def is_list(self):
+        # TODO: Remove is_list when we move to Entities
+        return self.name.lower() in ('persons', 'places', 'subjects')
+
+    def __eq__(self, other):
+        if not isinstance(other, MetaData):
+            return False
+        return (self.is_single_line(), self.type == MetaType.HTML, self.is_list(), self.name) == (
+            other.is_single_line(), other.type == MetaType.HTML, other.is_list(), self.name)
+
+    def __gt__(self, other):
+        if self.is_single_line():
+            return self.name.__gt__(other.name)
+        if self.type == MetaType.HTML:
+            return other.is_single_line()
+        if self.is_list():
+            return other.is_single_line() or other.type == MetaType.HTML
+        return True
+
+    def __ge__(self, other):
+        return self.__eq__(other) or self.__gt__(other)
diff --git a/arkindex/documents/serializers/elements.py b/arkindex/documents/serializers/elements.py
index 012e5ba0ada7e71a9994b90c1144bb27678b1ffe..400580ef83442c909a3e18a1910ce071cd79a70b 100644
--- a/arkindex/documents/serializers/elements.py
+++ b/arkindex/documents/serializers/elements.py
@@ -112,7 +112,10 @@ class ActSerializer(serializers.ModelSerializer):
         read_only=True,
     )
     children = ElementLightSerializer(source='child_elements', read_only=True, many=True)
-    metadatas = MetaDataSerializer(read_only=True, many=True)
+    metadata = serializers.SerializerMethodField()
+
+    def get_metadata(self, obj):
+        return MetaDataSerializer(sorted(list(obj.metadatas.all())), many=True).data
 
     class Meta:
         model = Act
@@ -122,7 +125,7 @@ class ActSerializer(serializers.ModelSerializer):
             'number',
             'parents',
             'children',
-            'metadatas',
+            'metadata',
         )
         read_only_fields = ('id', )
 
diff --git a/arkindex/documents/tests/test_act.py b/arkindex/documents/tests/test_act.py
index c4958d21e703cbfd2792c1c5884868ab691e0018..2396012b53c539ab9affb148a2b5a436114948d2 100644
--- a/arkindex/documents/tests/test_act.py
+++ b/arkindex/documents/tests/test_act.py
@@ -59,7 +59,7 @@ class TestAct(FixtureAPITestCase):
                         'type': 'surface',
                     }
                 ],
-                'metadatas': []}
+                'metadata': []}
         )
 
     def test_act_metadatas(self):
@@ -68,7 +68,7 @@ class TestAct(FixtureAPITestCase):
         # No metadatas in api
         response = self.client.get(reverse('api:act-edit', kwargs={'pk': self.act.id}))
         self.assertEqual(response.status_code, status.HTTP_200_OK)
-        self.assertListEqual(response.json()['metadatas'], [])
+        self.assertListEqual(response.json()['metadata'], [])
 
         # Create some metadatas
         metas = [
@@ -81,7 +81,7 @@ class TestAct(FixtureAPITestCase):
         response = self.client.get(reverse('api:act-edit', kwargs={'pk': self.act.id}))
         self.assertEqual(response.status_code, status.HTTP_200_OK)
         self.assertListEqual(
-            response.json()['metadatas'],
+            response.json()['metadata'],
             [{'id': str(metas[1].id),
               'name': 'origin',
               'type': 'date',
diff --git a/arkindex/documents/tests/test_metadata.py b/arkindex/documents/tests/test_metadata.py
new file mode 100644
index 0000000000000000000000000000000000000000..de89dfa870f08a98dbedfe2edd4e88106acf2088
--- /dev/null
+++ b/arkindex/documents/tests/test_metadata.py
@@ -0,0 +1,24 @@
+from arkindex.documents.models import MetaData, MetaType
+from django.test import TestCase
+
+
+class TestMetaData(TestCase):
+
+    def test_sort(self):
+        data = [
+            MetaData(name="persons", type=MetaType.Text, value='a'),
+            MetaData(name="location", type=MetaType.Location, value='somewhere'),
+            MetaData(name="summary", type=MetaType.HTML, value='<a>a</a>'),
+            MetaData(name="places", type=MetaType.Text, value='a\na'),
+            MetaData(name="something", type=MetaType.Text, value='in one line'),
+            MetaData(name="other thing", type=MetaType.Text, value='in\nmultiple\nlines'),
+            MetaData(name="subjects", type=MetaType.Text, value='a\na\na'),
+            MetaData(name="date", type=MetaType.Date, value='1337-04-02'),
+        ]
+
+        data = sorted(data)
+
+        self.assertListEqual(
+            [m.name for m in data],
+            ['date', 'location', 'something', 'summary', 'persons', 'places', 'subjects', 'other thing'],
+        )