diff --git a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java
index 18fbee388fb647228d5e197510379b58a5bdb09b..3ba8c1b8161b4b78ccbd01ca66d2f2838a1c7ca8 100644
--- a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java
+++ b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java
@@ -5,6 +5,7 @@ import com.example.demo.dto.PhaseLevelUpdateDto;
 import com.example.demo.dto.QuestionChoiceDto;
 import com.example.demo.dto.QuestionChoiceUpdateDto;
 import com.example.demo.dto.QuestionDto;
+import com.example.demo.dto.QuestionUpdateDto;
 import com.example.demo.dto.TaskUpdateDto;
 import com.example.demo.dto.InfoLevelUpdateDto;
 import com.example.demo.enums.LevelType;
@@ -214,6 +215,22 @@ public class AdaptiveTrainingDefinitionsRestController {
         return levelOperationsService.createQuestionChoice(questionId);
     }
 
+    @ApiOperation(httpMethod = "PUT",
+            value = "Update question",
+            nickname = "updateQuestion",
+            consumes = MediaType.APPLICATION_JSON_VALUE
+    )
+    @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Question updated"),
+            @ApiResponse(code = 500, message = "Unexpected application error")
+    })
+    @PutMapping(path = "/questions")
+    public void updateQuestion(
+            @ApiParam(value = "Question to be updated") @RequestBody QuestionUpdateDto questionUpdateDto) {
+
+        levelOperationsService.updateQuestion(questionUpdateDto);
+    }
+
     @ApiOperation(httpMethod = "PUT",
             value = "Update question choice",
             nickname = "updateQuestionChoice",
diff --git a/src/main/java/com/example/demo/dto/QuestionUpdateDto.java b/src/main/java/com/example/demo/dto/QuestionUpdateDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..c81e9fd34bec22ae003024948f8d85df396dcb32
--- /dev/null
+++ b/src/main/java/com/example/demo/dto/QuestionUpdateDto.java
@@ -0,0 +1,73 @@
+package com.example.demo.dto;
+
+import com.example.demo.enums.QuestionType;
+
+public class QuestionUpdateDto {
+
+    private Long id;
+    private QuestionType questionType;
+    private String text;
+    private Integer points;
+    private Integer penalty;
+    private boolean required;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public QuestionType getQuestionType() {
+        return questionType;
+    }
+
+    public void setQuestionType(QuestionType questionType) {
+        this.questionType = questionType;
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    public Integer getPoints() {
+        return points;
+    }
+
+    public void setPoints(Integer points) {
+        this.points = points;
+    }
+
+    public Integer getPenalty() {
+        return penalty;
+    }
+
+    public void setPenalty(Integer penalty) {
+        this.penalty = penalty;
+    }
+
+    public boolean isRequired() {
+        return required;
+    }
+
+    public void setRequired(boolean required) {
+        this.required = required;
+    }
+
+    @Override
+    public String toString() {
+        return "QuestionUpdateDto{" +
+                "id=" + id +
+                ", questionType=" + questionType +
+                ", text='" + text + '\'' +
+                ", points=" + points +
+                ", penalty=" + penalty +
+                ", required=" + required +
+                '}';
+    }
+}
diff --git a/src/main/java/com/example/demo/mapper/BeanMapper.java b/src/main/java/com/example/demo/mapper/BeanMapper.java
index 62249a1ca1d2696287cac49c914fd096f68d148a..1dd4aae9501f304b82f10dc027d92bc25ab8e845 100644
--- a/src/main/java/com/example/demo/mapper/BeanMapper.java
+++ b/src/main/java/com/example/demo/mapper/BeanMapper.java
@@ -22,6 +22,7 @@ import com.example.demo.dto.PhaseLevelUpdateDto;
 import com.example.demo.dto.QuestionChoiceDto;
 import com.example.demo.dto.QuestionChoiceUpdateDto;
 import com.example.demo.dto.QuestionDto;
+import com.example.demo.dto.QuestionUpdateDto;
 import com.example.demo.dto.QuestionnaireLevelDto;
 import com.example.demo.dto.TaskCreateDto;
 import com.example.demo.dto.TaskDto;
@@ -135,6 +136,8 @@ public interface BeanMapper {
 
     Question toEntity(QuestionDto questionDto);
 
+    Question toEntity(QuestionUpdateDto questionUpdateDto);
+
     QuestionDto toDto(Question question);
 
     QuestionnaireLevel toEntity(QuestionnaireLevelDto questionnaireLevelDto);
diff --git a/src/main/java/com/example/demo/service/LevelOperationsService.java b/src/main/java/com/example/demo/service/LevelOperationsService.java
index c92f4f1e2a4247fc6d56d9f4350f14f6798a2cad..f533d9987c073e2b1ae4b087e285eb93c81efbc4 100644
--- a/src/main/java/com/example/demo/service/LevelOperationsService.java
+++ b/src/main/java/com/example/demo/service/LevelOperationsService.java
@@ -2,6 +2,7 @@ package com.example.demo.service;
 
 import com.example.demo.domain.BaseLevel;
 import com.example.demo.domain.PhaseLevel;
+import com.example.demo.domain.Question;
 import com.example.demo.domain.QuestionChoice;
 import com.example.demo.domain.Task;
 import com.example.demo.domain.InfoLevel;
@@ -10,6 +11,7 @@ import com.example.demo.dto.PhaseLevelUpdateDto;
 import com.example.demo.dto.QuestionChoiceDto;
 import com.example.demo.dto.QuestionChoiceUpdateDto;
 import com.example.demo.dto.QuestionDto;
+import com.example.demo.dto.QuestionUpdateDto;
 import com.example.demo.dto.TaskDto;
 import com.example.demo.dto.TaskUpdateDto;
 import com.example.demo.dto.InfoLevelUpdateDto;
@@ -154,6 +156,11 @@ public class LevelOperationsService {
         return createdQuestionChoice;
     }
 
+    public void updateQuestion(QuestionUpdateDto questionUpdateDto) {
+        Question question = BeanMapper.INSTANCE.toEntity(questionUpdateDto);
+        questionService.updateQuestion(question);
+    }
+
     public void updateQuestionChoice(QuestionChoiceUpdateDto questionChoiceUpdateDto) {
         QuestionChoice questionChoice = BeanMapper.INSTANCE.toEntity(questionChoiceUpdateDto);
         questionChoiceService.updateQuestionChoice(questionChoice);
diff --git a/src/main/java/com/example/demo/service/QuestionChoiceService.java b/src/main/java/com/example/demo/service/QuestionChoiceService.java
index c97e4b08c21a35cbcedc4d593f8d267da912abfe..c55dbbdd6cbfe15d23c8bc83e3df1db1f601bfe2 100644
--- a/src/main/java/com/example/demo/service/QuestionChoiceService.java
+++ b/src/main/java/com/example/demo/service/QuestionChoiceService.java
@@ -2,11 +2,7 @@ package com.example.demo.service;
 
 import com.example.demo.domain.Question;
 import com.example.demo.domain.QuestionChoice;
-import com.example.demo.domain.QuestionnaireLevel;
-import com.example.demo.domain.Task;
 import com.example.demo.dto.QuestionChoiceDto;
-import com.example.demo.dto.QuestionDto;
-import com.example.demo.dto.TaskDto;
 import com.example.demo.mapper.BeanMapper;
 import com.example.demo.repository.QuestionChoiceRepository;
 import com.example.demo.repository.QuestionRepository;
@@ -20,7 +16,7 @@ import java.util.Optional;
 @Service
 public class QuestionChoiceService {
 
-    private static final Logger LOG = LoggerFactory.getLogger(TaskService.class);
+    private static final Logger LOG = LoggerFactory.getLogger(QuestionChoiceService.class);
 
     @Autowired
     private QuestionRepository questionRepository;
diff --git a/src/main/java/com/example/demo/service/QuestionService.java b/src/main/java/com/example/demo/service/QuestionService.java
index 443a8caeea1ae5f595bec163e18d9434f849c448..a43bbc9c47b45ea2f024782538affcf8f628fe34 100644
--- a/src/main/java/com/example/demo/service/QuestionService.java
+++ b/src/main/java/com/example/demo/service/QuestionService.java
@@ -7,6 +7,8 @@ import com.example.demo.enums.QuestionType;
 import com.example.demo.mapper.BeanMapper;
 import com.example.demo.repository.QuestionRepository;
 import com.example.demo.repository.QuestionnaireLevelRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -15,6 +17,8 @@ import java.util.Optional;
 @Service
 public class QuestionService {
 
+    private static final Logger LOG = LoggerFactory.getLogger(QuestionService.class);
+
     @Autowired
     private QuestionnaireLevelRepository questionnaireLevelRepository;
 
@@ -38,4 +42,23 @@ public class QuestionService {
 
         return BeanMapper.INSTANCE.toDto(persistedEntity);
     }
+
+    public QuestionDto updateQuestion(Question question) {
+        Optional<Question> persistedQuestion = questionRepository.findById(question.getId());
+
+        if (persistedQuestion.isEmpty()) {
+            // TODO return 404
+            LOG.error("No question found with ID {}.", question.getId());
+            return new QuestionDto();
+        }
+
+        question.setChoices(persistedQuestion.get().getChoices());
+        question.setQuestionnaireLevel(persistedQuestion.get().getQuestionnaireLevel());
+        question.setOrder(persistedQuestion.get().getOrder());
+
+        Question savedEntity = questionRepository.save(question);
+
+        return BeanMapper.INSTANCE.toDto(savedEntity);
+    }
+
 }