Index: src/Clients/Angular/finki-chattery/src/app/core/services/auth.service.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/services/auth.service.ts	(revision 1e0d86905c02abe14201bf07ad5a2163900a5602)
+++ src/Clients/Angular/finki-chattery/src/app/core/services/auth.service.ts	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -24,4 +24,5 @@
   public user: ApplicationUser | null = null;
   public oidcUser: User | null = null;
+  public selfUser: SelfUserResponse | null = null;
 
   constructor(private baseApi: BaseApiService) {
@@ -35,4 +36,10 @@
         user?.profile.isVerified
       );
+
+      this.selfUserDto().subscribe((selfUser) => {
+        if (selfUser) {
+          this.selfUser = selfUser;
+        }
+      });
     });
   }
@@ -86,4 +93,12 @@
         user.profile.isVerified
       );
+
+      if (!this.selfUser) {
+        this.selfUserDto().subscribe((selfUser) => {
+          if (selfUser) {
+            this.selfUser = selfUser;
+          }
+        });
+      }
     });
   }
Index: src/Clients/Angular/finki-chattery/src/app/core/state/question-facade.service.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/question-facade.service.ts	(revision 1e0d86905c02abe14201bf07ad5a2163900a5602)
+++ src/Clients/Angular/finki-chattery/src/app/core/state/question-facade.service.ts	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -2,6 +2,6 @@
 import { Injectable } from '@angular/core';
 import { Action, Store } from '@ngrx/store';
-import { Observable, Subject, throwError } from 'rxjs';
-import { catchError, filter, map } from 'rxjs/operators';
+import { Observable, Subject } from 'rxjs';
+import { filter, map } from 'rxjs/operators';
 
 import {
@@ -9,6 +9,8 @@
   PreviewQuestionViewModel,
   QuestionStateViewModel,
-  SearchQuestionsQueryViewModel
+  SearchQuestionsQueryViewModel,
+  VoteType
 } from 'src/app/shared-app/models';
+import { AuthService } from '../services';
 import {
   EffectStartedWorking,
@@ -16,5 +18,7 @@
   GetPreviewQuestionsPopular,
   GetQuestionState,
-  GetSearchQuestions
+  GetSearchQuestions,
+  SetCorrectAnswer,
+  VoteAnswer
 } from './question-state/question.actions';
 import { questionStateQuery } from './question-state/question.selectors';
@@ -29,18 +33,10 @@
   effectWorking$: Observable<boolean | HttpErrorResponse>;
 
-  constructor(private store: Store<QuestionState>) {
-    this.effectWorking$ = this.store.select(questionStateQuery.effectWorking).pipe(
-      filter((effect) => effect !== null),
-      map((effect) => {
-        if (effect instanceof HttpErrorResponse) {
-          throw effect;
-        } else {
-          return effect;
-        }
-      }),
-      catchError((err) => {
-        return throwError(err);
-      })
-    );
+  constructor(private store: Store<QuestionState>, private auth: AuthService) {
+    this.effectWorking$ = this.store.select(questionStateQuery.effectWorking).pipe(filter((effect) => effect !== null));
+  }
+
+  public currentQuestionOwnedByCurrentUser(): Observable<boolean> {
+    return this.getQuestion().pipe(map((question) => this.auth.selfUser?.student?.uid === question.student.uid));
   }
 
@@ -81,4 +77,12 @@
   }
 
+  public setCorrectAnswer(questionUid: string, answerUid: string): void {
+    this.dispatchEffect(new SetCorrectAnswer(questionUid, answerUid));
+  }
+
+  public voteAnswer(answerUid: string, questionUid: string, voteType: VoteType): void {
+    this.dispatchEffect(new VoteAnswer(questionUid, answerUid, voteType));
+  }
+
   public fetchQuestion(questionUid: string): void {
     this.dispatchEffect(new GetQuestionState(questionUid));
Index: src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question-state-request.models.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question-state-request.models.ts	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
+++ src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question-state-request.models.ts	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -0,0 +1,5 @@
+import { VoteType } from 'src/app/shared-app/models';
+
+export class VoteAnswerRequest {
+  constructor(public voteType: VoteType) {}
+}
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 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
+++ src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question-state-response.models.ts	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -0,0 +1,82 @@
+import { VoteType } from 'src/app/shared-app/models';
+
+export class QuestionStateResponse {
+  public uid!: string;
+  public title!: string;
+  public text!: string;
+  public createdOn!: moment.Moment;
+  public views!: number;
+  public lastActiveOn!: moment.Moment;
+  public studentResponse!: StudentQuestionStateResponse;
+  public answersResponse!: AnswerQuestionStateResponse[];
+  public categoriesResponse!: QuestionCategoryQuestionStateResponse[];
+  public teamResponse!: TeamQuestionStateResponse | null;
+}
+
+export class StudentQuestionStateResponse {
+  public uid!: string;
+  public index!: string;
+  public imageUrl!: string;
+  public reputation!: number;
+}
+
+export class TeamQuestionStateResponse {
+  public uid!: string;
+  public name!: string;
+}
+
+export class QuestionCategoryQuestionStateResponse {
+  public uid!: string;
+  public name!: string;
+}
+
+export class AnswerQuestionStateResponse {
+  public uid!: string;
+  public text!: string;
+  public correctAnswer!: boolean;
+  public createdOn!: moment.Moment;
+  public votesCount!: number;
+  public studentResponse!: AnswerStudentQuestionStateResponse;
+  public answerResponsesResponse!: AnswerResponseQuestionStateResponse[];
+}
+
+export class AnswerStudentQuestionStateResponse {
+  public uid!: string;
+  public index!: string;
+  public imageUrl!: string;
+  public reputation!: number;
+}
+
+export class AnswerResponseQuestionStateResponse {
+  public uid!: string;
+  public text!: string;
+  public createdOn!: moment.Moment;
+  public studentResponse!: AnswerResponseStudentQuestionStateResponse;
+}
+
+export class AnswerResponseStudentQuestionStateResponse {
+  public uid!: string;
+  public index!: string;
+  public imageUrl!: string;
+  public reputation!: number;
+}
+
+export class PreviewQuestionResponse {
+  public uid!: string;
+  public title!: string;
+  public createdOn!: moment.Moment;
+  public views!: number;
+  public answersCount!: number;
+  public categories!: PreviewQuestionCategoryResponse[];
+}
+
+export class PreviewQuestionCategoryResponse {
+  public uid!: string;
+  public text!: string;
+}
+
+export class VoteAnswerResponse {
+  public answerUid!: string;
+  public voteUid!: string;
+  public voteType!: VoteType;
+}
Index: src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question-state.models.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question-state.models.ts	(revision 1e0d86905c02abe14201bf07ad5a2163900a5602)
+++ 	(revision )
@@ -1,74 +1,0 @@
-export class QuestionStateResponse {
-  public uid!: string;
-  public title!: string;
-  public text!: string;
-  public createdOn!: moment.Moment;
-  public views!: number;
-  public lastActiveOn!: moment.Moment;
-  public studentResponse!: StudentQuestionStateResponse;
-  public answersResponse!: AnswerQuestionStateResponse[];
-  public categoriesResponse!: QuestionCategoryQuestionStateResponse[];
-  public teamResponse!: TeamQuestionStateResponse | null;
-}
-
-export class StudentQuestionStateResponse {
-  public uid!: string;
-  public index!: string;
-  public imageUrl!: string;
-  public reputation!: number;
-}
-
-export class TeamQuestionStateResponse {
-  public uid!: string;
-  public name!: string;
-}
-
-export class QuestionCategoryQuestionStateResponse {
-  public uid!: string;
-  public name!: string;
-}
-
-export class AnswerQuestionStateResponse {
-  public uid!: string;
-  public text!: string;
-  public correctAnswer!: boolean;
-  public createdOn!: moment.Moment;
-  public upvotesCount!: number;
-  public studentResponse!: AnswerStudentQuestionStateResponse;
-  public answerResponsesResponse!: AnswerResponseQuestionStateResponse[];
-}
-
-export class AnswerStudentQuestionStateResponse {
-  public uid!: string;
-  public index!: string;
-  public imageUrl!: string;
-  public reputation!: number;
-}
-
-export class AnswerResponseQuestionStateResponse {
-  public uid!: string;
-  public text!: string;
-  public createdOn!: moment.Moment;
-  public studentResponse!: AnswerResponseStudentQuestionStateResponse;
-}
-
-export class AnswerResponseStudentQuestionStateResponse {
-  public uid!: string;
-  public index!: string;
-  public imageUrl!: string;
-  public reputation!: number;
-}
-
-export class PreviewQuestionResponse {
-  public uid!: string;
-  public title!: string;
-  public createdOn!: moment.Moment;
-  public views!: number;
-  public answersCount!: number;
-  public categories!: PreviewQuestionCategoryResponse[];
-}
-
-export class PreviewQuestionCategoryResponse {
-  public uid!: string;
-  public text!: string;
-}
Index: src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.actions.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.actions.ts	(revision 1e0d86905c02abe14201bf07ad5a2163900a5602)
+++ src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.actions.ts	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -2,9 +2,17 @@
 import { Action } from '@ngrx/store';
 
-import { PreviewQuestionViewModel, QuestionStateViewModel, SearchQuestionsQueryViewModel } from 'src/app/shared-app/models';
+import {
+  PreviewQuestionViewModel,
+  QuestionStateViewModel,
+  SearchQuestionsQueryViewModel,
+  VoteAnswerViewModel,
+  VoteType
+} from 'src/app/shared-app/models';
 
 export enum QuestionActionTypes {
   GetQuestionState = '[Question] Get state',
   GetQuestionStateSuccess = '[Question] Get state success',
+  SetCorrectAnswer = '[Question] Set Correct Answer',
+  SetCorrectAnswerSuccess = '[Question] Set Correct Answer success',
   GetPreviewQuestionsLatest = '[Question] Get preview questions Latest',
   GetPreviewQuestionsLatestSuccess = '[Question] Get preview questions Latest Success',
@@ -13,4 +21,6 @@
   GetSearchQuestions = '[Question] Get search questions',
   GetSearchQuestionsSuccess = '[Question] Get search questions Success',
+  VoteAnswer = '[Question] Vote answer',
+  VoteAnswerSuccess = '[Question] Vote answer Success',
   EffectStartedWorking = '[Question] Effect Started Working',
   EffectFinishedWorking = '[Question] Effect Finished Working',
@@ -28,4 +38,16 @@
 
   constructor(public payload: QuestionStateViewModel) {}
+}
+
+export class SetCorrectAnswer implements Action {
+  readonly type = QuestionActionTypes.SetCorrectAnswer;
+
+  constructor(public questionUid: string, public answerUid: string) {}
+}
+
+export class SetCorrectAnswerSuccess implements Action {
+  readonly type = QuestionActionTypes.SetCorrectAnswerSuccess;
+
+  constructor(public payload: string) {}
 }
 
@@ -66,4 +88,16 @@
 }
 
+export class VoteAnswer implements Action {
+  readonly type = QuestionActionTypes.VoteAnswer;
+
+  constructor(public questionUid: string, public answerUid: string, public voteType: VoteType) {}
+}
+
+export class VoteAnswerSuccess implements Action {
+  readonly type = QuestionActionTypes.VoteAnswerSuccess;
+
+  constructor(public payload: VoteAnswerViewModel) {}
+}
+
 export class EffectStartedWorking implements Action {
   readonly type = QuestionActionTypes.EffectStartedWorking;
@@ -89,4 +123,6 @@
   | GetPreviewQuestionsPopularSuccess
   | GetSearchQuestionsSuccess
+  | VoteAnswerSuccess
+  | SetCorrectAnswerSuccess
   | EffectStartedWorking
   | EffectFinishedWorking
Index: src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.effects.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.effects.ts	(revision 1e0d86905c02abe14201bf07ad5a2163900a5602)
+++ src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.effects.ts	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -1,11 +1,13 @@
 import { Injectable } from '@angular/core';
 import { act, Actions, createEffect, ofType } from '@ngrx/effects';
-import { catchError, filter, mergeMap, switchMap, withLatestFrom } from 'rxjs/operators';
+import { catchError, filter, mergeMap, switchMap, tap, withLatestFrom } from 'rxjs/operators';
 import { PreviewQuestionsOrderEnum, SearchQuestionsQueryViewModel } from 'src/app/shared-app/models';
 import { TranslateFromJsonService } from 'src/app/shared-app/services';
 
 import { BaseApiService } from 'src/app/shared-app/services/base-api.service';
+import { NotificationService } from '../../services/notification.service';
 import { QuestionFacadeService } from '../question-facade.service';
-import { PreviewQuestionResponse, QuestionStateResponse } from './question-state.models';
+import { VoteAnswerRequest } from './question-state-request.models';
+import { PreviewQuestionResponse, QuestionStateResponse, VoteAnswerResponse } from './question-state-response.models';
 import {
   EffectFinishedWorking,
@@ -19,5 +21,9 @@
   GetSearchQuestions,
   GetSearchQuestionsSuccess,
-  QuestionActionTypes
+  QuestionActionTypes,
+  SetCorrectAnswer,
+  SetCorrectAnswerSuccess,
+  VoteAnswer,
+  VoteAnswerSuccess
 } from './question.actions';
 import { QuestionMapper } from './question.mapper';
@@ -31,5 +37,6 @@
     private api: BaseApiService,
     private translate: TranslateFromJsonService,
-    private facade: QuestionFacadeService
+    private facade: QuestionFacadeService,
+    private notification: NotificationService
   ) {}
 
@@ -103,3 +110,30 @@
     );
   });
+
+  voteAnswer$ = createEffect(() => {
+    return this.actions$.pipe(
+      ofType<VoteAnswer>(QuestionActionTypes.VoteAnswer),
+      mergeMap((action) => {
+        const body = new VoteAnswerRequest(action.voteType);
+        return this.api.post<VoteAnswerResponse>(`v1/questions/${action.questionUid}/answers/${action.answerUid}/votes`, body).pipe(
+          tap((state) => this.notification.successNotification('sucess-vote')),
+          switchMap((state) => [new VoteAnswerSuccess(QuestionMapper.ToVoteAnswerViewModel(state)), new EffectFinishedWorking()]),
+          catchError((err) => [new EffectFinishedWorkingError(err)])
+        );
+      })
+    );
+  });
+
+  setCorrectAnswer$ = createEffect(() => {
+    return this.actions$.pipe(
+      ofType<SetCorrectAnswer>(QuestionActionTypes.SetCorrectAnswer),
+      mergeMap((action) => {
+        return this.api.put<string>(`v1/questions/${action.questionUid}/answers/${action.answerUid}/correct`).pipe(
+          tap((state) => this.notification.successNotification('success-correct-answer')),
+          switchMap((state) => [new SetCorrectAnswerSuccess(state), new EffectFinishedWorking()]),
+          catchError((err) => [new EffectFinishedWorkingError(err)])
+        );
+      })
+    );
+  });
 }
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 1e0d86905c02abe14201bf07ad5a2163900a5602)
+++ src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.mapper.ts	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -10,8 +10,9 @@
   QuestionStateViewModel,
   StudentQuestionStateViewModel,
-  TeamQuestionStateViewModel
+  TeamQuestionStateViewModel,
+  VoteAnswerViewModel
 } from 'src/app/shared-app/models';
 import { TranslateFromJsonService } from 'src/app/shared-app/services';
-import { PreviewQuestionResponse, QuestionStateResponse } from './question-state.models';
+import { PreviewQuestionResponse, QuestionStateResponse, VoteAnswerResponse } from './question-state-response.models';
 
 export class QuestionMapper {
@@ -51,5 +52,5 @@
           x.correctAnswer,
           moment(x.createdOn),
-          x.upvotesCount,
+          x.votesCount,
           answerStudent,
           answerResponses
@@ -113,3 +114,7 @@
     return questions;
   }
+
+  public static ToVoteAnswerViewModel(response: VoteAnswerResponse): VoteAnswerViewModel {
+    return new VoteAnswerViewModel(response.answerUid, response.voteUid, response.voteType);
+  }
 }
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 1e0d86905c02abe14201bf07ad5a2163900a5602)
+++ src/Clients/Angular/finki-chattery/src/app/core/state/question-state/question.reducers.ts	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -1,2 +1,3 @@
+import { AnswerQuestionStateViewModel, VoteType } from 'src/app/shared-app/models';
 import { QuestionAction, QuestionActionTypes } from './question.actions';
 import { initialState, QuestionState } from './question.state';
@@ -25,4 +26,68 @@
         searchQuestionsQuery: action.query
       };
+    case QuestionActionTypes.VoteAnswerSuccess: {
+      if (state.question) {
+        return {
+          ...state,
+          question: {
+            ...state.question,
+            answers: state.question.answers.map((x) => {
+              if (x.uid === action.payload.answerUid) {
+                let votesCountNew = x.votesCount;
+
+                switch (action.payload.voteType) {
+                  case VoteType.Upvote:
+                    votesCountNew++;
+                    break;
+                  case VoteType.Downvote:
+                    votesCountNew--;
+                    break;
+                }
+
+                return {
+                  ...x,
+                  votesCount: votesCountNew
+                };
+              }
+
+              return x;
+            })
+          }
+        };
+      }
+
+      return {
+        ...state
+      };
+    }
+    case QuestionActionTypes.SetCorrectAnswerSuccess: {
+      if (state.question) {
+        return {
+          ...state,
+          question: {
+            ...state.question,
+            answers: state.question.answers.map((x) => {
+              if (x.correctAnswer) {
+                return {
+                  ...x,
+                  correctAnswer: false
+                };
+              }
+              if (x.uid === action.payload) {
+                return {
+                  ...x,
+                  correctAnswer: true
+                };
+              }
+              return x;
+            })
+          }
+        };
+      }
+
+      return {
+        ...state
+      };
+    }
     case QuestionActionTypes.EffectStartedWorking: {
       return {
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/vote/vote.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/vote/vote.component.html	(revision 1e0d86905c02abe14201bf07ad5a2163900a5602)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/vote/vote.component.html	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -1,3 +1,3 @@
-<div>
+<div class="main-div">
   <div class="vote-icons" fxLayout="column" fxLayoutAlign="center center">
     <mat-icon class="vote-icon" (click)="voted(VoteType.Upvote)" [inline]="true">arrow_drop_up</mat-icon>
@@ -7,4 +7,11 @@
       >check</mat-icon
     >
+    <mat-icon
+      *ngIf="canSetCorrectAnswer && !correct"
+      [inline]="true"
+      class="text-center text-bold green set-correct-answer"
+      (click)="setCorrectAnswer.emit()"
+      >check</mat-icon
+    >
   </div>
 </div>
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/vote/vote.component.scss
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/vote/vote.component.scss	(revision 1e0d86905c02abe14201bf07ad5a2163900a5602)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/vote/vote.component.scss	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -14,2 +14,19 @@
   cursor: pointer;
 }
+
+.show-on-hover {
+  display: none;
+}
+
+.set-correct-answer {
+  opacity: 0.3;
+  visibility: hidden;
+}
+
+.main-div:hover > .vote-icons > .set-correct-answer {
+  visibility: visible;
+}
+
+.main-div {
+  height: 100%;
+}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/vote/vote.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/vote/vote.component.ts	(revision 1e0d86905c02abe14201bf07ad5a2163900a5602)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/vote/vote.component.ts	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -1,9 +1,5 @@
 import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
+import { VoteType } from 'src/app/shared-app/models';
 import { ButtonType } from '../button/button.models';
-
-export enum VoteType {
-  Upvote,
-  Downvote
-}
 
 @Component({
@@ -14,6 +10,8 @@
 export class VoteComponent implements OnInit {
   @Input() voteCount: number | undefined;
+  @Input() canSetCorrectAnswer: boolean | null = false;
   @Input() correct = false;
   @Output() voteClicked = new EventEmitter<VoteType>();
+  @Output() setCorrectAnswer = new EventEmitter<void>();
 
   VoteType = VoteType;
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/question-preview/question-preview.component.html
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/question-preview/question-preview.component.html	(revision 1e0d86905c02abe14201bf07ad5a2163900a5602)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/question-preview/question-preview.component.html	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -14,5 +14,12 @@
       <mat-card-content>
         <div fxLayout="row wrap" fxLayoutAlign="space-around none">
-          <app-vote [voteCount]="answer.upvotesCount" [correct]="answer.correctAnswer" fxFlex="6%"></app-vote>
+          <app-vote
+            [canSetCorrectAnswer]="canSetCorrectAnswer | async"
+            [voteCount]="answer.votesCount"
+            [correct]="answer.correctAnswer"
+            (voteClicked)="answerVoted($event, answer.uid, question.uid)"
+            (setCorrectAnswer)="setCorrectAnswer(question.uid, answer.uid)"
+            fxFlex="6%"
+          ></app-vote>
           <div fxFlex="92%">
             <app-text-editor
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/question-preview/question-preview.component.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/question-preview/question-preview.component.ts	(revision 1e0d86905c02abe14201bf07ad5a2163900a5602)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/question-preview/question-preview.component.ts	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -1,6 +1,8 @@
+import { HttpErrorResponse } from '@angular/common/http';
 import { Component, OnInit } from '@angular/core';
+import { NotificationService } from 'src/app/core/services/notification.service';
 import { QuestionFacadeService } from 'src/app/core/state/question-facade.service';
 
-import { QuestionStateViewModel } from 'src/app/shared-app/models';
+import { QuestionStateViewModel, VoteType } from 'src/app/shared-app/models';
 import { ButtonType } from '../../generic/button/button.models';
 
@@ -11,8 +13,9 @@
 })
 export class QuestionPreviewComponent implements OnInit {
+  canSetCorrectAnswer = this.questionFacade.currentQuestionOwnedByCurrentUser();
   question!: QuestionStateViewModel;
   working = true;
   ButtonType = ButtonType;
-  constructor(private questionFacade: QuestionFacadeService) {}
+  constructor(private questionFacade: QuestionFacadeService, private notification: NotificationService) {}
 
   ngOnInit(): void {
@@ -21,4 +24,18 @@
       this.working = false;
     });
+
+    this.questionFacade.effectWorking$.subscribe((effect) => {
+      if (effect instanceof HttpErrorResponse) {
+        this.notification.handleErrorsNotification(effect.error);
+      }
+    });
+  }
+
+  answerVoted(voteType: VoteType, answerUid: string, questionUid: string): void {
+    this.questionFacade.voteAnswer(answerUid, questionUid, voteType);
+  }
+
+  setCorrectAnswer(questionUid: string, answerUid: string): void {
+    this.questionFacade.setCorrectAnswer(questionUid, answerUid);
   }
 }
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/models/question-state-enums.models.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/models/question-state-enums.models.ts	(revision 1e0d86905c02abe14201bf07ad5a2163900a5602)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/models/question-state-enums.models.ts	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -3,2 +3,7 @@
   Popular
 }
+
+export enum VoteType {
+  Upvote,
+  Downvote
+}
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 1e0d86905c02abe14201bf07ad5a2163900a5602)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/models/question-state-view-models.models.ts	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -1,2 +1,4 @@
+import { VoteType } from '.';
+
 export class QuestionStateViewModel {
   constructor(
@@ -32,5 +34,5 @@
     public correctAnswer: boolean,
     public createdOn: moment.Moment,
-    public upvotesCount: number,
+    public votesCount: number,
     public student: AnswerStudentQuestionStateViewModel,
     public answerResponses: AnswerResponseQuestionStateViewModel[]
@@ -73,2 +75,6 @@
   constructor(public text: string) {}
 }
+
+export class VoteAnswerViewModel {
+  constructor(public answerUid: string, public voteUid: string, public voteType: VoteType) {}
+}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/models/user.models.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/models/user.models.ts	(revision 1e0d86905c02abe14201bf07ad5a2163900a5602)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/models/user.models.ts	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -9,8 +9,4 @@
 }
 
-export class SelfUserResponse {
-  uid!: string;
-}
-
 export enum ApplicationUserType {
   Student = 'Student',
@@ -19,2 +15,44 @@
   Guest = 'Guest'
 }
+
+export class SelfUserResponse {
+  public student?: StudentSelfResponse | null;
+  public teacher?: TeacherSelfResponse | null;
+  public moderator?: ModeratorSelfResponse | null;
+}
+
+export class StudentSelfResponse {
+  public uid!: string;
+  public applicationUserId!: number;
+  public index!: string;
+  public reputation!: number;
+  public imageUrl!: string;
+  public questions!: StudentQuestionResponse[];
+  public teams!: StudentTeamResponse[];
+}
+
+export class StudentQuestionResponse {
+  public questionUid!: string;
+  public title!: string;
+}
+
+export class StudentTeamResponse {
+  public teamUid!: string;
+  public name!: string;
+}
+
+export class ModeratorSelfResponse {
+  public uid!: string;
+  public applicationUserId!: number;
+}
+
+export class TeacherSelfResponse {
+  public uid!: string;
+  public applicationUserId!: number;
+  public teams!: TeacherTeamResponse[];
+}
+
+export class TeacherTeamResponse {
+  public teamUid!: string;
+  public name!: string;
+}
Index: src/Clients/Angular/finki-chattery/src/app/shared-app/services/base-api.service.ts
===================================================================
--- src/Clients/Angular/finki-chattery/src/app/shared-app/services/base-api.service.ts	(revision 1e0d86905c02abe14201bf07ad5a2163900a5602)
+++ src/Clients/Angular/finki-chattery/src/app/shared-app/services/base-api.service.ts	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -19,5 +19,5 @@
 
   public getSelfUser(): Observable<SelfUserResponse> {
-    return this.get<SelfUserResponse>('self');
+    return this.get<SelfUserResponse>('v1/self');
   }
 
Index: src/Clients/Angular/finki-chattery/src/assets/translations/en.json
===================================================================
--- src/Clients/Angular/finki-chattery/src/assets/translations/en.json	(revision 1e0d86905c02abe14201bf07ad5a2163900a5602)
+++ src/Clients/Angular/finki-chattery/src/assets/translations/en.json	(revision 6901f8b9e6373705c4ebfc4799374f1e79f6d3e5)
@@ -53,4 +53,9 @@
   "ask-question-stepper-ask": "Ask question",
   "ask-question-ask-button-back": "Edit question",
-  "ask-question-ask-button": "Ask question"
+  "sucess-vote": "Successfully voted answer",
+  "success-correct-answer": "Successfully set correct answer",
+  "ask-question-ask-button": "Ask question",
+  "AnswerAlreadyUpvoted": "You have already upvoted this answer",
+  "AnswerAlreadyDownvoted": "You have already downvoted this answer",
+  "StudentHasBadReputation": "You have bad reputation and can not vote"
 }
