diff --git a/src/main/java/com/example/demo/controller/PhasesController.java b/src/main/java/com/example/demo/controller/PhasesController.java
index 20f3370a8fb1c0464d0d3729ceb2b09f8b3a252d..ace60628f84ec2583d7f4e58798d781b9f7e924c 100644
--- a/src/main/java/com/example/demo/controller/PhasesController.java
+++ b/src/main/java/com/example/demo/controller/PhasesController.java
@@ -1,6 +1,6 @@
 package com.example.demo.controller;
 
-import com.example.demo.dto.BaseLevelDto;
+import com.example.demo.dto.AbstractPhaseDto;
 import com.example.demo.dto.InfoPhaseDto;
 import com.example.demo.dto.InfoPhaseUpdateDto;
 import com.example.demo.dto.PhaseCreateDTO;
@@ -49,7 +49,7 @@ public class PhasesController {
     @ApiOperation(httpMethod = "POST",
             value = "Create a new phase",
             notes = "Creates a new default phase with a specified type",
-            response = BaseLevelDto.class,
+            response = AbstractPhaseDto.class,
             nickname = "createPhase",
             produces = MediaType.APPLICATION_JSON_VALUE
     )
@@ -58,13 +58,13 @@ public class PhasesController {
             @ApiResponse(code = 500, message = "Unexpected application error")
     })
     @PostMapping
-    public ResponseEntity<BaseLevelDto> createPhase(
+    public ResponseEntity<AbstractPhaseDto> createPhase(
             @ApiParam(value = "Training definition ID", required = true)
             @PathVariable(name = "definitionId") Long definitionId,
             @ApiParam(value = "Level type", allowableValues = "questionnaire, info, game", required = true)
             @RequestBody @Valid PhaseCreateDTO phaseCreateDTO) {
 
-        BaseLevelDto createdPhase = trainingPhaseFacade.createPhase(definitionId, phaseCreateDTO);
+        AbstractPhaseDto createdPhase = trainingPhaseFacade.createPhase(definitionId, phaseCreateDTO);
 
         return new ResponseEntity<>(createdPhase, HttpStatus.CREATED);
     }
@@ -81,18 +81,18 @@ public class PhasesController {
             @ApiResponse(code = 500, message = "Unexpected application error")
     })
     @GetMapping
-    public ResponseEntity<List<BaseLevelDto>> getPhases(
+    public ResponseEntity<List<AbstractPhaseDto>> getPhases(
             @ApiParam(value = "Training definition ID", required = true)
             @PathVariable(name = "definitionId") Long definitionId) {
 
-        List<BaseLevelDto> phases = trainingPhaseFacade.getPhases(definitionId);
+        List<AbstractPhaseDto> phases = trainingPhaseFacade.getPhases(definitionId);
 
         return new ResponseEntity<>(phases, HttpStatus.OK);
     }
 
     @ApiOperation(httpMethod = "GET",
             value = "Get phase by ID",
-            response = BaseLevelDto.class,
+            response = AbstractPhaseDto.class,
             nickname = "getPhase",
             produces = MediaType.APPLICATION_JSON_VALUE
     )
@@ -101,20 +101,20 @@ public class PhasesController {
             @ApiResponse(code = 500, message = "Unexpected application error")
     })
     @GetMapping(path = "/{phaseId}")
-    public ResponseEntity<BaseLevelDto> getPhase(
+    public ResponseEntity<AbstractPhaseDto> getPhase(
             @ApiParam(value = "Training definition ID", required = true)
             @PathVariable(name = "definitionId") Long definitionId,
             @ApiParam(value = "Level ID", required = true)
             @PathVariable("phaseId") Long phaseId) {
 
-        BaseLevelDto phase = trainingPhaseFacade.getPhase(definitionId, phaseId);
+        AbstractPhaseDto phase = trainingPhaseFacade.getPhase(definitionId, phaseId);
 
         return new ResponseEntity<>(phase, HttpStatus.OK);
     }
 
     @ApiOperation(httpMethod = "DELETE",
             value = "Remove phase by ID",
-            response = BaseLevelDto.class,
+            response = AbstractPhaseDto.class,
             nickname = "getPhase",
             produces = MediaType.APPLICATION_JSON_VALUE
     )
@@ -123,13 +123,13 @@ public class PhasesController {
             @ApiResponse(code = 500, message = "Unexpected application error")
     })
     @DeleteMapping(path = "/{phaseId}")
-    public ResponseEntity<List<BaseLevelDto>> removePhase(
+    public ResponseEntity<List<AbstractPhaseDto>> removePhase(
             @ApiParam(value = "Training definition ID", required = true)
             @PathVariable(name = "definitionId") Long definitionId,
             @ApiParam(value = "Level ID", required = true)
             @PathVariable("phaseId") Long phaseId) {
 
-        List<BaseLevelDto> remainingPhases = trainingPhaseFacade.deletePhase(definitionId, phaseId);
+        List<AbstractPhaseDto> remainingPhases = trainingPhaseFacade.deletePhase(definitionId, phaseId);
 
         return new ResponseEntity<>(remainingPhases, HttpStatus.OK);
     }
diff --git a/src/main/java/com/example/demo/domain/BaseLevel.java b/src/main/java/com/example/demo/domain/AbstractPhase.java
similarity index 97%
rename from src/main/java/com/example/demo/domain/BaseLevel.java
rename to src/main/java/com/example/demo/domain/AbstractPhase.java
index 58119c0a0f882c6c828478cef67eddfc6a08b385..ec049c570f27312124937185e073a85bd81ae0a7 100644
--- a/src/main/java/com/example/demo/domain/BaseLevel.java
+++ b/src/main/java/com/example/demo/domain/AbstractPhase.java
@@ -15,7 +15,7 @@ import javax.persistence.ManyToOne;
 
 @Entity
 @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
-public abstract class BaseLevel {
+public abstract class AbstractPhase {
 
     @Id
     @GeneratedValue
@@ -109,7 +109,7 @@ public abstract class BaseLevel {
 
     @Override
     public String toString() {
-        return "BaseLevel{" +
+        return "AbstractPhase{" +
                 "id=" + id +
                 ", title='" + title + '\'' +
                 ", estimatedDuration='" + estimatedDuration + '\'' +
diff --git a/src/main/java/com/example/demo/domain/InfoPhase.java b/src/main/java/com/example/demo/domain/InfoPhase.java
index 9e64966283d4ed1a334fcfd98c1b17bc636527a3..82b0a8f7bd8aebaa82ac2304d7f8457dd7ba3357 100644
--- a/src/main/java/com/example/demo/domain/InfoPhase.java
+++ b/src/main/java/com/example/demo/domain/InfoPhase.java
@@ -3,7 +3,7 @@ package com.example.demo.domain;
 import javax.persistence.Entity;
 
 @Entity
-public class InfoPhase extends BaseLevel {
+public class InfoPhase extends AbstractPhase {
 
     private String content;
 
diff --git a/src/main/java/com/example/demo/domain/QuestionnaireLevel.java b/src/main/java/com/example/demo/domain/QuestionnaireLevel.java
index f46a78cc5da880a689b8135005e2f8f69c61bb71..939a4ca614c6d0e9bb8a03b4c58c907f8590ba0f 100644
--- a/src/main/java/com/example/demo/domain/QuestionnaireLevel.java
+++ b/src/main/java/com/example/demo/domain/QuestionnaireLevel.java
@@ -12,7 +12,7 @@ import javax.persistence.OrderBy;
 import java.util.List;
 
 @Entity
-public class QuestionnaireLevel extends BaseLevel {
+public class QuestionnaireLevel extends AbstractPhase {
 
     @Enumerated(EnumType.STRING)
     private QuestionnaireType questionnaireType;
diff --git a/src/main/java/com/example/demo/domain/Task.java b/src/main/java/com/example/demo/domain/Task.java
index 2a28026aab2fe4c3c3b25d35181e2b409493bb49..e938af9cc5ee7a597ce4efc38b3e7f9a1fdb809f 100644
--- a/src/main/java/com/example/demo/domain/Task.java
+++ b/src/main/java/com/example/demo/domain/Task.java
@@ -1,16 +1,12 @@
 package com.example.demo.domain;
 
-import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
 import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-import javax.persistence.OrderBy;
-import java.util.List;
 
 
 @Entity
-public class Task extends BaseLevel {
+public class Task extends AbstractPhase {
 
     private String content;
     private String flag;
diff --git a/src/main/java/com/example/demo/domain/TrainingPhase.java b/src/main/java/com/example/demo/domain/TrainingPhase.java
index f2b223e6604a1fdb4d954a5e656a3dabb3055e81..ea6200a08ac239305fd6f4a142be6003e3d21a66 100644
--- a/src/main/java/com/example/demo/domain/TrainingPhase.java
+++ b/src/main/java/com/example/demo/domain/TrainingPhase.java
@@ -8,7 +8,7 @@ import javax.persistence.OrderBy;
 import java.util.List;
 
 @Entity
-public class TrainingPhase extends BaseLevel {
+public class TrainingPhase extends AbstractPhase {
 
     @OrderBy
     @OneToMany(mappedBy = "trainingPhase", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
diff --git a/src/main/java/com/example/demo/dto/BaseLevelDto.java b/src/main/java/com/example/demo/dto/AbstractPhaseDto.java
similarity index 95%
rename from src/main/java/com/example/demo/dto/BaseLevelDto.java
rename to src/main/java/com/example/demo/dto/AbstractPhaseDto.java
index 56d3fe9cc156248a0d2bc3dc61d687fee15c29fc..27a35a80abab890f6af7d162fc6fda5109ef3802 100644
--- a/src/main/java/com/example/demo/dto/BaseLevelDto.java
+++ b/src/main/java/com/example/demo/dto/AbstractPhaseDto.java
@@ -4,7 +4,7 @@ import com.example.demo.enums.PhaseType;
 
 import java.io.Serializable;
 
-public abstract class BaseLevelDto implements Serializable {
+public abstract class AbstractPhaseDto implements Serializable {
 
     private Long id;
     private String title;
@@ -81,7 +81,7 @@ public abstract class BaseLevelDto implements Serializable {
 
     @Override
     public String toString() {
-        return "BaseLevelDto{" +
+        return "AbstractPhaseDto{" +
                 "id=" + id +
                 ", title='" + title + '\'' +
                 ", order=" + order +
diff --git a/src/main/java/com/example/demo/dto/InfoPhaseDto.java b/src/main/java/com/example/demo/dto/InfoPhaseDto.java
index 2869723b68f3ee04aa6a53a56393284b1e35ca33..e7f8ceb15dc93fe4f79e7653a133056f993a11aa 100644
--- a/src/main/java/com/example/demo/dto/InfoPhaseDto.java
+++ b/src/main/java/com/example/demo/dto/InfoPhaseDto.java
@@ -2,7 +2,7 @@ package com.example.demo.dto;
 
 import java.io.Serializable;
 
-public class InfoPhaseDto extends BaseLevelDto implements Serializable {
+public class InfoPhaseDto extends AbstractPhaseDto implements Serializable {
 
     private String content;
 
diff --git a/src/main/java/com/example/demo/dto/QuestionnaireLevelDto.java b/src/main/java/com/example/demo/dto/QuestionnaireLevelDto.java
index bec77996a766b2efd9c979d828029ff8a2a739ae..64da5cbfbf679b6627207c2e0c1aa8d513398dac 100644
--- a/src/main/java/com/example/demo/dto/QuestionnaireLevelDto.java
+++ b/src/main/java/com/example/demo/dto/QuestionnaireLevelDto.java
@@ -2,7 +2,7 @@ package com.example.demo.dto;
 
 import java.util.List;
 
-public class QuestionnaireLevelDto extends BaseLevelDto {
+public class QuestionnaireLevelDto extends AbstractPhaseDto {
 
     private List<QuestionDto> questions;
 
diff --git a/src/main/java/com/example/demo/dto/TaskDto.java b/src/main/java/com/example/demo/dto/TaskDto.java
index d730c427ddf072cecbd604efe0e1919486fdef75..d346aae01b540fafb2a7bb2ca63a66554f11d44c 100644
--- a/src/main/java/com/example/demo/dto/TaskDto.java
+++ b/src/main/java/com/example/demo/dto/TaskDto.java
@@ -1,9 +1,8 @@
 package com.example.demo.dto;
 
 import java.io.Serializable;
-import java.util.List;
 
-public class TaskDto extends BaseLevelDto implements Serializable {
+public class TaskDto extends AbstractPhaseDto implements Serializable {
 
     private String content;
     private String flag;
diff --git a/src/main/java/com/example/demo/dto/TrainingPhaseDto.java b/src/main/java/com/example/demo/dto/TrainingPhaseDto.java
index 9753e3f49f7399225901ee246ae6182de0b5b7d1..68dd62c1b87df592a10821acfa8ba44529fa6ef9 100644
--- a/src/main/java/com/example/demo/dto/TrainingPhaseDto.java
+++ b/src/main/java/com/example/demo/dto/TrainingPhaseDto.java
@@ -2,7 +2,7 @@ package com.example.demo.dto;
 
 import java.util.List;
 
-public class TrainingPhaseDto extends BaseLevelDto {
+public class TrainingPhaseDto extends AbstractPhaseDto {
 
     private List<TaskDto> tasks;
 
diff --git a/src/main/java/com/example/demo/facade/TrainingPhaseFacade.java b/src/main/java/com/example/demo/facade/TrainingPhaseFacade.java
index a2ca2b853d202859105463944fbfec5ff200e970..d080d585489e6daa0389002b7fdfff43deb099bc 100644
--- a/src/main/java/com/example/demo/facade/TrainingPhaseFacade.java
+++ b/src/main/java/com/example/demo/facade/TrainingPhaseFacade.java
@@ -1,6 +1,6 @@
 package com.example.demo.facade;
 
-import com.example.demo.dto.BaseLevelDto;
+import com.example.demo.dto.AbstractPhaseDto;
 import com.example.demo.dto.InfoPhaseDto;
 import com.example.demo.dto.InfoPhaseUpdateDto;
 import com.example.demo.dto.PhaseCreateDTO;
@@ -34,35 +34,35 @@ public class TrainingPhaseFacade {
     @Autowired
     private TrainingPhaseService trainingPhaseService;
 
-    public BaseLevelDto createPhase(Long trainingDefinitionId, PhaseCreateDTO phaseCreateDTO) {
-        BaseLevelDto baseLevelDto;
+    public AbstractPhaseDto createPhase(Long trainingDefinitionId, PhaseCreateDTO phaseCreateDTO) {
+        AbstractPhaseDto abstractPhaseDto;
         if (PhaseType.INFO.equals(phaseCreateDTO.getPhaseType())) {
-            baseLevelDto = infoPhaseService.createDefaultInfoPhase(trainingDefinitionId);
+            abstractPhaseDto = infoPhaseService.createDefaultInfoPhase(trainingDefinitionId);
         } else if (PhaseType.QUESTIONNAIRE.equals(phaseCreateDTO.getPhaseType())) {
-            baseLevelDto = questionnaireLevelService.createDefaultQuestionnaireLevel(trainingDefinitionId);
+            abstractPhaseDto = questionnaireLevelService.createDefaultQuestionnaireLevel(trainingDefinitionId);
         } else {
-            baseLevelDto = trainingPhaseService.createDefaultTrainingPhase(trainingDefinitionId);
+            abstractPhaseDto = trainingPhaseService.createDefaultTrainingPhase(trainingDefinitionId);
         }
 
-        baseLevelDto.setPhaseType(phaseCreateDTO.getPhaseType());
+        abstractPhaseDto.setPhaseType(phaseCreateDTO.getPhaseType());
 
-        return baseLevelDto;
+        return abstractPhaseDto;
     }
 
 
     @Transactional
-    public List<BaseLevelDto> deletePhase(Long definitionId, Long phaseId) {
+    public List<AbstractPhaseDto> deletePhase(Long definitionId, Long phaseId) {
 
         phaseService.deletePhase(definitionId, phaseId);
 
         return getPhases(definitionId);
     }
 
-    public BaseLevelDto getPhase(Long definitionId, Long phaseId) {
+    public AbstractPhaseDto getPhase(Long definitionId, Long phaseId) {
         return phaseService.getPhase(definitionId, phaseId);
     }
 
-    public List<BaseLevelDto> getPhases(Long definitionId) {
+    public List<AbstractPhaseDto> getPhases(Long definitionId) {
 
         return phaseService.getPhases(definitionId);
     }
diff --git a/src/main/java/com/example/demo/mapper/BeanMapper.java b/src/main/java/com/example/demo/mapper/BeanMapper.java
index 7cfc42c4171b6eb3972ae4567943a67a6722bf1c..41e6bcb9d73dd5cf65488ffdb3a25ea3ca3d4f95 100644
--- a/src/main/java/com/example/demo/mapper/BeanMapper.java
+++ b/src/main/java/com/example/demo/mapper/BeanMapper.java
@@ -1,7 +1,7 @@
 package com.example.demo.mapper;
 
+import com.example.demo.domain.AbstractPhase;
 import com.example.demo.domain.Attachment;
-import com.example.demo.domain.BaseLevel;
 import com.example.demo.domain.DecisionMatrixRow;
 import com.example.demo.domain.InfoPhase;
 import com.example.demo.domain.TrainingPhase;
@@ -9,8 +9,8 @@ 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.AbstractPhaseDto;
 import com.example.demo.dto.AttachmentDto;
-import com.example.demo.dto.BaseLevelDto;
 import com.example.demo.dto.DecisionMatrixRowDto;
 import com.example.demo.dto.InfoPhaseDto;
 import com.example.demo.dto.InfoPhaseUpdateDto;
@@ -38,24 +38,24 @@ public interface BeanMapper {
 
     BeanMapper INSTANCE = Mappers.getMapper(BeanMapper.class);
 
-    default BaseLevelDto toDto(BaseLevel baseLevel) {
-        BaseLevelDto baseLevelDto;
-        if (baseLevel instanceof TrainingPhase) {
-            baseLevelDto = toDto((TrainingPhase) baseLevel);
-        } else if (baseLevel instanceof InfoPhase) {
-            baseLevelDto = toDto((InfoPhase) baseLevel);
-        } else if (baseLevel instanceof Task) {
-            baseLevelDto = toDto((Task) baseLevel);
-        } else if (baseLevel instanceof QuestionnaireLevel) {
-            baseLevelDto = toDto((QuestionnaireLevel) baseLevel);
+    default AbstractPhaseDto toDto(AbstractPhase abstractPhase) {
+        AbstractPhaseDto abstractPhaseDto;
+        if (abstractPhase instanceof TrainingPhase) {
+            abstractPhaseDto = toDto((TrainingPhase) abstractPhase);
+        } else if (abstractPhase instanceof InfoPhase) {
+            abstractPhaseDto = toDto((InfoPhase) abstractPhase);
+        } else if (abstractPhase instanceof Task) {
+            abstractPhaseDto = toDto((Task) abstractPhase);
+        } else if (abstractPhase instanceof QuestionnaireLevel) {
+            abstractPhaseDto = toDto((QuestionnaireLevel) abstractPhase);
         } else {
-            throw new RuntimeException("Unknown level type " + baseLevel.getClass().getName());
+            throw new RuntimeException("Unknown level type " + abstractPhase.getClass().getName());
         }
 
-        return baseLevelDto;
+        return abstractPhaseDto;
     }
 
-    List<BaseLevelDto> toDtoList(List<BaseLevel> baseLevel);
+    List<AbstractPhaseDto> toDtoList(List<AbstractPhase> abstractPhase);
 
     @Mapping(target = "phaseType", constant = "task")
     TaskDto toDto(Task task);
diff --git a/src/main/java/com/example/demo/repository/BaseLevelRepository.java b/src/main/java/com/example/demo/repository/AbstractPhaseRepository.java
similarity index 73%
rename from src/main/java/com/example/demo/repository/BaseLevelRepository.java
rename to src/main/java/com/example/demo/repository/AbstractPhaseRepository.java
index fbb6ef7661f63cba2d65313e09e0fdde5ee8fc7f..1b8c6a039ee092ae22c138fa13196c3d91a32114 100644
--- a/src/main/java/com/example/demo/repository/BaseLevelRepository.java
+++ b/src/main/java/com/example/demo/repository/AbstractPhaseRepository.java
@@ -1,6 +1,6 @@
 package com.example.demo.repository;
 
-import com.example.demo.domain.BaseLevel;
+import com.example.demo.domain.AbstractPhase;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
@@ -8,22 +8,22 @@ import org.springframework.data.repository.query.Param;
 
 import java.util.List;
 
-public interface BaseLevelRepository extends JpaRepository<BaseLevel, Long> {
+public interface AbstractPhaseRepository extends JpaRepository<AbstractPhase, Long> {
 
-    List<BaseLevel> findAllByTrainingDefinitionIdOrderByOrder(long trainingDefinitionId);
+    List<AbstractPhase> findAllByTrainingDefinitionIdOrderByOrder(long trainingDefinitionId);
 
-    @Query("SELECT COALESCE(MAX(l.order), -1) FROM BaseLevel l WHERE l.trainingDefinitionId = :trainingDefinitionId")
+    @Query("SELECT COALESCE(MAX(l.order), -1) FROM AbstractPhase l WHERE l.trainingDefinitionId = :trainingDefinitionId")
     Integer getCurrentMaxOrder(@Param("trainingDefinitionId") Long trainingDefinitionId);
 
     @Modifying
-    @Query("UPDATE BaseLevel l SET l.order = l.order - 1 " +
+    @Query("UPDATE AbstractPhase l SET l.order = l.order - 1 " +
             "WHERE l.trainingDefinitionId = :trainingDefinitionId " +
             "AND l.order > :order ")
     void decreaseOrderAfterLevelWasDeleted(@Param("trainingDefinitionId") Long trainingDefinitionId,
                                            @Param("order") int order);
 
     @Modifying
-    @Query("UPDATE BaseLevel l SET l.order = l.order + 1 " +
+    @Query("UPDATE AbstractPhase l SET l.order = l.order + 1 " +
             "WHERE l.trainingDefinitionId = :trainingDefinitionId " +
             "AND l.order >= :lowerBound " +
             "AND l.order < :upperBound ")
@@ -32,7 +32,7 @@ public interface BaseLevelRepository extends JpaRepository<BaseLevel, Long> {
                                          @Param("upperBound") int upperBound);
 
     @Modifying
-    @Query("UPDATE BaseLevel l SET l.order = l.order - 1 " +
+    @Query("UPDATE AbstractPhase l SET l.order = l.order - 1 " +
             "WHERE l.trainingDefinitionId = :trainingDefinitionId " +
             "AND l.order > :lowerBound " +
             "AND l.order <= :upperBound ")
diff --git a/src/main/java/com/example/demo/service/InfoPhaseService.java b/src/main/java/com/example/demo/service/InfoPhaseService.java
index e3c116de8c6fe009e4b4167960d83e15c8bb0ea4..c0fb1d2bf3ac9100d3362d17692b461c579e2448 100644
--- a/src/main/java/com/example/demo/service/InfoPhaseService.java
+++ b/src/main/java/com/example/demo/service/InfoPhaseService.java
@@ -4,7 +4,7 @@ import com.example.demo.domain.InfoPhase;
 import com.example.demo.dto.InfoPhaseDto;
 import com.example.demo.dto.InfoPhaseUpdateDto;
 import com.example.demo.mapper.BeanMapper;
-import com.example.demo.repository.BaseLevelRepository;
+import com.example.demo.repository.AbstractPhaseRepository;
 import com.example.demo.repository.InfoPhaseRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -17,12 +17,12 @@ public class InfoPhaseService {
     private static final Logger LOG = LoggerFactory.getLogger(InfoPhaseService.class);
 
     private final InfoPhaseRepository infoPhaseRepository;
-    private final BaseLevelRepository baseLevelRepository;
+    private final AbstractPhaseRepository abstractPhaseRepository;
 
     @Autowired
-    public InfoPhaseService(InfoPhaseRepository infoPhaseRepository, BaseLevelRepository baseLevelRepository) {
+    public InfoPhaseService(InfoPhaseRepository infoPhaseRepository, AbstractPhaseRepository abstractPhaseRepository) {
         this.infoPhaseRepository = infoPhaseRepository;
-        this.baseLevelRepository = baseLevelRepository;
+        this.abstractPhaseRepository = abstractPhaseRepository;
     }
 
     public InfoPhaseDto createDefaultInfoPhase(Long trainingDefinitionId) {
@@ -30,7 +30,7 @@ public class InfoPhaseService {
         infoPhase.setContent("Content of info level");
         infoPhase.setTitle("Title of info level");
         infoPhase.setTrainingDefinitionId(trainingDefinitionId);
-        infoPhase.setOrder(baseLevelRepository.getCurrentMaxOrder(trainingDefinitionId) + 1);
+        infoPhase.setOrder(abstractPhaseRepository.getCurrentMaxOrder(trainingDefinitionId) + 1);
 
         InfoPhase persistedEntity = infoPhaseRepository.save(infoPhase);
 
diff --git a/src/main/java/com/example/demo/service/LevelOperationsService.java b/src/main/java/com/example/demo/service/LevelOperationsService.java
index 9abfb7a9c2f00ca6eb963d24ea853d7d49d6b0dd..0404ef6039984dad210372b41e39913c0ac05dc5 100644
--- a/src/main/java/com/example/demo/service/LevelOperationsService.java
+++ b/src/main/java/com/example/demo/service/LevelOperationsService.java
@@ -1,10 +1,10 @@
 package com.example.demo.service;
 
-import com.example.demo.domain.BaseLevel;
+import com.example.demo.domain.AbstractPhase;
 import com.example.demo.domain.Question;
 import com.example.demo.domain.QuestionChoice;
 import com.example.demo.domain.QuestionnaireLevel;
-import com.example.demo.dto.BaseLevelDto;
+import com.example.demo.dto.AbstractPhaseDto;
 import com.example.demo.dto.QuestionChoiceDto;
 import com.example.demo.dto.QuestionChoiceUpdateDto;
 import com.example.demo.dto.QuestionDto;
@@ -12,7 +12,7 @@ import com.example.demo.dto.QuestionUpdateDto;
 import com.example.demo.dto.QuestionnaireUpdateDto;
 import com.example.demo.enums.QuestionType;
 import com.example.demo.mapper.BeanMapper;
-import com.example.demo.repository.BaseLevelRepository;
+import com.example.demo.repository.AbstractPhaseRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -23,7 +23,7 @@ import java.util.Optional;
 public class LevelOperationsService {
 
     @Autowired
-    private BaseLevelRepository baseLevelRepository;
+    private AbstractPhaseRepository abstractPhaseRepository;
 
     @Autowired
     private InfoPhaseService infoPhaseService;
@@ -123,8 +123,8 @@ public class LevelOperationsService {
 //        return BeanMapper.INSTANCE.toDtoList(phases);
 //    }
 
-    public BaseLevelDto getLevel(Long levelId) {
-        Optional<BaseLevel> level = baseLevelRepository.findById(levelId);
+    public AbstractPhaseDto getLevel(Long levelId) {
+        Optional<AbstractPhase> level = abstractPhaseRepository.findById(levelId);
 
         if (level.isEmpty()) {
             // TODO throw 404
diff --git a/src/main/java/com/example/demo/service/PhaseService.java b/src/main/java/com/example/demo/service/PhaseService.java
index 5e40ff9877314c0b675d0b08bbd2485ea82bae60..3468202fdfc3b19a41a70b1710656cee37dc079f 100644
--- a/src/main/java/com/example/demo/service/PhaseService.java
+++ b/src/main/java/com/example/demo/service/PhaseService.java
@@ -1,9 +1,9 @@
 package com.example.demo.service;
 
-import com.example.demo.domain.BaseLevel;
-import com.example.demo.dto.BaseLevelDto;
+import com.example.demo.domain.AbstractPhase;
+import com.example.demo.dto.AbstractPhaseDto;
 import com.example.demo.mapper.BeanMapper;
-import com.example.demo.repository.BaseLevelRepository;
+import com.example.demo.repository.AbstractPhaseRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -14,14 +14,14 @@ import java.util.List;
 public class PhaseService {
 
     @Autowired
-    private BaseLevelRepository baseLevelRepository;
+    private AbstractPhaseRepository abstractPhaseRepository;
 
     @Autowired
     private TrainingPhaseService trainingPhaseService;
 
     @Transactional
     public void deletePhase(Long definitionId, Long phaseId) {
-        BaseLevel phase = baseLevelRepository.findById(phaseId)
+        AbstractPhase phase = abstractPhaseRepository.findById(phaseId)
                 .orElseThrow(() -> new RuntimeException("Phase was not found"));
         // TODO throw proper exception once kypo2-training is migrated
 
@@ -29,13 +29,13 @@ public class PhaseService {
 
 
         int levelOrder = phase.getOrder();
-        baseLevelRepository.decreaseOrderAfterLevelWasDeleted(definitionId, levelOrder);
+        abstractPhaseRepository.decreaseOrderAfterLevelWasDeleted(definitionId, levelOrder);
 
-        baseLevelRepository.delete(phase);
+        abstractPhaseRepository.delete(phase);
     }
 
-    public BaseLevelDto getPhase(Long definitionId, Long phaseId) {
-        BaseLevel phase = baseLevelRepository.findById(phaseId)
+    public AbstractPhaseDto getPhase(Long definitionId, Long phaseId) {
+        AbstractPhase phase = abstractPhaseRepository.findById(phaseId)
                 .orElseThrow(() -> new RuntimeException("Phase was not found"));
         // TODO throw proper exception once kypo2-training is migrated
 
@@ -45,15 +45,15 @@ public class PhaseService {
     }
 
 
-    public List<BaseLevelDto> getPhases(Long trainingDefinitionId) {
-        List<BaseLevel> phases = baseLevelRepository.findAllByTrainingDefinitionIdOrderByOrder(trainingDefinitionId);
+    public List<AbstractPhaseDto> getPhases(Long trainingDefinitionId) {
+        List<AbstractPhase> phases = abstractPhaseRepository.findAllByTrainingDefinitionIdOrderByOrder(trainingDefinitionId);
 
         return BeanMapper.INSTANCE.toDtoList(phases);
     }
 
     @Transactional
     public void moveLevelToSpecifiedOrder(Long phaseIdFrom, int newPosition) {
-        BaseLevel levelFrom = baseLevelRepository.findById(phaseIdFrom)
+        AbstractPhase levelFrom = abstractPhaseRepository.findById(phaseIdFrom)
                 .orElseThrow(() -> new RuntimeException("Phase was not found"));
         // TODO throw proper exception once kypo2-training is migrated
 
@@ -61,16 +61,16 @@ public class PhaseService {
         int fromOrder = levelFrom.getOrder();
 
         if (fromOrder < newPosition) {
-            baseLevelRepository.decreaseOrderOfLevelsOnInterval(levelFrom.getTrainingDefinitionId(), fromOrder, newPosition);
+            abstractPhaseRepository.decreaseOrderOfLevelsOnInterval(levelFrom.getTrainingDefinitionId(), fromOrder, newPosition);
         } else if (fromOrder > newPosition) {
-            baseLevelRepository.increaseOrderOfLevelsOnInterval(levelFrom.getTrainingDefinitionId(), newPosition, fromOrder);
+            abstractPhaseRepository.increaseOrderOfLevelsOnInterval(levelFrom.getTrainingDefinitionId(), newPosition, fromOrder);
         } else {
             // nothing should be changed, no further actions needed
             return;
         }
 
         levelFrom.setOrder(newPosition);
-        baseLevelRepository.save(levelFrom);
+        abstractPhaseRepository.save(levelFrom);
 
         trainingPhaseService.alignDecisionMatrixForPhasesInTrainingDefinition(levelFrom.getTrainingDefinitionId());
     }
diff --git a/src/main/java/com/example/demo/service/QuestionChoiceService.java b/src/main/java/com/example/demo/service/QuestionChoiceService.java
index a9d78573af85bc32f6415e1e20a7a1b5d399e208..aeb3120148cbccc24ef7252b1f843d7984b0fbb8 100644
--- a/src/main/java/com/example/demo/service/QuestionChoiceService.java
+++ b/src/main/java/com/example/demo/service/QuestionChoiceService.java
@@ -1,6 +1,5 @@
 package com.example.demo.service;
 
-import com.example.demo.domain.BaseLevel;
 import com.example.demo.domain.Question;
 import com.example.demo.domain.QuestionChoice;
 import com.example.demo.dto.QuestionChoiceDto;
diff --git a/src/main/java/com/example/demo/service/QuestionnaireLevelService.java b/src/main/java/com/example/demo/service/QuestionnaireLevelService.java
index de5c3a639b760dc5641cadd116325ca61e7ce7ce..288f9f5dd0e32db9c2214522b7d1b1ca781bce86 100644
--- a/src/main/java/com/example/demo/service/QuestionnaireLevelService.java
+++ b/src/main/java/com/example/demo/service/QuestionnaireLevelService.java
@@ -4,7 +4,7 @@ import com.example.demo.domain.QuestionnaireLevel;
 import com.example.demo.dto.QuestionnaireLevelDto;
 import com.example.demo.dto.QuestionnaireUpdateDto;
 import com.example.demo.mapper.BeanMapper;
-import com.example.demo.repository.BaseLevelRepository;
+import com.example.demo.repository.AbstractPhaseRepository;
 import com.example.demo.repository.QuestionnaireLevelRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -22,14 +22,14 @@ public class QuestionnaireLevelService {
     private QuestionnaireLevelRepository questionnaireLevelRepository;
 
     @Autowired
-    private BaseLevelRepository baseLevelRepository;
+    private AbstractPhaseRepository abstractPhaseRepository;
 
     public QuestionnaireLevelDto createDefaultQuestionnaireLevel(Long trainingDefinitionId) {
 
         QuestionnaireLevel questionnaireLevel =new QuestionnaireLevel();
         questionnaireLevel.setTitle("Title of questionnaire level");
         questionnaireLevel.setTrainingDefinitionId(trainingDefinitionId);
-        questionnaireLevel.setOrder(baseLevelRepository.getCurrentMaxOrder(trainingDefinitionId) + 1);
+        questionnaireLevel.setOrder(abstractPhaseRepository.getCurrentMaxOrder(trainingDefinitionId) + 1);
 
         QuestionnaireLevel persistedEntity = questionnaireLevelRepository.save(questionnaireLevel);
 
diff --git a/src/main/java/com/example/demo/service/TrainingPhaseService.java b/src/main/java/com/example/demo/service/TrainingPhaseService.java
index 8508f5219b0719f2a49ed7651bcdef9b8dcd0a6d..41c226b41d89d7ada047d26c8a6bd6819ab788f5 100644
--- a/src/main/java/com/example/demo/service/TrainingPhaseService.java
+++ b/src/main/java/com/example/demo/service/TrainingPhaseService.java
@@ -5,7 +5,7 @@ import com.example.demo.domain.TrainingPhase;
 import com.example.demo.dto.TrainingPhaseDto;
 import com.example.demo.dto.TrainingPhaseUpdateDto;
 import com.example.demo.mapper.BeanMapper;
-import com.example.demo.repository.BaseLevelRepository;
+import com.example.demo.repository.AbstractPhaseRepository;
 import com.example.demo.repository.TrainingPhaseRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -28,14 +28,14 @@ public class TrainingPhaseService {
     private TrainingPhaseRepository trainingPhaseRepository;
 
     @Autowired
-    private BaseLevelRepository baseLevelRepository;
+    private AbstractPhaseRepository abstractPhaseRepository;
 
     public TrainingPhaseDto createDefaultTrainingPhase(Long trainingDefinitionId) {
 
         TrainingPhase trainingPhase = new TrainingPhase();
         trainingPhase.setTitle("Title of phase level");
         trainingPhase.setTrainingDefinitionId(trainingDefinitionId);
-        trainingPhase.setOrder(baseLevelRepository.getCurrentMaxOrder(trainingDefinitionId) + 1);
+        trainingPhase.setOrder(abstractPhaseRepository.getCurrentMaxOrder(trainingDefinitionId) + 1);
 
         trainingPhase.setDecisionMatrix(prepareDefaultDecisionMatrix(trainingDefinitionId, trainingPhase));