diff --git a/libmat2/torrent.py b/libmat2/torrent.py
index ad49f4755988f333ea34027c2fa0b4b8ec18667f..d614136d6a4ce196c23571831ca55f57ad839366 100644
--- a/libmat2/torrent.py
+++ b/libmat2/torrent.py
@@ -8,13 +8,16 @@ class TorrentParser(abstract.AbstractParser):
     mimetypes = {'application/x-bittorrent', }
     whitelist = {b'announce', b'announce-list', b'info'}
 
+    def __init__(self, filename):
+        super().__init__(filename)
+        with open(self.filename, 'rb') as f:
+            self.dict_repr = _BencodeHandler().bdecode(f.read())
+        if self.dict_repr is None:
+            raise ValueError
+
     def get_meta(self) -> Dict[str, str]:
         metadata = {}
-        with open(self.filename, 'rb') as f:
-            d = _BencodeHandler().bdecode(f.read())
-        if d is None:
-            return {'Unknown meta': 'Unable to parse torrent file "%s".' % self.filename}
-        for k, v in d.items():
+        for k, v in self.dict_repr.items():
             if k not in self.whitelist:
                 metadata[k.decode('utf-8')] = v
         return metadata
@@ -22,15 +25,12 @@ class TorrentParser(abstract.AbstractParser):
 
     def remove_all(self) -> bool:
         cleaned = dict()
-        with open(self.filename, 'rb') as f:
-            d = _BencodeHandler().bdecode(f.read())
-        if d is None:
-            return False
-        for k, v in d.items():
+        for k, v in self.dict_repr.items():
             if k in self.whitelist:
                 cleaned[k] = v
         with open(self.output_filename, 'wb') as f:
             f.write(_BencodeHandler().bencode(cleaned))
+        self.dict_repr = cleaned  # since we're stateful
         return True
 
 
diff --git a/tests/test_corrupted_files.py b/tests/test_corrupted_files.py
index bc5b9d095886522c34b0518a13bf3c40cdb15ef0..776b0e9f4dde54dbb5ae4863c2c97bc542acaa2b 100644
--- a/tests/test_corrupted_files.py
+++ b/tests/test_corrupted_files.py
@@ -46,15 +46,14 @@ class TestCorruptedFiles(unittest.TestCase):
 
     def test_torrent(self):
         shutil.copy('./tests/data/dirty.png', './tests/data/clean.torrent')
-        p = torrent.TorrentParser('./tests/data/clean.torrent')
-        self.assertFalse(p.remove_all())
-        expected = {'Unknown meta': 'Unable to parse torrent file "./tests/data/clean.torrent".'}
-        self.assertEqual(p.get_meta(), expected)
+        with self.assertRaises(ValueError):
+            torrent.TorrentParser('./tests/data/clean.torrent')
 
         with open("./tests/data/clean.torrent", "a") as f:
             f.write("trailing garbage")
-        p = torrent.TorrentParser('./tests/data/clean.torrent')
-        self.assertEqual(p.get_meta(), expected)
+        with self.assertRaises(ValueError):
+            torrent.TorrentParser('./tests/data/clean.torrent')
+
         os.remove('./tests/data/clean.torrent')
 
     def test_odg(self):