diff --git a/src/Project/Controllers/ProjectRoleController.cs b/src/Project/Controllers/ProjectRoleController.cs
index 702a94039f10a48140febe54d3aa51dff40e44fa..1143babb39f05619dda07e9e0a542e6e00368522 100644
--- a/src/Project/Controllers/ProjectRoleController.cs
+++ b/src/Project/Controllers/ProjectRoleController.cs
@@ -85,6 +85,8 @@ namespace Coscine.Api.Project.Controllers
                 ProjectModel projectModel = new ProjectModel();
                 if (projectModel.OwnsProject(user, projectModel.GetById(projectId)))
                 {
+                    _projectRoleModel.CheckIfLastOwnerWillBeRemoved(roleId, projectId);
+
                     return _projectRoleModel.Delete(_projectRoleModel.GetWhere((projectRole) =>
                             projectRole.ProjectId == projectId
                             && projectRole.UserId == userId
diff --git a/src/Project/Models/ProjectRoleModel.cs b/src/Project/Models/ProjectRoleModel.cs
index 34625f0ec102773515d75e6b58bf86a507929d5c..c3c5d16a01da083ab0c76d085b811f17fdf93ff9 100644
--- a/src/Project/Models/ProjectRoleModel.cs
+++ b/src/Project/Models/ProjectRoleModel.cs
@@ -1,4 +1,5 @@
 using Coscine.Api.Project.ReturnObjects;
+using Coscine.ApiCommons.Exceptions;
 using Coscine.ApiCommons.Models;
 using Coscine.Database.Model;
 using LinqToDB;
@@ -18,11 +19,13 @@ namespace Coscine.Api.Project.Models
         public ProjectRole SetFromObject(ProjectRoleObject projectRoleObject)
         {
             // Remove existing roles if they exist
-            var existingRoles = GetAllWhere((dbProjectRole) => dbProjectRole.ProjectId == projectRoleObject.ProjectId && dbProjectRole.UserId == projectRoleObject.User.Id);
-            if(existingRoles.Count() > 0)
+            var existingRoles = GetAllWhere((dbProjectRole) => dbProjectRole.ProjectId == projectRoleObject.ProjectId && dbProjectRole.UserId == projectRoleObject.User.Id);            
+
+            if (existingRoles.Count() > 0)
             {
                 foreach(var role in existingRoles)
                 {
+                    CheckIfLastOwnerWillBeRemoved(role.RoleId, projectRoleObject.ProjectId);
                     Delete(role);
                 }
             }
@@ -36,6 +39,24 @@ namespace Coscine.Api.Project.Models
             return projectRole;
         }
 
+        public void CheckIfLastOwnerWillBeRemoved(Guid roleId, Guid projectId)
+        {
+            RoleModel roleModel = new RoleModel();
+            var ownerRole = roleModel.GetOwnerRole();
+
+            if (roleId == ownerRole.Id)
+            {
+                var moreThanOneOwnerExists = GetAllWhere((projectRole) =>
+                    projectRole.ProjectId == projectId
+                    && projectRole.RoleId == ownerRole.Id
+                ).Count() > 1;
+                if (!moreThanOneOwnerExists)
+                {
+                    throw new NotAuthorizedException("The last owner cannot be removed!");
+                }
+            }
+        }
+
         public override Expression<Func<ProjectRole, Guid>> GetIdFromObject()
         {
             return databaseObject => databaseObject.RelationId;