diff --git a/mat2 b/mat2
index e67fea066e6b5a23ec1c362a3372ed32694b404e..01b834bfe593913adbd173bb4c4424651b660ac3 100755
--- a/mat2
+++ b/mat2
@@ -1,6 +1,7 @@
 #!/usr/bin/env python3
 
 import os
+import shutil
 from typing import Tuple, List, Union, Set
 import sys
 import mimetypes
@@ -136,6 +137,7 @@ def clean_meta(filename: str, is_lightweight: bool, inplace: bool, sandbox: bool
     try:
         logging.debug('Cleaning %s…', filename)
         ret = p.remove_all()
+        shutil.copymode(filename, p.output_filename)
         if inplace is True:
             os.rename(p.output_filename, filename)
         return ret
diff --git a/tests/test_climat2.py b/tests/test_climat2.py
index 9d816b1e834e794c5fff11df5757b0a8f0a963ec..17fce820ad6917e86cd26c80f7bb4c959c76f06b 100644
--- a/tests/test_climat2.py
+++ b/tests/test_climat2.py
@@ -1,6 +1,7 @@
 import random
 import os
 import shutil
+import stat
 import subprocess
 import unittest
 import glob
@@ -132,6 +133,33 @@ class TestCleanMeta(unittest.TestCase):
         self.assertNotIn(b'Comment: Created with GIMP', stdout)
 
         os.remove('./tests/data/clean.jpg')
+        os.remove('./tests/data/clean.cleaned.jpg')
+
+
+class TestCopyPermissions(unittest.TestCase):
+    def test_jpg_777(self):
+        shutil.copy('./tests/data/dirty.jpg', './tests/data/clean.jpg')
+        os.chmod('./tests/data/clean.jpg', 0o777)
+
+        proc = subprocess.Popen(mat2_binary + ['--show', './tests/data/clean.jpg'],
+                stdout=subprocess.PIPE)
+        stdout, _ = proc.communicate()
+        self.assertIn(b'Comment: Created with GIMP', stdout)
+
+        proc = subprocess.Popen(mat2_binary + ['./tests/data/clean.jpg'],
+                stdout=subprocess.PIPE)
+        stdout, _ = proc.communicate()
+
+        proc = subprocess.Popen(mat2_binary + ['--show', './tests/data/clean.cleaned.jpg'],
+                stdout=subprocess.PIPE)
+        stdout, _ = proc.communicate()
+        self.assertNotIn(b'Comment: Created with GIMP', stdout)
+
+        permissions = os.stat('./tests/data/clean.cleaned.jpg')[stat.ST_MODE]
+        self.assertEqual(permissions, 0o100777)
+
+        os.remove('./tests/data/clean.jpg')
+        os.remove('./tests/data/clean.cleaned.jpg')
 
 
 class TestIsSupported(unittest.TestCase):