diff --git a/nomad/metainfo/metainfo.py b/nomad/metainfo/metainfo.py
index a05f08eb9adcbd03c57f2871e8a3939ee280e1f1..2fb09344fb1a3bfd9a84ff274b2551f196649e48 100644
--- a/nomad/metainfo/metainfo.py
+++ b/nomad/metainfo/metainfo.py
@@ -2147,11 +2147,18 @@ class MSection(metaclass=MObjectMeta):
         treat_none_as_nan = kwargs.get('treat_none_as_nan', False)
 
         # need to deserialize the definitions first as they are needed for the rest
-        if 'definitions' in data:
-            self.m_set('definitions', data['definitions'], context=m_context)
+        # need to deserialize the metadata first as they are needed for the rest
+        processed = []
+        for item in ('definitions', 'metadata'):
+            if item in data:
+                try:
+                    self.m_set(item, data[item], context=m_context)
+                    processed.append(item)
+                except (ValueError, MetainfoError):
+                    pass
 
         for name, value in data.items():
-            if name == 'definitions' or name.startswith('m_'):
+            if name in processed or name.startswith('m_'):
                 continue
 
             try: