diff --git a/.gitignore b/.gitignore
index 22d1be8bc4664d96e21b2cf72bafa2cae0fafeaa..ec245bea3f1603a7f554c2e252fbcc92b1670e1c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -175,7 +175,7 @@ Thumbs.db
 copy
 
 # Symlinks static ScoDoc
-app/static/links/[0-9]*.*[0-9]
+app/static/links/[0-9]*.*
 
 # Essais locaux
 xp/
diff --git a/app/__init__.py b/app/__init__.py
index aab9ef3f563350044fb6426cba8907b0bb2249ec..b3944de7ce62475e16e5e5647b1a9b46e6b8efbc 100755
--- a/app/__init__.py
+++ b/app/__init__.py
@@ -255,7 +255,7 @@ class ScoSMTPHandler(SMTPHandler):
         return subject
 
 
-class ReverseProxied(object):
+class ReverseProxied:
     """Adaptateur wsgi qui nous permet d'avoir toutes les URL calculées en https
     sauf quand on est en dev.
     La variable HTTP_X_FORWARDED_PROTO est positionnée par notre config nginx"""
@@ -649,8 +649,6 @@ def scodoc_flash_status_messages():
 
 def critical_error(msg):
     """Handle a critical error: flush all caches, display message to the user"""
-    import app.scodoc.sco_utils as scu
-
     log(f"\n*** CRITICAL ERROR: {msg}")
     subject = f"CRITICAL ERROR: {msg}".strip()[:68]
     send_scodoc_alarm(subject, msg)
diff --git a/app/scodoc/sco_edit_ue.py b/app/scodoc/sco_edit_ue.py
index 48e1c90ac07c3be647dae027abf2ad7f624a82ed..40989539e2d2a1297565b029386f398ebd2da32a 100644
--- a/app/scodoc/sco_edit_ue.py
+++ b/app/scodoc/sco_edit_ue.py
@@ -958,7 +958,10 @@ du programme" (menu "Semestre") si vous avez un semestre en cours);
         </div>
         """
         )
-    H.append("<p><ul>")
+    H.append(
+        """<div class="scobox formation-actions">
+             <ul>"""
+    )
     if has_perm_change:
         H.append(
             f"""
@@ -971,7 +974,7 @@ du programme" (menu "Semestre") si vous avez un semestre en cours);
 
         """
         )
-        if not len(formsemestres):
+        if formsemestres:
             H.append(
                 f"""
             <li><a class="stdlink" href="{
@@ -1019,38 +1022,46 @@ du programme" (menu "Semestre") si vous avez un semestre en cours);
             }">Liste détaillée des modules de la formation</a> (debug)
         </li>
         </ul>
-        </p>"""
+        </div>
+        """
     )
-    if has_perm_change:
-        H.append(
+    if has_perm_change or current_user.has_permission(Permission.EditFormSemestre):
+        H.append("""<div class="scobox">""")
+        if has_perm_change and len(formsemestres):
+            H.append(
+                """
+            <div class="scobox-title">
+                <a name="sems">Semestres ou sessions de cette formation</a>
+            </div>
             """
-        <h3> <a name="sems">Semestres ou sessions de cette formation</a></h3>
-        <p><ul>"""
-        )
-        for formsemestre in formsemestres:
-            H.append(f"""<li>{formsemestre.html_link_status()}""")
-            if not formsemestre.etat:
-                H.append(" [verrouillé]")
-            else:
-                H.append(
-                    f""" &nbsp;<a class="stdlink" href="{url_for("notes.formsemestre_editwithmodules",
-                        scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre.id
-                        )}">Modifier</a>"""
-                )
-            H.append("</li>")
-        H.append("</ul>")
+            )
 
-    if current_user.has_permission(Permission.EditFormSemestre):
-        H.append(
-            f"""<ul>
-        <li><b><a class="stdlink" href="{
-            url_for('notes.formsemestre_createwithmodules', scodoc_dept=g.scodoc_dept,
-            formation_id=formation_id, semestre_id=1)
-        }">Mettre en place un nouveau semestre de formation {formation.acronyme}</a></b>
-        </li>
-        </ul>"""
-        )
-    #   <li>(debug) <a class="stdlink" href="check_form_integrity?formation_id=%(formation_id)s">Vérifier cohérence</a></li>
+            H.append("<ul>")
+            for formsemestre in formsemestres:
+                H.append(f"""<li>{formsemestre.html_link_status()}""")
+                if not formsemestre.etat:
+                    H.append(" [verrouillé]")
+                else:
+                    H.append(
+                        f""" &nbsp;<a class="stdlink"
+                        href="{url_for("notes.formsemestre_editwithmodules",
+                            scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre.id
+                            )}">Modifier</a>"""
+                    )
+                H.append("</li>")
+            H.append("</ul>")
+
+        if current_user.has_permission(Permission.EditFormSemestre):
+            H.append(
+                f"""<ul>
+            <li><b><a class="stdlink" href="{
+                url_for('notes.formsemestre_createwithmodules', scodoc_dept=g.scodoc_dept,
+                formation_id=formation_id, semestre_id=1)
+            }">Mettre en place un nouveau semestre de formation {formation.acronyme}</a></b>
+            </li>
+            </ul>"""
+            )
+        H.append("</div>")
 
     warn, _ = sco_formsemestre_validation.check_formation_ues(formation)
     H.append(warn)
@@ -1128,7 +1139,9 @@ def _ue_table_ues(
             scodoc_dept=g.scodoc_dept,
             ue_id=ue["ue_id"],
         )
-        ue["code_apogee_str"] = f""", Apo: <span
+        ue[
+            "code_apogee_str"
+        ] = f""", Apo: <span
             class="{klass}" data-url="{edit_url}" id="{ue['ue_id']}"
             data-placeholder="{scu.APO_MISSING_CODE_STR}">{
                 ue["code_apogee"] or ""
diff --git a/app/static/css/ue_table.css b/app/static/css/ue_table.css
index 54679babef51b967e4e29723972e9db7f51db535..00dfa0f99b58da56a3a74b63bc3e256b61b86f4e 100644
--- a/app/static/css/ue_table.css
+++ b/app/static/css/ue_table.css
@@ -214,4 +214,8 @@ span.formation_module_ue {
 
 span.notes_module_list_buts {
   margin-right: 5px;
+}
+
+div.formation-actions li {
+  margin-top: 12px;
 }
\ No newline at end of file
diff --git a/tools/debian/control b/tools/debian/control
index b3e8cceecb9342654e066828eb33ac03c9c3ce84..81aa4a70a1ff3454519b64cfb26b8893f55c0ed5 100644
--- a/tools/debian/control
+++ b/tools/debian/control
@@ -4,5 +4,5 @@ Architecture: amd64
 Maintainer: Emmanuel Viennet <emmanuel@viennet.net>
 Description: ScoDoc 9
   Un logiciel pour le suivi de la scolarité universitaire.
-Depends: adduser, curl, gcc, graphviz, graphviz-dev, libpq-dev, postfix|exim4, cracklib-runtime, libcrack2-dev, libpango-1.0-0, pango1.0-tools, python3-dev, python3-venv, python3-pip, python3-wheel, nginx, postgresql, libpq-dev, redis
+Depends: adduser, curl, gcc, graphviz, graphviz-dev, postfix|exim4, cracklib-runtime, libcrack2-dev, libpango-1.0-0, pango1.0-tools, python3-dev, python3-venv, python3-pip, python3-wheel, nginx, postgresql, libpq-dev, redis
 Recommends: ufw