diff --git a/parser/parser-gaussian/parser_gaussian.py b/parser/parser-gaussian/parser_gaussian.py
index ed2738539a438812c866b0a9bc270ca23a067112..027bb77c9fa0ee042436aaaec1c1a8bd10bb4929 100644
--- a/parser/parser-gaussian/parser_gaussian.py
+++ b/parser/parser-gaussian/parser_gaussian.py
@@ -61,7 +61,7 @@ mainFileDescription = SM(
                    forwardMatch = True,
                    subMatchers = [
                        SM(r"\s*(?P<x_gaussian_settings>([a-zA-Z0-9-/=(),#*+:]*\s*)+)"),
-                       SM(r"\s*(?P<x_gaussian_settings>([a-zA-Z0-9-/=(),#*+:]*\s*)+)")
+                       SM(r"\s*(?P<x_gaussian_settings>([a-zA-Z0-9-/=(),#*+:]*\s*)+)"),
                        ]
              ),
                SM(name = 'charge_multiplicity_cell_masses',
@@ -95,21 +95,31 @@ mainFileDescription = SM(
                       SM(r"\s+[0-9]+\s+(?P<x_gaussian_atomic_number>[0-9]+)\s+[0-9]+\s+(?P<x_gaussian_atom_x_coord__angstrom>[-+0-9EeDd.]+)\s+(?P<x_gaussian_atom_y_coord__angstrom>[-+0-9EeDd.]+)\s+(?P<x_gaussian_atom_z_coord__angstrom>[-+0-9EeDd.]+)",repeats = True),
                       SM(r"\s*Rotational constants")
                     ]
+                ),
+                    SM(name = 'SectionHybridCoeffs',
+                    sections = ['x_gaussian_section_hybrid_coeffs'],
+                    startReStr = r"\s*IExCor=",
+                    forwardMatch = True,
+                    subMatchers = [
+                     SM(r"\s*IExCor=\s*[0-9]+\s*DFT=[A-Z]\s*Ex\+Corr=[A-Z0-9]+\s*ExCW=[0-9]\s*ScaHFX=\s*(?P<hybrid_xc_coeff1>[0-9.]+)"),
+                     SM(r"\s*IExCor=\s*[0-9]+\s*DFT=[A-Z]\s*Ex\=[A-Z0-9]+\s*Corr=[a-zA-Z0-9]+\s*ExCW=[0-9]\s*ScaHFX=\s*(?P<hybrid_xc_coeff1>[0-9.]+)"),
+                     SM(r"\s*ScaDFX=\s*(?P<hybrid_xc_coeff2>[0-9.]+\s*[0-9.]+\s*[0-9.]+\s*[0-9.]+)")
+                    ]
                 ),
                     SM(name = 'TotalEnergyScfGaussian',
                     sections  = ['section_scf_iteration'],
-                    startReStr = r"\s*Cycle\s+[0-9]+|\s*Initial guess <Sx>=",
-                    forwardMatch = True,
+                    startReStr = r"\s*Requested convergence on RMS",
+                    forwardMatch = False,
                     repeats = True,
                     subMatchers = [
-                    SM(r"\s*Cycle\s+[0-9]+|\s*Initial guess <Sx>="),
-                    SM(r"\s*E=\s*(?P<energy_total_scf_iteration__hartree>[-+0-9.]+)\s*Delta-E=\s*(?P<x_gaussian_delta_energy_total_scf_iteration__hartree>[-+0-9.]+)"),
-                    SM(r"\s*(?P<x_gaussian_single_configuration_calculation_converged>SCF Done):\s*[(),A-Za-z0-9-]+\s*=\s*(?P<x_gaussian_energy_total__hartree>[-+0-9.]+)"),
+                     SM(r"\s*Cycle\s+[0-9]+|\s*Initial guess <Sx>="),
+                     SM(r"\s*E=\s*(?P<energy_total_scf_iteration__hartree>[-+0-9.]+)\s*Delta-E=\s*(?P<x_gaussian_delta_energy_total_scf_iteration__hartree>[-+0-9.]+)"),
+                     SM(r"\s*(?P<x_gaussian_single_configuration_calculation_converged>SCF Done):\s*E\((?P<x_gaussian_hf_detect>[A-Z0-9]+)\)\s*=\s*(?P<x_gaussian_energy_scf__hartree>[-+0-9.]+)"),
                      SM(r"\s*NFock=\s*[0-9]+\s*Conv=(?P<x_gaussian_energy_error__hartree>[-+0-9EeDd.]+)\s*"),
                      SM(r"\s*KE=\s*(?P<x_gaussian_electronic_kinetic_energy__hartree>[-+0-9EeDd.]+)\s*"),
                      SM(r"\s*Annihilation of the first spin contaminant"),
                      SM(r"\s*[A-Z][*][*][0-9]\s*before annihilation\s*(?P<spin_S2>[0-9.]+),\s*after\s*(?P<x_gaussian_after_annihilation_spin_S2>[0-9.]+)"),
-                     SM(r"\s*[()A-Z0-9]+\s*=\s*[-+0-9D.]+\s*[()A-Z0-9]+\s*=\s*(?P<x_gaussian_energy_total_perturbative__hartree>[-+0-9D.]+)"),
+                     SM(r"\s*[()A-Z0-9]+\s*=\s*[-+0-9D.]+\s*[()A-Z0-9]+\s*=\s*(?P<x_gaussian_perturbation_energy__hartree>[-+0-9D.]+)"),
                     ]
                 ),
                     SM(name = 'PerturbationEnergies',
@@ -117,12 +127,12 @@ mainFileDescription = SM(
                     startReStr = r"\s*E2 =\s*",
                     forwardMatch = True,
                     subMatchers = [
-                     SM(r"\s*E2 =\s*(?P<x_gaussian_mp2_correction_energy__hartree>[-+0-9EeDd.]+)\s*EUMP2 =\s*(?P<x_gaussian_mp2_energy__hartree>[-+0-9EeDd.]+)"),
-                     SM(r"\s*E3=\s*(?P<x_gaussian_mp3_correction_energy__hartree>[-+0-9EeDd.]+)\s*EUMP3=\s*(?P<x_gaussian_mp3_energy__hartree>[-+0-9EeDd.]+)\s*"),
-                     SM(r"\s*E4\(DQ\)=\s*(?P<x_gaussian_mp4dq_correction_energy__hartree>[-+0-9EeDd.]+)\s*UMP4\(DQ\)=\s*(?P<x_gaussian_mp4dq_energy__hartree>[-+0-9EeDd.]+)\s*"),
-                     SM(r"\s*E4\(SDQ\)=\s*(?P<x_gaussian_mp4sdq_correction_energy__hartree>[-+0-9EeDd.]+)\s*UMP4\(SDQ\)=\s*(?P<x_gaussian_mp4sdq_energy__hartree>[-+0-9EeDd.]+)"),
-                     SM(r"\s*E4\(SDTQ\)=\s*(?P<x_gaussian_mp4sdtq_correction_energy__hartree>[-+0-9EeDd.]+)\s*UMP4\(SDTQ\)=\s*(?P<x_gaussian_mp4sdtq_energy__hartree>[-+0-9EeDd.]+)"),
-                     SM(r"\s*DEMP5 =\s*(?P<x_gaussian_mp5_correction_energy__hartree>[-+0-9EeDd.]+)\s*MP5 =\s*(?P<x_gaussian_mp5_energy__hartree>[-+0-9EeDd.]+)"),
+                     SM(r"\s*E2 =\s*(?P<x_gaussian_mp2_correction_energy__hartree>[-+0-9EeDd.]+)\s*EUMP2 =\s*(?P<energy_total__hartree>[-+0-9EeDd.]+)"),
+                     SM(r"\s*E3=\s*(?P<x_gaussian_mp3_correction_energy__hartree>[-+0-9EeDd.]+)\s*EUMP3=\s*(?P<energy_total__hartree>[-+0-9EeDd.]+)\s*"),
+                     SM(r"\s*E4\(DQ\)=\s*(?P<x_gaussian_mp4dq_correction_energy__hartree>[-+0-9EeDd.]+)\s*UMP4\(DQ\)=\s*(?P<energy_total__hartree>[-+0-9EeDd.]+)\s*"),
+                     SM(r"\s*E4\(SDQ\)=\s*(?P<x_gaussian_mp4sdq_correction_energy__hartree>[-+0-9EeDd.]+)\s*UMP4\(SDQ\)=\s*(?P<energy_total__hartree>[-+0-9EeDd.]+)"),
+                     SM(r"\s*E4\(SDTQ\)=\s*(?P<x_gaussian_mp4sdtq_correction_energy__hartree>[-+0-9EeDd.]+)\s*UMP4\(SDTQ\)=\s*(?P<energy_total__hartree>[-+0-9EeDd.]+)"),
+                     SM(r"\s*DEMP5 =\s*(?P<x_gaussian_mp5_correction_energy__hartree>[-+0-9EeDd.]+)\s*MP5 =\s*(?P<energy_total__hartree>[-+0-9EeDd.]+)"),
                      ]
                 ),
                     SM(name = 'CoupledClusterEnergies',
@@ -131,8 +141,8 @@ mainFileDescription = SM(
                     endReStr = r"\s*Population analysis using the SCF density",
                     forwardMatch = True,
                     subMatchers = [
-                     SM(r"\s*DE\(Corr\)=\s*(?P<x_gaussian_ccsd_correction_energy__hartree>[-+0-9EeDd.]+)\s*E\(CORR\)=\s*(?P<x_gaussian_ccsd_energy__hartree>[-+0-9EeDd.]+)", repeats = True),
-                     SM(r"\s*CCSD\(T\)=\s*(?P<x_gaussian_ccsdt_energy__hartree>[-+0-9EeDd.]+)"),
+                     SM(r"\s*DE\(Corr\)=\s*(?P<x_gaussian_ccsd_correction_energy__hartree>[-+0-9EeDd.]+)\s*E\(CORR\)=\s*(?P<energy_total__hartree>[-+0-9EeDd.]+)", repeats = True),
+                     SM(r"\s*CCSD\(T\)=\s*(?P<energy_total__hartree>[-+0-9EeDd.]+)"),
                      ]
                 ),
                     SM(name = 'QuadraticCIEnergies',
@@ -141,10 +151,10 @@ mainFileDescription = SM(
                     endReStr = r"\s*Population analysis using the SCF density",
                     forwardMatch = True,
                     subMatchers = [
-                     SM(r"\s*DE\(Z\)=\s*(?P<x_gaussian_qcisd_correction_energy__hartree>[-+0-9EeDd.]+)\s*E\(Z\)=\s*(?P<x_gaussian_qcisd_energy__hartree>[-+0-9EeDd.]+)", repeats = True),
-                     SM(r"\s*DE\(Corr\)=\s*(?P<x_gaussian_qcisd_correction_energy__hartree>[-+0-9EeDd.]+)\s*E\(CORR\)=\s*(?P<x_gaussian_qcisd_energy__hartree>[-+0-9EeDd.]+)", repeats = True),
-                     SM(r"\s*QCISD\(T\)=\s*(?P<x_gaussian_qcisdt_energy__hartree>[-+0-9EeDd.]+)"),
-                     SM(r"\s*DE5\s*=\s*(?P<x_gaussian_qcisdtq_correction_energy__hartree>[-+0-9EeDd.]+)\s*QCISD\(TQ\)\s*=\s*(?P<x_gaussian_qcisdtq_energy__hartree>[-+0-9EeDd.]+)", repeats = True),
+                     SM(r"\s*DE\(Z\)=\s*(?P<x_gaussian_qcisd_correction_energy__hartree>[-+0-9EeDd.]+)\s*E\(Z\)=\s*(?P<energy_total__hartree>[-+0-9EeDd.]+)", repeats = True),
+                     SM(r"\s*DE\(Corr\)=\s*(?P<x_gaussian_qcisd_correction_energy__hartree>[-+0-9EeDd.]+)\s*E\(CORR\)=\s*(?P<energy_total__hartree>[-+0-9EeDd.]+)", repeats = True),
+                     SM(r"\s*QCISD\(T\)=\s*(?P<energy_total__hartree>[-+0-9EeDd.]+)"),
+                     SM(r"\s*DE5\s*=\s*(?P<x_gaussian_qcisdtq_correction_energy__hartree>[-+0-9EeDd.]+)\s*QCISD\(TQ\)\s*=\s*(?P<energy_total__hartree>[-+0-9EeDd.]+)", repeats = True),
                      ]
                 ),
                     SM(name = 'CIEnergies',
@@ -153,7 +163,7 @@ mainFileDescription = SM(
                     endReStr = r"\s*Population analysis using the SCF density",
                     forwardMatch = True,
                     subMatchers = [
-                     SM(r"\s*DE\(CI\)=\s*(?P<x_gaussian_ci_correction_energy__hartree>[-+0-9EeDd.]+)\s*E\(CI\)=\s*(?P<x_gaussian_ci_energy__hartree>[-+0-9EeDd.]+)", repeats = True),
+                     SM(r"\s*DE\(CI\)=\s*(?P<x_gaussian_ci_correction_energy__hartree>[-+0-9EeDd.]+)\s*E\(CI\)=\s*(?P<energy_total__hartree>[-+0-9EeDd.]+)", repeats = True),
                      ]
                 ),
                     SM(name = 'SemiempiricalEnergies',
@@ -164,7 +174,7 @@ mainFileDescription = SM(
                     subMatchers = [
                      SM(r"\s*(?P<x_gaussian_semiempirical_method>[-A-Z0-9]+\s*calculation of energy[a-zA-Z,. ]+)"),
                      SM(r"\s*It=\s*[0-9]+\s*PL=\s*[-+0-9EeDd.]+\s*DiagD=[A-Z]\s*ESCF=\s*(?P<x_gaussian_semiempirical_energy>[-+0-9.]+)\s*", repeats = True),
-                     SM(r"\s*Energy=\s*(?P<x_gaussian_semiempirical_energy_converged>[-+0-9EeDd.]+)"),
+                     SM(r"\s*Energy=\s*(?P<energy_total>[-+0-9EeDd.]+)"),
                      ]
                 ),
                     SM(name = 'MolecularMechanicsEnergies',
@@ -174,7 +184,7 @@ mainFileDescription = SM(
                     repeats = True,
                     subMatchers = [
                      SM(r"\s*(?P<x_gaussian_molmech_method>[a-zA-Z0-9]+\s*calculation of energy[a-z,. ]+)"),
-                     SM(r"\s*Energy=\s*(?P<x_gaussian_molmech_energy>[-+0-9EeDd.]+)\s*NIter=\s*[0-9.]"),
+                     SM(r"\s*Energy=\s*(?P<energy_total>[-+0-9EeDd.]+)\s*NIter=\s*[0-9.]"),
                      ]
                 ),
                   SM(name = 'ExcitedStates',
@@ -185,8 +195,8 @@ mainFileDescription = SM(
                    subMatchers = [
                     SM(name = 'ExcitedStates',
                     sections = ['x_gaussian_section_excited'],
-                    startReStr = r"\s*Excited State\s*",
-                    forwardMatch = True,
+                    startReStr = r"\s*Excited State",
+                    forwardMatch = False,
                     repeats = True,
                     subMatchers = [
                      SM(r"\s*Excited State\s*(?P<x_gaussian_excited_state_number>[0-9]+):\s*[-+0-9A-Za-z.\?]+\s*(?P<x_gaussian_excited_energy__eV>[0-9.]+)\s*eV\s*[0-9.]+\s*nm\s*f=(?P<x_gaussian_excited_oscstrength>[0-9.]+)\s*<[A-Z][*][*][0-9]>=(?P<x_gaussian_excited_spin_squared>[0-9.]+)"),
@@ -244,7 +254,7 @@ mainFileDescription = SM(
                       ]
              ),
                 SM(name = 'Eigenvalues',
-                sections = ['x_gaussian_section_eigenvalues'],
+                sections = ['section_eigenvalues'],
                 startReStr = r"\s*Alpha  occ. eigenvalues --",
                 forwardMatch = True,
                 subFlags = SM.SubFlags.Sequenced,
@@ -335,20 +345,20 @@ mainFileDescription = SM(
                 forwardMatch = False,
                 repeats = True,
                 subMatchers = [
-                 SM(r"\s*G1\(0 K\)=\s*[-+0-9.]+\s*G1 Energy=\s*(?P<x_gaussian_G1_energy__hartree>[-+0-9.]+)"),
-                 SM(r"\s*G2\(0 K\)=\s*[-+0-9.]+\s*G2 Energy=\s*(?P<x_gaussian_G2_energy__hartree>[-+0-9.]+)"),
-                 SM(r"\s*G2MP2\(0 K\)=\s*[-+0-9.]+\s*G2MP2 Energy=\s*(?P<x_gaussian_G2MP2_energy__hartree>[-+0-9.]+)"),
-                 SM(r"\s*G3\(0 K\)=\s*[-+0-9.]+\s*G3 Energy=\s*(?P<x_gaussian_G3_energy__hartree>[-+0-9.]+)"),
-                 SM(r"\s*G3MP2\(0 K\)=\s*[-+0-9.]+\s*G3MP2 Energy=\s*(?P<x_gaussian_G3MP2_energy__hartree>[-+0-9.]+)"),
-                 SM(r"\s*G4\(0 K\)=\s*[-+0-9.]+\s*G4 Energy=\s*(?P<x_gaussian_G4_energy__hartree>[-+0-9.]+)"),
-                 SM(r"\s*G4MP2\(0 K\)=\s*[-+0-9.]+\s*G4MP2 Energy=\s*(?P<x_gaussian_G4MP2_energy__hartree>[-+0-9.]+)"),
-                 SM(r"\s*CBS-4 \(0 K\)=\s*[-+0-9.]+\s*CBS-4 Energy=\s*(?P<x_gaussian_CBS4_energy__hartree>[-+0-9.]+)"),
-                 SM(r"\s*CBS-q \(0 K\)=\s*[-+0-9.]+\s*CBS-q Energy=\s*(?P<x_gaussian_CBSq_energy__hartree>[-+0-9.]+)"),
-                 SM(r"\s*CBS-Q \(0 K\)=\s*[-+0-9.]+\s*CBS-Q Energy=\s*(?P<x_gaussian_CBSQ_energy__hartree>[-+0-9.]+)"),
-                 SM(r"\s*CBS-QB3 \(0 K\)=\s*[-+0-9.]+\s*CBS-QB3 Energy=\s*(?P<x_gaussian_CBSQB3_energy__hartree>[-+0-9.]+)"),
-                 SM(r"\s*W1U  \(0 K\)=\s*[-+0-9.]+\s*W1U   Electronic Energy\s*(?P<x_gaussian_W1U_energy__hartree>[-+0-9.]+)"),
-                 SM(r"\s*W1RO  \(0 K\)=\s*[-+0-9.]+\s*W1RO  Electronic Energy\s*(?P<x_gaussian_W1RO_energy__hartree>[-+0-9.]+)"),
-                 SM(r"\s*W1BD  \(0 K\)=\s*[-+0-9.]+\s*W1BD  Electronic Energy\s*(?P<x_gaussian_W1BD_energy__hartree>[-+0-9.]+)"),
+                 SM(r"\s*G1\(0 K\)=\s*[-+0-9.]+\s*G1 Energy=\s*(?P<energy_total__hartree>[-+0-9.]+)"),
+                 SM(r"\s*G2\(0 K\)=\s*[-+0-9.]+\s*G2 Energy=\s*(?P<energy_total__hartree>[-+0-9.]+)"),
+                 SM(r"\s*G2MP2\(0 K\)=\s*[-+0-9.]+\s*G2MP2 Energy=\s*(?P<energy_total__hartree>[-+0-9.]+)"),
+                 SM(r"\s*G3\(0 K\)=\s*[-+0-9.]+\s*G3 Energy=\s*(?P<energy_total__hartree>[-+0-9.]+)"),
+                 SM(r"\s*G3MP2\(0 K\)=\s*[-+0-9.]+\s*G3MP2 Energy=\s*(?P<energy_total__hartree>[-+0-9.]+)"),
+                 SM(r"\s*G4\(0 K\)=\s*[-+0-9.]+\s*G4 Energy=\s*(?P<energy_total__hartree>[-+0-9.]+)"),
+                 SM(r"\s*G4MP2\(0 K\)=\s*[-+0-9.]+\s*G4MP2 Energy=\s*(?P<energy_total__hartree>[-+0-9.]+)"),
+                 SM(r"\s*CBS-4 \(0 K\)=\s*[-+0-9.]+\s*CBS-4 Energy=\s*(?P<energy_total__hartree>[-+0-9.]+)"),
+                 SM(r"\s*CBS-q \(0 K\)=\s*[-+0-9.]+\s*CBS-q Energy=\s*(?P<energy_total__hartree>[-+0-9.]+)"),
+                 SM(r"\s*CBS-Q \(0 K\)=\s*[-+0-9.]+\s*CBS-Q Energy=\s*(?P<energy_total__hartree>[-+0-9.]+)"),
+                 SM(r"\s*CBS-QB3 \(0 K\)=\s*[-+0-9.]+\s*CBS-QB3 Energy=\s*(?P<energy_total__hartree>[-+0-9.]+)"),
+                 SM(r"\s*W1U  \(0 K\)=\s*[-+0-9.]+\s*W1U   Electronic Energy\s*(?P<energy_total__hartree>[-+0-9.]+)"),
+                 SM(r"\s*W1RO  \(0 K\)=\s*[-+0-9.]+\s*W1RO  Electronic Energy\s*(?P<energy_total__hartree>[-+0-9.]+)"),
+                 SM(r"\s*W1BD  \(0 K\)=\s*[-+0-9.]+\s*W1BD  Electronic Energy\s*(?P<energy_total__hartree>[-+0-9.]+)"),
                        ]
              ),
                 SM(name = 'run times',
@@ -387,8 +397,9 @@ class GaussianParserContext(object):
       def __init__(self):
         # dictionary of energy values, which are tracked between SCF iterations and written after convergence
         self.totalEnergyList = {
-                                'x_gaussian_energy_total': None,
-                                'x_gaussian_energy_total_perturbative': None,
+                                'x_gaussian_hf_detect': None,
+                                'x_gaussian_energy_scf': None,
+                                'x_gaussian_perturbation_energy': None,
                                 'x_gaussian_electronic_kinetic_energy': None,
                                 'x_gaussian_energy_electrostatic': None,
                                 'x_gaussian_energy_error': None,
@@ -511,14 +522,20 @@ class GaussianParserContext(object):
         # check for SCF convergence
         if section['x_gaussian_single_configuration_calculation_converged'] is not None:
            self.scfConvergence = True
-           if section['x_gaussian_energy_total']:
-              if section['x_gaussian_electronic_kinetic_energy']:
-                 self.scfenergyconverged = float(str(section['x_gaussian_energy_total']).replace("[","").replace("]","").replace("D","E"))
-                 self.scfkineticenergyconverged = float(str(section['x_gaussian_electronic_kinetic_energy']).replace("[","").replace("]","").replace("D","E"))
-                 self.scfelectrostaticenergy = self.scfenergyconverged - self.scfkineticenergyconverged
-                 backend.addValue('x_gaussian_energy_electrostatic', self.scfelectrostaticenergy)
-
-      def onClose_x_gaussian_section_eigenvalues(self, backend, gIndex, section):
+           if section['x_gaussian_energy_scf']:
+               self.scfenergyconverged = float(str(section['x_gaussian_energy_scf']).replace("[","").replace("]","").replace("D","E"))
+               self.scfcharacter = section['x_gaussian_hf_detect']
+               if (self.scfcharacter != ['RHF'] and self.scfcharacter != ['ROHF'] and self.scfcharacter != ['UHF']):
+                  self.energytotal = self.scfenergyconverged
+                  backend.addValue('energy_total', self.energytotal)
+               else:
+                  pass
+               if section['x_gaussian_electronic_kinetic_energy']:
+                  self.scfkineticenergyconverged = float(str(section['x_gaussian_electronic_kinetic_energy']).replace("[","").replace("]","").replace("D","E"))
+                  self.scfelectrostaticenergy = self.scfenergyconverged - self.scfkineticenergyconverged
+                  backend.addValue('x_gaussian_energy_electrostatic', self.scfelectrostaticenergy)
+
+      def onClose_section_eigenvalues(self, backend, gIndex, section):
           eigenenergies = str(section["x_gaussian_alpha_occ_eigenvalues_values"])
           eigenen1 = []
           energy = [float(f) for f in eigenenergies[1:].replace("'","").replace(",","").replace("]","").replace("one","").replace(" ."," 0.").replace(" -."," -0.").replace("\\n","").replace("-"," -").split()]
@@ -533,12 +550,17 @@ class GaussianParserContext(object):
           energy = [float(f) for f in eigenenergies[1:].replace("'","").replace(",","").replace("]","").replace("one","").replace(" ."," 0.").replace(" -."," -0.").replace("\\n","").replace("-"," -").split()]
           eigenen2 = np.append(eigenen2, energy)
           viroccupationsalp = np.zeros(len(eigenen2), dtype=float)
-          eigenencon = np.zeros(len(eigenen1) + len(eigenen2))
-          eigenencon = np.concatenate((eigenen1,eigenen2), axis=0)
-          eigenencon = convert_unit(eigenencon, "hartree", "J")
-          occupcon = np.concatenate((occoccupationsalp, viroccupationsalp), axis=0)
-          backend.addArrayValues("x_gaussian_alpha_eigenvalues", eigenencon)
-          backend.addArrayValues("x_gaussian_alpha_occupations", occupcon)
+          eigenenconalp = np.zeros(len(eigenen1) + len(eigenen2))
+          eigenenconalp = np.concatenate((eigenen1,eigenen2), axis=0)
+          eigenenconalp = convert_unit(eigenenconalp, "hartree", "J")
+          occupconalp = np.concatenate((occoccupationsalp, viroccupationsalp), axis=0)
+          eigenenconalpnew = np.reshape(eigenenconalp,(1, 1, len(eigenenconalp)))
+          occupconalpnew = np.reshape(occupconalp,(1, 1, len(occupconalp)))
+          if(section["x_gaussian_beta_occ_eigenvalues_values"]):
+             pass
+          else:
+             backend.addArrayValues("eigenvalues_values", eigenenconalpnew)
+             backend.addArrayValues("eigenvalues_occupation", occupconalpnew)
 
           if(section["x_gaussian_beta_occ_eigenvalues_values"]):
              eigenenergies = str(section["x_gaussian_beta_occ_eigenvalues_values"])
@@ -551,12 +573,16 @@ class GaussianParserContext(object):
              energy = [float(f) for f in eigenenergies[1:].replace("'","").replace(",","").replace("]","").replace("one","").replace(" ."," 0.").replace(" -."," -0.").replace("\\n","").replace("-"," -").split()]
              eigenen2 = np.append(eigenen2, energy)
              viroccupationsbet = np.zeros(len(eigenen2), dtype=float)
-             eigenencon = np.zeros(len(eigenen1) + len(eigenen2))
-             eigenencon = np.concatenate((eigenen1,eigenen2), axis=0)
-             eigenencon = convert_unit(eigenencon, "hartree", "J")
-             occupcon = np.concatenate((occoccupationsbet, viroccupationsbet), axis=0)
-             backend.addArrayValues("x_gaussian_beta_eigenvalues", eigenencon)
-             backend.addArrayValues("x_gaussian_beta_occupations", occupcon)
+             eigenenconbet = np.zeros(len(eigenen1) + len(eigenen2))
+             eigenenconbet = np.concatenate((eigenen1,eigenen2), axis=0)
+             eigenenconbet = convert_unit(eigenenconbet, "hartree", "J")
+             occupconbet = np.concatenate((occoccupationsbet, viroccupationsbet), axis=0)
+             eigenenall = np.concatenate((eigenenconalp,eigenenconbet), axis=0)
+             occupall = np.concatenate((occupconalp,occupconbet), axis=0)
+             eigenenall = np.reshape(eigenenall,(2, 1, len(eigenenconalp)))
+             occupall = np.reshape(occupall,(2, 1, len(occupconalp)))
+             backend.addArrayValues("eigenvalues_values", eigenenall)
+             backend.addArrayValues("eigenvalues_occupation", occupall)
 
       def onClose_x_gaussian_section_orbital_symmetries(self, backend, gIndex, section):
           symoccalpha = str(section["x_gaussian_alpha_occ_symmetry_values"])
@@ -770,12 +796,8 @@ class GaussianParserContext(object):
         self.secMethodIndex = gIndex
 
       def onClose_section_method(self, backend, gIndex, section):
-        # handling of xc functional
-        # two functions to convert hybrid_xc_coeff to the correct weight
-        def GGA_weight(x):
-          return 1.0 - x
-        def HF_weight(x):
-          return x
+       # handling of xc functional
+       # two functions to convert hybrid_xc_coeff to the correct weight
        # TODO vdW functionals and double-hybrid functionals
        # Dictionary for conversion of xc functional name in aims to metadata format.
        # The individual x and c components of the functional are given as dictionaries.
@@ -848,7 +870,7 @@ class GaussianParserContext(object):
               'HSEH1PBE':   [{'name': 'HYB_GGA_XC_HSE06'}],
               'OHSE1PBE':   [{'name': 'HYB_GGA_XC_HSEOLD'}],
               'PBEH1PBE':   [{'name': 'HYB_GGA_XC_PBEH1PBE'}],
-              'PBE1PBE':    [{'name': 'GGA_C_PBE'}, {'name': 'GGA_X_PBE', 'weight': 0.75, 'convert': GGA_weight}, {'name': 'HF_X', 'weight': 0.25, 'convert': HF_weight}],
+              'PBE1PBE':    [{'name': 'HYB_GGA_XC_PBE1PBE'}],
               'M05':        [{'name': 'HYB_MGGA_XC_M05'}],
               'M052X':      [{'name': 'HYB_MGGA_XC_M05_2X'}],
               'M06':        [{'name': 'HYB_MGGA_XC_M06'}],
@@ -1243,56 +1265,31 @@ class GaussianParserContext(object):
              if 'ONIOM' in method2:
                 methodreal = method2
         
-# description for hybrid coefficient
-        xcHybridCoeffDescr = 'hybrid coefficient $\\alpha$'
-        hseFunc = 'HSEH1PBE'
-# functionals where hybrid_xc_coeff is written
-        writeHybridCoeff = ['B3LYP', 'OHSE2PBE', 'HSEh1PBE', 'PBE1PBE' ]
+# functionals where hybrid_xc_coeff are written
+
+#        writeHybridCoeff = ['PBE1PBE']
         if xc is not None:
           # check if only one xc keyword was found in output
           if len([xc]) > 1:
               logger.error("Found %d settings for the xc functional: %s. This leads to an undefined behavior of the calculation and no metadata can be written for xc." % (len(xc), xc))
           else:
               backend.superBackend.addValue('x_gaussian_xc', [xc][-1])
-            # check for hybrid_xc_coeff
-#                hybridCoeff = valuesDict.get('hybrid_xc_coeff')
-            # write hybrid_xc_coeff for certain functionals
-#                if hybridCoeff is not None and xc[-1] in writeHybridCoeff:
-#                    backend.superBackend.addValue('hybrid_xc_coeff', hybridCoeff[-1])
-            # convert xc functional for metadata
               if xcWrite:
               # get list of xc components according to parsed value
                   xcList = xcDict.get([xc][-1])
                   if xcList is not None:
-                  # loop over the xc components
+                    # loop over the xc components
                       for xcItem in xcList:
                           xcName = xcItem.get('name')
                           if xcName is not None:
                           # write section and XC_functional_name
                               gIndexTmp = backend.openSection('section_XC_functionals')
                               backend.addValue('XC_functional_name', xcName)
-                            # write hybrid_xc_coeff for B3LYP and HSE03 into XC_functional_parameters
-#                                if hybridCoeff is not None and xc[-1] in ['B3LYP', 'OHSE2PBE']:
-#                                    backend.addValue('XC_functional_parameters', {xcHybridCoeffDescr: hybridCoeff[-1]})
-                            # write hybrid_xc_coeff for HSE06
-#                                elif xc[-1] == hseFunc:
-                                # add hybrid_xc_coeff
-#                                    if hybridCoeff is not None:
-#                                        hybrid = hybridCoeff[-1]
-#                                    else:
-#                                        hybrid = 0.25
-#                                    parameters[xcHybridCoeffDescr] = hybrid
-#                                    backend.addValue('XC_functional_parameters', parameters)
-                            # adjust weight of functionals that are affected by hybrid_xc_coeff
-#                                elif hybridCoeff is not None and 'convert' in xcItem:
-#                                    backend.addValue('XC_functional_weight', xcItem['convert'](hybridCoeff[-1]))
-                            # write weight if present for current xcItem
-#                                else:
-#                                    xcWeight = xcItem.get('weight')
-#                                    if xcWeight is not None:
-#                                        backend.addValue('XC_functional_weight', xcWeight)
-                              backend.closeSection('section_XC_functionals', gIndexTmp)
+                              # write hybrid_xc_coeff for PBE1PBE into XC_functional_parameters
+#                              if hybridCoeff is not None and 'convert' in xcItem:
+#                                  backend.addValue('XC_functional_parameters', xcItem['convert'](hybridCoeff[-1])) 
                           else:
+                              backend.closeSection('section_XC_functionals', gIndexTmp)
                               logger.error("The dictionary for xc functional '%s' does not have the key 'name'. Please correct the dictionary xcDict in %s." % (xc[-1], os.path.basename(__file__)))
                   else:
                       logger.error("The xc functional '%s' could not be converted for the metadata. Please add it to the dictionary xcDict in %s." % (xc[-1], os.path.basename(__file__)))
@@ -1315,10 +1312,10 @@ class GaussianParserContext(object):
                  # write section and method name
                            gIndexTmp = backend.openSection('x_gaussian_section_elstruc_method')
                            if methodprefix != None and methodreal != None:
-                              backend.addValue('x_gaussian_elstruc_method_name', str(methodprefix) + methodreal)
+                              backend.addValue('x_gaussian_electronic_structure_method', str(methodprefix) + methodreal)
                               backend.closeSection('x_gaussian_section_elstruc_method', gIndexTmp)
                            elif methodreal != None:
-                              backend.addValue('x_gaussian_elstruc_method_name', methodreal)
+                              backend.addValue('x_gaussian_electronic_structure_method', methodreal)
                               backend.closeSection('x_gaussian_section_elstruc_method', gIndexTmp)
                         else:
                               logger.error("The dictionary for method '%s' does not have the key 'name'. Please correct the dictionary methodDict in %s." % (method[-1], os.path.basename(__file__)))
@@ -1353,6 +1350,20 @@ class GaussianParserContext(object):
           # keep track of the latest system description section
           self.secSystemDescriptionIndex = gIndex
 
+      def onClose_x_gaussian_section_hybrid_coeffs(self, backend, gIndex, section):
+          # assign the coefficients to the hybrid functionals
+
+          hybrid_xc_coeffsa = ()
+          hybrid_xc_coeffsb = ()
+          hybrid_xc_coeffsa = float(str(section['hybrid_xc_coeff1']).replace("[","").replace("]",""))
+          backend.addValue('x_gaussian_hybrid_xc_hfx', hybrid_xc_coeffsa)
+          hybrid_xc_coeffs = str(section['hybrid_xc_coeff2'])
+          hybrid_xc_coeffsb = [float(f) for f in hybrid_xc_coeffs[1:].replace("'","").replace("]","").replace("]","").split()]
+          backend.addValue('x_gaussian_hybrid_xc_slater', hybrid_xc_coeffsb[0])
+          backend.addValue('x_gaussian_hybrid_xc_nonlocalex', hybrid_xc_coeffsb[1])
+          backend.addValue('x_gaussian_hybrid_xc_localcorr', hybrid_xc_coeffsb[2])
+          backend.addValue('x_gaussian_hybrid_xc_nonlocalcorr', hybrid_xc_coeffsb[3])
+
       def onClose_section_system(self, backend, gIndex, section):
             # write/store unit cell if present and set flag self.periodicCalc
             if(section['x_gaussian_geometry_lattice_vector_x']):
@@ -1400,11 +1411,10 @@ cachingLevelForMetaName = {
         "section_scf_iteration": CachingLevel.Forward,
         "energy_total_scf_iteration": CachingLevel.ForwardAndCache,
         "x_gaussian_delta_energy_total_scf_iteration": CachingLevel.ForwardAndCache, 
-        "x_gaussian_energy_total": CachingLevel.ForwardAndCache,
+        "energy_total": CachingLevel.ForwardAndCache,
         "x_gaussian_energy_error": CachingLevel.ForwardAndCache,
         "x_gaussian_electronic_kinetic_energy": CachingLevel.ForwardAndCache,
         "x_gaussian_energy_electrostatic": CachingLevel.ForwardAndCache, 
-        "x_gaussian_energy_total_perturbative": CachingLevel.ForwardAndCache,
         "x_gaussian_section_frequencies": CachingLevel.Forward,
         "x_gaussian_frequency_values": CachingLevel.Cache,
         "x_gaussian_frequencies": CachingLevel.ForwardAndCache,
@@ -1416,15 +1426,9 @@ cachingLevelForMetaName = {
         "x_gaussian_section_force_constant_matrix": CachingLevel.Forward,
         "x_gaussian_force_constant_values": CachingLevel.ForwardAndCache,
         "x_gaussian_force_constants": CachingLevel.Cache,
-        "x_gaussian_section_eigenvalues": CachingLevel.Forward,
-        "x_gaussian_alpha_occ_eigenvalues_values":CachingLevel.Cache,
-        "x_gaussian_alpha_vir_eigenvalues_values":CachingLevel.Cache,
-        "x_gaussian_alpha_eigenvalues": CachingLevel.ForwardAndCache,
-        "x_gaussian_alpha_occupations": CachingLevel.ForwardAndCache,
-        "x_gaussian_beta_occ_eigenvalues_values":CachingLevel.Cache,
-        "x_gaussian_beta_vir_eigenvalues_values":CachingLevel.Cache,
-        "x_gaussian_beta_eigenvalues": CachingLevel.ForwardAndCache,
-        "x_gaussian_beta_occupations": CachingLevel.ForwardAndCache,
+        "section_eigenvalues": CachingLevel.Forward,
+        "eigenvalues_values": CachingLevel.ForwardAndCache, 
+        "eigenvalues_occupation": CachingLevel.ForwardAndCache,
         "x_gaussian_section_orbital_symmetries": CachingLevel.Forward,
         "x_gaussian_alpha_occ_symmetry_values":CachingLevel.Cache,
         "x_gaussian_alpha_vir_symmetry_values":CachingLevel.Cache,
@@ -1472,11 +1476,13 @@ cachingLevelForMetaName = {
         "x_gaussian_single_configuration_calculation_converged": CachingLevel.ForwardAndCache,
         "x_gaussian_section_geometry_optimization_info": CachingLevel.Forward,
         "x_gaussian_geometry_optimization_converged": CachingLevel.ForwardAndCache,
+        "x_gaussian_hf_detect": CachingLevel.ForwardAndCache,
+        "x_gaussian_section_hybrid_coeffs": CachingLevel.Forward,
         "section_method": CachingLevel.Forward,
-        "x_gaussian_section_elstruc_method": CachingLevel.ForwardAndCache,
-        "x_gaussian_elstruc_method_name": CachingLevel.ForwardAndCache,
+        "x_gaussian_section_elstruc_method": CachingLevel.Forward,
+        "x_gaussian_electronic_structure_method": CachingLevel.ForwardAndCache,
         "XC_functional_name": CachingLevel.ForwardAndCache, 
-        "basis_set_atom_centered_short_name": CachingLevel.ForwardAndCache,
+        "basis_set_atom_centered_short_name": CachingLevel.Forward,
         "x_gaussian_settings": CachingLevel.Cache,
         "x_gaussian_settings_corrected": CachingLevel.ForwardAndCache,
         "section_system": CachingLevel.Forward,