diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py
index 5e61ae3d55704dff4d448dbbd2cfede5462701e6..ed35ab6c0bc80fd7fcb0220f6d890e5446c43cac 100644
--- a/mo/web/org_contest.py
+++ b/mo/web/org_contest.py
@@ -1964,7 +1964,7 @@ def org_contest_scans_process(ct_id: int, job_id: int, site_id: Optional[int] =
 @app.route('/org/contest/c/<int:ct_id>/scans/<int:job_id>/file/<file>')
 @app.route('/org/contest/c/<int:ct_id>/site/<int:site_id>/scans/<int:job_id>/file/<file>')
 def org_contest_scans_file(ct_id: int, job_id: int, file: str, site_id: Optional[int] = None):
-    get_context(ct_id=ct_id, site_id=site_id, right_needed=Right.upload_solutions)
+    get_context(ct_id=ct_id, site_id=site_id)
 
     sess = db.get_session()
 
diff --git a/mo/web/templates/org_contest_scans_process.html b/mo/web/templates/org_contest_scans_process.html
index c6f3842599f1e44cd9634c5b62f5954685dd97e9..db0504c009dd1baa8445e764173a89c7cb14cca8 100644
--- a/mo/web/templates/org_contest_scans_process.html
+++ b/mo/web/templates/org_contest_scans_process.html
@@ -153,7 +153,7 @@ tlačítkem <b>[Uložit]</b>. Poté můžete celou dávku odeslat ke zpracován
 		</div>
 		<span tabindex=5 onfocus="document.getElementById('user_input').focus();"></span>
 	</div>
-	<div class="pages">
+	<div class="pages" id="rows_scroller">
 		<table class="data">
 			<thead>
 				<th title="Číslo skenu">#
@@ -217,6 +217,7 @@ var task_input = document.getElementById('task_input');
 var seq_input = document.getElementById('seq_input');
 var process_all_button = document.getElementById('process-all-button');
 var save_data_field = document.getElementById('save-data');
+var rows_scroller = document.getElementById('rows_scroller');
 
 PAGE_FIX = -1;
 PAGE_EMPTY = -2;
@@ -372,17 +373,28 @@ seq_input.addEventListener("blur", function(e) {
 	refreshActiveRow();
 });
 
+function scrollToRow(i) {
+	var top = rows[i].offsetTop;
+	var bottom = top + rows[i].offsetHeight;
+
+	if (rows_scroller.scrollTop > top - 45) {
+		rows_scroller.scrollTo({ top: top - 45, behavior: 'smooth'});
+	} else if (rows_scroller.scrollTop + rows_scroller.offsetHeight < bottom + 30) {
+		rows_scroller.scrollTo({ top: bottom - rows_scroller.offsetHeight + 30, behavior: 'smooth' });
+	}
+}
+
 function prevPage() {
 	if (activeRow > 0) {
 		selectRow(activeRow - 1);
-		rows[activeRow].scrollIntoView({ behavior: 'smooth', block: 'center' });
+		scrollToRow(activeRow);
 	}
 }
 
 function nextPage() {
 	if (activeRow < pages.length - 1) {
 		selectRow(activeRow + 1);
-		rows[activeRow].scrollIntoView({ behavior: 'smooth', block: 'center' });
+		scrollToRow(activeRow);
 	}
 }
 
@@ -446,6 +458,7 @@ for (let i = 0; i < pages.length; i++) {
 }
 
 selectRow(0);
+scrollToRow(0);
 </script>
 
 {% endif %}