diff --git a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java
index 36106eda6e7728c0adbf8331b0a709b706b393bc..3152df7bebf7431603dcca8dfd569cd0227c3846 100644
--- a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java
+++ b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java
@@ -9,7 +9,6 @@ import com.example.demo.dto.QuestionUpdateDto;
 import com.example.demo.dto.QuestionnaireUpdateDto;
 import com.example.demo.dto.TaskUpdateDto;
 import com.example.demo.dto.InfoLevelUpdateDto;
-import com.example.demo.enums.LevelType;
 import com.example.demo.enums.QuestionType;
 import com.example.demo.service.LevelOperationsService;
 import io.swagger.annotations.Api;
@@ -29,7 +28,6 @@ import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 @RestController
@@ -81,25 +79,25 @@ public class AdaptiveTrainingDefinitionsRestController {
         levelOperationsService.deleteLevel(levelId);
     }
 
-    @ApiOperation(httpMethod = "POST",
-            value = "Create a new level",
-            notes = "Creates only default level with a specified type",
-            response = BaseLevelDto.class,
-            nickname = "createLevel",
-            produces = MediaType.APPLICATION_JSON_VALUE
-    )
-    @ApiResponses(value = {
-            @ApiResponse(code = 200, message = "Level created"),
-            @ApiResponse(code = 500, message = "Unexpected application error")
-    })
-    @PostMapping(path = "/levels/{levelType}")
-    public BaseLevelDto createLevel(
-            @ApiParam(value = "Training definition ID", required = true) @RequestParam(name = "definitionId") Long definitionId,
-            @ApiParam(value = "Level type", allowableValues = "questionnaire, assessment, info, phase", required = true)
-            @PathVariable("levelType") LevelType levelType) {
-
-        return levelOperationsService.createLevel(definitionId, levelType);
-    }
+//    @ApiOperation(httpMethod = "POST",
+//            value = "Create a new level",
+//            notes = "Creates only default level with a specified type",
+//            response = BaseLevelDto.class,
+//            nickname = "createLevel",
+//            produces = MediaType.APPLICATION_JSON_VALUE
+//    )
+//    @ApiResponses(value = {
+//            @ApiResponse(code = 200, message = "Level created"),
+//            @ApiResponse(code = 500, message = "Unexpected application error")
+//    })
+//    @PostMapping(path = "/levels/{levelType}")
+//    public BaseLevelDto createLevel(
+//            @ApiParam(value = "Training definition ID", required = true) @RequestParam(name = "definitionId") Long definitionId,
+//            @ApiParam(value = "Level type", allowableValues = "questionnaire, assessment, info, phase", required = true)
+//            @PathVariable("levelType") LevelType levelType) {
+//
+//        return levelOperationsService.createLevel(definitionId, levelType);
+//    }
 
     @ApiOperation(httpMethod = "GET",
             value = "Get level by ID",
diff --git a/src/main/java/com/example/demo/controller/PhasesController.java b/src/main/java/com/example/demo/controller/PhasesController.java
new file mode 100644
index 0000000000000000000000000000000000000000..d95cf6f3bab6d00a8b8bcbc1deec8e9c26277492
--- /dev/null
+++ b/src/main/java/com/example/demo/controller/PhasesController.java
@@ -0,0 +1,59 @@
+package com.example.demo.controller;
+
+import com.example.demo.dto.BaseLevelDto;
+import com.example.demo.dto.PhaseCreateDTO;
+import com.example.demo.service.LevelOperationsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.Authorization;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+
+@RestController
+@RequestMapping(value = "/training-definitions/{definitionId}/phases", produces = MediaType.APPLICATION_JSON_VALUE)
+@Api(value = "/training-definitions/{definitionId}/phases",
+        tags = "Phases",
+        consumes = MediaType.APPLICATION_JSON_VALUE,
+        authorizations = @Authorization(value = "bearerAuth"))
+public class PhasesController {
+
+    @Autowired
+    private LevelOperationsService levelOperationsService;
+
+    @ApiOperation(httpMethod = "POST",
+            value = "Create a new phase",
+            notes = "Creates a new default phase with a specified type",
+            response = BaseLevelDto.class,
+            nickname = "createLevel",
+            produces = MediaType.APPLICATION_JSON_VALUE
+    )
+    @ApiResponses(value = {
+            @ApiResponse(code = 201, message = "Phase created"),
+            @ApiResponse(code = 500, message = "Unexpected application error")
+    })
+    @PostMapping
+    public ResponseEntity<BaseLevelDto> 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 = levelOperationsService.createLevel(definitionId, phaseCreateDTO);
+
+        return new ResponseEntity<>(createdPhase, HttpStatus.CREATED);
+    }
+}
diff --git a/src/main/java/com/example/demo/dto/BaseLevelDto.java b/src/main/java/com/example/demo/dto/BaseLevelDto.java
index f6c3262ec8524f00c6537e249c709d3c6b32dc45..56d3fe9cc156248a0d2bc3dc61d687fee15c29fc 100644
--- a/src/main/java/com/example/demo/dto/BaseLevelDto.java
+++ b/src/main/java/com/example/demo/dto/BaseLevelDto.java
@@ -1,6 +1,6 @@
 package com.example.demo.dto;
 
-import com.example.demo.enums.LevelType;
+import com.example.demo.enums.PhaseType;
 
 import java.io.Serializable;
 
@@ -11,7 +11,7 @@ public abstract class BaseLevelDto implements Serializable {
     private Integer order;
     private String estimatedDuration;
     private Long maxScore;
-    private LevelType levelType;
+    private PhaseType phaseType;
     private Integer allowedCommands;
     private Integer allowedWrongFlags;
 
@@ -55,12 +55,12 @@ public abstract class BaseLevelDto implements Serializable {
         this.maxScore = maxScore;
     }
 
-    public LevelType getLevelType() {
-        return levelType;
+    public PhaseType getPhaseType() {
+        return phaseType;
     }
 
-    public void setLevelType(LevelType levelType) {
-        this.levelType = levelType;
+    public void setPhaseType(PhaseType phaseType) {
+        this.phaseType = phaseType;
     }
 
     public Integer getAllowedCommands() {
@@ -87,7 +87,7 @@ public abstract class BaseLevelDto implements Serializable {
                 ", order=" + order +
                 ", estimatedDuration='" + estimatedDuration + '\'' +
                 ", maxScore=" + maxScore +
-                ", levelType=" + levelType +
+                ", levelType=" + phaseType +
                 ", allowedCommands=" + allowedCommands +
                 ", allowedWrongFlags=" + allowedWrongFlags +
                 '}';
diff --git a/src/main/java/com/example/demo/dto/PhaseCreateDTO.java b/src/main/java/com/example/demo/dto/PhaseCreateDTO.java
new file mode 100644
index 0000000000000000000000000000000000000000..7c4b286e390c40828fdc13703d96ead04f181a7c
--- /dev/null
+++ b/src/main/java/com/example/demo/dto/PhaseCreateDTO.java
@@ -0,0 +1,28 @@
+package com.example.demo.dto;
+
+import com.example.demo.enums.PhaseType;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotNull;
+
+public class PhaseCreateDTO {
+
+    @ApiModelProperty(value = "Type of phase.", required = true, allowableValues = "QUESTIONNAIRE, INFO, GAME", example = "GAME")
+    @NotNull(message = "Phase type must be specified")
+    private PhaseType phaseType;
+
+    public PhaseType getPhaseType() {
+        return phaseType;
+    }
+
+    public void setPhaseType(PhaseType phaseType) {
+        this.phaseType = phaseType;
+    }
+
+    @Override
+    public String toString() {
+        return "PhaseCreateDTO{" +
+                "phaseType=" + phaseType +
+                '}';
+    }
+}
diff --git a/src/main/java/com/example/demo/dto/input/GameDefinitionCreateDto.java b/src/main/java/com/example/demo/dto/input/GameDefinitionCreateDto.java
index f8d2bde9e2f4b7efed1efdf89e5396e292c331cf..6242cc689fece0b71f5fa55847416a0bb0fa4e05 100644
--- a/src/main/java/com/example/demo/dto/input/GameDefinitionCreateDto.java
+++ b/src/main/java/com/example/demo/dto/input/GameDefinitionCreateDto.java
@@ -1,7 +1,7 @@
 package com.example.demo.dto.input;
 
 import com.example.demo.dto.AttachmentDto;
-import com.example.demo.enums.LevelType;
+import com.example.demo.enums.PhaseType;
 
 import java.util.List;
 
@@ -10,7 +10,7 @@ public class GameDefinitionCreateDto {
     private Long id;
     private String title;
     private Integer order;
-    private LevelType type;
+    private PhaseType type;
 
     // assessment level fields
     private String assessmentType;
@@ -53,11 +53,11 @@ public class GameDefinitionCreateDto {
         this.order = order;
     }
 
-    public LevelType getType() {
+    public PhaseType getType() {
         return type;
     }
 
-    public void setType(LevelType type) {
+    public void setType(PhaseType type) {
         this.type = type;
     }
 
diff --git a/src/main/java/com/example/demo/enums/LevelType.java b/src/main/java/com/example/demo/enums/LevelType.java
deleted file mode 100644
index da1504d1a2a5b1a4c4309cec31451a8d96dbdea0..0000000000000000000000000000000000000000
--- a/src/main/java/com/example/demo/enums/LevelType.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.example.demo.enums;
-
-public enum LevelType {
-    assessment, // TODO deprecated, should be replaced by questionnaire
-    questionnaire,
-    task,
-    info,
-    phase
-}
diff --git a/src/main/java/com/example/demo/enums/PhaseType.java b/src/main/java/com/example/demo/enums/PhaseType.java
new file mode 100644
index 0000000000000000000000000000000000000000..a4ae349748f74e28ef1f5366974441c4726469d1
--- /dev/null
+++ b/src/main/java/com/example/demo/enums/PhaseType.java
@@ -0,0 +1,8 @@
+package com.example.demo.enums;
+
+public enum PhaseType {
+    QUESTIONNAIRE,
+    task, // TODO remove once Task is not a subclass of BaseLevel
+    INFO,
+    GAME,
+}
diff --git a/src/main/java/com/example/demo/mapper/BeanMapper.java b/src/main/java/com/example/demo/mapper/BeanMapper.java
index 69a91d52c0e1a7c61cad88d77b557c802fc6b226..79a0550d5520fe91bd8ceec3ec462ee40f2a2e97 100644
--- a/src/main/java/com/example/demo/mapper/BeanMapper.java
+++ b/src/main/java/com/example/demo/mapper/BeanMapper.java
@@ -59,12 +59,11 @@ public interface BeanMapper {
         return baseLevelDto;
     }
 
-    @Mapping(target = "levelType", constant = "assessment")
     AssessmentLevelDto toDto(AssessmentLevel assessmentLevel);
 
     AssessmentLevel toEntity(AssessmentLevelDto assessmentLevel);
 
-    @Mapping(target = "levelType", constant = "task")
+    @Mapping(target = "phaseType", constant = "task")
     TaskDto toDto(Task task);
 
     Task toEntity(TaskDto taskDto);
@@ -73,7 +72,7 @@ public interface BeanMapper {
 
     Task toEntity(TaskUpdateDto taskUpdateDto);
 
-    @Mapping(target = "levelType", constant = "info")
+    @Mapping(target = "phaseType", constant = "INFO")
     InfoLevelDto toDto(InfoLevel infoLevel);
 
     InfoLevel toEntity(InfoLevelDto infoLevel);
@@ -86,7 +85,7 @@ public interface BeanMapper {
 
     Attachment toEntity(AttachmentDto attachment);
 
-    @Mapping(target = "levelType", constant = "phase")
+    @Mapping(target = "phaseType", constant = "GAME")
     PhaseLevelDto toDto(PhaseLevel phaseLevel);
 
     PhaseLevel toEntity(PhaseLevelDto phaseLevel);
@@ -113,16 +112,16 @@ public interface BeanMapper {
     @Mapping(target = "subLevels", ignore = true)
     PhaseLevel updatePhaseLevel(@MappingTarget PhaseLevel phaseLevel, GameDefinitionCreateDto gameDefinitionCreateDto);
 
-    @Mapping(target = "type", constant = "assessment")
+//    @Mapping(target = "type", constant = "assessment")
     GameDefinitionCreateDto toLevelDefinitionDto(AssessmentLevel assessmentLevel);
 
-    @Mapping(target = "type", constant = "task")
+//    @Mapping(target = "type", constant = "task")
     GameDefinitionCreateDto toLevelDefinitionDto(Task task);
 
-    @Mapping(target = "type", constant = "info")
+//    @Mapping(target = "type", constant = "info")
     GameDefinitionCreateDto toLevelDefinitionDto(InfoLevel infoLevel);
 
-    @Mapping(target = "type", constant = "phase")
+//    @Mapping(target = "type", constant = "phase")
     GameDefinitionCreateDto toLevelDefinitionDto(PhaseLevel phaseLevel);
 
     DecisionMatrixRow toEntity(DecisionMatrixRowDto decisionMatrixRowDto);
diff --git a/src/main/java/com/example/demo/service/LevelOperationsService.java b/src/main/java/com/example/demo/service/LevelOperationsService.java
index 77e81f7bfc5fc0edca6c5ef2bb9d1fef79fc0b5e..7837e8d0a6674d8b5328c110a162a859d2566c53 100644
--- a/src/main/java/com/example/demo/service/LevelOperationsService.java
+++ b/src/main/java/com/example/demo/service/LevelOperationsService.java
@@ -8,6 +8,7 @@ import com.example.demo.domain.QuestionnaireLevel;
 import com.example.demo.domain.Task;
 import com.example.demo.domain.InfoLevel;
 import com.example.demo.dto.BaseLevelDto;
+import com.example.demo.dto.PhaseCreateDTO;
 import com.example.demo.dto.PhaseLevelUpdateDto;
 import com.example.demo.dto.QuestionChoiceDto;
 import com.example.demo.dto.QuestionChoiceUpdateDto;
@@ -17,7 +18,7 @@ import com.example.demo.dto.QuestionnaireUpdateDto;
 import com.example.demo.dto.TaskDto;
 import com.example.demo.dto.TaskUpdateDto;
 import com.example.demo.dto.InfoLevelUpdateDto;
-import com.example.demo.enums.LevelType;
+import com.example.demo.enums.PhaseType;
 import com.example.demo.enums.QuestionType;
 import com.example.demo.mapper.BeanMapper;
 import com.example.demo.repository.BaseLevelRepository;
@@ -106,26 +107,24 @@ public class LevelOperationsService {
         questionChoiceService.deleteQuestionChoice(questionChoiceId);
     }
 
-    public BaseLevelDto createLevel(Long trainingDefinitionId, LevelType levelType) {
+    public BaseLevelDto createLevel(Long trainingDefinitionId, PhaseCreateDTO phaseCreateDTO) {
         BaseLevelDto baseLevelDto;
-        if (levelType.equals(LevelType.info)) {
+        if (PhaseType.INFO.equals(phaseCreateDTO.getPhaseType())) {
             baseLevelDto = infoLevelService.createDefaultInfoLevel(trainingDefinitionId);
-        } else if (levelType.equals(LevelType.assessment)) {
-            baseLevelDto = assessmentLevelService.createDefaultAssessmentLevel(trainingDefinitionId);
-        } else if (levelType.equals(LevelType.questionnaire)) {
+        } else if (PhaseType.QUESTIONNAIRE.equals(phaseCreateDTO.getPhaseType())) {
             baseLevelDto = questionnaireLevelService.createDefaultQuestionnaireLevel(trainingDefinitionId);
         } else {
             baseLevelDto = phaseLevelService.createDefaultPhaseLevel(trainingDefinitionId);
         }
 
-        baseLevelDto.setLevelType(levelType);
+        baseLevelDto.setPhaseType(phaseCreateDTO.getPhaseType());
 
         return baseLevelDto;
     }
 
     public BaseLevelDto createTask(Long phaseId) {
         TaskDto createdTask = taskService.createDefaultTask(phaseId);
-        createdTask.setLevelType(LevelType.task);
+        createdTask.setPhaseType(PhaseType.task);
 
         return createdTask;
     }