diff --git a/bin/fix-submits b/bin/fix-submits
index eb4476f3ae9056f9a3417b26dd099ba203c7f633..9fccdc73e2cf501b8e8e2e00acbeefd0a7311842 100755
--- a/bin/fix-submits
+++ b/bin/fix-submits
@@ -1,7 +1,6 @@
 #!/usr/bin/env python3
 
 import argparse
-import datetime
 import os
 from sqlalchemy.orm import joinedload
 import subprocess
@@ -18,57 +17,43 @@ args = parser.parse_args()
 mo.util.init_standalone()
 sess = db.get_session()
 
+fixed = 0
+errors = 0
+
 
 def fix_paper(id: int):
+    global fixed, errors
+
     paper = (sess.query(db.Paper)
              .options(joinedload(db.Paper.for_user_obj))
              .get(id))
     assert paper is not None
-    print(f"=== Paper #{id} ({paper.file_name})")
-
-    sol = (sess.query(db.Solution)
-           .filter_by(task_id=paper.for_task, user_id=paper.for_user)
-           .one())
-    if paper.paper_id not in [sol.final_submit, sol.final_feedback]:
-        print('--> not final\n')
-        sess.rollback()
-        return
+    assert paper.orig_file_name is not None
+    print(f"=== Paper #{id} ({paper.orig_file_name})")
 
     tmp_file = tempfile.NamedTemporaryFile(dir=mo.util.data_dir('tmp'), prefix='fix-')
-
-    res = subprocess.run(['qpdf', os.path.join(mo.util.data_dir('submits'), paper.file_name), tmp_file.name])
+    res = subprocess.run(['qpdf', os.path.join(mo.util.data_dir('submits'), paper.orig_file_name), tmp_file.name])
     if res.returncode in [0, 3]:
         sub = mo.submit.Submitter()
-        new_paper = db.Paper(task=paper.task,
-                             for_user_obj=paper.for_user_obj,
-                             type=paper.type,
-                             uploaded_by_obj=paper.uploaded_by_obj,
-                             uploaded_at=paper.uploaded_at + datetime.timedelta(seconds=1),
-                             note='Automatická konverze rozbitého PDF')
-        sub.submit_paper(new_paper, tmp_file.name)
-        assert not new_paper.broken
-
-        sess.add(new_paper)
-        if new_paper.type == db.PaperType.solution:
-            sol.final_submit_obj = new_paper
-        elif new_paper.type == db.PaperType.feedback:
-            sol.final_feedback_obj = new_paper
-        else:
-            assert False
-
-        print('--> OK')
-        sess.commit()
+        try:
+            sub.submit_fix(paper, tmp_file.name)
+            sess.commit()
+            fixed += 1
+        except mo.submit.SubmitException:
+            sess.rollback()
+            errors += 1
     else:
         print(f'--> ERROR: qpdf failed with exit code {res.returncode}')
         sess.rollback()
-
-    print("")
+        errors += 1
 
 
 if args.id is not None:
     fix_paper(args.id)
 else:
-    papers = sess.query(db.Paper).filter_by(broken=True).all()
+    papers = sess.query(db.Paper).filter_by(file_name=None).all()
     sess.rollback()
     for p in papers:
         fix_paper(p.paper_id)
+
+print(f'Opraveno {fixed} PDF, stále rozbito {errors}')