diff --git a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java
index 89c52308087b2f1b909b08b817e25440f09bd8c3..36106eda6e7728c0adbf8331b0a709b706b393bc 100644
--- a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java
+++ b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java
@@ -250,6 +250,21 @@ public class AdaptiveTrainingDefinitionsRestController {
         levelOperationsService.updateQuestion(questionUpdateDto);
     }
 
+    @ApiOperation(httpMethod = "DELETE",
+            value = "Delete a specified question",
+            nickname = "deleteQuestion",
+            produces = MediaType.APPLICATION_JSON_VALUE
+    )
+    @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Question deleted"),
+            @ApiResponse(code = 500, message = "Unexpected application error")
+    })
+    @DeleteMapping(value = "/questions/{questionId}", produces = MediaType.APPLICATION_JSON_VALUE)
+    public void deleteQuestion(
+            @ApiParam(value = "Question ID", required = true) @PathVariable(name = "questionId") Long questionId) {
+        levelOperationsService.deleteQuestion(questionId);
+    }
+
     @ApiOperation(httpMethod = "PUT",
             value = "Update question choice",
             nickname = "updateQuestionChoice",
diff --git a/src/main/java/com/example/demo/repository/QuestionRepository.java b/src/main/java/com/example/demo/repository/QuestionRepository.java
index 9fb220afd1f217ee0552ef6865e3cd05b5c1f0ab..3d9e41c4032153fa4cfacd089c241a2f1b2fd148 100644
--- a/src/main/java/com/example/demo/repository/QuestionRepository.java
+++ b/src/main/java/com/example/demo/repository/QuestionRepository.java
@@ -2,6 +2,7 @@ package com.example.demo.repository;
 
 import com.example.demo.domain.Question;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 
@@ -9,4 +10,10 @@ public interface QuestionRepository extends JpaRepository<Question, Long> {
 
     @Query("SELECT COALESCE(MAX(q.order), -1) FROM Question q WHERE q.questionnaireLevel.id = :questionnaireId")
     Integer getCurrentMaxOrder(@Param("questionnaireId") Long questionnaireId);
+
+    @Modifying
+    @Query("UPDATE Question q SET q.order = q.order - 1 " +
+            "WHERE q.questionnaireLevel.id  = :questionnaireLevelId " +
+            "AND q.order > :order ")
+    void decreaseOrderAfterQuestionWasDeleted(@Param("order") int order, @Param("questionnaireLevelId") Long questionnaireLevelId);
 }
diff --git a/src/main/java/com/example/demo/service/LevelOperationsService.java b/src/main/java/com/example/demo/service/LevelOperationsService.java
index 64b3497b5c458910f7b8bf6557bf0b4000c04fbe..135b035b5bbd89c1bb4de317e75f720386c15ccc 100644
--- a/src/main/java/com/example/demo/service/LevelOperationsService.java
+++ b/src/main/java/com/example/demo/service/LevelOperationsService.java
@@ -97,6 +97,11 @@ public class LevelOperationsService {
         baseLevelRepository.delete(levelEntity.get());
     }
 
+    @Transactional
+    public void deleteQuestion(Long questionId) {
+        questionService.deleteQuestion(questionId);
+    }
+
     @Transactional
     public void deleteQuestionChoice(Long questionChoiceId) {
         questionChoiceService.deleteQuestionChoice(questionChoiceId);
diff --git a/src/main/java/com/example/demo/service/QuestionService.java b/src/main/java/com/example/demo/service/QuestionService.java
index 1c60d5866dfed60f6a985a9050bf8756bdfcfe22..dc9b163c4da31cb19b4235eb3766360229b2649f 100644
--- a/src/main/java/com/example/demo/service/QuestionService.java
+++ b/src/main/java/com/example/demo/service/QuestionService.java
@@ -1,6 +1,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.dto.QuestionDto;
 import com.example.demo.enums.QuestionType;
@@ -61,4 +62,17 @@ public class QuestionService {
         return BeanMapper.INSTANCE.toDto(savedEntity);
     }
 
+    public void deleteQuestion(Long questionId) {
+        Optional<Question> question = questionRepository.findById(questionId);
+
+        if (question.isEmpty()) {
+            // TODO throw a proper exception
+            return;
+        }
+
+        int questionOrder = question.get().getOrder();
+        questionRepository.decreaseOrderAfterQuestionWasDeleted(questionOrder, question.get().getQuestionnaireLevel().getId());
+
+        questionRepository.delete(question.get());
+    }
 }