diff --git a/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs b/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs
index 19b56f853a2c8cb1db658771f40e43ca5a466815..c3597213db864c1467de99fd48ed80b96faac26f 100644
--- a/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs
+++ b/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs
@@ -85,5 +85,73 @@ namespace Tsi1.Api.Controllers
 
             return Ok();
         }
+
+        [Authorize(Roles = UserTypes.Student + ", " + UserTypes.Professor + ", " + UserTypes.FacultyAdmin)]
+        [HttpGet("GetAll")]
+        public async Task<IActionResult> GetAll()
+        {
+            var tenantId = int.Parse(HttpContext.User.Claims.FirstOrDefault(x => x.Type == "TenantId").Value);
+
+            var result = await _courseService.GetAll(tenantId);
+            if (result.HasError)
+            {
+                return BadRequest(result.Message);
+            }
+
+            return Ok(result.Data);
+        }
+
+        [Authorize(Roles = UserTypes.UdelarAdmin)]
+        [HttpGet("GetAll/{tenantId}")]
+        public async Task<IActionResult> GetAll(int tenantId)
+        {
+            var result = await _courseService.GetAll(tenantId);
+            if (result.HasError)
+            {
+                return BadRequest(result.Message);
+            }
+
+            return Ok(result.Data);
+        }
+
+
+        [Authorize(Roles = UserTypes.Professor + ", " + UserTypes.FacultyAdmin)]
+        [HttpPut("Modify/{courseId}")]
+        public async Task<IActionResult> Modify(int courseId, CourseCreateDto courseDto)
+        {
+            var result = await _courseService.Modify(courseId, courseDto);
+            
+            if (result.HasError)
+            {
+                return BadRequest(result.Message);
+            }
+
+            if (result.Data == false)
+            {
+                return NotFound(result.Message);
+            }
+
+            return Ok();
+        }
+
+        [Authorize(Roles = UserTypes.FacultyAdmin)]
+        [HttpDelete("Delete/{courseId}")]
+        public async Task<IActionResult> Delete(int courseId)
+        {
+            var result = await _courseService.Delete(courseId);
+
+            if (result.HasError)
+            {
+                return BadRequest(result.Message);
+            }
+
+            if (result.Data == false)
+            {
+                return NotFound(result.Message);
+            }
+
+            return Ok();
+        }
+
     }
 }
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs b/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs
index 5d666d16c6f9578c22a8c22b867329345ee444ae..5e2ad7595a04cfa2d63482f4ef931a10d21c1962 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs
@@ -42,7 +42,7 @@ namespace Tsi1.BusinessLayer.Helpers
             CreateMap<UserRegisterDto, User>();
             CreateMap<StudentPreviewDto, Student>();
             CreateMap<ProfessorPreviewDto, Professor>();
-            CreateMap<CourseCreateDto, Course>();
+            CreateMap<CourseCreateDto, Course>().ForMember(x => x.TenantId, opt => opt.Ignore());
             CreateMap<CoursePreviewDto, Course>();
             CreateMap<TenantPreviewDto, Tenant>();
             CreateMap<TenantCreateDto, Tenant>();
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ICourseService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ICourseService.cs
index 082798fedb9a2cc7a9802f2266558a00e8111c8d..cff802c381fa6603d11639b895a5442b5932ae48 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ICourseService.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ICourseService.cs
@@ -17,5 +17,11 @@ namespace Tsi1.BusinessLayer.Interfaces
         Task<ServiceResult<bool>> Matriculate(int userId, int courseId);
 
         Task<ServiceResult<bool>> AddProfessorToCourse(ProfessorCourseDto professorCourseDto);
+
+        Task<ServiceResult<List<CoursePreviewDto>>> GetAll(int tenantId);
+
+        Task<ServiceResult<bool>> Modify(int courseId, CourseCreateDto courseDto);
+
+        Task<ServiceResult<bool>> Delete(int courseId);
     }
 }
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs
index 4c1f4ceec956384a2df10f16c45ab66fb0f6cc8f..427b686f18fa586e4d5a99008e0b5510b02c30d7 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs
@@ -181,5 +181,64 @@ namespace Tsi1.BusinessLayer.Services
 
             return result;
         }
+
+        public async Task<ServiceResult<List<CoursePreviewDto>>> GetAll(int tenantId)
+        {
+            var result = new ServiceResult<List<CoursePreviewDto>>();
+
+            var courses = await _context.Courses
+                .Where(x => x.TenantId == tenantId)
+                .ToListAsync();
+
+            var coursesDto = _mapper.Map<List<CoursePreviewDto>>(courses);
+
+            result.Data = coursesDto;
+
+            return result;
+        }
+
+        public async Task<ServiceResult<bool>> Modify(int courseId, CourseCreateDto courseDto)
+        {
+            var result = new ServiceResult<bool>();
+
+            var course = await _context.Courses
+                .FirstOrDefaultAsync(x => x.Id == courseId);
+
+            if (course == null)
+            {
+                result.Message = string.Format(ErrorMessages.CourseDoesNotExist, courseId);
+                return result;
+            }
+
+            _mapper.Map(courseDto, course);
+          
+            await _context.SaveChangesAsync();
+
+            result.Data = true;
+
+            return result;
+        }
+
+        public async Task<ServiceResult<bool>> Delete(int courseId)
+        {
+            var result = new ServiceResult<bool>();
+
+            var course = await _context.Courses
+                .FirstOrDefaultAsync(x => x.Id == courseId);
+
+            if (course == null)
+            {
+                result.Message = string.Format(ErrorMessages.CourseDoesNotExist, courseId);
+                return result;
+            }
+
+            _context.Courses.Remove(course);
+
+            await _context.SaveChangesAsync();
+
+            result.Data = true;
+
+            return result;
+        }
     }
 }