diff --git a/completeSubjectListInHTML.js b/completeSubjectListInHTML.js
index 1264ae1..24ae8d9 100644
--- a/completeSubjectListInHTML.js
+++ b/completeSubjectListInHTML.js
@@ -1,20 +1,37 @@
 
 function completeSubjectList() {
 	var trobat = false;
+	var jaEsta = false;
 	for(var i = 0; i < totesLesClasses.length; i++) {
+
 		if(document.getElementById("myInput").value == totesLesClasses[i].nom) {
-			dataHorarisAlumne.push({ "nom":totesLesClasses[i].nom, "hora":totesLesClasses[i].hora, "aula":totesLesClasses[i].aula })
-			document.getElementById("subjectList").innerHTML += "<br>" +  document.getElementById("myInput").value  + " " + dataHorarisAlumne[i].hora;
-	    	localStorage.dataHorarisAlumne = JSON.stringify(dataHorarisAlumne);
-			trobat = true;
-			completaHTML();
+			for(var j = 0; j < dataHorarisAlumne.length; j++) {
+				if(totesLesClasses[i].nom == dataHorarisAlumne[j].nom) {
+					jaEsta = true;
+					break;
+				}
+			}
+			if(!jaEsta) {
+				dataHorarisAlumne.push({ "nom":totesLesClasses[i].nom, "hora":totesLesClasses[i].hora, "aula": totesLesClasses[i].aula })
+				document.getElementById("subjectList").innerHTML += "<br>" +  document.getElementById("myInput").value  + " " + totesLesClasses[i].hora[hora_actual.getDay()];
+		    	localStorage.dataHorarisAlumne = JSON.stringify(dataHorarisAlumne);
+				trobat = true;
+				completaHTML();
+			}
+			else {
+				break;
+			}
 		}
 	}
-	if(!trobat) {
+	if(!trobat && !jaEsta) {
 		showAlert();
 	}
+	else if(jaEsta) {
+
+	}
 }
 
+
 function returnAllSubjectArray() {
 	for(var i = 0; i < totesLesClasses.length; i++) {
 		subjects.push(totesLesClasses[i].nom);
@@ -23,8 +40,7 @@
 
 function writeSubjectList() {
 	for(var i = 0; i < dataHorarisAlumne.length; i++) {
-		console.log("hola");
-        document.getElementById("subjectList").innerHTML += "<br>" +  dataHorarisAlumne[i].nom + " " + dataHorarisAlumne[i].hora;
+        document.getElementById("subjectList").innerHTML += "<br>" +  dataHorarisAlumne[i].nom + " " + dataHorarisAlumne[i].hora[hora_actual.getDay()];
     } 
 }
 
