Index: backend/subjects/utils.py
===================================================================
--- backend/subjects/utils.py	(revision fd46080ec0dd1d944f18dac6d9bb7e4212231bd0)
+++ backend/subjects/utils.py	(revision 4d806e387b17135bf34819ba6fdd1a628b9a65bd)
@@ -134,4 +134,5 @@
 def score_for_preferences(student_vector, eligible_subjects):
     filtered_subjects_vector = {}
+    max_tag_score = 0
     for subject in eligible_subjects:
         filtered_subjects_vector[subject] = {}
@@ -140,5 +141,7 @@
             if key in ["index", "study_effort", "current_year"]: continue
             if key == "tags":
-                filtered_subjects_vector[subject][key] = score_tags(student_vector, values)
+                tag_score = score_tags(student_vector, values)
+                filtered_subjects_vector[subject][key] = tag_score
+                max_tag_score = max(tag_score, max_tag_score)
                 continue
 
@@ -149,7 +152,7 @@
 
             for i in range(len(student_values)):
-                if student_values[i] == 1:
+                if subject_values[i] == 1:
                     tot_count += 1
-                    if subject_values[i] == 1:
+                    if student_values[i] == 1:
                         match_count += 1
             
@@ -159,5 +162,5 @@
         study_effort = student_vector["study_effort"]
         
-        if study_effort == 0.25 and values['isEasy'] or study_effort == 0.75 and not values['isEasy']:
+        if (study_effort == 0.4 and values['isEasy']) or (study_effort == 0.8 and not values['isEasy']):
             filtered_subjects_vector[subject]['effort'] = 1
         else:
@@ -167,4 +170,7 @@
 
         filtered_subjects_vector[subject]['participant_score'] = values['participants']
+    
+    for subject in eligible_subjects:
+        filtered_subjects_vector[subject]['tags'] /= max_tag_score
 
     return filtered_subjects_vector
