Index: src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question-state-response.models.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question-state-response.models.ts	(revision 6165fd0e014674d95695cc6b2f6b5aae618305d5)
+++ src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question-state-response.models.ts	(revision fcc308081d20fa447cc6c3c173092078ab635664)
@@ -80,3 +80,4 @@
   public voteUid!: string;
   public voteType!: VoteType;
+  public voteAlreadyExists!: boolean;
 }
Index: src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.mapper.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.mapper.ts	(revision 6165fd0e014674d95695cc6b2f6b5aae618305d5)
+++ src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.mapper.ts	(revision fcc308081d20fa447cc6c3c173092078ab635664)
@@ -90,5 +90,5 @@
 
   public static ToVoteAnswerViewModel(response: VoteAnswerResponse): VoteAnswerViewModel {
-    return new VoteAnswerViewModel(response.answerUid, response.voteUid, response.voteType);
+    return new VoteAnswerViewModel(response.answerUid, response.voteUid, response.voteType, response.voteAlreadyExists);
   }
 
Index: src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.reducers.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.reducers.ts	(revision 6165fd0e014674d95695cc6b2f6b5aae618305d5)
+++ src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.reducers.ts	(revision fcc308081d20fa447cc6c3c173092078ab635664)
@@ -39,7 +39,13 @@
                   case VoteType.Upvote:
                     votesCountNew++;
+                    if (action.payload.voteAlreadyExists) {
+                      votesCountNew++;
+                    }
                     break;
                   case VoteType.Downvote:
                     votesCountNew--;
+                    if (action.payload.voteAlreadyExists) {
+                      votesCountNew--;
+                    }
                     break;
                 }
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/models/question-state-view-models.models.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/models/question-state-view-models.models.ts	(revision 6165fd0e014674d95695cc6b2f6b5aae618305d5)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/models/question-state-view-models.models.ts	(revision fcc308081d20fa447cc6c3c173092078ab635664)
@@ -77,4 +77,4 @@
 
 export class VoteAnswerViewModel {
-  constructor(public answerUid: string, public voteUid: string, public voteType: VoteType) {}
+  constructor(public answerUid: string, public voteUid: string, public voteType: VoteType, public voteAlreadyExists: boolean) {}
 }
Index: src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/UpdateAnswerVotesEventHandler.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/UpdateAnswerVotesEventHandler.cs	(revision 6165fd0e014674d95695cc6b2f6b5aae618305d5)
+++ src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/UpdateAnswerVotesEventHandler.cs	(revision fcc308081d20fa447cc6c3c173092078ab635664)
@@ -30,7 +30,16 @@
                 case VoteType.Upvote:
                     answer.VotesCount++;
+
+                    if (notification.VoteAlreadyExists)
+                    {
+                        answer.VotesCount++;
+                    }
                     break;
                 case VoteType.Downvote:
                     answer.VotesCount--;
+                    if (notification.VoteAlreadyExists)
+                    {
+                        answer.VotesCount--;
+                    }
                     break;
             }
Index: src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/UpdateStudentReputationEventHandler.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/UpdateStudentReputationEventHandler.cs	(revision 6165fd0e014674d95695cc6b2f6b5aae618305d5)
+++ src/FinkiChattery/FinkiChattery.Api/ApplicationServices/Questioning/EventHandlers/UpdateStudentReputationEventHandler.cs	(revision fcc308081d20fa447cc6c3c173092078ab635664)
@@ -30,7 +30,15 @@
                 case VoteType.Upvote:
                     student.Reputation++;
+                    if (notification.VoteAlreadyExists)
+                    {
+                        student.Reputation++;
+                    }
                     break;
                 case VoteType.Downvote:
                     student.Reputation--;
+                    if (notification.VoteAlreadyExists)
+                    {
+                        student.Reputation++;
+                    }
                     break;
             }
Index: src/FinkiChattery/FinkiChattery.Api/Controllers/v1/VotesController.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Api/Controllers/v1/VotesController.cs	(revision 6165fd0e014674d95695cc6b2f6b5aae618305d5)
+++ src/FinkiChattery/FinkiChattery.Api/Controllers/v1/VotesController.cs	(revision fcc308081d20fa447cc6c3c173092078ab635664)
@@ -29,6 +29,6 @@
         {
             VoteType voteType = request.VoteType == VoteTypeRequest.Upvote ? VoteType.Upvote : VoteType.Downvote;
-            var voteUid = await MediatorService.SendAsync(new VoteAnswerCommand(voteType, answerUid, questionUid));
-            return Ok(new VoteAnswerResponse(answerUid, voteUid, request.VoteType));
+            var vote = await MediatorService.SendAsync(new VoteAnswerCommand(voteType, answerUid, questionUid));
+            return Ok(new VoteAnswerResponse(answerUid, vote.VoteUid, request.VoteType, vote.VoteAlreadyExists));
         }
     }
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/VoteAnswer/AnswerVotedEvent.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/VoteAnswer/AnswerVotedEvent.cs	(revision 6165fd0e014674d95695cc6b2f6b5aae618305d5)
+++ src/FinkiChattery/FinkiChattery.Commands/Questioning/VoteAnswer/AnswerVotedEvent.cs	(revision fcc308081d20fa447cc6c3c173092078ab635664)
@@ -7,5 +7,5 @@
     public class AnswerVotedEvent : IEvent
     {
-        public AnswerVotedEvent(Guid questionUid, Guid answerUid, Guid studentUid, VoteType voteType)
+        public AnswerVotedEvent(Guid questionUid, Guid answerUid, Guid studentUid, VoteType voteType, bool voteAlreadyExists)
         {
             QuestionUid = questionUid;
@@ -13,4 +13,5 @@
             StudentUid = studentUid;
             VoteType = voteType;
+            VoteAlreadyExists = voteAlreadyExists;
         }
 
@@ -19,4 +20,5 @@
         public Guid StudentUid { get; }
         public VoteType VoteType { get; }
+        public bool VoteAlreadyExists { get; }
     }
 }
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/VoteAnswer/VoteAnswerCommand.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/VoteAnswer/VoteAnswerCommand.cs	(revision 6165fd0e014674d95695cc6b2f6b5aae618305d5)
+++ src/FinkiChattery/FinkiChattery.Commands/Questioning/VoteAnswer/VoteAnswerCommand.cs	(revision fcc308081d20fa447cc6c3c173092078ab635664)
@@ -11,5 +11,5 @@
 namespace FinkiChattery.Commands.Questioning
 {
-    public class VoteAnswerCommand : ICommand<Guid>
+    public class VoteAnswerCommand : ICommand<VoteAnswerDto>
     {
         public VoteAnswerCommand(VoteType voteType, Guid answerUid, Guid questionUid)
@@ -25,5 +25,5 @@
     }
 
-    public class VoteAnswerHandler : ICommandHandler<VoteAnswerCommand, Guid>
+    public class VoteAnswerHandler : ICommandHandler<VoteAnswerCommand, VoteAnswerDto>
     {
         public VoteAnswerHandler(IUnitOfWork unitOfWork, ICurrentUser currentUser, IEventService eventService)
@@ -38,9 +38,10 @@
         public IEventService EventService { get; }
 
-        public async Task<Guid> Handle(VoteAnswerCommand request, CancellationToken cancellationToken)
+        public async Task<VoteAnswerDto> Handle(VoteAnswerCommand request, CancellationToken cancellationToken)
         {
             var student = await UnitOfWork.Students.GetStudent(CurrentUser.Id);
             var answer = await UnitOfWork.Answers.GetByUidAsync(request.AnswerUid);
             var vote = await UnitOfWork.Votes.GetVoteForAnswerByStudent(request.AnswerUid, CurrentUser.Id);
+            var voteAlreadyExists = false;
 
             if (vote == null)
@@ -58,11 +59,12 @@
             {
                 vote.VoteType = request.VoteType;
+                voteAlreadyExists = true;
             }
 
             await UnitOfWork.SaveAsync();
 
-            EventService.Enqueue(new AnswerVotedEvent(request.QuestionUid, request.AnswerUid, student.Uid, request.VoteType));
+            EventService.Enqueue(new AnswerVotedEvent(request.QuestionUid, request.AnswerUid, student.Uid, request.VoteType, voteAlreadyExists));
 
-            return vote.Uid;
+            return new VoteAnswerDto(vote.Uid, voteAlreadyExists);
         }
     }
Index: src/FinkiChattery/FinkiChattery.Commands/Questioning/VoteAnswer/VoteAnswerDto.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Commands/Questioning/VoteAnswer/VoteAnswerDto.cs	(revision fcc308081d20fa447cc6c3c173092078ab635664)
+++ src/FinkiChattery/FinkiChattery.Commands/Questioning/VoteAnswer/VoteAnswerDto.cs	(revision fcc308081d20fa447cc6c3c173092078ab635664)
@@ -0,0 +1,16 @@
+﻿using System;
+
+namespace FinkiChattery.Commands.Questioning
+{
+    public class VoteAnswerDto
+    {
+        public VoteAnswerDto(Guid voteUid, bool voteAlreadyExists)
+        {
+            VoteUid = voteUid;
+            VoteAlreadyExists = voteAlreadyExists;
+        }
+
+        public Guid VoteUid { get; }
+        public bool VoteAlreadyExists { get; }
+    }
+}
Index: src/FinkiChattery/FinkiChattery.Contracts/Questioning/VoteAnswer/VoteAnswerResponse.cs
===================================================================
--- src/FinkiChattery/FinkiChattery.Contracts/Questioning/VoteAnswer/VoteAnswerResponse.cs	(revision 6165fd0e014674d95695cc6b2f6b5aae618305d5)
+++ src/FinkiChattery/FinkiChattery.Contracts/Questioning/VoteAnswer/VoteAnswerResponse.cs	(revision fcc308081d20fa447cc6c3c173092078ab635664)
@@ -5,9 +5,10 @@
     public class VoteAnswerResponse
     {
-        public VoteAnswerResponse(Guid answerUid, Guid voteUid, VoteTypeRequest voteType)
+        public VoteAnswerResponse(Guid answerUid, Guid voteUid, VoteTypeRequest voteType, bool voteAlreadyExists)
         {
             AnswerUid = answerUid;
             VoteUid = voteUid;
             VoteType = voteType;
+            VoteAlreadyExists = voteAlreadyExists;
         }
 
@@ -15,4 +16,5 @@
         public Guid VoteUid { get; }
         public VoteTypeRequest VoteType { get; }
+        public bool VoteAlreadyExists { get; }
     }
 }
