diff --git a/index.html b/index.html
index 90587f9..f331b26 100644
--- a/index.html
+++ b/index.html
@@ -79,6 +79,14 @@
         <section id="section-2" class="section hidden">
             <button class="button is-link is-light" onclick="switchSection('section-1')">Torna enrere (Classe)</button>
 
+            <div id="repeated-subject-warning" class="hidden">
+                <br><article class="message is-warning">
+                    <div class="message-body">
+                        Heu triat una assignatura que es fa en dues aules alhora. Comproveu que sou a l'aula <strong id="repeated-subject-warning-class">aula</strong>.
+                    </div>
+                </article>
+            </div>
+
             <div id="letter-container" class="buttons grid">
                 <button class="button" id="letter-A" data-letter="A">A</button>
                 <button class="button" id="letter-B" data-letter="B">B</button>
diff --git a/js/build_page.js b/js/build_page.js
index d170acd..61e7505 100644
--- a/js/build_page.js
+++ b/js/build_page.js
@@ -32,6 +32,7 @@
 
 var current_section = "section-1";
 
+var repeated_subjects;
 
 function fillInSummary() {
     var begins = new Date(parseInt(final_JSON.class.begins)*1000);
@@ -56,6 +57,13 @@
         btn.classList.add("is-link");
         // Canvi JSON
         final_JSON["class"] = selectedClass;
+        // Missatge advertència classe repetida
+        if (repeated_subjects.has(selectedClass.id)) {
+            document.getElementById('repeated-subject-warning').classList.remove('hidden');
+            document.getElementById('repeated-subject-warning-class').textContent = selectedClass.room;
+        } else {
+            document.getElementById('repeated-subject-warning').classList.add('hidden');
+        }
         // Anchor següent pregunta
         switchSection("section-2");
     } else if (parent == "number-container") {
@@ -87,8 +95,19 @@
     }, 75);
 }
 
-function buildSubjectContainer(classes) {
+function findRepeatedSubjects(classes) {
+    var rep = new Set();
     for (var [i, classe] of classes.entries()) {
+        if (i > 0 && classes[i-1].calendar_name == classe.calendar_name) {
+            rep.add(classe.id);
+            rep.add(classes[i-1].id);
+        }
+    }
+    return rep;
+}
+
+function buildSubjectContainer(classes, repeated) {
+    for (var classe of classes) {
         var hora_inici = formatDate(new Date(parseInt(classe.begins)*1000));
         var hora_final = formatDate(new Date(parseInt(classe.ends)*1000));
 
@@ -108,9 +127,7 @@
         var span = document.createElement('span');
         span.textContent = classe.room;
 
-        if (i > 0 && classes[i-1].calendar_name == classe.calendar_name) {
-            div1.classList.add('has-text-danger', 'has-text-weight-bold');
-        } else if (i < classes.length - 1 && classes[i+1].calendar_name == classe.calendar_name) {
+        if (repeated.has(classe.id)) {
             div1.classList.add('has-text-danger', 'has-text-weight-bold');
         }
 
@@ -194,7 +211,8 @@
             if (data.payload.classes.length == 0) {
                 document.getElementById('no-subjects').classList.remove('hidden');
             } else {
-                buildSubjectContainer(data.payload.classes);
+                repeated_subjects = findRepeatedSubjects(data.payload.classes);
+                buildSubjectContainer(data.payload.classes, repeated_subjects);
                 document.getElementById('fme-maps-container').classList.remove('hidden');
             }
 
@@ -248,7 +266,7 @@
     });
 
     document.getElementById("send-button").addEventListener('click', function (el) {
-        document.getElementById('send-button').classList.add('is-loading');
+        el.classList.add('is-loading');
         sendForm();
     });
 }
