diff --git a/vaspparser/__init__.py b/vaspparser/__init__.py
index 9b0f6bcc7d9ea7e2b7e33e79ca113ee47d1d8b61..d1799db6b5e91fe8ebf63c2b1c5582d131ad0eb2 100644
--- a/vaspparser/__init__.py
+++ b/vaspparser/__init__.py
@@ -14,6 +14,8 @@
 
 import os
 import logging
+import gzip
+import bz2
 
 from nomadcore.baseclasses import ParserInterface
 import nomadcore.baseclasses
@@ -26,7 +28,7 @@ from vaspparser.parser_outcar import VaspOutcarParser
 class VASPRunParser:
     """
     The main parser class that is called for all run types. Parses the VASP
-    .out output files.
+    .xml output files.
     """
     def __init__(self, parser_context):
         self.parser_context = parser_context
@@ -36,7 +38,14 @@ class VASPRunParser:
         superContext = VasprunContext(logger=nomadcore.baseclasses.logger)
         parser = XmlParser(parserInfo, superContext)
         backend = self.parser_context.super_backend
-        parser.parse(os.path.abspath(filepath), open(filepath), backend)
+
+        open_file = open
+        if filepath.endswith('.gz'):
+            open_file = gzip.open
+        elif filepath.endswith('.bz2'):
+            open_file = bz2.open
+
+        parser.parse(os.path.abspath(filepath), open_file(filepath, 'rt'), backend)
 
 
 class VASPRunParserInterface(ParserInterface):