diff --git a/parser/parser-cp2k/cp2kparser/generic/inputparsing.py b/parser/parser-cp2k/cp2kparser/generic/inputparsing.py
index 7505f29674148289e47311c5e59a6532afa7d944..d8132de861b56f36d875b2e175f29d6fe5022552 100644
--- a/parser/parser-cp2k/cp2kparser/generic/inputparsing.py
+++ b/parser/parser-cp2k/cp2kparser/generic/inputparsing.py
@@ -1,3 +1,5 @@
+from builtins import str
+from builtins import object
 import numpy as np
 import logging
 from collections import defaultdict
diff --git a/parser/parser-cp2k/cp2kparser/parser.py b/parser/parser-cp2k/cp2kparser/parser.py
index fc0f105d4683d7f5657eb5f5afe482d5260a5aba..0bca72450628fb0d02b32963d083caadd66d6bcc 100644
--- a/parser/parser-cp2k/cp2kparser/parser.py
+++ b/parser/parser-cp2k/cp2kparser/parser.py
@@ -1,3 +1,5 @@
+from builtins import next
+from builtins import range
 import os
 import re
 import logging
@@ -31,7 +33,7 @@ class CP2KParser(ParserInterface):
         version_id = None
         run_type = None
         with open(self.parser_context.main_file, 'r') as outputfile:
-            for i_line in xrange(n_lines):
+            for i_line in range(n_lines):
                 line = next(outputfile)
                 result_version = regex_version.match(line)
                 result_run_type = regex_run_type.match(line)
diff --git a/parser/parser-cp2k/cp2kparser/tools/xmlpreparser.py b/parser/parser-cp2k/cp2kparser/tools/xmlpreparser.py
index 3f6f02b6d1a8afe956f309d8f65c21e846b822c9..24465b1a5b5a8e012033411fdcc0d5f18a572847 100644
--- a/parser/parser-cp2k/cp2kparser/tools/xmlpreparser.py
+++ b/parser/parser-cp2k/cp2kparser/tools/xmlpreparser.py
@@ -13,11 +13,13 @@ the object can be queried for the results, or the default values defined by the
 cp2k_input.xml.
 """
 from __future__ import print_function
+from future import standard_library
+standard_library.install_aliases()
 
 import xml.etree.cElementTree as ET
 import logging
 import json
-import cPickle as pickle
+import pickle
 from cp2kparser.generic.inputparsing import *
 logger = logging
 
@@ -217,9 +219,9 @@ def generate_metainfo_recursively(obj, parent, container, name_stack):
     if isinstance(obj, Section):
         name_stack.append(obj.name)
         json = generate_section_metainfo_json(obj, parent, name_stack)
-        for child in obj.sections.itervalues():
+        for child in obj.sections.values():
             generate_metainfo_recursively(child[0], obj, container, name_stack)
-        for child in obj.keywords.itervalues():
+        for child in obj.keywords.values():
             generate_metainfo_recursively(child[0], obj, container, name_stack)
         if obj.section_parameter is not None:
             generate_metainfo_recursively(obj.section_parameter, obj, container, name_stack)
diff --git a/parser/parser-cp2k/cp2kparser/versions/cp2k262/commonmatcher.py b/parser/parser-cp2k/cp2kparser/versions/cp2k262/commonmatcher.py
index 16a9fcc654606768d5f619d260a2207c7d9a7f60..52bc4311bd1abf47545a3029d335ccf6412252eb 100644
--- a/parser/parser-cp2k/cp2kparser/versions/cp2k262/commonmatcher.py
+++ b/parser/parser-cp2k/cp2kparser/versions/cp2k262/commonmatcher.py
@@ -1,4 +1,6 @@
 from __future__ import absolute_import
+from builtins import str
+from builtins import object
 import re
 import numpy as np
 import logging
diff --git a/parser/parser-cp2k/cp2kparser/versions/cp2k262/geooptparser.py b/parser/parser-cp2k/cp2kparser/versions/cp2k262/geooptparser.py
index f0b92a33c4d34b5d2fa3f6fbcd22b6b86a0898f5..3f667438b6e0f593ef35d9461c09825b22c09bfa 100644
--- a/parser/parser-cp2k/cp2kparser/versions/cp2k262/geooptparser.py
+++ b/parser/parser-cp2k/cp2kparser/versions/cp2k262/geooptparser.py
@@ -1,5 +1,7 @@
 from __future__ import print_function
 from __future__ import absolute_import
+from builtins import next
+from builtins import range
 from nomadcore.simple_parser import SimpleMatcher as SM
 from nomadcore.baseclasses import MainHierarchicalParser
 from .commonmatcher import CommonMatcher
diff --git a/parser/parser-cp2k/cp2kparser/versions/cp2k262/inputparser.py b/parser/parser-cp2k/cp2kparser/versions/cp2k262/inputparser.py
index a9f6b68d79316c287d0e46f6bd76deccb7c6e94b..ef2a6ef38660c7f30e86d04d59892ecdec81e5f2 100644
--- a/parser/parser-cp2k/cp2kparser/versions/cp2k262/inputparser.py
+++ b/parser/parser-cp2k/cp2kparser/versions/cp2k262/inputparser.py
@@ -1,7 +1,10 @@
+from future import standard_library
+standard_library.install_aliases()
+from builtins import object
 import os
 import re
 import logging
-import cPickle as pickle
+import pickle
 import numpy as np
 from nomadcore.baseclasses import BasicParser
 from cp2kparser.generic.inputparsing import *
@@ -435,7 +438,7 @@ class CP2KInputParser(BasicParser):
             self.backend.addValue(name, default_keyword.value)
 
         # Subsections
-        for name, subsections in section.sections.iteritems():
+        for name, subsections in section.sections.items():
             for subsection in subsections:
                 self.fill_metadata_recursively(subsection, name_stack)
 
diff --git a/parser/parser-cp2k/cp2kparser/versions/cp2k262/mdparser.py b/parser/parser-cp2k/cp2kparser/versions/cp2k262/mdparser.py
index 1ee0fca34593cf820a787b59fdd7ebad95959bd5..15e9cd8f268697647335a3507f066b594f79f117 100644
--- a/parser/parser-cp2k/cp2kparser/versions/cp2k262/mdparser.py
+++ b/parser/parser-cp2k/cp2kparser/versions/cp2k262/mdparser.py
@@ -1,4 +1,6 @@
 from __future__ import absolute_import
+from builtins import next
+from builtins import range
 import numpy as np
 from nomadcore.simple_parser import SimpleMatcher as SM
 from nomadcore.baseclasses import MainHierarchicalParser
diff --git a/test/unittests/cp2k_2.6.2/run_tests.py b/test/unittests/cp2k_2.6.2/run_tests.py
index 870135bd76f19f2b19da7e6027e1b532fd9933e2..5c1c3d69e32f07fffff75ae946d292cacd022864 100644
--- a/test/unittests/cp2k_2.6.2/run_tests.py
+++ b/test/unittests/cp2k_2.6.2/run_tests.py
@@ -672,7 +672,7 @@ class TestGeoOptTrajectory(unittest.TestCase):
         systems = results["section_system"]
 
         i_conf = 0
-        for calc in single_conf.itervalues():
+        for calc in single_conf.values():
             system_index = calc["single_configuration_calculation_to_system_ref"][0]
             system = systems[system_index]
             pos = system["atom_positions"]