diff --git a/wien2kparser/metainfo/wien2k.py b/wien2kparser/metainfo/wien2k.py
index e939b3678b64e6e62d3bb1621898bfe691bc2402..f36fd86411ea36747692815751cc6d89a6d42688 100644
--- a/wien2kparser/metainfo/wien2k.py
+++ b/wien2kparser/metainfo/wien2k.py
@@ -152,8 +152,7 @@ class section_scf_iteration(public.section_scf_iteration):
         a_legacy=LegacyDefinition(name='x_wien2k_iteration_number'))
 
     x_wien2k_nr_of_independent_atoms = Quantity(
-        type=np.dtype(np.int32),
-        shape=[],
+        type=int,
         description='''
         number of independent atoms in the cell
         ''',
@@ -377,27 +376,27 @@ class section_scf_iteration(public.section_scf_iteration):
 
     x_wien2k_for_x_gl = Quantity(
         type=np.dtype(np.float64),
-        shape=[],
+        shape=['x_wien2k_nr_of_independent_atoms'],
         description='''
-        force on atom xx in mRy/bohr (in the global coordinate system of the unit cell (in
+        force on inequivalent atom xx (in the global coordinate system of the unit cell (in
         the same way as the atomic positions are specified)): Fx
         ''',
         a_legacy=LegacyDefinition(name='x_wien2k_for_x_gl'))
 
     x_wien2k_for_y_gl = Quantity(
         type=np.dtype(np.float64),
-        shape=[],
+        shape=['x_wien2k_nr_of_independent_atoms'],
         description='''
-        force on atom xx in mRy/bohr (in the global coordinate system of the unit cell (in
+        force on inequivalent atom xx in (in the global coordinate system of the unit cell (in
         the same way as the atomic positions are specified)): Fy
         ''',
         a_legacy=LegacyDefinition(name='x_wien2k_for_y_gl'))
 
     x_wien2k_for_z_gl = Quantity(
         type=np.dtype(np.float64),
-        shape=[],
+        shape=['x_wien2k_nr_of_independent_atoms'],
         description='''
-        force on atom xx in mRy/bohr (in the global coordinate system of the unit cell (in
+        force on inequivalent atom xx in (in the global coordinate system of the unit cell (in
         the same way as the atomic positions are specified)): Fz
         ''',
         a_legacy=LegacyDefinition(name='x_wien2k_for_z_gl'))
@@ -410,6 +409,14 @@ class section_scf_iteration(public.section_scf_iteration):
         ''',
         a_legacy=LegacyDefinition(name='x_wien2k_atom_nr'))
 
+    x_wien2k_atom_mult = Quantity(
+        type=np.dtype(np.int32),
+        shape=['x_wien2k_nr_of_independent_atoms'],
+        description='''
+        atom multiplicity
+        ''',
+        a_legacy=LegacyDefinition(name='x_wien2k_atom_mult'))
+
     x_wien2k_sphere_nr = Quantity(
         type=str,
         shape=[],
diff --git a/wien2kparser/parser_wien2k.py b/wien2kparser/parser_wien2k.py
index 935f81e62fa2bc7c73e31ab0a71baa0952931751..92769dc6f26fc8499f474ed0babcdd1f8ab42aa5 100644
--- a/wien2kparser/parser_wien2k.py
+++ b/wien2kparser/parser_wien2k.py
@@ -56,6 +56,7 @@ class Wien2kContext(object):
         self.scfIterNr = 0
         self.spinPol = None
         self.eTot = None
+        self.forces = None
 
     def startedParsing(self, path, parser):
         """called when parsing starts"""
@@ -139,6 +140,9 @@ class Wien2kContext(object):
         if self.eTot is not None:
             backend.addValue("energy_total", self.eTot)
 
+        if self.forces is not None:
+           backend.addArrayValues('atom_forces', self.forces)
+
         mainFile = self.parser.fIn.fIn.name
 
         eigvalKpoint=[]
@@ -206,16 +210,6 @@ class Wien2kContext(object):
         if atom_labels is not None:
            backend.addArrayValues('atom_labels', np.asarray(atom_labels))
 
-        # atom force
-        atom_force = []
-        for i in ['x', 'y', 'z']:
-            api = section['x_wien2k_for_' + i]
-            if api is not None:
-               atom_force.append(api)
-        if atom_force:
-            # need to transpose array since its shape is [number_of_atoms,3] in\the metadata
-           backend.addArrayValues('atom_forces', np.transpose(np.asarray(atom_force)))
-
         # Parse the structure file
         mainFile = self.parser.fIn.fIn.name
         fName = mainFile[:-4] + ".struct"
@@ -291,6 +285,22 @@ class Wien2kContext(object):
         if eTot is not None:
             self.eTot = eTot[0]
 
+        # save the forces
+        fx = section['x_wien2k_for_x_gl']
+        fy = section['x_wien2k_for_y_gl']
+        fz = section['x_wien2k_for_z_gl']
+        if fx is not None and fy is not None and fz is not None:
+            backend.addArrayValues('x_wien2k_for_x_gl', fx)
+            backend.addArrayValues('x_wien2k_for_y_gl', fy)
+            backend.addArrayValues('x_wien2k_for_z_gl', fz)
+            # account for atom multiplicities
+            self.forces=[]
+            for i,a in enumerate(section['x_wien2k_atom_mult']):
+                for _ in range(a):
+                    self.forces.append([fx[i], fy[i], fz[i]])
+            print (self.forces)
+
+
 # description of the input
 mainFileDescription = SM(
     name = 'root',
@@ -331,8 +341,10 @@ mainFileDescription = SM(
                       SM(r":NOE\s*:\s*NUMBER\sOF\sELECTRONS\s*=\s*(?P<x_wien2k_noe>[0-9.]+)"),
                       SM(r":FER\s*:\sF E R M I - ENERGY\W\w*\W\w*M\W*=\s*(?P<energy_reference_fermi_iteration__rydberg>[-+0-9.]+)"),
                       SM(r":GMA\s*:\s*POTENTIAL\sAND\sCHARGE\sCUT-OFF\s*(?P<x_wien2k_cutoff>[0-9.]+)\s*Ry\W\W[0-9.]+"),
-                      SM(r":CHA(?P<x_wien2k_atom_nr>[-+0-9]+):\s*TOTAL\s*\w*\s*CHARGE INSIDE SPHERE\s*(?P<x_wien2k_sphere_nr>[-+0-9]+)\s*=\s*(?P<x_wien2k_tot_val_charge_sphere>[0-9.]+)",repeats = True),
-                      SM(r":CHA\s*:\s*TOTAL\s*\w*\s*CHARGE INSIDE\s*\w*\s*CELL\s=\s*(?P<x_wien2k_tot_val_charge_cell>[-+0-9.]+)"),
+                      SM(r":POS[0-9]*:\s*ATOM\s*[-0-9.]+\s*X,Y,Z\s*=[-0-9. ]+MULT=\s*(?P<x_wien2k_atom_mult>[0-9]+)\s*ZZ=\s*[0-9.]+.*", repeats = True),
+                      #FIXME: this is repeating interleaved with the previous matcher and likely need its own submatcher 
+#                     SM(r":CHA(?P<x_wien2k_atom_nr>[-+0-9]+):\s*TOTAL\s*\w*\s*CHARGE INSIDE SPHERE\s*(?P<x_wien2k_sphere_nr>[-+0-9]+)\s*=\s*(?P<x_wien2k_tot_val_charge_sphere>[0-9.]+)",repeats = True),
+#                      SM(r":CHA\s*:\s*TOTAL\s*\w*\s*CHARGE INSIDE\s*\w*\s*CELL\s=\s*(?P<x_wien2k_tot_val_charge_cell>[-+0-9.]+)"),
                       SM(r":SUM\s*:\s*SUM OF EIGENVALUES\s*=\s*(?P<energy_sum_eigenvalues_scf_iteration__rydberg>[-+0-9.]+)"),
                       SM(r":RTO(?P<x_wien2k_atom_nr>[-+0-9]+)\s*:\s*[0-9]+\s*(?P<x_wien2k_density_at_nucleus_valence>[-+0-9.]+)\s*(?P<x_wien2k_density_at_nucleus_semicore>[-+0-9.]+)\s*(?P<x_wien2k_density_at_nucleus_core>[-+0-9.]+)\s*(?P<x_wien2k_density_at_nucleus_tot>[0-9.]+)",repeats = True),
                       #FIXME: followig matchers work just for cases without spin polarization
@@ -350,7 +362,7 @@ mainFileDescription = SM(
                       SM(r":MMTOT:\s*(TOTAL|SPIN) MAGNETIC MOMENT IN CELL\s*=\s*(?P<x_wien2k_mmtot>[-+0-9.]+)"),
                       SM(r":ENE\s*:\s*\W*\w*\W*\s*TOTAL\s*ENERGY\s*IN\s*Ry\s*=\s*(?P<energy_total_scf_iteration__rydberg>[-+0-9.]+)"),
                       SM(r":FOR[0-9]*:\s*(?P<x_wien2k_atom_nr>[0-9]+).ATOM\s*(?P<x_wien2k_for_abs>[0-9.]+)\s*(?P<x_wien2k_for_x>[-++0-9.]+)\s*(?P<x_wien2k_for_y>[-+0-9.]+)\s*(?P<x_wien2k_for_z>[-+0-9.]+)\s*partial\sforces", repeats = True),
-                      SM(r":FGL[0-9]*:\s*(?P<x_wien2k_atom_nr>[0-9]+).ATOM\s*(?P<x_wien2k_for_x_gl>[-+0-9.]+)\s*(?P<x_wien2k_for_y_gl>[-+0-9.]+)\s*(?P<x_wien2k_for_z_gl>[-+0-9.]+)\s*partial\sforces", repeats = True)
+                      SM(r":FGL[0-9]*:\s*(?P<x_wien2k_atom_nr>[0-9]+).ATOM\s*(?P<x_wien2k_for_x_gl__mrydberg_bohr_1>[-+0-9.]+)\s*(?P<x_wien2k_for_y_gl__mrydberg_bohr_1>[-+0-9.]+)\s*(?P<x_wien2k_for_z_gl__mrydberg_bohr_1>[-+0-9.]+)\s*total\sforces", repeats = True),
                   ]
               )
            ]