diff --git a/application/model/src/main/java/org/fuseri/model/dto/course/ProficiencyLevelDto.java b/application/model/src/main/java/org/fuseri/model/dto/course/ProficiencyLevelDto.java
index 106973632b9ea136a87bf353b5d51b37f679b6cc..0031b4b936e35cbeb439c1733f02e5bd4bb04f7a 100644
--- a/application/model/src/main/java/org/fuseri/model/dto/course/ProficiencyLevelDto.java
+++ b/application/model/src/main/java/org/fuseri/model/dto/course/ProficiencyLevelDto.java
@@ -1,12 +1,36 @@
 package org.fuseri.model.dto.course;
 
+/**
+ * An enum representing language proficiency levels based on the CEFR standard.
+ */
 public enum ProficiencyLevelDto {
-    A1,
-    A2,
-    B1,
-    B2,
-    C1,
-    C2,
-    C1N,
-    C2N
-}
+
+    A1("Beginner"),
+    A2("Elementary"),
+    B1("Intermediate"),
+    B2("Upper Intermediate"),
+    C1("Advanced"),
+    C2("Proficient"),
+    C1N("Advanced Native speaker"),
+    C2N("Proficient Native speaker");
+
+    private final String description;
+
+    /**
+     * Constructor for LanguageLevel enum.
+     *
+     * @param description a String representing a brief description of the language proficiency level
+     */
+    ProficiencyLevelDto(String description) {
+        this.description = description;
+    }
+
+    /**
+     * Returns a brief description of the language proficiency level.
+     *
+     * @return a String representing the description of the language proficiency level
+     */
+    public String getDescription() {
+        return description;
+    }
+}
\ No newline at end of file
diff --git a/application/model/src/main/java/org/fuseri/model/dto/user/Language.java b/application/model/src/main/java/org/fuseri/model/dto/user/Language.java
deleted file mode 100644
index 79116a0a1a465bdd2b875a235395577547296617..0000000000000000000000000000000000000000
--- a/application/model/src/main/java/org/fuseri/model/dto/user/Language.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.fuseri.model.dto.user;
-
-/**
- * An enum representing individual languages.
- */
-public enum Language {
-
-    ENGLISH("English"),
-    GERMAN("Deutsch"),
-    SPANISH("Español"),
-    CZECH("Čeština");
-
-    private final String nativeName;
-
-    /**
-     * Constructor for Language enum.
-     *
-     * @param nativeName a String representing the native name of the language
-     */
-    Language(String nativeName) {
-        this.nativeName = nativeName;
-    }
-
-    /**
-     * Returns the native name of the language.
-     *
-     * @return a String representing the native name of the language
-     */
-    public String getNativeName() {
-        return nativeName;
-    }
-}
diff --git a/application/model/src/main/java/org/fuseri/model/dto/user/ProficiencyLevel.java b/application/model/src/main/java/org/fuseri/model/dto/user/ProficiencyLevel.java
deleted file mode 100644
index 47ea8e154e72b911802c3de50382a1107ba3c2f8..0000000000000000000000000000000000000000
--- a/application/model/src/main/java/org/fuseri/model/dto/user/ProficiencyLevel.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.fuseri.model.dto.user;
-
-/**
- * An enum representing language proficiency levels based on the CEFR standard.
- */
-public enum ProficiencyLevel {
-
-    A1("Beginner"),
-    A2("Elementary"),
-    B1("Intermediate"),
-    B2("Upper Intermediate"),
-    C1("Advanced"),
-    C2("Proficient"),
-    C1N("Advanced Native speaker"),
-    C2N("Proficient Native speaker");
-
-    private final String description;
-
-    /**
-     * Constructor for LanguageLevel enum.
-     *
-     * @param description a String representing a brief description of the language proficiency level
-     */
-    ProficiencyLevel(String description) {
-        this.description = description;
-    }
-
-    /**
-     * Returns a brief description of the language proficiency level.
-     *
-     * @return a String representing the description of the language proficiency level
-     */
-    public String getDescription() {
-        return description;
-    }
-}
diff --git a/application/model/src/main/java/org/fuseri/model/dto/user/UserAddLanguageDto.java b/application/model/src/main/java/org/fuseri/model/dto/user/UserAddLanguageDto.java
index 7c8f9777c368e2056e3b1f53acaaf9696fbc8981..271ce6435594e1a25946db945556ad8c048943cc 100644
--- a/application/model/src/main/java/org/fuseri/model/dto/user/UserAddLanguageDto.java
+++ b/application/model/src/main/java/org/fuseri/model/dto/user/UserAddLanguageDto.java
@@ -5,6 +5,8 @@ import jakarta.validation.constraints.NotNull;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.Setter;
+import org.fuseri.model.dto.course.LanguageTypeDto;
+import org.fuseri.model.dto.course.ProficiencyLevelDto;
 
 @Getter
 @Setter
@@ -13,9 +15,9 @@ public class UserAddLanguageDto {
 
     @NotNull
     @Valid
-    Language language;
+    LanguageTypeDto language;
 
     @NotNull
     @Valid
-    ProficiencyLevel proficiency;
+    ProficiencyLevelDto proficiency;
 }
diff --git a/application/model/src/main/java/org/fuseri/model/dto/user/UserCreateDto.java b/application/model/src/main/java/org/fuseri/model/dto/user/UserCreateDto.java
index 0f07d513587d94ecf822f9d4a499be19a4c3c743..ef7fbecc82b102cdeb026b1959eb7186abd06dc5 100644
--- a/application/model/src/main/java/org/fuseri/model/dto/user/UserCreateDto.java
+++ b/application/model/src/main/java/org/fuseri/model/dto/user/UserCreateDto.java
@@ -6,8 +6,9 @@ import jakarta.validation.constraints.NotNull;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.Setter;
+import org.fuseri.model.dto.course.LanguageTypeDto;
+import org.fuseri.model.dto.course.ProficiencyLevelDto;
 
-import java.util.List;
 import java.util.Map;
 
 @Getter
@@ -37,6 +38,7 @@ public class UserCreateDto {
     @NotNull
     private UserType userType;
 
-    private Map<Language,ProficiencyLevel> languageProficiency;
+    @Valid
+    private Map<LanguageTypeDto, ProficiencyLevelDto> languageProficiency;
 
 }
diff --git a/application/model/src/main/java/org/fuseri/model/dto/user/UserDto.java b/application/model/src/main/java/org/fuseri/model/dto/user/UserDto.java
index a0258db306d74d0ae047a8a2f7d9c0f5588f9bf5..5cfe9ff346845da10529167222862a69fe8b63ac 100644
--- a/application/model/src/main/java/org/fuseri/model/dto/user/UserDto.java
+++ b/application/model/src/main/java/org/fuseri/model/dto/user/UserDto.java
@@ -1,10 +1,13 @@
 package org.fuseri.model.dto.user;
 
+import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import org.fuseri.model.dto.common.DomainObjectDto;
 import lombok.Getter;
 import lombok.Setter;
+import org.fuseri.model.dto.course.LanguageTypeDto;
+import org.fuseri.model.dto.course.ProficiencyLevelDto;
 
 import java.util.Map;
 
@@ -29,7 +32,9 @@ public class UserDto extends DomainObjectDto {
     @NotNull
     private UserType userType;
 
-    private Map<Language,ProficiencyLevel> languageProficiency;
+    @NotNull
+    @Valid
+    private Map<LanguageTypeDto, ProficiencyLevelDto> languageProficiency;
 
     public UserDto(String username, String email, String firstName, String lastName, AddressDto address) {
         setId(0L);
diff --git a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/User.java b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/User.java
index 143a7ccdd8b7468be927005fd25787bede187255..390b03e29443ffdafd11728381573338ed663f02 100644
--- a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/User.java
+++ b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/User.java
@@ -2,10 +2,10 @@ package org.fuseri.modulelanguageschool.user;
 
 import jakarta.persistence.*;
 import lombok.*;
-import org.fuseri.model.dto.user.Language;
-import org.fuseri.model.dto.user.ProficiencyLevel;
 import org.fuseri.modulelanguageschool.common.DomainObject;
 import org.fuseri.modulelanguageschool.course.Course;
+import org.fuseri.modulelanguageschool.course.Language;
+import org.fuseri.modulelanguageschool.course.ProficiencyLevel;
 
 import java.util.Map;
 import java.util.Set;
diff --git a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/UserFacade.java b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/UserFacade.java
index 73ad519f4d31a83fe11916d8b786b04d77fdd0e3..0f29f7522c1600fc20a2ae5632178aa96f785eb5 100644
--- a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/UserFacade.java
+++ b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/UserFacade.java
@@ -6,6 +6,8 @@ import org.fuseri.model.dto.user.UserAddLanguageDto;
 import org.fuseri.model.dto.user.UserCreateDto;
 import org.fuseri.model.dto.user.UserDto;
 import org.fuseri.modulelanguageschool.course.CourseMapper;
+import org.fuseri.modulelanguageschool.course.Language;
+import org.fuseri.modulelanguageschool.course.ProficiencyLevel;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -57,9 +59,10 @@ public class UserFacade {
     public UserDto addLanguage(Long id, UserAddLanguageDto body) {
         var user = service.find(id);
         var languages = user.getLanguageProficiency();
-        var language = body.getLanguage();
+        var language = Language.valueOf(body.getLanguage().name());
+        var proficiency = ProficiencyLevel.valueOf(body.getProficiency().name());
 
-        languages.put(language, body.getProficiency());
+        languages.put(language, proficiency);
         user.setLanguageProficiency(languages);
         return mapper.toDto(service.update(user));
     }