diff --git a/parser/parser-cp2k/cp2kparser/generic/csvparsing.py b/parser/parser-cp2k/cp2kparser/generic/csvparsing.py
index 5812be880baa1ef0edbc5db6d9598f9f27e51d47..1d4b5c7b12178da990c87a5ef1de47132681e970 100644
--- a/parser/parser-cp2k/cp2kparser/generic/csvparsing.py
+++ b/parser/parser-cp2k/cp2kparser/generic/csvparsing.py
@@ -2,18 +2,7 @@ import numpy as np
 import logging
 logger = logging.getLogger(__name__)
 from io import StringIO
-try:
-    import re2 as re
-except ImportError:
-    import re
-    logger.warning((
-        "re2 package not found. Using re package instead. "
-        "If you wan't to use re2 please see the following links:"
-        "    https://github.com/google/re2"
-        "    https://pypi.python.org/pypi/re2/"
-    ))
-else:
-    re.set_fallback_notification(re.FALLBACK_WARNING)
+import re
 
 
 #===============================================================================
diff --git a/parser/parser-cp2k/cp2kparser/generic/inputparsing.py b/parser/parser-cp2k/cp2kparser/generic/inputparsing.py
index b9919e3176b1a268ac70724f5fa7f7821350a4b6..2221ecdbf22dd40d41542d0465d528476a873d90 100644
--- a/parser/parser-cp2k/cp2kparser/generic/inputparsing.py
+++ b/parser/parser-cp2k/cp2kparser/generic/inputparsing.py
@@ -202,6 +202,8 @@ class Keyword(InputObject):
             proper_value = self.value
         if proper_value is None:
             proper_value = self.default_value
+        if proper_value is None:
+            return None
 
         returned = None
         dim = int(self.data_dimension)
diff --git a/parser/parser-cp2k/cp2kparser/tools/xmlpreparser.py b/parser/parser-cp2k/cp2kparser/tools/xmlpreparser.py
index 8518cb7342f782e8b004fc8e2da8f7e9922284f1..434f5dc7cdc73c708fcb092d4d856606ef2d974a 100644
--- a/parser/parser-cp2k/cp2kparser/tools/xmlpreparser.py
+++ b/parser/parser-cp2k/cp2kparser/tools/xmlpreparser.py
@@ -56,10 +56,20 @@ def recursive_tree_generation(xml_element, for_metainfo=False, name_stack=[]):
         section_name = "CP2K_INPUT"
     section = Section(section_name)
 
-    # Ignore sections that control the print settings
-    # ignored = ["EACH", "PRINT"]
-    # if section_name in ignored:
-        # return
+    name_stack.append(section_name)
+
+    # Ignore most sections that control the print settings
+    ignored = ["EACH", "PRINT"]
+    if section_name in ignored:
+        kept_print_settings = [
+            "CP2K_INPUT/FORCE_EVAL/PRINT",
+            "CP2K_INPUT/MOTION/PRINT",
+        ]
+        name = "/".join(name_stack)
+        if "/".join(name_stack) in kept_print_settings:
+            print "KEPT {}".format(name)
+        else:
+            return
 
     if for_metainfo:
         # Descriptions
@@ -176,7 +186,7 @@ def recursive_tree_generation(xml_element, for_metainfo=False, name_stack=[]):
 
     # Sections
     for sub_section_element in xml_element.findall("SECTION"):
-        sub_section = recursive_tree_generation(sub_section_element, for_metainfo)
+        sub_section = recursive_tree_generation(sub_section_element, for_metainfo, name_stack[::1])
         if sub_section is not None:
             section.sections[sub_section.name].append(sub_section)
 
@@ -276,13 +286,13 @@ def generate_section_metainfo_json(child, parent, name_stack):
 if __name__ == "__main__":
 
     # xml to pickle
-    xml_file = open("../versions/cp2k262/input_data/cp2k_input.xml", 'r')
-    object_tree = CP2KInput(generate_object_tree(xml_file))
-    file_name = "../versions/cp2k262/input_data/cp2k_input_tree.pickle"
-    fh = open(file_name, "wb")
-    pickle.dump(object_tree, fh, protocol=2)
+    # xml_file = open("../versions/cp2k262/input_data/cp2k_input.xml", 'r')
+    # object_tree = CP2KInput(generate_object_tree(xml_file))
+    # file_name = "../versions/cp2k262/input_data/cp2k_input_tree.pickle"
+    # fh = open(file_name, "wb")
+    # pickle.dump(object_tree, fh, protocol=2)
 
     # Metainfo generation
-    # xml_file = open("../versions/cp2k262/input_data/cp2k_input.xml", 'r')
-    # object_tree = CP2KInput(generate_object_tree(xml_file, for_metainfo=True))
-    # generate_input_metainfos(object_tree)
+    xml_file = open("../versions/cp2k262/input_data/cp2k_input.xml", 'r')
+    object_tree = CP2KInput(generate_object_tree(xml_file, for_metainfo=True))
+    generate_input_metainfos(object_tree)
diff --git a/parser/parser-cp2k/cp2kparser/versions/cp2k262/input_data/cp2k_input_tree.pickle b/parser/parser-cp2k/cp2kparser/versions/cp2k262/input_data/cp2k_input_tree.pickle
index 4bc0778da6c32e7544441e3b937357ed2a497fa0..f30571b8a992cf94e157f936356165d1548c38f9 100644
Binary files a/parser/parser-cp2k/cp2kparser/versions/cp2k262/input_data/cp2k_input_tree.pickle and b/parser/parser-cp2k/cp2kparser/versions/cp2k262/input_data/cp2k_input_tree.pickle differ
diff --git a/parser/parser-cp2k/cp2kparser/versions/cp2k262/inputparser.py b/parser/parser-cp2k/cp2kparser/versions/cp2k262/inputparser.py
index 05fae7faf7467615001a964ddcb1797a7396cfa4..bfc2577df140c9dffc4119540c276b644e5977d5 100644
--- a/parser/parser-cp2k/cp2kparser/versions/cp2k262/inputparser.py
+++ b/parser/parser-cp2k/cp2kparser/versions/cp2k262/inputparser.py
@@ -39,14 +39,13 @@ class CP2KInputParser(BasicParser):
         super(CP2KInputParser, self).__init__(file_path, parser_context)
         self.input_tree = None
         self.input_lines = None
-        self.force_file_name = None
-        self.trajectory_file_name = ""
-        self.trajectory_format = "XMOL"
 
         #=======================================================================
         # Cached values
         self.cache_service.add_cache_object("configuration_periodic_dimensions", single=False, update=False)
         self.cache_service.add_cache_object("trajectory_format")
+        self.cache_service.add_cache_object("each_geo_opt")
+        self.cache_service.add_cache_object("traj_add_last")
 
     def parse(self):
 
@@ -77,7 +76,7 @@ class CP2KInputParser(BasicParser):
 
             # First see if a functional has been specified in the section parameter
             section_parameter = xc.section_parameter.value
-            if section_parameter is not None:
+            if section_parameter is not None and section_parameter != "NO_SHORTCUT":
 
                 if section_parameter == "BLYP":
                     xc_list.append(XCFunctional("GGA_X_B88"))
@@ -219,17 +218,24 @@ class CP2KInputParser(BasicParser):
     def setup_force_file_name(self):
         """Setup the force file path.
         """
-        force_file = self.force_file_name
+        force_file = self.input_tree.get_keyword_value_formatted("FORCE_EVAL/PRINT/FORCES/FILENAME")
         extension = "xyz"
         if force_file is not None and force_file != "__STD_OUT__":
-            normalized_path = self.normalize_x_cp2k_path(self.force_file_name)
+            normalized_path = self.normalize_x_cp2k_path(force_file)
             final_path = "{}-1_0.{}".format(normalized_path, extension)
             self.file_service.set_file_id(final_path, "force_file_single_point")
 
     def setup_trajectory_file_name(self):
         """Setup the trajectory file path.
         """
-        traj_format = self.trajectory_format.upper()
+        traj_format = self.input_tree.get_keyword_value_formatted("MOTION/PRINT/TRAJECTORY/FORMAT")
+        traj_filename = self.input_tree.get_keyword_value_formatted("MOTION/PRINT/TRAJECTORY/FILENAME")
+        geo_opt_each = self.input_tree.get_keyword_value_formatted("MOTION/PRINT/TRAJECTORY/EACH/GEO_OPT")
+        traj_add_last = self.input_tree.get_keyword_value_formatted("MOTION/PRINT/TRAJECTORY/ADD_LAST")
+        self.cache_service["each_geo_opt"] = geo_opt_each
+        self.cache_service["traj_add_last"] = traj_add_last
+        if traj_filename is None:
+            traj_filename = ""
         self.cache_service["trajectory_format"] = traj_format
         extension_map = {
             "XYZ": "xyz",
@@ -242,7 +248,7 @@ class CP2KInputParser(BasicParser):
         if extension is None:
             logger.error("Unknown file format '{}' for CP2K trajectory file ".format(traj_format))
             return
-        normalized_path = self.normalize_x_cp2k_path(self.trajectory_file_name)
+        normalized_path = self.normalize_x_cp2k_path(traj_filename)
         final_path = "{}-pos-1.{}".format(normalized_path, extension)
         self.file_service.set_file_id(final_path, "trajectory")
 
@@ -329,15 +335,15 @@ class CP2KInputParser(BasicParser):
                 # inportant to the parsing. These dont exist in the input tree
                 # because they take much space and are not really important
                 # otherwise.
-                if path == "FORCE_EVAL/PRINT/FORCES":
-                    if keyword_name == "FILENAME":
-                        self.force_file_name = keyword_value
-                if path == "MOTION/PRINT/TRAJECTORY":
-                    if keyword_name == "FILENAME":
-                        self.trajectory_file_name = keyword_value
-                if path == "MOTION/PRINT/TRAJECTORY":
-                    if keyword_name == "FORMAT":
-                        self.trajectory_format = keyword_value
+                # if path == "FORCE_EVAL/PRINT/FORCES":
+                    # if keyword_name == "FILENAME":
+                        # self.force_file_name = keyword_value
+                # if path == "MOTION/PRINT/TRAJECTORY":
+                    # if keyword_name == "FILENAME":
+                        # self.trajectory_file_name = keyword_value
+                # if path == "MOTION/PRINT/TRAJECTORY":
+                    # if keyword_name == "FORMAT":
+                        # self.trajectory_format = keyword_value
 
     def fill_metadata(self):
         """Goes through the input data and pushes everything to the
@@ -354,7 +360,8 @@ class CP2KInputParser(BasicParser):
             return
 
         name_stack.append(section.name)
-        path = "x_cp2k_{}".format(".".join(name_stack))
+        path = "x_cp2k_section_{}".format(".".join(name_stack))
+        not_section_path = "x_cp2k_{}".format(".".join(name_stack))
 
         gid = self.backend.openSection(path)
 
@@ -363,13 +370,13 @@ class CP2KInputParser(BasicParser):
             keywords = section.keywords.get(default_name)
             for keyword in keywords:
                 if keyword.value is not None:
-                    name = "{}.{}".format(path, keyword.default_name)
+                    name = "{}.{}".format(not_section_path, keyword.default_name)
                     self.backend.addValue(name, keyword.value)
 
         # Section parameter
         section_parameter = section.section_parameter
         if section_parameter is not None:
-            name = "{}.SECTION_PARAMETERS".format(path)
+            name = "{}.SECTION_PARAMETERS".format(not_section_path)
             if section_parameter.value is not None:
                 self.backend.addValue(name, section_parameter.value)
 
@@ -377,7 +384,7 @@ class CP2KInputParser(BasicParser):
         default_keyword = section.default_keyword
         if default_keyword is not None:
 
-            name = "{}.DEFAULT_KEYWORD".format(path)
+            name = "{}.DEFAULT_KEYWORD".format(not_section_path)
             self.backend.addValue(name, default_keyword.value)
 
         # Subsections
diff --git a/test/unittests/cp2k_2.6.2/run_tests.py b/test/unittests/cp2k_2.6.2/run_tests.py
index 4e736d45a426d76d3112d1f00d2d0445462c92be..864c8f12844d6ee38e0ba0d112130ab7bf481470 100644
--- a/test/unittests/cp2k_2.6.2/run_tests.py
+++ b/test/unittests/cp2k_2.6.2/run_tests.py
@@ -617,17 +617,17 @@ if __name__ == '__main__':
     logger.setLevel(logging.ERROR)
 
     suites = []
-    suites.append(unittest.TestLoader().loadTestsFromTestCase(TestErrors))
-    suites.append(unittest.TestLoader().loadTestsFromTestCase(TestXCFunctional))
-    suites.append(unittest.TestLoader().loadTestsFromTestCase(TestEnergyForce))
-    suites.append(unittest.TestLoader().loadTestsFromTestCase(TestStressTensorMethods))
-    suites.append(unittest.TestLoader().loadTestsFromTestCase(TestSelfInteractionCorrectionMethod))
+    # suites.append(unittest.TestLoader().loadTestsFromTestCase(TestErrors))
+    # suites.append(unittest.TestLoader().loadTestsFromTestCase(TestXCFunctional))
+    # suites.append(unittest.TestLoader().loadTestsFromTestCase(TestEnergyForce))
+    # suites.append(unittest.TestLoader().loadTestsFromTestCase(TestStressTensorMethods))
+    # suites.append(unittest.TestLoader().loadTestsFromTestCase(TestSelfInteractionCorrectionMethod))
     # suites.append(unittest.TestLoader().loadTestsFromTestCase(TestConfigurationPeriodicDimensions))
     # suites.append(unittest.TestLoader().loadTestsFromTestCase(TestSCFConvergence))
     # suites.append(unittest.TestLoader().loadTestsFromTestCase(TestForceFiles))
     # suites.append(unittest.TestLoader().loadTestsFromTestCase(TestPreprocessor))
-    # suites.append(unittest.TestLoader().loadTestsFromTestCase(TestGeoOpt))
-    # suites.append(unittest.TestLoader().loadTestsFromTestCase(TestGeoOptTrajFormats))
-    # suites.append(unittest.TestLoader().loadTestsFromTestCase(TestGeoOptOptimizers))
+    suites.append(unittest.TestLoader().loadTestsFromTestCase(TestGeoOpt))
+    suites.append(unittest.TestLoader().loadTestsFromTestCase(TestGeoOptTrajFormats))
+    suites.append(unittest.TestLoader().loadTestsFromTestCase(TestGeoOptOptimizers))
     alltests = unittest.TestSuite(suites)
     unittest.TextTestRunner(verbosity=0).run(alltests)