Index: backend/subjects/models.py
===================================================================
--- backend/subjects/models.py	(revision 1ee9aacd47eb67112c459b1a64646b286b5c0abe)
+++ backend/subjects/models.py	(revision 9b0f66162d93107b4626777c841d96d52ae70e1c)
@@ -64,15 +64,11 @@
 
     def __str__(self):
-        return f"Review for {self.subject.name} from {self.student.index}."
+        return f"Review #{self.id} for {self.subject.name} from {self.student.index}."
 
     @property
-    def upvote_count(self):
-        return self.votes.filter(review_votes__reviewvote__vote_type='up').count()
-    @property
-    def downvote_count(self):
-        return self.votes.filter(review_votes__reviewvote__vote_type='down').count()
-    @property
-    def votes_count(self):
-        return self.votes.count()
+    def votes_score(self):
+        upvotes = self.reviewvote_set.filter(vote_type='up').count()
+        downvotes = self.reviewvote_set.filter(vote_type='down').count()
+        return upvotes - downvotes
 
 
Index: backend/subjects/serializers.py
===================================================================
--- backend/subjects/serializers.py	(revision 1ee9aacd47eb67112c459b1a64646b286b5c0abe)
+++ backend/subjects/serializers.py	(revision 9b0f66162d93107b4626777c841d96d52ae70e1c)
@@ -1,4 +1,5 @@
 from rest_framework import serializers
-from .models import Subject, Subject_Info, EvaluationMethod, EvaluationComponent, EvaluationReview, OtherReview, Review
+from .models import (Subject, Subject_Info, EvaluationMethod, EvaluationComponent,
+                     EvaluationReview, OtherReview, Review, ReviewVote)
 
 class SubjectInfoSerializer(serializers.ModelSerializer):
@@ -33,8 +34,23 @@
 class ReviewMetaSerializer(serializers.ModelSerializer):
     student = serializers.SerializerMethodField()
+    user_has_voted = serializers.SerializerMethodField()
 
     class Meta:
         model = Review
-        fields = ['id', 'student', 'is_confirmed', 'votes_count']
+        fields = ['id', 'student', 'is_confirmed', 'votes_score', 'user_has_voted']
+
+
+    def get_user_has_voted(self, obj):
+        request = self.context.get("request")
+        if request and hasattr(request, 'user') and request.user.is_authenticated:
+            if hasattr(request.user, 'student'):
+                student = request.user.student
+                try:
+                    vote = ReviewVote.objects.get(review=obj, student=student)
+                    return vote.vote_type
+                except ReviewVote.DoesNotExist:
+                    return 'none'
+        return 'none'
+
 
     def get_student(self, obj):
@@ -72,5 +88,5 @@
 class EvaluationReviewSerializer(serializers.ModelSerializer):
     methods = EvaluationMethodSerializer(many=True)
-    review = ReviewMetaSerializer()
+    review = serializers.SerializerMethodField()
 
     class Meta:
@@ -84,16 +100,22 @@
         return data
 
+    def get_review(self, obj):
+        if obj:
+            return ReviewMetaSerializer(obj.review, context=self.context).data
+        return None
+
     def create(self, validated_data):
         methods_data = validated_data.pop('methods')
         review = self.context['review']
-        evaluation_review = EvaluationReview.objects.create(review=review)
+        evaluation_review = EvaluationReview.objects.create(review=review, **validated_data)
         for method_data in methods_data:
             validated_method_data = self.fields['methods'].child.run_validation(method_data)
             validated_method_data['evaluation_review'] = evaluation_review
             self.fields['methods'].child.create(validated_method_data)
+
         return evaluation_review
 
 class OtherReviewSerializer(serializers.ModelSerializer):
-    review = ReviewMetaSerializer()
+    review = serializers.SerializerMethodField()
 
     class Meta:
@@ -101,4 +123,7 @@
         fields = ['review', 'category', 'content']
 
+    def get_review(self, obj):
+        return ReviewMetaSerializer(obj.review, context=self.context).data
+
     def create(self, validated_data):
         review = self.context['review']
Index: backend/subjects/views.py
===================================================================
--- backend/subjects/views.py	(revision 1ee9aacd47eb67112c459b1a64646b286b5c0abe)
+++ backend/subjects/views.py	(revision 9b0f66162d93107b4626777c841d96d52ae70e1c)
@@ -195,10 +195,10 @@
         reviews = Review.objects.filter(subject__code=code)
 
-        evaluation_reviews = EvaluationReview.objects.filter(review__in=reviews).first()
+        evaluation_review = EvaluationReview.objects.filter(review__in=reviews).first()
         other_reviews = OtherReview.objects.filter(review__in=reviews)
 
-
-        evaluation_serializer = EvaluationReviewSerializer(evaluation_reviews)
-        other_serializer = OtherReviewSerializer(other_reviews, many=True)
+        context = {'request': request}
+        evaluation_serializer = EvaluationReviewSerializer(evaluation_review, context=context)
+        other_serializer = OtherReviewSerializer(other_reviews, many=True, context=context)
 
         return Response({
@@ -229,9 +229,10 @@
             if vote.vote_type == vote_type:
                 vote.delete()
-                return Response({"message": "Vote deleted."}, status=status.HTTP_200_OK)
+                return Response({"message": "Vote deleted.", "vote_score": review.votes_score}, status=status.HTTP_200_OK)
             vote.vote_type = vote_type
             vote.save()
+            return Response({"message": "Vote updated.", "vote_score": review.votes_score}, status=status.HTTP_200_OK)
         except ReviewVote.DoesNotExist:
             ReviewVote.objects.create(review=review, student=student, vote_type=vote_type)
-            return Response({"message": "Vote recorded."}, status=status.HTTP_201_CREATED)
-
+            return Response({"message": "Vote recorded.", "vote_score": review.votes_score}, status=status.HTTP_201_CREATED)
+
Index: frontend/src/components/Reviews/EvaluationReviews.tsx
===================================================================
--- frontend/src/components/Reviews/EvaluationReviews.tsx	(revision 1ee9aacd47eb67112c459b1a64646b286b5c0abe)
+++ frontend/src/components/Reviews/EvaluationReviews.tsx	(revision 9b0f66162d93107b4626777c841d96d52ae70e1c)
@@ -41,4 +41,5 @@
 											)}
 										</div>
+										{/* TODO: decide if this should stay here */}
 										<Votes review={evaluation_review.review} />
 									</div>
@@ -49,5 +50,4 @@
 													<p className="text-sm text-gray-600 mb-2 font-semibold">
 														Начин на оценување {index + 1}:
-														{evaluation_review.review.id}
 													</p>
 													<div className="overflow-x-auto">
Index: frontend/src/components/Reviews/OtherReviews.tsx
===================================================================
--- frontend/src/components/Reviews/OtherReviews.tsx	(revision 1ee9aacd47eb67112c459b1a64646b286b5c0abe)
+++ frontend/src/components/Reviews/OtherReviews.tsx	(revision 9b0f66162d93107b4626777c841d96d52ae70e1c)
@@ -16,37 +16,40 @@
 
 			<div className="space-y-4">
-				{other_reviews.map((other_review) => (
-					<div className="border border-gray-200 rounded-lg p-4">
-						<div className="flex items-start justify-between mb-3">
-							<div className="flex items-center space-x-2">
-								<span className="text-sm text-gray-600">
-									{other_review.review.id}
-									Индекс: {other_review.review.student}
-								</span>
-								<span className="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">
-									{MAP_REVIEW_CATEGORY_TO_MK[other_review.category]}
-								</span>
-								{other_review.review.is_confirmed ? (
-									<div className="flex items-center text-green-600">
-										<CheckCircle className="w-4 h-4 mr-1" />
-										<span className="text-sm">Потврдено</span>
-									</div>
-								) : (
-									<div className="flex items-center text-red-600 group relative cursor-help">
-										<span className="text-sm border-red-600 border-b border-dotted">
-											Непотврдено
-										</span>
-										<div className="absolute left-1/2 -translate-x-1/2 top-full mt-2 z-10 hidden group-hover:block bg-white text-gray-800 text-xs rounded shadow-lg px-3 py-2 w-48 border border-gray-200">
-											Администратор сè уште не ја потврдил точноста на оваа
-											информација.
+				{other_reviews
+					.sort(
+						(a, b) => (b.review.votes_score ?? 0) - (a.review.votes_score ?? 0)
+					)
+					.map((other_review, i) => (
+						<div className="border border-gray-200 rounded-lg p-4" key={i}>
+							<div className="flex items-start justify-between mb-3">
+								<div className="flex items-center space-x-2">
+									<span className="text-sm text-gray-600">
+										Индекс: {other_review.review.student}
+									</span>
+									<span className="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">
+										{MAP_REVIEW_CATEGORY_TO_MK[other_review.category]}
+									</span>
+									{other_review.review.is_confirmed ? (
+										<div className="flex items-center text-green-600">
+											<CheckCircle className="w-4 h-4 mr-1" />
+											<span className="text-sm">Потврдено</span>
 										</div>
-									</div>
-								)}
+									) : (
+										<div className="flex items-center text-red-600 group relative cursor-help">
+											<span className="text-sm border-red-600 border-b border-dotted">
+												Непотврдено
+											</span>
+											<div className="absolute left-1/2 -translate-x-1/2 top-full mt-2 z-10 hidden group-hover:block bg-white text-gray-800 text-xs rounded shadow-lg px-3 py-2 w-48 border border-gray-200">
+												Администратор сè уште не ја потврдил точноста на оваа
+												информација.
+											</div>
+										</div>
+									)}
+								</div>
+								<Votes review={other_review.review} />
 							</div>
-							<Votes review={other_review.review} />
+							<p className="text-gray-700 text-sm">{other_review.content}</p>
 						</div>
-						<p className="text-gray-700 text-sm">{other_review.content}</p>
-					</div>
-				))}
+					))}
 			</div>
 		</div>
Index: frontend/src/components/Reviews/Votes.tsx
===================================================================
--- frontend/src/components/Reviews/Votes.tsx	(revision 1ee9aacd47eb67112c459b1a64646b286b5c0abe)
+++ frontend/src/components/Reviews/Votes.tsx	(revision 9b0f66162d93107b4626777c841d96d52ae70e1c)
@@ -10,22 +10,25 @@
 
 const Votes = ({ review }: VotesProps) => {
-	const [localCount, setLocalCount] = useState<number>(review.votes_count ?? 0);
+	const [localCount, setLocalCount] = useState<number>(review.votes_score ?? 0);
 	const { isAuthenticated } = useAuth();
+	const [userVote, setUserVote] = useState<"up" | "down" | "none">(
+		review.user_has_voted ?? "none"
+	);
+
 	const handleClick = async (vote_type: "up" | "down") => {
 		const review_id = review.id;
-		console.log(review_id);
-		console.log(vote_type);
 		try {
-			const response = await axiosInstance.post(
-				"subjects/subject-review/toggle-vote/",
-				{
-					review_id: review_id,
-					vote_type: vote_type,
-				}
-			);
-			setLocalCount((prevCount) =>
-				vote_type == "up" ? prevCount + 1 : prevCount - 1
-			);
-			console.log(response.data);
+			const response = await axiosInstance.post<{
+				message: string;
+				vote_score: number;
+			}>("subjects/subject-review/toggle-vote/", {
+				review_id: review_id,
+				vote_type: vote_type,
+			});
+			setUserVote(userVote === vote_type ? "none" : vote_type);
+
+			// in the case that someone has voted on a review since we opened the page and we vote on the same review
+			// an upvote or downvote might change the counter by more than one which might look confusing
+			setLocalCount(response.data.vote_score);
 		} catch (err) {
 			console.error("Error occured: ", err);
@@ -36,9 +39,10 @@
 		<div className="flex items-center space-x-1">
 			<button
-				className={`flex items-center justify-center w-6 h-6 text-gray-400 rounded transition-colors ${
+				className={`flex items-center justify-center w-6 h-6 rounded transition-colors${
 					!isAuthenticated
 						? "cursor-not-allowed"
 						: "cursor-pointer hover:text-green-600 hover:bg-green-50 "
-				}`}
+				}
+					${userVote == "up" ? "text-green-600" : "text-gray-400"}`}
 				onClick={() => handleClick("up")}
 				disabled={!isAuthenticated}
@@ -50,9 +54,10 @@
 			</span>
 			<button
-				className={`flex items-center justify-center w-6 h-6 text-gray-400 rounded transition-color ${
+				className={`flex items-center justify-center w-6 h-6 rounded transition-colors${
 					!isAuthenticated
 						? "cursor-not-allowed"
-						: "cursor-pointer hover:text-red-600 hover:bg-red-50"
-				}`}
+						: "cursor-pointer hover:text-red-600 hover:bg-green-50 "
+				}
+					${userVote == "down" ? "text-red-600" : "text-gray-400"}`}
 				onClick={() => handleClick("down")}
 				disabled={!isAuthenticated}
Index: frontend/src/components/types.ts
===================================================================
--- frontend/src/components/types.ts	(revision 1ee9aacd47eb67112c459b1a64646b286b5c0abe)
+++ frontend/src/components/types.ts	(revision 9b0f66162d93107b4626777c841d96d52ae70e1c)
@@ -100,5 +100,6 @@
 	student?: string;
 	is_confirmed?: boolean;
-	votes_count?: number;
+	votes_score?: number;
+	user_has_voted?: "none" | "up" | "down";
 }
 
Index: frontend/src/pages/SubjectView.tsx
===================================================================
--- frontend/src/pages/SubjectView.tsx	(revision 1ee9aacd47eb67112c459b1a64646b286b5c0abe)
+++ frontend/src/pages/SubjectView.tsx	(revision 9b0f66162d93107b4626777c841d96d52ae70e1c)
@@ -273,4 +273,5 @@
 						</div>
 
+						{/* reviews section */}
 						<div className="bg-white rounded-lg shadow-sm p-6">
 							{!reviews ||
@@ -294,5 +295,5 @@
 							<div className="mt-6 pt-4 border-gray-200">
 								<button className="bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-700 transition-colors">
-									Сподели мислење
+									Сподели информација / мислење
 								</button>
 							</div>
