diff --git a/src/main/java/com/example/demo/controller/PhasesController.java b/src/main/java/com/example/demo/controller/PhasesController.java
index 26e398c45ded63a0dc5eff2e7b101bf0fe5a64a5..20f3370a8fb1c0464d0d3729ceb2b09f8b3a252d 100644
--- a/src/main/java/com/example/demo/controller/PhasesController.java
+++ b/src/main/java/com/example/demo/controller/PhasesController.java
@@ -4,8 +4,8 @@ import com.example.demo.dto.BaseLevelDto;
 import com.example.demo.dto.InfoPhaseDto;
 import com.example.demo.dto.InfoPhaseUpdateDto;
 import com.example.demo.dto.PhaseCreateDTO;
-import com.example.demo.dto.PhaseLevelDto;
-import com.example.demo.dto.PhaseLevelUpdateDto;
+import com.example.demo.dto.TrainingPhaseDto;
+import com.example.demo.dto.TrainingPhaseUpdateDto;
 import com.example.demo.dto.QuestionnaireLevelDto;
 import com.example.demo.dto.QuestionnaireUpdateDto;
 import com.example.demo.facade.TrainingPhaseFacade;
@@ -161,7 +161,7 @@ public class PhasesController {
     @ApiOperation(httpMethod = "PUT",
             value = "Update training phase",
             nickname = "updateTrainingPhase",
-            response = PhaseLevelDto.class,
+            response = TrainingPhaseDto.class,
             consumes = MediaType.APPLICATION_JSON_VALUE
     )
     @ApiResponses(value = {
@@ -169,15 +169,15 @@ public class PhasesController {
             @ApiResponse(code = 500, message = "Unexpected application error")
     })
     @PutMapping(path = "/{phaseId}/training")
-    public ResponseEntity<PhaseLevelDto> updateTrainingPhase(
+    public ResponseEntity<TrainingPhaseDto> updateTrainingPhase(
             @ApiParam(value = "Training definition ID", required = true)
             @PathVariable(name = "definitionId") Long definitionId,
             @ApiParam(value = "Phase ID", required = true)
             @PathVariable("phaseId") Long phaseId,
             @ApiParam(value = "Training phase to be updated")
-            @RequestBody @Valid PhaseLevelUpdateDto phaseLevelUpdateDto) {
+            @RequestBody @Valid TrainingPhaseUpdateDto trainingPhaseUpdateDto) {
 
-        PhaseLevelDto updatedTrainingPhase = trainingPhaseFacade.updateTrainingPhase(definitionId, phaseId, phaseLevelUpdateDto);
+        TrainingPhaseDto updatedTrainingPhase = trainingPhaseFacade.updateTrainingPhase(definitionId, phaseId, trainingPhaseUpdateDto);
 
         return new ResponseEntity<>(updatedTrainingPhase, HttpStatus.OK);
     }
diff --git a/src/main/java/com/example/demo/domain/BaseLevel.java b/src/main/java/com/example/demo/domain/BaseLevel.java
index 9f94a94ea23daf4cbb6085b87a92afdc807d1725..58119c0a0f882c6c828478cef67eddfc6a08b385 100644
--- a/src/main/java/com/example/demo/domain/BaseLevel.java
+++ b/src/main/java/com/example/demo/domain/BaseLevel.java
@@ -30,8 +30,8 @@ public abstract class BaseLevel {
     @Column(name = "order_in_training_definition", nullable = false)
     private Integer order;
 
-    @ManyToOne(fetch = FetchType.LAZY)
-    private PhaseLevel phaseLevel;
+//    @ManyToOne(fetch = FetchType.LAZY)
+//    private TrainingPhase trainingPhase;
 
     private Long trainingDefinitionId;
 
@@ -75,13 +75,13 @@ public abstract class BaseLevel {
         this.id = id;
     }
 
-    public PhaseLevel getPhaseLevel() {
-        return phaseLevel;
-    }
+//    public TrainingPhase getPhaseLevel() {
+//        return trainingPhase;
+//    }
 
-    public void setPhaseLevel(PhaseLevel phaseLevel) {
-        this.phaseLevel = phaseLevel;
-    }
+//    public void setPhaseLevel(TrainingPhase trainingPhase) {
+//        this.trainingPhase = trainingPhase;
+//    }
 
     public Long getTrainingDefinitionId() {
         return trainingDefinitionId;
diff --git a/src/main/java/com/example/demo/domain/DecisionMatrixRow.java b/src/main/java/com/example/demo/domain/DecisionMatrixRow.java
index 86b787e5687c35aafdda924071a990be0a97b6c6..f45091451877013830ef16da0826be6db4b4a3de 100644
--- a/src/main/java/com/example/demo/domain/DecisionMatrixRow.java
+++ b/src/main/java/com/example/demo/domain/DecisionMatrixRow.java
@@ -23,7 +23,7 @@ public class DecisionMatrixRow {
     double WF;
 
     @ManyToOne(fetch = FetchType.LAZY)
-    private PhaseLevel phaseLevel;
+    private TrainingPhase trainingPhase;
 
     public Long getId() {
         return id;
@@ -81,12 +81,12 @@ public class DecisionMatrixRow {
         this.WF = WF;
     }
 
-    public PhaseLevel getPhaseLevel() {
-        return phaseLevel;
+    public TrainingPhase getTrainingPhase() {
+        return trainingPhase;
     }
 
-    public void setPhaseLevel(PhaseLevel phaseLevel) {
-        this.phaseLevel = phaseLevel;
+    public void setTrainingPhase(TrainingPhase trainingPhase) {
+        this.trainingPhase = trainingPhase;
     }
 
     @Override
diff --git a/src/main/java/com/example/demo/domain/Task.java b/src/main/java/com/example/demo/domain/Task.java
index e8ab3e06a4c21558ad4173738f719cf5893a6976..2a28026aab2fe4c3c3b25d35181e2b409493bb49 100644
--- a/src/main/java/com/example/demo/domain/Task.java
+++ b/src/main/java/com/example/demo/domain/Task.java
@@ -3,6 +3,7 @@ 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;
@@ -16,6 +17,9 @@ public class Task extends BaseLevel {
     private String solution;
     private Long incorrectFlagLimit;
 
+    @ManyToOne(fetch = FetchType.LAZY)
+    private TrainingPhase trainingPhase;
+
 //    @OrderBy
 //    @OneToMany(mappedBy = "task", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
 //    private List<Attachment> attachments;
@@ -60,6 +64,14 @@ public class Task extends BaseLevel {
         this.incorrectFlagLimit = incorrectFlagLimit;
     }
 
+    public TrainingPhase getTrainingPhase() {
+        return trainingPhase;
+    }
+
+    public void setTrainingPhase(TrainingPhase trainingPhase) {
+        this.trainingPhase = trainingPhase;
+    }
+
     @Override
     public String toString() {
         return "Task{" + "content='" + content + '\'' + ", flag='" +
diff --git a/src/main/java/com/example/demo/domain/PhaseLevel.java b/src/main/java/com/example/demo/domain/TrainingPhase.java
similarity index 55%
rename from src/main/java/com/example/demo/domain/PhaseLevel.java
rename to src/main/java/com/example/demo/domain/TrainingPhase.java
index e0d4f63082226b93ed39d0e11fa445ce43a2749b..f2b223e6604a1fdb4d954a5e656a3dabb3055e81 100644
--- a/src/main/java/com/example/demo/domain/PhaseLevel.java
+++ b/src/main/java/com/example/demo/domain/TrainingPhase.java
@@ -8,22 +8,22 @@ import javax.persistence.OrderBy;
 import java.util.List;
 
 @Entity
-public class PhaseLevel extends BaseLevel {
+public class TrainingPhase extends BaseLevel {
 
     @OrderBy
-    @OneToMany(mappedBy = "phaseLevel", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
-    private List<Task> subLevels;
+    @OneToMany(mappedBy = "trainingPhase", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
+    private List<Task> tasks;
 
     @OrderBy
-    @OneToMany(mappedBy = "phaseLevel", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
+    @OneToMany(mappedBy = "trainingPhase", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
     private List<DecisionMatrixRow> decisionMatrix;
 
-    public List<Task> getSubLevels() {
-        return subLevels;
+    public List<Task> getTasks() {
+        return tasks;
     }
 
-    public void setSubLevels(List<Task> subLevels) {
-        this.subLevels = subLevels;
+    public void setTasks(List<Task> subLevels) {
+        this.tasks = subLevels;
     }
 
     public List<DecisionMatrixRow> getDecisionMatrix() {
diff --git a/src/main/java/com/example/demo/dto/PhaseLevelDto.java b/src/main/java/com/example/demo/dto/TrainingPhaseDto.java
similarity index 59%
rename from src/main/java/com/example/demo/dto/PhaseLevelDto.java
rename to src/main/java/com/example/demo/dto/TrainingPhaseDto.java
index 7b9aa43c73c2890e9b2418d6b9e413eb368e21dc..9753e3f49f7399225901ee246ae6182de0b5b7d1 100644
--- a/src/main/java/com/example/demo/dto/PhaseLevelDto.java
+++ b/src/main/java/com/example/demo/dto/TrainingPhaseDto.java
@@ -2,18 +2,18 @@ package com.example.demo.dto;
 
 import java.util.List;
 
-public class PhaseLevelDto extends BaseLevelDto {
+public class TrainingPhaseDto extends BaseLevelDto {
 
-    private List<TaskDto> subLevels;
+    private List<TaskDto> tasks;
 
     private List<DecisionMatrixRowDto> decisionMatrix;
 
-    public List<TaskDto> getSubLevels() {
-        return subLevels;
+    public List<TaskDto> getTasks() {
+        return tasks;
     }
 
-    public void setSubLevels(List<TaskDto> subLevels) {
-        this.subLevels = subLevels;
+    public void setTasks(List<TaskDto> tasks) {
+        this.tasks = tasks;
     }
 
     public List<DecisionMatrixRowDto> getDecisionMatrix() {
diff --git a/src/main/java/com/example/demo/dto/PhaseLevelUpdateDto.java b/src/main/java/com/example/demo/dto/TrainingPhaseUpdateDto.java
similarity index 98%
rename from src/main/java/com/example/demo/dto/PhaseLevelUpdateDto.java
rename to src/main/java/com/example/demo/dto/TrainingPhaseUpdateDto.java
index 3777a3bd68a3c2e221748e9490310381c3ecf80f..ffb4138eec631596cf788e56ac5061c55575512e 100644
--- a/src/main/java/com/example/demo/dto/PhaseLevelUpdateDto.java
+++ b/src/main/java/com/example/demo/dto/TrainingPhaseUpdateDto.java
@@ -7,7 +7,7 @@ import javax.validation.constraints.NotNull;
 import javax.validation.constraints.PositiveOrZero;
 import java.util.List;
 
-public class PhaseLevelUpdateDto {
+public class TrainingPhaseUpdateDto {
 
     @ApiModelProperty(value = "Short description of training phase", required = true, example = "Training phase title")
     @NotEmpty(message = "Training phase title must not be blank")
diff --git a/src/main/java/com/example/demo/facade/TrainingPhaseFacade.java b/src/main/java/com/example/demo/facade/TrainingPhaseFacade.java
index a27439ae297c50c572993f41b309936fdd3c75aa..a2ca2b853d202859105463944fbfec5ff200e970 100644
--- a/src/main/java/com/example/demo/facade/TrainingPhaseFacade.java
+++ b/src/main/java/com/example/demo/facade/TrainingPhaseFacade.java
@@ -4,13 +4,13 @@ import com.example.demo.dto.BaseLevelDto;
 import com.example.demo.dto.InfoPhaseDto;
 import com.example.demo.dto.InfoPhaseUpdateDto;
 import com.example.demo.dto.PhaseCreateDTO;
-import com.example.demo.dto.PhaseLevelDto;
-import com.example.demo.dto.PhaseLevelUpdateDto;
+import com.example.demo.dto.TrainingPhaseDto;
+import com.example.demo.dto.TrainingPhaseUpdateDto;
 import com.example.demo.dto.QuestionnaireLevelDto;
 import com.example.demo.dto.QuestionnaireUpdateDto;
 import com.example.demo.enums.PhaseType;
 import com.example.demo.service.InfoPhaseService;
-import com.example.demo.service.PhaseLevelService;
+import com.example.demo.service.TrainingPhaseService;
 import com.example.demo.service.PhaseService;
 import com.example.demo.service.QuestionnaireLevelService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,7 +32,7 @@ public class TrainingPhaseFacade {
     private QuestionnaireLevelService questionnaireLevelService;
 
     @Autowired
-    private PhaseLevelService phaseLevelService;
+    private TrainingPhaseService trainingPhaseService;
 
     public BaseLevelDto createPhase(Long trainingDefinitionId, PhaseCreateDTO phaseCreateDTO) {
         BaseLevelDto baseLevelDto;
@@ -41,7 +41,7 @@ public class TrainingPhaseFacade {
         } else if (PhaseType.QUESTIONNAIRE.equals(phaseCreateDTO.getPhaseType())) {
             baseLevelDto = questionnaireLevelService.createDefaultQuestionnaireLevel(trainingDefinitionId);
         } else {
-            baseLevelDto = phaseLevelService.createDefaultPhaseLevel(trainingDefinitionId);
+            baseLevelDto = trainingPhaseService.createDefaultTrainingPhase(trainingDefinitionId);
         }
 
         baseLevelDto.setPhaseType(phaseCreateDTO.getPhaseType());
@@ -71,8 +71,8 @@ public class TrainingPhaseFacade {
         return infoPhaseService.updateInfoPhase(definitionId, phaseId, infoPhaseUpdateDto);
     }
 
-    public PhaseLevelDto updateTrainingPhase(Long definitionId, Long phaseId, PhaseLevelUpdateDto trainingPhaseUpdate) {
-        return phaseLevelService.updatePhaseLevel(definitionId, phaseId, trainingPhaseUpdate);
+    public TrainingPhaseDto updateTrainingPhase(Long definitionId, Long phaseId, TrainingPhaseUpdateDto trainingPhaseUpdate) {
+        return trainingPhaseService.updateTrainingPhase(definitionId, phaseId, trainingPhaseUpdate);
     }
 
     public QuestionnaireLevelDto updateQuestionnairePhase(Long definitionId, Long phaseId, QuestionnaireUpdateDto questionnaireUpdateDto) {
diff --git a/src/main/java/com/example/demo/mapper/BeanMapper.java b/src/main/java/com/example/demo/mapper/BeanMapper.java
index 13ec5117ebb7478bc065d9179e5fe57283057173..7cfc42c4171b6eb3972ae4567943a67a6722bf1c 100644
--- a/src/main/java/com/example/demo/mapper/BeanMapper.java
+++ b/src/main/java/com/example/demo/mapper/BeanMapper.java
@@ -4,7 +4,7 @@ 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.PhaseLevel;
+import com.example.demo.domain.TrainingPhase;
 import com.example.demo.domain.Question;
 import com.example.demo.domain.QuestionChoice;
 import com.example.demo.domain.QuestionnaireLevel;
@@ -14,8 +14,8 @@ import com.example.demo.dto.BaseLevelDto;
 import com.example.demo.dto.DecisionMatrixRowDto;
 import com.example.demo.dto.InfoPhaseDto;
 import com.example.demo.dto.InfoPhaseUpdateDto;
-import com.example.demo.dto.PhaseLevelDto;
-import com.example.demo.dto.PhaseLevelUpdateDto;
+import com.example.demo.dto.TrainingPhaseDto;
+import com.example.demo.dto.TrainingPhaseUpdateDto;
 import com.example.demo.dto.QuestionChoiceDto;
 import com.example.demo.dto.QuestionChoiceUpdateDto;
 import com.example.demo.dto.QuestionDto;
@@ -28,7 +28,6 @@ import com.example.demo.dto.TaskUpdateDto;
 import com.example.demo.dto.input.GameDefinitionCreateDto;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
-import org.mapstruct.MappingTarget;
 import org.mapstruct.factory.Mappers;
 
 import java.util.List;
@@ -41,8 +40,8 @@ public interface BeanMapper {
 
     default BaseLevelDto toDto(BaseLevel baseLevel) {
         BaseLevelDto baseLevelDto;
-        if (baseLevel instanceof PhaseLevel) {
-            baseLevelDto = toDto((PhaseLevel) baseLevel);
+        if (baseLevel instanceof TrainingPhase) {
+            baseLevelDto = toDto((TrainingPhase) baseLevel);
         } else if (baseLevel instanceof InfoPhase) {
             baseLevelDto = toDto((InfoPhase) baseLevel);
         } else if (baseLevel instanceof Task) {
@@ -77,24 +76,14 @@ public interface BeanMapper {
     Attachment toEntity(AttachmentDto attachment);
 
     @Mapping(target = "phaseType", constant = "GAME")
-    PhaseLevelDto toDto(PhaseLevel phaseLevel);
+    TrainingPhaseDto toDto(TrainingPhase trainingPhase);
 
-    PhaseLevel toEntity(PhaseLevelDto phaseLevel);
+    TrainingPhase toEntity(TrainingPhaseDto trainingPhaseDto);
 
-    PhaseLevel toEntity(PhaseLevelUpdateDto phaseLevelUpdateDto);
+    TrainingPhase toEntity(TrainingPhaseUpdateDto trainingPhaseUpdateDto);
 
     Task toGameLevel(GameDefinitionCreateDto gameDefinitionCreateDto);
 
-    PhaseLevel toPhaseLevel(GameDefinitionCreateDto gameDefinitionCreateDto);
-
-    @Mapping(target = "phaseLevel", ignore = true)
-//    @Mapping(target = "attachments", ignore = true)
-        // TODO not really sure about this
-    Task updateTask(@MappingTarget Task task, GameDefinitionCreateDto gameDefinitionCreateDto);
-
-    @Mapping(target = "subLevels", ignore = true)
-    PhaseLevel updatePhaseLevel(@MappingTarget PhaseLevel phaseLevel, GameDefinitionCreateDto gameDefinitionCreateDto);
-
 //    @Mapping(target = "type", constant = "task")
     GameDefinitionCreateDto toLevelDefinitionDto(Task task);
 
@@ -102,7 +91,7 @@ public interface BeanMapper {
     GameDefinitionCreateDto toLevelDefinitionDto(InfoPhase infoPhase);
 
 //    @Mapping(target = "type", constant = "phase")
-    GameDefinitionCreateDto toLevelDefinitionDto(PhaseLevel phaseLevel);
+    GameDefinitionCreateDto toLevelDefinitionDto(TrainingPhase trainingPhase);
 
     DecisionMatrixRow toEntity(DecisionMatrixRowDto decisionMatrixRowDto);
 
diff --git a/src/main/java/com/example/demo/repository/PhaseLevelRepository.java b/src/main/java/com/example/demo/repository/PhaseLevelRepository.java
deleted file mode 100644
index f71587d1ca678c15d6c9d89a240505f1e8d070a1..0000000000000000000000000000000000000000
--- a/src/main/java/com/example/demo/repository/PhaseLevelRepository.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.example.demo.repository;
-
-import com.example.demo.domain.PhaseLevel;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-
-import java.util.List;
-
-public interface PhaseLevelRepository extends JpaRepository<PhaseLevel, Long> {
-
-    @Query("SELECT COUNT(p.id) FROM PhaseLevel p WHERE p.trainingDefinitionId = :trainingDefinitionId")
-    int getNumberOfExistingPhases(@Param("trainingDefinitionId") Long trainingDefinitionId);
-
-    List<PhaseLevel> findAllByTrainingDefinitionIdOrderByOrder(Long trainingDefinitionId);
-}
diff --git a/src/main/java/com/example/demo/repository/TaskRepository.java b/src/main/java/com/example/demo/repository/TaskRepository.java
index 7fa3776911456960bd06bbdfe42897c17724a43e..91642c889971b857b736931955735b71521ba2a6 100644
--- a/src/main/java/com/example/demo/repository/TaskRepository.java
+++ b/src/main/java/com/example/demo/repository/TaskRepository.java
@@ -9,14 +9,14 @@ import org.springframework.transaction.annotation.Transactional;
 
 public interface TaskRepository extends JpaRepository<Task, Long> {
 
-    @Query("SELECT COALESCE(MAX(g.order), -1) FROM Task g WHERE g.phaseLevel.id = :phaseId")
+    @Query("SELECT COALESCE(MAX(g.order), -1) FROM Task g WHERE g.trainingPhase.id = :phaseId")
     Integer getCurrentMaxOrder(@Param("phaseId") Long phaseId);
 
     @Transactional
     @Modifying
     @Query("UPDATE Task t SET t.order = t.order - 1 " +
-            "WHERE t.phaseLevel.id = :gamePhaseId " +
+            "WHERE t.trainingPhase.id = :trainingPhaseId " +
             "AND t.order > :order ")
-    void decreaseOrderAfterTaskWasDeleted(@Param("gamePhaseId") Long gamePhaseId,
+    void decreaseOrderAfterTaskWasDeleted(@Param("trainingPhaseId") Long trainingPhaseId,
                                           @Param("order") int order);
 }
diff --git a/src/main/java/com/example/demo/repository/TrainingPhaseRepository.java b/src/main/java/com/example/demo/repository/TrainingPhaseRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..eee479058627befc3129ba0b059dac4b1d3816da
--- /dev/null
+++ b/src/main/java/com/example/demo/repository/TrainingPhaseRepository.java
@@ -0,0 +1,16 @@
+package com.example.demo.repository;
+
+import com.example.demo.domain.TrainingPhase;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+
+import java.util.List;
+
+public interface TrainingPhaseRepository extends JpaRepository<TrainingPhase, Long> {
+
+    @Query("SELECT COUNT(p.id) FROM TrainingPhase p WHERE p.trainingDefinitionId = :trainingDefinitionId")
+    int getNumberOfExistingPhases(@Param("trainingDefinitionId") Long trainingDefinitionId);
+
+    List<TrainingPhase> findAllByTrainingDefinitionIdOrderByOrder(Long trainingDefinitionId);
+}
diff --git a/src/main/java/com/example/demo/service/LevelOperationsService.java b/src/main/java/com/example/demo/service/LevelOperationsService.java
index 001be757d64362ff08d169c5e9616e821d05c970..9abfb7a9c2f00ca6eb963d24ea853d7d49d6b0dd 100644
--- a/src/main/java/com/example/demo/service/LevelOperationsService.java
+++ b/src/main/java/com/example/demo/service/LevelOperationsService.java
@@ -32,7 +32,7 @@ public class LevelOperationsService {
     private QuestionnaireLevelService questionnaireLevelService;
 
     @Autowired
-    private PhaseLevelService phaseLevelService;
+    private TrainingPhaseService trainingPhaseService;
 
     @Autowired
     private TaskService taskService;
diff --git a/src/main/java/com/example/demo/service/PhaseLevelService.java b/src/main/java/com/example/demo/service/PhaseLevelService.java
deleted file mode 100644
index 9b19e0db88a26dc771060f001e501b9b1df25817..0000000000000000000000000000000000000000
--- a/src/main/java/com/example/demo/service/PhaseLevelService.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package com.example.demo.service;
-
-import com.example.demo.domain.BaseLevel;
-import com.example.demo.domain.DecisionMatrixRow;
-import com.example.demo.domain.PhaseLevel;
-import com.example.demo.dto.PhaseLevelDto;
-import com.example.demo.dto.PhaseLevelUpdateDto;
-import com.example.demo.mapper.BeanMapper;
-import com.example.demo.repository.BaseLevelRepository;
-import com.example.demo.repository.PhaseLevelRepository;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
-@Service
-public class PhaseLevelService {
-
-    private static final Logger LOG = LoggerFactory.getLogger(PhaseLevelService.class);
-
-    @Autowired
-    private PhaseLevelRepository phaseLevelRepository;
-
-    @Autowired
-    private BaseLevelRepository baseLevelRepository;
-
-    public PhaseLevelDto createDefaultPhaseLevel(Long trainingDefinitionId) {
-
-        PhaseLevel phaseLevel = new PhaseLevel();
-        phaseLevel.setTitle("Title of phase level");
-        phaseLevel.setTrainingDefinitionId(trainingDefinitionId);
-        phaseLevel.setOrder(baseLevelRepository.getCurrentMaxOrder(trainingDefinitionId) + 1);
-
-        phaseLevel.setDecisionMatrix(prepareDefaultDecisionMatrix(trainingDefinitionId, phaseLevel));
-
-        PhaseLevel persistedEntity = phaseLevelRepository.save(phaseLevel);
-
-        return BeanMapper.INSTANCE.toDto(persistedEntity);
-    }
-
-    public PhaseLevelDto updatePhaseLevel(Long definitionId, Long phaseId, PhaseLevelUpdateDto trainingPhaseUpdate) {
-        PhaseLevel phaseLevel = BeanMapper.INSTANCE.toEntity(trainingPhaseUpdate);
-        phaseLevel.setId(phaseId);
-
-        PhaseLevel persistedPhaseLevel = phaseLevelRepository.findById(phaseLevel.getId())
-                .orElseThrow(() -> new RuntimeException("Training phase was not found"));
-        // TODO throw proper exception once kypo2-training is migrated
-
-        // TODO add check to trainingDefinitionId and phaseId (field structure will be probably changed);
-
-        phaseLevel.setTrainingDefinitionId(persistedPhaseLevel.getTrainingDefinitionId());
-        phaseLevel.setOrder(persistedPhaseLevel.getOrder());
-        phaseLevel.setSubLevels(persistedPhaseLevel.getSubLevels());
-
-        if (!CollectionUtils.isEmpty(phaseLevel.getDecisionMatrix())) {
-            phaseLevel.getDecisionMatrix().forEach(x -> x.setPhaseLevel(phaseLevel));
-        }
-
-        PhaseLevel savedEntity = phaseLevelRepository.save(phaseLevel);
-
-        return BeanMapper.INSTANCE.toDto(savedEntity);
-    }
-
-    public void alignDecisionMatrixForPhasesInTrainingDefinition(Long trainingDefinitionId) {
-        List<PhaseLevel> phaseLevels = phaseLevelRepository.findAllByTrainingDefinitionIdOrderByOrder(trainingDefinitionId);
-
-        int currentPhaseOrder = 0;
-        for (PhaseLevel phaseLevel : phaseLevels) {
-            alignDecisionMatrixForPhase(phaseLevel, currentPhaseOrder);
-            currentPhaseOrder++;
-        }
-    }
-
-    private List<DecisionMatrixRow> prepareDefaultDecisionMatrix(Long trainingDefinitionId, PhaseLevel phaseLevel) {
-        List<DecisionMatrixRow> result = new ArrayList<>();
-
-        int numberOfExistingPhases = phaseLevelRepository.getNumberOfExistingPhases(trainingDefinitionId);
-
-        // number of rows should be equal to number of existing phases + 1
-        for (int i = 0; i <= numberOfExistingPhases; i++) {
-            DecisionMatrixRow decisionMatrixRow = new DecisionMatrixRow();
-            decisionMatrixRow.setPhaseLevel(phaseLevel);
-            decisionMatrixRow.setOrder(i);
-
-            result.add(decisionMatrixRow);
-        }
-
-        return result;
-    }
-
-    private void alignDecisionMatrixForPhase(PhaseLevel phaseLevel, int currentPhaseOrder) {
-        if (Objects.isNull(phaseLevel)) {
-            return;
-        }
-
-        int numberOfRows = 0;
-        if (!CollectionUtils.isEmpty(phaseLevel.getDecisionMatrix())) {
-            numberOfRows = phaseLevel.getDecisionMatrix().size();
-        }
-
-        final int expectedNumberOfRows = currentPhaseOrder + 1;
-
-        if (numberOfRows == expectedNumberOfRows) {
-            return;
-        } else if (numberOfRows < expectedNumberOfRows) {
-            List<DecisionMatrixRow> newDecisionMatrixRows = getNewDecisionMatrixRows(numberOfRows, expectedNumberOfRows, phaseLevel);
-            phaseLevel.getDecisionMatrix().addAll(newDecisionMatrixRows);
-        } else {
-            List<DecisionMatrixRow> neededDecisionMatrixRows = getOnlyNeededDecisionMatrixRows(expectedNumberOfRows, phaseLevel);
-
-            phaseLevel.getDecisionMatrix().clear();
-            phaseLevel.getDecisionMatrix().addAll(neededDecisionMatrixRows);
-        }
-
-        phaseLevelRepository.save(phaseLevel);
-    }
-
-    private List<DecisionMatrixRow> getNewDecisionMatrixRows(int currentNumberOfNewRows, int expectedNumberOfRows,  PhaseLevel phaseLevel) {
-        List<DecisionMatrixRow> result = new ArrayList<>();
-        for (int i = currentNumberOfNewRows; i < expectedNumberOfRows; i++) {
-            DecisionMatrixRow decisionMatrixRow = new DecisionMatrixRow();
-            decisionMatrixRow.setPhaseLevel(phaseLevel);
-            decisionMatrixRow.setOrder(i);
-
-            result.add(decisionMatrixRow);
-        }
-
-        return result;
-    }
-
-    private List<DecisionMatrixRow> getOnlyNeededDecisionMatrixRows(int expectedNumberOfRows, PhaseLevel phaseLevel) {
-        List<DecisionMatrixRow> decisionMatrix = phaseLevel.getDecisionMatrix();
-
-        return decisionMatrix.stream()
-                .sorted(Comparator.comparingInt(DecisionMatrixRow::getOrder))
-                .limit(expectedNumberOfRows)
-                .collect(Collectors.toList());
-
-    }
-}
diff --git a/src/main/java/com/example/demo/service/PhaseService.java b/src/main/java/com/example/demo/service/PhaseService.java
index d575252771a06dcd02b66ddc061d42f3459e9919..5e40ff9877314c0b675d0b08bbd2485ea82bae60 100644
--- a/src/main/java/com/example/demo/service/PhaseService.java
+++ b/src/main/java/com/example/demo/service/PhaseService.java
@@ -1,7 +1,6 @@
 package com.example.demo.service;
 
 import com.example.demo.domain.BaseLevel;
-import com.example.demo.domain.PhaseLevel;
 import com.example.demo.dto.BaseLevelDto;
 import com.example.demo.mapper.BeanMapper;
 import com.example.demo.repository.BaseLevelRepository;
@@ -18,7 +17,7 @@ public class PhaseService {
     private BaseLevelRepository baseLevelRepository;
 
     @Autowired
-    private PhaseLevelService phaseLevelService;
+    private TrainingPhaseService trainingPhaseService;
 
     @Transactional
     public void deletePhase(Long definitionId, Long phaseId) {
@@ -73,7 +72,7 @@ public class PhaseService {
         levelFrom.setOrder(newPosition);
         baseLevelRepository.save(levelFrom);
 
-        phaseLevelService.alignDecisionMatrixForPhasesInTrainingDefinition(levelFrom.getTrainingDefinitionId());
+        trainingPhaseService.alignDecisionMatrixForPhasesInTrainingDefinition(levelFrom.getTrainingDefinitionId());
     }
 
 }
diff --git a/src/main/java/com/example/demo/service/TaskService.java b/src/main/java/com/example/demo/service/TaskService.java
index 166e48abfe38af1f3e5f943d3bb9ba0f577d40da..832c282ffecf90f3e53a4303e413e5365079c1b8 100644
--- a/src/main/java/com/example/demo/service/TaskService.java
+++ b/src/main/java/com/example/demo/service/TaskService.java
@@ -1,12 +1,12 @@
 package com.example.demo.service;
 
-import com.example.demo.domain.PhaseLevel;
+import com.example.demo.domain.TrainingPhase;
 import com.example.demo.domain.Task;
 import com.example.demo.dto.TaskCreateDto;
 import com.example.demo.dto.TaskDto;
 import com.example.demo.dto.TaskUpdateDto;
 import com.example.demo.mapper.BeanMapper;
-import com.example.demo.repository.PhaseLevelRepository;
+import com.example.demo.repository.TrainingPhaseRepository;
 import com.example.demo.repository.TaskRepository;
 import org.apache.commons.collections4.IterableUtils;
 import org.slf4j.Logger;
@@ -24,16 +24,16 @@ public class TaskService {
     private static final Logger LOG = LoggerFactory.getLogger(TaskService.class);
 
     private final TaskRepository taskRepository;
-    private final PhaseLevelRepository phaseLevelRepository;
+    private final TrainingPhaseRepository trainingPhaseRepository;
 
     @Autowired
-    public TaskService(TaskRepository taskRepository, PhaseLevelRepository phaseLevelRepository) {
+    public TaskService(TaskRepository taskRepository, TrainingPhaseRepository trainingPhaseRepository) {
         this.taskRepository = taskRepository;
-        this.phaseLevelRepository = phaseLevelRepository;
+        this.trainingPhaseRepository = trainingPhaseRepository;
     }
 
     public TaskDto createDefaultTask(Long trainingDefinitionId, Long phaseId) {
-        PhaseLevel gamePhase = phaseLevelRepository.findById(phaseId)
+        TrainingPhase trainingPhase = trainingPhaseRepository.findById(phaseId)
                 .orElseThrow(() -> new RuntimeException("Game phase was not found"));
         // TODO throw proper exception once kypo2-training is migrated
 
@@ -41,7 +41,7 @@ public class TaskService {
 
         Task task = new Task();
         task.setTitle("Title of task");
-        task.setPhaseLevel(gamePhase);
+        task.setTrainingPhase(trainingPhase);
         task.setOrder(taskRepository.getCurrentMaxOrder(phaseId) + 1);
 
         Task persistedEntity = taskRepository.save(task);
@@ -54,7 +54,7 @@ public class TaskService {
                 .orElseThrow(() -> new RuntimeException("Task was not found"));
         // TODO throw proper exception once kypo2-training is migrated
 
-        PhaseLevel gamePhase = phaseLevelRepository.findById(phaseId)
+        TrainingPhase trainingPhase = trainingPhaseRepository.findById(phaseId)
                 .orElseThrow(() -> new RuntimeException("Game phase was not found"));
 
         // TODO add check to trainingDefinitionId (field structure will be probably changed)
@@ -63,7 +63,7 @@ public class TaskService {
         BeanUtils.copyProperties(taskToBeCloned, task);
 
         task.setId(null);
-        task.setPhaseLevel(gamePhase);
+        task.setTrainingPhase(trainingPhase);
         task.setOrder(taskRepository.getCurrentMaxOrder(phaseId) + 1);
 
         Task persistedEntity = taskRepository.save(task);
@@ -114,7 +114,7 @@ public class TaskService {
 
         // TODO add check to trainingDefinitionId and phaseId (field structure will be probably changed)
 
-        taskUpdate.setPhaseLevel(persistedTask.getPhaseLevel());
+        taskUpdate.setTrainingPhase(persistedTask.getTrainingPhase());
         taskUpdate.setTrainingDefinitionId(persistedTask.getTrainingDefinitionId());
         taskUpdate.setOrder(persistedTask.getOrder());
 
diff --git a/src/main/java/com/example/demo/service/TrainingPhaseService.java b/src/main/java/com/example/demo/service/TrainingPhaseService.java
new file mode 100644
index 0000000000000000000000000000000000000000..8508f5219b0719f2a49ed7651bcdef9b8dcd0a6d
--- /dev/null
+++ b/src/main/java/com/example/demo/service/TrainingPhaseService.java
@@ -0,0 +1,146 @@
+package com.example.demo.service;
+
+import com.example.demo.domain.DecisionMatrixRow;
+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.TrainingPhaseRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+@Service
+public class TrainingPhaseService {
+
+    private static final Logger LOG = LoggerFactory.getLogger(TrainingPhaseService.class);
+
+    @Autowired
+    private TrainingPhaseRepository trainingPhaseRepository;
+
+    @Autowired
+    private BaseLevelRepository baseLevelRepository;
+
+    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.setDecisionMatrix(prepareDefaultDecisionMatrix(trainingDefinitionId, trainingPhase));
+
+        TrainingPhase persistedEntity = trainingPhaseRepository.save(trainingPhase);
+
+        return BeanMapper.INSTANCE.toDto(persistedEntity);
+    }
+
+    public TrainingPhaseDto updateTrainingPhase(Long definitionId, Long phaseId, TrainingPhaseUpdateDto trainingPhaseUpdate) {
+        TrainingPhase trainingPhase = BeanMapper.INSTANCE.toEntity(trainingPhaseUpdate);
+        trainingPhase.setId(phaseId);
+
+        TrainingPhase persistedTrainingPhase = trainingPhaseRepository.findById(trainingPhase.getId())
+                .orElseThrow(() -> new RuntimeException("Training phase was not found"));
+        // TODO throw proper exception once kypo2-training is migrated
+
+        // TODO add check to trainingDefinitionId and phaseId (field structure will be probably changed);
+
+        trainingPhase.setTrainingDefinitionId(persistedTrainingPhase.getTrainingDefinitionId());
+        trainingPhase.setOrder(persistedTrainingPhase.getOrder());
+        trainingPhase.setTasks(persistedTrainingPhase.getTasks());
+
+        if (!CollectionUtils.isEmpty(trainingPhase.getDecisionMatrix())) {
+            trainingPhase.getDecisionMatrix().forEach(x -> x.setTrainingPhase(trainingPhase));
+        }
+
+        TrainingPhase savedEntity = trainingPhaseRepository.save(trainingPhase);
+
+        return BeanMapper.INSTANCE.toDto(savedEntity);
+    }
+
+    public void alignDecisionMatrixForPhasesInTrainingDefinition(Long trainingDefinitionId) {
+        List<TrainingPhase> trainingPhases = trainingPhaseRepository.findAllByTrainingDefinitionIdOrderByOrder(trainingDefinitionId);
+
+        int currentPhaseOrder = 0;
+        for (TrainingPhase trainingPhase : trainingPhases) {
+            alignDecisionMatrixForPhase(trainingPhase, currentPhaseOrder);
+            currentPhaseOrder++;
+        }
+    }
+
+    private List<DecisionMatrixRow> prepareDefaultDecisionMatrix(Long trainingDefinitionId, TrainingPhase trainingPhase) {
+        List<DecisionMatrixRow> result = new ArrayList<>();
+
+        int numberOfExistingPhases = trainingPhaseRepository.getNumberOfExistingPhases(trainingDefinitionId);
+
+        // number of rows should be equal to number of existing phases + 1
+        for (int i = 0; i <= numberOfExistingPhases; i++) {
+            DecisionMatrixRow decisionMatrixRow = new DecisionMatrixRow();
+            decisionMatrixRow.setTrainingPhase(trainingPhase);
+            decisionMatrixRow.setOrder(i);
+
+            result.add(decisionMatrixRow);
+        }
+
+        return result;
+    }
+
+    private void alignDecisionMatrixForPhase(TrainingPhase trainingPhase, int currentPhaseOrder) {
+        if (Objects.isNull(trainingPhase)) {
+            return;
+        }
+
+        int numberOfRows = 0;
+        if (!CollectionUtils.isEmpty(trainingPhase.getDecisionMatrix())) {
+            numberOfRows = trainingPhase.getDecisionMatrix().size();
+        }
+
+        final int expectedNumberOfRows = currentPhaseOrder + 1;
+
+        if (numberOfRows == expectedNumberOfRows) {
+            return;
+        } else if (numberOfRows < expectedNumberOfRows) {
+            List<DecisionMatrixRow> newDecisionMatrixRows = getNewDecisionMatrixRows(numberOfRows, expectedNumberOfRows, trainingPhase);
+            trainingPhase.getDecisionMatrix().addAll(newDecisionMatrixRows);
+        } else {
+            List<DecisionMatrixRow> neededDecisionMatrixRows = getOnlyNeededDecisionMatrixRows(expectedNumberOfRows, trainingPhase);
+
+            trainingPhase.getDecisionMatrix().clear();
+            trainingPhase.getDecisionMatrix().addAll(neededDecisionMatrixRows);
+        }
+
+        trainingPhaseRepository.save(trainingPhase);
+    }
+
+    private List<DecisionMatrixRow> getNewDecisionMatrixRows(int currentNumberOfNewRows, int expectedNumberOfRows,  TrainingPhase trainingPhase) {
+        List<DecisionMatrixRow> result = new ArrayList<>();
+        for (int i = currentNumberOfNewRows; i < expectedNumberOfRows; i++) {
+            DecisionMatrixRow decisionMatrixRow = new DecisionMatrixRow();
+            decisionMatrixRow.setTrainingPhase(trainingPhase);
+            decisionMatrixRow.setOrder(i);
+
+            result.add(decisionMatrixRow);
+        }
+
+        return result;
+    }
+
+    private List<DecisionMatrixRow> getOnlyNeededDecisionMatrixRows(int expectedNumberOfRows, TrainingPhase trainingPhase) {
+        List<DecisionMatrixRow> decisionMatrix = trainingPhase.getDecisionMatrix();
+
+        return decisionMatrix.stream()
+                .sorted(Comparator.comparingInt(DecisionMatrixRow::getOrder))
+                .limit(expectedNumberOfRows)
+                .collect(Collectors.toList());
+
+    }
+}