diff --git a/app/but/cursus_but.py b/app/but/cursus_but.py
index 8ed3fd782a451e7520621dfed07a425c9c2db6f4..7b5b430bac346bbb58037bc3f5713b69813999b6 100644
--- a/app/but/cursus_but.py
+++ b/app/but/cursus_but.py
@@ -399,7 +399,7 @@ def but_ects_valides(
     for v in validations:
         key = (v.ue.semestre_idx, v.ue.niveau_competence.id)
         if v.code in CODES_UE_VALIDES:
-            ects_dict[key] = v.ue.ects
+            ects_dict[key] = v.ue.ects or 0.0
 
     return int(sum(ects_dict.values())) if ects_dict else 0
 
@@ -417,15 +417,18 @@ def but_validations_ues(
     validations = (
         ScolarFormSemestreValidation.query.filter_by(etudid=etud.id)
         .filter(ScolarFormSemestreValidation.ue_id != None)
+        .join(FormSemestre, ScolarFormSemestreValidation.formsemestre)
         .join(UniteEns)
         .join(ApcNiveau)
     )
     # restreint à certaines années (utile pour les ECTS du DUT120)
     if annees_but:
         validations = validations.filter(ApcNiveau.annee.in_(annees_but))
-    # Et restreint au référentiel de compétence:
-    return validations.join(ApcCompetence).filter_by(
-        referentiel_id=referentiel_competence_id
+    # restreint au référentiel de compétence et trie
+    return (
+        validations.join(ApcCompetence)
+        .filter_by(referentiel_id=referentiel_competence_id)
+        .order_by(FormSemestre.semestre_id, UniteEns.numero, UniteEns.acronyme)
     )
 
 
diff --git a/app/static/css/jury_delete_manual.css b/app/static/css/jury_delete_manual.css
index 6b0f95b6827865e7215df0c3947c0d2fb85f6e0a..3805c619c648fa7d4ea7db86b6f7613e583b2ba8 100644
--- a/app/static/css/jury_delete_manual.css
+++ b/app/static/css/jury_delete_manual.css
@@ -13,6 +13,11 @@ div.ue_list_etud_validations ul.liste_validations li {
 
 div.ue_list_etud_validations div.total_ects {
     font-weight: bold;
-    margin-top: 16px;
+    margin-top: 24px;
     margin-bottom: 12px;
+}
+
+div.ue_list_etud_validations ul li.new_semestre,
+div.ue_list_etud_validations ul li:first-child {
+    margin-top: 16px;
 }
\ No newline at end of file
diff --git a/app/templates/jury/ue_list_etud_validations.j2 b/app/templates/jury/ue_list_etud_validations.j2
index 4b5343b985248100c20e04ca6e4ee5959b247c35..00b4a97ee0bc5418ab62199ac0845991271296af 100644
--- a/app/templates/jury/ue_list_etud_validations.j2
+++ b/app/templates/jury/ue_list_etud_validations.j2
@@ -8,7 +8,11 @@
     <ul class="liste_validations">
     {% for validation in validations %}
 
-        <li>{{ validation.html() | safe }}
+        <li
+        {% if loop.index0 > 0 and validation.formsemestre and loop.previtem.formsemestre.semestre_id != validation.formsemestre.semestre_id %}
+        class="new_semestre"
+        {% endif %}
+        >{{ validation.html() | safe }}
         {% if edit_mode %}
             {% if validation.formsemestre and validation.formsemestre.can_edit_jury() %}
                 <form class="inline-form">
diff --git a/sco_version.py b/sco_version.py
index 5614174d5ddcfe2744a06f05be5b35d9749a2c17..60714411bca6cc4ac974241da572e91286b40bb2 100644
--- a/sco_version.py
+++ b/sco_version.py
@@ -1,7 +1,7 @@
 # -*- mode: python -*-
 # -*- coding: utf-8 -*-
 
-SCOVERSION = "9.6.990"
+SCOVERSION = "9.7.0"
 
 SCONAME = "ScoDoc"