diff --git a/parser/parser-exciting/parser_exciting.py b/parser/parser-exciting/parser_exciting.py
index c69ff3c228eab5d3411726ffc52d2e2170fe90a8..afa0cc1fc591f55ea88dcb512bc243b74ecbfe3b 100644
--- a/parser/parser-exciting/parser_exciting.py
+++ b/parser/parser-exciting/parser_exciting.py
@@ -6,6 +6,7 @@ from nomadcore.simple_parser import SimpleMatcher as SM, mainFunction
 from nomadcore.local_meta_info import loadJsonFile, InfoKindEl
 from nomadcore.caching_backend import CachingLevel
 from nomadcore.unit_conversion import unit_conversion
+from nomadcore.unit_conversion.unit_conversion import convert_unit_function
 import os, sys, json, exciting_parser_dos,exciting_parser_bandstructure, exciting_parser_gw #, exciting_parser_input
 from ase import Atoms
 import logging
@@ -118,6 +119,35 @@ class ExcitingParserContext(object):
 #    logging.error("BASE onClose_section_single_configuration_calculation")
     backend.addValue('single_configuration_to_calculation_method_ref', self.secMethodIndex)
     backend.addValue('single_configuration_calculation_to_system_ref', self.secSystemIndex)
+    forceX = section["x_exciting_atom_forces_x"]
+    if forceX:
+      forceY = section["x_exciting_atom_forces_y"]
+      forceZ = section["x_exciting_atom_forces_z"]
+      forceCoreX = section["x_exciting_atom_core_forces_x"]
+      forceCoreY = section["x_exciting_atom_core_forces_y"]
+      forceCoreZ = section["x_exciting_atom_core_forces_z"]
+      forceIBSX = section["x_exciting_atom_IBS_forces_x"]
+      forceIBSY = section["x_exciting_atom_IBS_forces_y"]
+      forceIBSZ = section["x_exciting_atom_IBS_forces_z"]
+      forceHFX = section["x_exciting_atom_HF_forces_x"]
+      forceHFY = section["x_exciting_atom_HF_forces_y"]
+      forceHFZ = section["x_exciting_atom_HF_forces_z"]
+      fConv = convert_unit_function("hartree/bohr", "N")
+      atoms = len(forceX)
+      atom_forces = []
+      atom_core_forces = []
+      atom_IBS_forces = []
+      atom_HF_forces = []
+      for i in range(0,atoms):
+        atom_forces.append([fConv(forceX[i]),fConv(forceY[i]),fConv(forceZ[i])])
+        atom_core_forces.append([fConv(forceCoreX[i]),fConv(forceCoreY[i]),fConv(forceCoreZ[i])])
+        atom_IBS_forces.append([fConv(forceIBSX[i]),fConv(forceIBSY[i]),fConv(forceIBSZ[i])])
+        atom_HF_forces.append([fConv(forceHFX[i]),fConv(forceHFY[i]),fConv(forceHFZ[i])])
+      backend.addValue("atom_forces",atom_forces)
+      backend.addValue("x_exciting_atom_core_forces",atom_core_forces)
+      backend.addValue("x_exciting_atom_IBS_forces",atom_IBS_forces)
+      backend.addValue("x_exciting_atom_HF_forces",atom_HF_forces)
+#    print("atom_forces=",atom_forces)
     dirPath = os.path.dirname(self.parser.fIn.name)
     dosFile = os.path.join(dirPath, "dos.xml")
     bandFile = os.path.join(dirPath, "bandstructure.xml")
@@ -301,7 +331,15 @@ class ExcitingParserContext(object):
     if gIndex == self.secMethodIndex:
       backend.addValue('electronic_structure_method', "DFT")
       energy_thresh = section["x_exciting_scf_threshold_energy_change"][0]
+      potential_thresh = section["x_exciting_scf_threshold_potential_change_list"][0]
+      charge_thresh = section["x_exciting_scf_threshold_charge_change_list"][0]
+      if section["x_exciting_scf_threshold_force_change_list"]:
+        force_thresh = section["x_exciting_scf_threshold_force_change_list"][0]
+        backend.addValue('x_exciting_scf_threshold_force_change', force_thresh)
       backend.addValue('scf_threshold_energy_change', energy_thresh)
+      backend.addValue('x_exciting_scf_threshold_potential_change', potential_thresh)
+      backend.addValue('x_exciting_scf_threshold_charge_change', charge_thresh)
+#      backend.addValue('x_exciting_scf_threshold_force_change', force_thresh)
 
 mainFileDescription = \
     SM(name = "root matcher",
@@ -365,8 +403,8 @@ mainFileDescription = \
         ]),
     SM(r"\s*Total nuclear charge\s*:\s*(?P<x_exciting_nuclear_charge>[-0-9.]+)"),
     SM(r"\s*Total electronic charge\s*:\s*(?P<x_exciting_electronic_charge>[-0-9.]+)"),
-    SM(r"\s*Total core charge\s*:\s*(?P<x_exciting_core_charge>[-0-9.]+)"),
-    SM(r"\s*Total valence charge\s*:\s*(?P<x_exciting_valence_charge>[-0-9.]+)"),
+    SM(r"\s*Total core charge\s*:\s*(?P<x_exciting_core_charge_initial>[-0-9.]+)"),
+    SM(r"\s*Total valence charge\s*:\s*(?P<x_exciting_valence_charge_initial>[-0-9.]+)"),
     SM(r"\s*Effective Wigner radius, r_s\s*:\s*(?P<x_exciting_wigner_radius>[-0-9.]+)"),
     SM(r"\s*Number of empty states\s*:\s*(?P<x_exciting_empty_states>[-0-9.]+)"),
     SM(r"\s*Total number of valence states\s*:\s*(?P<x_exciting_valence_states>[-0-9.]+)"),
@@ -408,14 +446,17 @@ mainFileDescription = \
                    SM(r"\s*Core-electron kinetic energy\s*:\s*(?P<x_exciting_core_electron_kinetic_energy_scf_iteration__hartree>[-0-9.]+)"),
                    SM(r"\s*Absolute change in total energy   (target)\s*:\s*(?P<energy_change_scf_iteration__hartree>[-0-9.]+)\s*(\s*(?P<scf_threshold_energy_change__hartree>[-0-9.]+))"),
                    SM(r"\s*DOS at Fermi energy \(states\/Ha\/cell\)\s*:\s*(?P<x_exciting_dos_fermi_scf_iteration__hartree_1>[-0-9.]+)"),
+                   SM(r"\s*core\s*:\s*(?P<x_exciting_core_charge_scf_iteration>[-0-9.]+)"),
                    SM(r"\s*core leakage\s*:\s*(?P<x_exciting_core_leakage_scf_iteration>[-0-9.]+)"),
+                   SM(r"\s*valence\s*:\s*(?P<x_exciting_valence_charge_scf_iteration>[-0-9.]+)"),
                    SM(r"\s*interstitial\s*:\s*(?P<x_exciting_interstitial_charge_scf_iteration>[-0-9.]+)"),
                    SM(r"\s*total charge in muffin-tins\s*:\s*(?P<x_exciting_total_MT_charge_scf_iteration>[-0-9.]+)"),
                    SM(r"\s*Estimated fundamental gap\s*:\s*(?P<x_exciting_gap_scf_iteration__hartree>[-0-9.]+)"),
                    SM(r"\s*Wall time \(seconds\)\s*:\s*(?P<x_exciting_time_scf_iteration>[-0-9.]+)"),
-                   SM(r"\s*RMS change in effective potential \(target\)\s*:\s*(?P<x_exciting_effective_potential_convergence_scf_iteration>[0-9]\.[0-9]*([E]?[-]?[0-9]+))"),
+                   SM(r"\s*RMS change in effective potential \(target\)\s*:\s*(?P<x_exciting_effective_potential_convergence_scf_iteration__hartree>[0-9]\.[0-9]*([E]?[-]?[0-9]+))\s*\(\s*(?P<x_exciting_scf_threshold_potential_change_list__hartree>[0-9]\.[0-9]*([E]?[-]?[0-9]+))\)"),
                    SM(r"\s*Absolute change in total energy\s*\(target\)\s*:\s*(?P<x_exciting_energy_convergence_scf_iteration>[0-9]+\.[0-9]*([E]?[-]?[0-9]+))\s*\(\s*(?P<x_exciting_scf_threshold_energy_change__hartree>[0-9]\.[0-9]*([E]?[-]?[0-9]+))\)"),
-                   SM(r"\s*Charge distance\s*\(target\)\s*:\s*(?P<x_exciting_charge_convergence_scf_iteration>[0-9]\.[0-9]*([E]?[-]?[0-9]+))")
+                   SM(r"\s*Charge distance\s*\(target\)\s*:\s*(?P<x_exciting_charge_convergence_scf_iteration>[0-9]\.[0-9]*([E]?[-]?[0-9]+))\s*\(\s*(?P<x_exciting_scf_threshold_charge_change_list>[0-9]\.[0-9]*([E]?[-]?[0-9]+))\)"),
+                   SM(r"\s*Abs. change in max-nonIBS-force\s*\(target\)\s*:\s*(?P<x_exciting_force_convergence_scf_iteration>[0-9]\.[0-9]*([E]?[-]?[0-9]+))\s*\(\s*(?P<x_exciting_scf_threshold_force_change_list>[0-9]\.[0-9]*([E]?[-]?[0-9]+))\)")
                   ]),
                 SM(name="final_quantities",
                   startReStr = r"\| Convergence targets achieved. Performing final SCF iteration\s*\+",
@@ -443,17 +484,21 @@ mainFileDescription = \
                      SM(r"\s*Estimated fundamental gap\s*:\s*(?P<x_exciting_gap__hartree>[-0-9.]+)")
                    ]),
                 SM(name="final_forces",
-                  startReStr = r"\| Writing atomic positions and forces\s*\-",
-                  endReStr = r"\s* Atomic force components including IBS \(cartesian\)\s*:",
+#                  startReStr = r"\| Writing atomic positions and forces\s*\-",
+                  startReStr = r"\s*Total atomic forces including IBS \(cartesian\) \s*:",
+                  endReStr = r"\|\s*Groundstate module stopped\s*\*",
+#                  endReStr = r"\s* Atomic force components including IBS \(cartesian\)\s*:",
+                  floating = True,
                    subMatchers = [
-                     SM(name="total_forces",
-                     startReStr = r"\s*Total atomic forces including IBS \(cartesian\)\s*:",
-##                       SM(r"\s*atom\s*(?P<x_exciting_store_total_forces>[0-9]+\s*[A-Za-z]+\s*\:+\s*[-\d\.]+\s*[-\d\.]+\s*[-\d\.]+\s*[A-Za-z]+\s*[A-Za-z]+)",
+#                     SM(name="total_forces",
+#                     startReStr = r"\s*Total atomic forces including IBS \(cartesian\)\s*:",
+                       SM(r"\s*atom\s*[0-9]+\s*[A-Za-z]+\s*\:\s*(?P<x_exciting_atom_forces_x>[-0-9.]+)\s*(?P<x_exciting_atom_forces_y>[-0-9.]+)\s*(?P<x_exciting_atom_forces_z>[-0-9.]+)",
+                          repeats = True )    
 #####                     subMatchers = [
 #####                     SM(r"\s*atom\s*(?P<x_exciting_store_total_forces>[0-9]+\s*[A-Za-z]+\s*\:+\s*[-\d\.]+\s*[-\d\.]+\s*[-\d\.]+)",
 #####                          repeats = True)
 #####                   ] )
-)
+#)
 #                     print ("number atoms=", x_exciting_number_of_atoms)
 #                     SM(name="force_components",
 #                     startReStr = r"\s*Atomic force components including IBS \(cartesian\)\s*:",
@@ -465,7 +510,24 @@ mainFileDescription = \
 #                     SM(r"\s*(?P<x_exciting_store_total_forces>\s*\:+\s*[-\d\.]+\s*[-\d\.]+\s*[-\d\.]+\s*[A-Za-z]+\s*[A-Za-z]+)"),
 #                   ] 
 #                    )
-                   ])
+                   ]),
+                 SM(name="force_components",
+                  startReStr = r"\s* Atomic force components including IBS \(cartesian\)\s*:",
+                  endReStr = r"\|\s* Groundstate module stopped\s* \*",
+                  subMatchers = [
+#                  startReStr = r"\s* Atomic force components including IBS \(cartesian\)\s*:",
+                   SM(r"\s*atom\s*[0-9]+\s*[A-Za-z]+\s*\:\s*(?P<x_exciting_atom_HF_forces_x>[-0-9.]+)\s*(?P<x_exciting_atom_HF_forces_y>[-0-9.]+)\s*(?P<x_exciting_atom_HF_forces_z>[-0-9.]+)\s*HF force",
+                     repeats = True,
+                     floating = True),
+                   SM(r"\s*\:\s*(?P<x_exciting_atom_core_forces_x>[-0-9.]+)\s*(?P<x_exciting_atom_core_forces_y>[-0-9.]+)\s*(?P<x_exciting_atom_core_forces_z>[-0-9.]+)\s*core correction",
+                     repeats = True,
+                     floating = True),
+                   SM(r"\s*\:\s*(?P<x_exciting_atom_IBS_forces_x>[-0-9.]+)\s*(?P<x_exciting_atom_IBS_forces_y>[-0-9.]+)\s*(?P<x_exciting_atom_IBS_forces_z>[-0-9.]+)\s*IBS correction",
+                     repeats = True,
+                     floating = True),
+#                   SM(r"(?P<x_exciting_store_total_forces>.*)",
+#                          repeats = True, 
+                ] )
                ]
             )
           ])
@@ -490,7 +552,19 @@ cachingLevelForMetaName = {
                             "x_exciting_geometry_reciprocal_lattice_vector_x":CachingLevel.Cache,
                             "x_exciting_geometry_reciprocal_lattice_vector_y":CachingLevel.Cache,
                             "x_exciting_geometry_reciprocal_lattice_vector_z":CachingLevel.Cache,
-                            "x_exciting_section_reciprocal_lattice_vectors": CachingLevel.Ignore
+                            "x_exciting_section_reciprocal_lattice_vectors": CachingLevel.Ignore,
+                            "x_exciting_atom_forces_x":CachingLevel.Cache,
+                            "x_exciting_atom_forces_y":CachingLevel.Cache,
+                            "x_exciting_atom_forces_z":CachingLevel.Cache,
+                            "x_exciting_atom_HF_forces_x":CachingLevel.Cache,
+                            "x_exciting_atom_HF_forces_y":CachingLevel.Cache,
+                            "x_exciting_atom_HF_forces_z":CachingLevel.Cache,
+                            "x_exciting_atom_core_forces_x":CachingLevel.Cache,
+                            "x_exciting_atom_core_forces_y":CachingLevel.Cache,
+                            "x_exciting_atom_core_forces_z":CachingLevel.Cache,
+                            "x_exciting_atom_IBS_forces_x":CachingLevel.Cache,
+                            "x_exciting_atom_IBS_forces_y":CachingLevel.Cache,
+                            "x_exciting_atom_IBS_forces_z":CachingLevel.Cache
                           }
 if __name__ == "__main__":
     mainFunction(mainFileDescription, metaInfoEnv, parserInfo, cachingLevelForMetaName = cachingLevelForMetaName, superContext=ExcitingParserContext())
diff --git a/parser/parser-exciting/parser_exciting_helium.py b/parser/parser-exciting/parser_exciting_helium.py
index ecd34149acc8cbe963be19c8273265c74cc805fc..b0d263600028474ce64c627f8362395b7d3e1655 100644
--- a/parser/parser-exciting/parser_exciting_helium.py
+++ b/parser/parser-exciting/parser_exciting_helium.py
@@ -283,8 +283,8 @@ mainFileDescription = \
         ]),
     SM(r"\s*Total nuclear charge\s*:\s*(?P<x_exciting_nuclear_charge>[-0-9.]+)"),
     SM(r"\s*Total electronic charge\s*:\s*(?P<x_exciting_electronic_charge>[-0-9.]+)"),
-    SM(r"\s*Total core charge\s*:\s*(?P<x_exciting_core_charge>[-0-9.]+)"),
-    SM(r"\s*Total valence charge\s*:\s*(?P<x_exciting_valence_charge>[-0-9.]+)"),
+    SM(r"\s*Total core charge\s*:\s*(?P<x_exciting_core_charge_initial>[-0-9.]+)"),
+    SM(r"\s*Total valence charge\s*:\s*(?P<x_exciting_valence_charge_initial>[-0-9.]+)"),
     SM(r"\s*Effective Wigner radius, r_s\s*:\s*(?P<x_exciting_wigner_radius>[-0-9.]+)"),
     SM(r"\s*Number of empty states\s*:\s*(?P<x_exciting_empty_states>[-0-9.]+)"),
     SM(r"\s*Total number of valence states\s*:\s*(?P<x_exciting_valence_states>[-0-9.]+)"),