diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/AccessToken.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/AccessToken.java
index c75e7db7572d86a8fdbf3619f3b2471d65ede1ca..a05b7ccc53e8bbd9cd993780f0e58f8604ce2d9f 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/AccessToken.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/AccessToken.java
@@ -19,25 +19,11 @@ import java.util.Objects;
 public class AccessToken implements Serializable {
 
     @Id
-    @GeneratedValue(
-            strategy = GenerationType.SEQUENCE,
-            generator = "accessTokenGenerator"
-    )
-    @SequenceGenerator(
-            name = "accessTokenGenerator",
-            sequenceName = "access_token_seq"
-    )
-    @Column(
-            name = "access_token_id",
-            nullable = false,
-            unique = true
-    )
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "accessTokenGenerator")
+    @SequenceGenerator(name = "accessTokenGenerator", sequenceName = "access_token_seq")
+    @Column(name = "access_token_id", nullable = false, unique = true)
     private Long id;
-    @Column(
-            name = "access_token",
-            nullable = false,
-            unique = true
-    )
+    @Column(name = "access_token", nullable = false, unique = true)
     private String accessToken;
 
     /**
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/TRAcquisitionLock.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/TRAcquisitionLock.java
index 542af91859d598c59e01ed85425c968952f10be0..4daf5572c97a0d7ca0ba50505b69ccedc7bff5db 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/TRAcquisitionLock.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/TRAcquisitionLock.java
@@ -20,19 +20,9 @@ import java.util.Objects;
 public class TRAcquisitionLock implements Serializable {
 
     @Id
-    @GeneratedValue(
-            strategy = GenerationType.SEQUENCE,
-            generator = "trAcquisitionLockGenerator"
-    )
-    @SequenceGenerator(
-            name = "trAcquisitionLockGenerator",
-            sequenceName = "tr_acquisition_lock_seq"
-    )
-    @Column(
-            name = "training_run_acquisition_lock_id",
-            nullable = false,
-            unique = true
-    )
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trAcquisitionLockGenerator")
+    @SequenceGenerator(name = "trAcquisitionLockGenerator", sequenceName = "tr_acquisition_lock_seq")
+    @Column(name = "training_run_acquisition_lock_id", nullable = false, unique = true)
     private Long id;
     @Column(name = "participant_ref_id")
     private Long participantRefId;
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/User.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/User.java
index c1c0dac6a5b88de7626c258c55f9885274d82d9c..70e0b309540506ab30036a8a179adad7532b4a51 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/User.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/User.java
@@ -35,24 +35,11 @@ import java.util.Set;
 public class User implements Serializable {
 
     @Id
-    @GeneratedValue(
-            strategy = GenerationType.SEQUENCE,
-            generator = "userGenerator"
-    )
-    @SequenceGenerator(
-            name = "userGenerator",
-            sequenceName = "user_seq"
-    )
-    @Column(
-            name = "user_id",
-            nullable = false,
-            unique = true
-    )
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "userGenerator")
+    @SequenceGenerator(name = "userGenerator", sequenceName = "user_seq")
+    @Column(name = "user_id", nullable = false, unique = true)
     private Long id;
-    @Column(
-            name = "user_ref_id",
-            nullable = false
-    )
+    @Column(name = "user_ref_id", nullable = false)
     private Long userRefId;
     @ManyToMany(
             mappedBy = "organizers",
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/DecisionMatrixRow.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/DecisionMatrixRow.java
index 1547a97b329e7f359aea54ee5f7c42f7258aade9..89307e8360074825e0bfa465af231ebc80cd0c3d 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/DecisionMatrixRow.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/DecisionMatrixRow.java
@@ -9,24 +9,11 @@ import java.io.Serializable;
 public class DecisionMatrixRow implements Serializable {
 
     @Id
-    @GeneratedValue(
-            strategy = GenerationType.SEQUENCE,
-            generator = "decisionMatrixRowGenerator"
-    )
-    @SequenceGenerator(
-            name = "decisionMatrixRowGenerator",
-            sequenceName = "decision_matrix_row_seq"
-    )
-    @Column(
-            name = "decision_matrix_row_id",
-            nullable = false,
-            unique = true
-    )
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "decisionMatrixRowGenerator")
+    @SequenceGenerator(name = "decisionMatrixRowGenerator", sequenceName = "decision_matrix_row_seq")
+    @Column(name = "decision_matrix_row_id", nullable = false, unique = true)
     private Long id;
-    @Column(
-            name = "order_in_training_phase",
-            nullable = false
-    )
+    @Column(name = "order_in_training_phase", nullable = false)
     private int order;
     @Column(name = "assessment_answered")
     private double assessmentAnswered;
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/Task.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/Task.java
index 44f9689e9f1c582d3c5d41416c26afdab79e82cf..1eca9d071085dbcc46eb58b575478f4c971aad46 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/Task.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/phase/Task.java
@@ -9,19 +9,9 @@ import java.io.Serializable;
 public class Task implements Serializable {
 
     @Id
-    @GeneratedValue(
-            strategy = GenerationType.SEQUENCE,
-            generator = "taskGenerator"
-    )
-    @SequenceGenerator(
-            name = "taskGenerator",
-            sequenceName = "task_seq"
-    )
-    @Column(
-            name = "task_id",
-            nullable = false,
-            unique = true
-    )
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "taskGenerator")
+    @SequenceGenerator(name = "taskGenerator", sequenceName = "task_seq")
+    @Column(name = "task_id", nullable = false, unique = true)
     private Long id;
     @Column(name = "title")
     private String title;
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java
index e404907add4b8a3343ac92a2a4fdee190cbf1cf2..3a6f98439700aa577ec47f19298fb189a6028fc0 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java
@@ -29,24 +29,11 @@ import java.util.*;
 public class TrainingDefinition implements Serializable {
 
     @Id
-    @GeneratedValue(
-            strategy = GenerationType.SEQUENCE,
-            generator = "trainingDefinitionGenerator"
-    )
-    @SequenceGenerator(
-            name = "trainingDefinitionGenerator",
-            sequenceName = "training_definition_seq"
-    )
-    @Column(
-            name = "training_definition_id",
-            nullable = false,
-            unique = true
-    )
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trainingDefinitionGenerator")
+    @SequenceGenerator(name = "trainingDefinitionGenerator", sequenceName = "training_definition_seq")
+    @Column(name = "training_definition_id", nullable = false, unique = true)
     private Long id;
-    @Column(
-            name = "title",
-            nullable = false
-    )
+    @Column(name = "title", nullable = false)
     private String title;
     @Column(name = "description")
     private String description;
@@ -54,11 +41,7 @@ public class TrainingDefinition implements Serializable {
     private String[] prerequisites;
     @Column(name = "outcomes")
     private String[] outcomes;
-    @Column(
-            name = "state",
-            length = 128,
-            nullable = false
-    )
+    @Column(name = "state", length = 128, nullable = false)
     @Enumerated(EnumType.STRING)
     private TDState state;
     @ManyToMany(
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingInstance.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingInstance.java
index b126438140df3df51d5c53d62889653d08866539..8083430eb8cede2988d3aa5df4b46c2ee944deaa 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingInstance.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingInstance.java
@@ -73,42 +73,19 @@ import java.util.Set;
 public class TrainingInstance implements Serializable {
 
     @Id
-    @GeneratedValue(
-            strategy = GenerationType.SEQUENCE,
-            generator = "trainingInstanceGenerator"
-    )
-    @SequenceGenerator(
-            name = "trainingInstanceGenerator",
-            sequenceName = "training_instance_seq"
-    )
-    @Column(
-            name = "training_instance_id",
-            nullable = false,
-            unique = true
-    )
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trainingInstanceGenerator")
+    @SequenceGenerator(name = "trainingInstanceGenerator", sequenceName = "training_instance_seq")
+    @Column(name = "training_instance_id", nullable = false, unique = true)
     private Long id;
-    @Column(
-            name = "start_time",
-            nullable = false
-    )
+    @Column(name = "start_time", nullable = false)
     private LocalDateTime startTime;
-    @Column(
-            name = "end_time",
-            nullable = false
-    )
+    @Column(name = "end_time", nullable = false)
     private LocalDateTime endTime;
-    @Column(
-            name = "title",
-            nullable = false
-    )
+    @Column(name = "title", nullable = false)
     private String title;
     @Column(name = "pool_id")
     private Long poolId;
-    @Column(
-            name = "access_token",
-            nullable = false,
-            unique = true
-    )
+    @Column(name = "access_token", nullable = false, unique = true)
     private String accessToken;
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "training_definition_id")
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java
index 8acd50c447d0ee1f10c9527a5c60ff5b201a8e31..ac88a6f1092a6d31cae85005303531267fb70ee5 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java
@@ -96,46 +96,20 @@ import java.util.Objects;
 public class TrainingRun implements Serializable {
 
     @Id
-    @GeneratedValue(
-            strategy = GenerationType.SEQUENCE,
-            generator = "trainingRunGenerator"
-    )
-    @SequenceGenerator(
-            name = "trainingRunGenerator",
-            sequenceName = "training_run_seq"
-    )
-    @Column(
-            name = "training_run_id",
-            nullable = false,
-            unique = true
-    )
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trainingRunGenerator")
+    @SequenceGenerator(name = "trainingRunGenerator", sequenceName = "training_run_seq")
+    @Column(name = "training_run_id", nullable = false, unique = true)
     private Long id;
-    @Column(
-            name = "start_time",
-            nullable = false
-    )
+    @Column(name = "start_time", nullable = false)
     private LocalDateTime startTime;
-    @Column(
-            name = "end_time",
-            nullable = false
-    )
+    @Column(name = "end_time", nullable = false)
     private LocalDateTime endTime;
-    @Column(
-            name = "state",
-            length = 128,
-            nullable = false
-    )
+    @Column(name = "state", length = 128, nullable = false)
     @Enumerated(EnumType.STRING)
     private TRState state;
-    @Column(
-            name = "incorrect_answer_count",
-            nullable = false
-    )
+    @Column(name = "incorrect_answer_count", nullable = false)
     private int incorrectAnswerCount;
-    @Column(
-            name = "solution_taken",
-            nullable = false
-    )
+    @Column(name = "solution_taken", nullable = false)
     private boolean solutionTaken;
     @ManyToOne(
             fetch = FetchType.LAZY,
@@ -155,10 +129,7 @@ public class TrainingRun implements Serializable {
     @Column(name = "sandbox_instance_ref_id")
     private Long sandboxInstanceRefId;
     @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumn(
-            name = "user_id",
-            nullable = false
-    )
+    @JoinColumn(name = "user_id", nullable = false)
     private User participantRef;
     @Column(name = "phase_answered")
     private boolean phaseAnswered;
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionChoiceViewDTO.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionChoiceViewDTO.java
new file mode 100644
index 0000000000000000000000000000000000000000..4121b49e40ba0ec365c2711aa97a86081236c800
--- /dev/null
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionChoiceViewDTO.java
@@ -0,0 +1,67 @@
+package cz.muni.ics.kypo.training.adaptive.dto.questionnaire.view;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Objects;
+
+public class QuestionChoiceViewDTO {
+
+    @ApiModelProperty(value = "Question choice ID. Leave blank if new choice is added", required = true, example = "1")
+    private Long id;
+    @ApiModelProperty(value = "Short description of question choice", required = true, example = "An answer")
+    @NotEmpty(message = "Task title must not be blank")
+    private String text;
+    @ApiModelProperty(value = "Order of question choice", required = true, example = "0")
+    @NotNull(message = "Question choice order must be specified")
+    private Integer order;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    public Integer getOrder() {
+        return order;
+    }
+
+    public void setOrder(Integer order) {
+        this.order = order;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        QuestionChoiceViewDTO that = (QuestionChoiceViewDTO) o;
+        return Objects.equals(id, that.id) &&
+                Objects.equals(text, that.text) &&
+                Objects.equals(order, that.order);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, text, order);
+    }
+
+    @Override
+    public String toString() {
+        return "QuestionChoiceDTO{" +
+                "id=" + id +
+                ", text='" + text + '\'' +
+                ", order=" + order +
+                '}';
+    }
+}
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionViewDTO.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionViewDTO.java
new file mode 100644
index 0000000000000000000000000000000000000000..3fe32fb0cbf60d94e01c610b8803a49ab050222a
--- /dev/null
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionViewDTO.java
@@ -0,0 +1,93 @@
+package cz.muni.ics.kypo.training.adaptive.dto.questionnaire.view;
+
+import cz.muni.ics.kypo.training.adaptive.dto.questionnaire.QuestionChoiceDTO;
+import cz.muni.ics.kypo.training.adaptive.enums.QuestionType;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+import java.util.Objects;
+
+public class QuestionViewDTO {
+
+    @ApiModelProperty(value = "Question ID. Leave blank if a new question is added", required = true, example = "1")
+    private Long id;
+    @ApiModelProperty(value = "Order of question", required = true, example = "0")
+    @NotNull(message = "Question order must be specified")
+    private int order;
+    @ApiModelProperty(value = "The question that will be displayed to a player", required = true, example = "What's the capital of Canada?")
+    @NotEmpty(message = "Text of question must not be blank")
+    private String text;
+    @ApiModelProperty(value = "It defines the type of the question", allowableValues = "FFQ, MCQ, RFQ", required = true, example = "MCQ")
+    @NotNull(message = "Question type must be specified")
+    private QuestionType questionType;
+    @ApiModelProperty(value = "Choices that are distributed with the question", required = true)
+    private List<QuestionChoiceViewDTO> choices;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public int getOrder() {
+        return order;
+    }
+
+    public void setOrder(int order) {
+        this.order = order;
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    public QuestionType getQuestionType() {
+        return questionType;
+    }
+
+    public void setQuestionType(QuestionType type) {
+        this.questionType = type;
+    }
+
+    public List<QuestionChoiceViewDTO> getChoices() {
+        return choices;
+    }
+
+    public void setChoices(List<QuestionChoiceViewDTO> choices) {
+        this.choices = choices;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof QuestionViewDTO)) return false;
+        QuestionViewDTO that = (QuestionViewDTO) o;
+        return getOrder() == that.getOrder() &&
+                getId().equals(that.getId()) &&
+                getText().equals(that.getText()) &&
+                getQuestionType() == that.getQuestionType();
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(getId(), getOrder(), getText());
+    }
+
+    @Override
+    public String toString() {
+        return "QuestionViewDTO{" +
+                "id=" + id +
+                ", order=" + order +
+                ", text='" + text + '\'' +
+                ", questionType=" + questionType +
+                '}';
+    }
+}
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionnairePhaseViewDTO.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionnairePhaseViewDTO.java
new file mode 100644
index 0000000000000000000000000000000000000000..ce035b7833ab49907a62a023b4dd4d334c8ceab0
--- /dev/null
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/questionnaire/view/QuestionnairePhaseViewDTO.java
@@ -0,0 +1,54 @@
+package cz.muni.ics.kypo.training.adaptive.dto.questionnaire.view;
+
+import cz.muni.ics.kypo.training.adaptive.dto.AbstractPhaseDTO;
+import cz.muni.ics.kypo.training.adaptive.enums.QuestionnaireType;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+import java.util.Objects;
+
+public class QuestionnairePhaseViewDTO extends AbstractPhaseDTO {
+
+    @ApiModelProperty(value = "List of questions associated with the questionnaire phase")
+    private List<QuestionViewDTO> questions;
+    @ApiModelProperty(value = "Type of questionnaire phase", allowableValues = "ADAPTIVE,GENERAL", example = "ADAPTIVE")
+    private QuestionnaireType questionnaireType;
+
+    public List<QuestionViewDTO> getQuestions() {
+        return questions;
+    }
+
+    public void setQuestions(List<QuestionViewDTO> questions) {
+        this.questions = questions;
+    }
+
+    public QuestionnaireType getQuestionnaireType() {
+        return questionnaireType;
+    }
+
+    public void setQuestionnaireType(QuestionnaireType questionnaireType) {
+        this.questionnaireType = questionnaireType;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        QuestionnairePhaseViewDTO that = (QuestionnairePhaseViewDTO) o;
+        return Objects.equals(questions, that.questions) &&
+                questionnaireType == that.questionnaireType;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(questions, questionnaireType);
+    }
+
+    @Override
+    public String toString() {
+        return "QuestionnairePhaseDTO{" +
+                "questions=" + questions +
+                ", questionnaireType=" + questionnaireType +
+                "} " + super.toString();
+    }
+}
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/training/view/TaskViewDTO.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/training/view/TaskViewDTO.java
new file mode 100644
index 0000000000000000000000000000000000000000..169fa6d86b0681f6931df2b0835f3b6db0792ff9
--- /dev/null
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/training/view/TaskViewDTO.java
@@ -0,0 +1,99 @@
+package cz.muni.ics.kypo.training.adaptive.dto.training.view;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Objects;
+
+public class TaskViewDTO {
+
+    @ApiModelProperty(value = "ID of task", required = true, example = "1")
+    private Long id;
+    @ApiModelProperty(value = "Short description of task", required = true, example = "Task title")
+    private String title;
+    @ApiModelProperty(value = "The information that are displayed to a player", required = true, example = "Capture the flag")
+    private String content;
+    @ApiModelProperty(value = "It defines the allowed number of incorrect answers submitted by the player", required = true, example = "5")
+    private int incorrectAnswerLimit;
+    @ApiModelProperty(value = "It defines whether the sandbox can be modified", example = "true")
+    private boolean modifySandbox;
+    @ApiModelProperty(value = "It defines the expected duration of sandbox change defined in seconds", example = "15")
+    private int sandboxChangeExpectedDuration;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public int getIncorrectAnswerLimit() {
+        return incorrectAnswerLimit;
+    }
+
+    public void setIncorrectAnswerLimit(int incorrectAnswerLimit) {
+        this.incorrectAnswerLimit = incorrectAnswerLimit;
+    }
+
+    public boolean isModifySandbox() {
+        return modifySandbox;
+    }
+
+    public void setModifySandbox(boolean modifySandbox) {
+        this.modifySandbox = modifySandbox;
+    }
+
+    public int getSandboxChangeExpectedDuration() {
+        return sandboxChangeExpectedDuration;
+    }
+
+    public void setSandboxChangeExpectedDuration(int sandboxChangeExpectedDuration) {
+        this.sandboxChangeExpectedDuration = sandboxChangeExpectedDuration;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        TaskViewDTO taskDTO = (TaskViewDTO) o;
+        return incorrectAnswerLimit == taskDTO.incorrectAnswerLimit &&
+                modifySandbox == taskDTO.modifySandbox &&
+                sandboxChangeExpectedDuration == taskDTO.sandboxChangeExpectedDuration &&
+                Objects.equals(id, taskDTO.id) &&
+                Objects.equals(title, taskDTO.title) &&
+                Objects.equals(content, taskDTO.content);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, title, content, incorrectAnswerLimit, modifySandbox, sandboxChangeExpectedDuration);
+    }
+
+    @Override
+    public String toString() {
+        return "TaskDTO{" +
+                "id=" + id +
+                ", title='" + title + '\'' +
+                ", content='" + content + '\'' +
+                ", incorrectAnswerLimit=" + incorrectAnswerLimit +
+                ", modifySandbox=" + modifySandbox +
+                ", sandboxChangeExpectedDuration=" + sandboxChangeExpectedDuration +
+                '}';
+    }
+}
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/training/view/TrainingPhaseViewDTO.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/training/view/TrainingPhaseViewDTO.java
new file mode 100644
index 0000000000000000000000000000000000000000..f6f00e6d42079058a47e003848249619c241b995
--- /dev/null
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/training/view/TrainingPhaseViewDTO.java
@@ -0,0 +1,75 @@
+package cz.muni.ics.kypo.training.adaptive.dto.training.view;
+
+import cz.muni.ics.kypo.training.adaptive.dto.AbstractPhaseDTO;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Objects;
+
+public class TrainingPhaseViewDTO extends AbstractPhaseDTO {
+
+    @ApiModelProperty(value = "Estimated time (minutes) taken by the player to solve the training phase", example = "20")
+    private int estimatedDuration;
+    @ApiModelProperty(value = "Maximal number of allowed commands provided by played", required = true, example = "10")
+    private int allowedCommands;
+    @ApiModelProperty(value = "Maximal number of allowed wrong answers provided by played", required = true, example = "10")
+    private int allowedWrongAnswers;
+    @ApiModelProperty(value = "Task associated with the training phase", required = true)
+    private TaskViewDTO task;
+
+    public int getEstimatedDuration() {
+        return estimatedDuration;
+    }
+
+    public void setEstimatedDuration(int estimatedDuration) {
+        this.estimatedDuration = estimatedDuration;
+    }
+
+    public int getAllowedCommands() {
+        return allowedCommands;
+    }
+
+    public void setAllowedCommands(int allowedCommands) {
+        this.allowedCommands = allowedCommands;
+    }
+
+    public int getAllowedWrongAnswers() {
+        return allowedWrongAnswers;
+    }
+
+    public void setAllowedWrongAnswers(int allowedWrongAnswers) {
+        this.allowedWrongAnswers = allowedWrongAnswers;
+    }
+
+    public TaskViewDTO getTask() {
+        return task;
+    }
+
+    public void setTask(TaskViewDTO task) {
+        this.task = task;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        TrainingPhaseViewDTO that = (TrainingPhaseViewDTO) o;
+        return estimatedDuration == that.estimatedDuration &&
+                allowedCommands == that.allowedCommands &&
+                allowedWrongAnswers == that.allowedWrongAnswers;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(estimatedDuration, allowedCommands, allowedWrongAnswers, task);
+    }
+
+    @Override
+    public String toString() {
+        return "TrainingPhaseDTO{" +
+                "estimatedDuration=" + estimatedDuration +
+                ", allowedCommands=" + allowedCommands +
+                ", allowedWrongAnswers=" + allowedWrongAnswers +
+                ", tasks=" + task +
+                "} " + super.toString();
+    }
+}
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/TrainingRunFacade.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/TrainingRunFacade.java
index 03eee74a5cf6a69453389f1cda08392f2094b485..64557d23765db219f377eb3b42132afb10efdc7b 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/TrainingRunFacade.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/TrainingRunFacade.java
@@ -405,30 +405,12 @@ public class TrainingRunFacade {
     }
 
     private AbstractPhaseDTO getCorrectAbstractPhaseDTO(AbstractPhase abstractPhase) {
-        AbstractPhaseDTO abstractPhaseDTO;
         if (abstractPhase instanceof QuestionnairePhase) {
-            QuestionnairePhase questionnairePhase = (QuestionnairePhase) abstractPhase;
-            abstractPhaseDTO = phaseMapper.mapToDTO(questionnairePhase);
-            abstractPhaseDTO.setPhaseType(PhaseType.QUESTIONNAIRE);
-            deleteInfoAboutCorrectnessFromQuestions((QuestionnairePhaseDTO) abstractPhaseDTO);
+            return phaseMapper.mapToQuestionnairePhaseViewDTO((QuestionnairePhase) abstractPhase);
         } else if (abstractPhase instanceof TrainingPhase) {
-            TrainingPhase trainingPhase = (TrainingPhase) abstractPhase;
-            abstractPhaseDTO = phaseMapper.mapToDTO(trainingPhase);
-            //TODO change the DTO with one task and remove the correct answer
-            abstractPhaseDTO.setPhaseType(PhaseType.TRAINING);
+            return phaseMapper.mapToTrainingPhaseViewDTO((TrainingPhase) abstractPhase);
         } else {
-            InfoPhase infoPhase = (InfoPhase) abstractPhase;
-            abstractPhaseDTO = phaseMapper.mapToDTO(infoPhase);
-            abstractPhaseDTO.setPhaseType(PhaseType.INFO);
-        }
-        return abstractPhaseDTO;
-    }
-
-    private void deleteInfoAboutCorrectnessFromQuestions(QuestionnairePhaseDTO questionnairePhaseDTO) {
-        for (QuestionDTO questionDTO : questionnairePhaseDTO.getQuestions()) {
-            for (QuestionChoiceDTO questionChoiceDTO : questionDTO.getChoices()) {
-                questionChoiceDTO.setCorrect(null);
-            }
+            return phaseMapper.mapToDTO((InfoPhase) abstractPhase);
         }
     }
 }
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/PhaseMapper.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/PhaseMapper.java
index a6ba067b6cf6ee076a5e6bb5275ca2588104a6ee..3d5c9fd70f08851924013c10b540031952057dc0 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/PhaseMapper.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/PhaseMapper.java
@@ -20,9 +20,11 @@ import cz.muni.ics.kypo.training.adaptive.dto.imports.phases.training.TrainingPh
 import cz.muni.ics.kypo.training.adaptive.dto.info.InfoPhaseDTO;
 import cz.muni.ics.kypo.training.adaptive.dto.info.InfoPhaseUpdateDTO;
 import cz.muni.ics.kypo.training.adaptive.dto.questionnaire.QuestionnairePhaseDTO;
+import cz.muni.ics.kypo.training.adaptive.dto.questionnaire.view.QuestionnairePhaseViewDTO;
 import cz.muni.ics.kypo.training.adaptive.dto.questionnaire.QuestionnaireUpdateDTO;
 import cz.muni.ics.kypo.training.adaptive.dto.training.TrainingPhaseDTO;
 import cz.muni.ics.kypo.training.adaptive.dto.training.TrainingPhaseUpdateDTO;
+import cz.muni.ics.kypo.training.adaptive.dto.training.view.TrainingPhaseViewDTO;
 import cz.muni.ics.kypo.training.adaptive.exceptions.InternalServerErrorException;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
@@ -70,6 +72,9 @@ public interface PhaseMapper extends ParentMapper {
     @Mapping(target = "phaseType", constant = "QUESTIONNAIRE")
     QuestionnairePhaseDTO mapToQuestionnairePhaseDTO(QuestionnairePhase entity);
 
+    @Mapping(target = "phaseType", constant = "QUESTIONNAIRE")
+    QuestionnairePhaseViewDTO mapToQuestionnairePhaseViewDTO(QuestionnairePhase entity);
+
     @Mapping(target = "phaseRelations", source = "questionPhaseRelations")
     @Mapping(target = "phaseType", constant = "QUESTIONNAIRE")
     QuestionnairePhaseArchiveDTO mapToQuestionnairePhaseArchiveDTO(QuestionnairePhase entity);
@@ -91,6 +96,9 @@ public interface PhaseMapper extends ParentMapper {
     @Mapping(target = "phaseType", constant = "TRAINING")
     TrainingPhaseDTO mapToTrainingPhaseDTO(TrainingPhase entity);
 
+    @Mapping(target = "phaseType", constant = "TRAINING")
+    TrainingPhaseViewDTO mapToTrainingPhaseViewDTO(TrainingPhase entity);
+
     @Mapping(target = "phaseType", constant = "TRAINING")
     TrainingPhaseExportDTO mapToTrainingPhaseExportDTO(TrainingPhase entity);
 
@@ -103,11 +111,11 @@ public interface PhaseMapper extends ParentMapper {
     default AbstractPhaseDTO mapToDTO(AbstractPhase entity) {
         AbstractPhaseDTO abstractPhaseDTO;
         if (entity instanceof TrainingPhase) {
-            abstractPhaseDTO = mapToTrainingPhaseDTO((TrainingPhase) entity);
+            abstractPhaseDTO = mapToTrainingPhaseViewDTO((TrainingPhase) entity);
         } else if (entity instanceof InfoPhase) {
             abstractPhaseDTO = mapToInfoPhaseDTO((InfoPhase) entity);
         } else if (entity instanceof QuestionnairePhase) {
-            abstractPhaseDTO = mapToQuestionnairePhaseDTO((QuestionnairePhase) entity);
+            abstractPhaseDTO = mapToQuestionnairePhaseViewDTO((QuestionnairePhase) entity);
         } else {
             throw new InternalServerErrorException("Phase with id: " + entity.getId() + " in given training definition with id: " + entity.getTrainingDefinition().getId() +
                     " is not instance of questionnaire, training or info phase.");
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/QuestionMapper.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/QuestionMapper.java
index eb6db79a91b3166255b1e1b96d066fd8890f6871..e5a7d4f8f1b7d7c9d778173e98eabdb7bf46c511 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/QuestionMapper.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/QuestionMapper.java
@@ -10,6 +10,8 @@ import cz.muni.ics.kypo.training.adaptive.dto.imports.phases.questionnaire.Quest
 import cz.muni.ics.kypo.training.adaptive.dto.imports.phases.questionnaire.QuestionImportDTO;
 import cz.muni.ics.kypo.training.adaptive.dto.questionnaire.QuestionChoiceDTO;
 import cz.muni.ics.kypo.training.adaptive.dto.questionnaire.QuestionDTO;
+import cz.muni.ics.kypo.training.adaptive.dto.questionnaire.view.QuestionChoiceViewDTO;
+import cz.muni.ics.kypo.training.adaptive.dto.questionnaire.view.QuestionViewDTO;
 import org.mapstruct.Mapper;
 import org.mapstruct.ReportingPolicy;
 
@@ -34,6 +36,8 @@ public interface QuestionMapper extends ParentMapper {
 
     QuestionDTO mapToQuestionDTO(Question entity);
 
+    QuestionViewDTO mapToQuestionViewDTO(Question entity);
+
     List<Question> mapToList(Collection<QuestionDTO> dtos);
 
     List<QuestionDTO> mapToListDTO(Collection<Question> entities);
@@ -53,6 +57,8 @@ public interface QuestionMapper extends ParentMapper {
 
     QuestionChoiceDTO mapToQuestionDTO(QuestionChoice entity);
 
+    QuestionChoiceViewDTO mapToQuestionViewDTO(QuestionChoice entity);
+
     List<QuestionChoice> mapChoicesToList(Collection<QuestionChoiceDTO> dtos);
 
     List<QuestionDTO> mapToChoicesListDTO(Collection<QuestionChoice> entities);
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/TaskMapper.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/TaskMapper.java
index 96aa29d2e153f0faaf3355d65911bda27386cb8b..39ecd1f26bbbcf8a83aac3f9c15da98cb6386cfa 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/TaskMapper.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/mapping/TaskMapper.java
@@ -7,6 +7,7 @@ import cz.muni.ics.kypo.training.adaptive.dto.imports.phases.training.TaskImport
 import cz.muni.ics.kypo.training.adaptive.dto.training.TaskCopyDTO;
 import cz.muni.ics.kypo.training.adaptive.dto.training.TaskDTO;
 import cz.muni.ics.kypo.training.adaptive.dto.training.TaskUpdateDTO;
+import cz.muni.ics.kypo.training.adaptive.dto.training.view.TaskViewDTO;
 import org.mapstruct.Mapper;
 import org.mapstruct.ReportingPolicy;
 
@@ -34,6 +35,8 @@ public interface TaskMapper extends ParentMapper {
 
     TaskDTO mapToTaskDTO(Task entity);
 
+    TaskViewDTO mapToTaskViewDTO(Task entity);
+
     List<Task> mapToList(Collection<TaskDTO> dtos);
 
     List<TaskDTO> mapToListDTO(Collection<Task> entities);
diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java
index 13ffba22d9749b85cc7ac8498b945221a55c6498..fd8908fd2a289e08e90addb305fa80af730f1632 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java
@@ -193,6 +193,7 @@ public class TrainingRunService {
             auditEventsService.auditPhaseCompletedAction(trainingRun);
         }
         if (nextPhase instanceof TrainingPhase) {
+            //TODO call the smart assistant
             trainingRun.setCurrentTask(((TrainingPhase) nextPhase).getTasks().get(0));
         } else {
             trainingRun.setCurrentTask(null);
@@ -251,6 +252,7 @@ public class TrainingRunService {
         AbstractPhase initialPhase = findFirstPhaseForTrainingRun(trainingInstance.getTrainingDefinition().getId());
         TrainingRun trainingRun = getNewTrainingRun(initialPhase, trainingInstance, LocalDateTime.now(Clock.systemUTC()), trainingInstance.getEndTime(), participantRefId);
         if (initialPhase instanceof TrainingPhase) {
+            //TODO call smart assistant
             trainingRun.setCurrentTask(((TrainingPhase) initialPhase).getTasks().get(0));
         }
         return trainingRunRepository.save(trainingRun);
@@ -499,18 +501,4 @@ public class TrainingRunService {
         trAcquisitionLockRepository.deleteByParticipantRefIdAndTrainingInstanceId(trainingRun.getParticipantRef().getUserRefId(), trainingRun.getTrainingInstance().getId());
         trainingRunRepository.save(trainingRun);
     }
-
-
-    public void evaluateResponsesToQuestionnaire(Long trainingRunId, String responsesAsString) {
-        TrainingRun trainingRun = findByIdWithPhase(trainingRunId);
-        if (!(trainingRun.getCurrentPhase() instanceof QuestionnairePhase)) {
-            throw new BadRequestException("Current phase is not questionnaire phase and cannot be evaluated.");
-        }
-        if (trainingRun.isPhaseAnswered())
-            throw new EntityConflictException(new EntityErrorDetail(TrainingRun.class, "id", trainingRunId.getClass(), trainingRunId,
-                    "Current phase of the training run has been already answered."));
-        //TODO complete the evaluation
-        auditEventsService.auditQuestionnaireAnswersAction(trainingRun, responsesAsString);
-        auditEventsService.auditPhaseCompletedAction(trainingRun);
-    }
 }