diff --git a/dlpolyparser/metainfo/__init__.py b/dlpolyparser/metainfo/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..64e7c0b2d0bc74c6b8ffeee2a7c0decf12cee3a3
--- /dev/null
+++ b/dlpolyparser/metainfo/__init__.py
@@ -0,0 +1,13 @@
+import sys
+from nomad.metainfo import Environment
+from nomad.metainfo.legacy import LegacyMetainfoEnvironment
+import dlpolyparser.metainfo.dl_poly
+import nomad.datamodel.metainfo.common
+import nomad.datamodel.metainfo.public
+import nomad.datamodel.metainfo.general
+
+m_env = LegacyMetainfoEnvironment()
+m_env.m_add_sub_section(Environment.packages, sys.modules['dlpolyparser.metainfo.dl_poly'].m_package)  # type: ignore
+m_env.m_add_sub_section(Environment.packages, sys.modules['nomad.datamodel.metainfo.common'].m_package)  # type: ignore
+m_env.m_add_sub_section(Environment.packages, sys.modules['nomad.datamodel.metainfo.public'].m_package)  # type: ignore
+m_env.m_add_sub_section(Environment.packages, sys.modules['nomad.datamodel.metainfo.general'].m_package)  # type: ignore
diff --git a/dlpolyparser/metainfo/dl_poly.py b/dlpolyparser/metainfo/dl_poly.py
new file mode 100644
index 0000000000000000000000000000000000000000..68fbac77e0353e5c844b5d0d3813b820b18ec2db
--- /dev/null
+++ b/dlpolyparser/metainfo/dl_poly.py
@@ -0,0 +1,195 @@
+import numpy as np            # pylint: disable=unused-import
+import typing                 # pylint: disable=unused-import
+from nomad.metainfo import (  # pylint: disable=unused-import
+    MSection, MCategory, Category, Package, Quantity, Section, SubSection, SectionProxy,
+    Reference
+)
+from nomad.metainfo.legacy import LegacyDefinition
+
+from nomad.datamodel.metainfo import public
+
+m_package = Package(
+    name='dl_poly_nomadmetainfo_json',
+    description='None',
+    a_legacy=LegacyDefinition(name='dl_poly.nomadmetainfo.json'))
+
+
+class x_dl_poly_section_md_molecule_type(MSection):
+    '''
+    Section to store molecule type information
+    '''
+
+    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_dl_poly_section_md_molecule_type'))
+
+    x_dl_poly_md_molecule_type_id = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        Molecule type id
+        ''',
+        a_legacy=LegacyDefinition(name='x_dl_poly_md_molecule_type_id'))
+
+    x_dl_poly_md_molecule_type_name = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Molecule type name
+        ''',
+        a_legacy=LegacyDefinition(name='x_dl_poly_md_molecule_type_name'))
+
+
+class x_dl_poly_section_md_topology(MSection):
+    '''
+    Section modelling the MD topology
+    '''
+
+    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_dl_poly_section_md_topology'))
+
+    x_dl_poly_md_molecular_types = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        Number of molecular types in topology
+        ''',
+        a_legacy=LegacyDefinition(name='x_dl_poly_md_molecular_types'))
+
+    x_dl_poly_section_md_molecule_type = SubSection(
+        sub_section=SectionProxy('x_dl_poly_section_md_molecule_type'),
+        repeats=True,
+        a_legacy=LegacyDefinition(name='x_dl_poly_section_md_molecule_type'))
+
+
+class section_sampling_method(public.section_sampling_method):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_sampling_method'))
+
+    x_dl_poly_barostat_target_pressure = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='pascal',
+        description='''
+        MD barostat target pressure.
+        ''',
+        categories=[public.settings_molecular_dynamics, public.settings_barostat, public.settings_sampling],
+        a_legacy=LegacyDefinition(name='x_dl_poly_barostat_target_pressure'))
+
+    x_dl_poly_barostat_tau = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='second',
+        description='''
+        MD barostat relaxation time.
+        ''',
+        categories=[public.settings_molecular_dynamics, public.settings_barostat, public.settings_sampling],
+        a_legacy=LegacyDefinition(name='x_dl_poly_barostat_tau'))
+
+    x_dl_poly_integrator_dt = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='second',
+        description='''
+        MD integration time step.
+        ''',
+        categories=[public.settings_molecular_dynamics, public.settings_integrator, public.settings_sampling],
+        a_legacy=LegacyDefinition(name='x_dl_poly_integrator_dt'))
+
+    x_dl_poly_integrator_type = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        MD integrator type, valid values are defined in the integrator_type wiki page.
+        ''',
+        categories=[public.settings_molecular_dynamics, public.settings_integrator, public.settings_sampling],
+        a_legacy=LegacyDefinition(name='x_dl_poly_integrator_type'))
+
+    x_dl_poly_number_of_steps_requested = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Number of requested MD integration time steps.
+        ''',
+        categories=[public.settings_molecular_dynamics, public.settings_integrator, public.settings_sampling],
+        a_legacy=LegacyDefinition(name='x_dl_poly_number_of_steps_requested'))
+
+    x_dl_poly_thermostat_target_temperature = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='kelvin',
+        description='''
+        MD thermostat target temperature.
+        ''',
+        categories=[public.settings_molecular_dynamics, public.settings_thermostat, public.settings_sampling],
+        a_legacy=LegacyDefinition(name='x_dl_poly_thermostat_target_temperature'))
+
+    x_dl_poly_thermostat_tau = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        unit='second',
+        description='''
+        MD thermostat relaxation time.
+        ''',
+        categories=[public.settings_molecular_dynamics, public.settings_thermostat, public.settings_sampling],
+        a_legacy=LegacyDefinition(name='x_dl_poly_thermostat_tau'))
+
+
+class section_run(public.section_run):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_run'))
+
+    x_dl_poly_program_version_date = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Program version date
+        ''',
+        a_legacy=LegacyDefinition(name='x_dl_poly_program_version_date'))
+
+    x_dl_poly_system_description = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Simulation run title
+        ''',
+        a_legacy=LegacyDefinition(name='x_dl_poly_system_description'))
+
+
+class section_system(public.section_system):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_system'))
+
+    x_dl_poly_section_md_topology = SubSection(
+        sub_section=SectionProxy('x_dl_poly_section_md_topology'),
+        repeats=True,
+        a_legacy=LegacyDefinition(name='x_dl_poly_section_md_topology'))
+
+
+class section_method(public.section_method):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_method'))
+
+    x_dl_poly_step_number_equilibration = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        MD equilibration step number
+        ''',
+        a_legacy=LegacyDefinition(name='x_dl_poly_step_number_equilibration'))
+
+    x_dl_poly_step_number = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        MD total step number
+        ''',
+        a_legacy=LegacyDefinition(name='x_dl_poly_step_number'))
+
+    x_dl_poly_thermostat_temperature = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        Thermostat coupling temperature
+        ''',
+        a_legacy=LegacyDefinition(name='x_dl_poly_thermostat_temperature'))
+
+
+m_package.__init_metainfo__()