diff --git a/src/Project/Controllers/ProjectController.cs b/src/Project/Controllers/ProjectController.cs
index aeb220ee8f3d3d3cd888e84b21995c7ce9c08245..dd566c4693cafcc438d5a8886b8e488901c1a37c 100644
--- a/src/Project/Controllers/ProjectController.cs
+++ b/src/Project/Controllers/ProjectController.cs
@@ -44,9 +44,6 @@ namespace Coscine.Api.Project.Controllers
         private readonly InvitationModel _invitationModel;
         private readonly RoleModel _roleModel;
         private readonly UserModel _userModel;
-        private readonly int _maxAvailable = 100;
-        private readonly string _userUrlPrefix = "https://purl.org/coscine/users";
-        private readonly Uri _orgPrefixUrl = new Uri("http://www.w3.org/ns/org#");
         private readonly RdfStoreConnector _rdfStoreConnector;
 
         /// <summary>
@@ -213,10 +210,16 @@ namespace Coscine.Api.Project.Controllers
                 Id = x.Id,
                 Name = x.DisplayName,
                 Used = CalculateUsed(x, projectGuid),
-                Allocated = projectQuota == null ? 0 : projectQuota.Quota
+                Allocated = projectQuota == null ? 0 : projectQuota.Quota,
+                Maximum = projectQuota.MaxQuota
             };
         }
 
+        private int GetMaxQuota(Guid projectId, Guid resourceTypeId)
+        {
+            return _projectQuotaModel.GetWhere(x => x.ProjectId == projectId && x.ResourceTypeId == resourceTypeId).MaxQuota;
+        }
+
         private int CalculateUsed(ResourceType resourceType, Guid projectId)
         {
             var resourceTypeDefinition = ResourceTypeFactory.CreateResourceTypeObject(resourceType.DisplayName, _configuration);
@@ -281,7 +284,8 @@ namespace Coscine.Api.Project.Controllers
                 Id = resourceTypeGuid,
                 Name = resourceType.DisplayName,
                 Used = CalculateUsed(resourceType, projectGuid),
-                Allocated = projectQuota.Quota
+                Allocated = projectQuota.Quota,
+                Maximum = projectQuota.MaxQuota
             };
 
             return Json(projectQuotaReturnObject);
@@ -327,7 +331,7 @@ namespace Coscine.Api.Project.Controllers
                 return NotFound($"Could not find resourceType with id: {resourceTypeId}");
             }
 
-            return Json(new MaxProjectQuota { Id = resourceTypeGuid, Available = _maxAvailable });
+            return Json(new MaxProjectQuota { Id = resourceTypeGuid, Available = GetMaxQuota(projectGuid, resourceTypeGuid) });
         }
 
         /// <summary>
@@ -371,9 +375,16 @@ namespace Coscine.Api.Project.Controllers
                 return NotFound($"Could not find resourceType with id: {resourceTypeId}");
             }
 
-            if (resourceType.DisplayName.Equals("rdss3"))
+            var resourceTypeDefinition = ResourceTypeFactory.CreateResourceTypeObject(resourceType.DisplayName, _configuration);
+
+            if (resourceTypeDefinition == null)
             {
-                return BadRequest($"Cannot adjust quota for rdss3.");
+                return BadRequest($"No provider for: \"{resourceType.DisplayName}\".");
+            }
+
+            if (!resourceTypeDefinition.GetResourceTypeInformation().Result.IsQuotaAdjustable)
+            {
+                return BadRequest($"Cannot adjust quota for {resourceType.DisplayName}.");
             }
 
             if (updateProjectQuotaObject.Allocated < 0)
@@ -389,9 +400,11 @@ namespace Coscine.Api.Project.Controllers
                 return BadRequest($"Cannot set quota ({updateProjectQuotaObject.Allocated}) below the used value ({used}).");
             }
 
-            if (updateProjectQuotaObject.Allocated > _maxAvailable)
+            var maxAvailabe = GetMaxQuota(projectGuid, resourceTypeGuid);
+
+            if (updateProjectQuotaObject.Allocated > maxAvailabe)
             {
-                return BadRequest($"Cannot set quota to {updateProjectQuotaObject.Allocated}. It would exceed the limit of {_maxAvailable}");
+                return BadRequest($"Cannot set quota to {updateProjectQuotaObject.Allocated}. It would exceed the limit of {maxAvailabe}");
             }
 
             projectQuotaForCurrent.Quota = updateProjectQuotaObject.Allocated;
diff --git a/src/Project/Project.csproj b/src/Project/Project.csproj
index 3891196b9f1ad49bdc8e23191b97ba5532dae79f..c4b5f3f1f93780ab9495d21576af7f0a685da627 100644
--- a/src/Project/Project.csproj
+++ b/src/Project/Project.csproj
@@ -23,5 +23,6 @@
 		<PackageReference Include="Coscine.Logging" Version="2.*-*" />
 		<PackageReference Include="Coscine.Metadata" Version="2.*-*" />
 		<PackageReference Include="Coscine.ResourceLoader" Version="2.*-*" />
+		<PackageReference Include="Coscine.ResourceTypeBase" Version="2.*-*" />
 	</ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Project/ReturnObjects/ProjectQuotaReturnObject.cs b/src/Project/ReturnObjects/ProjectQuotaReturnObject.cs
index e2a218f557e5e77aa23505f410b98aace5260f6e..a8afcbffe361fb840d8b300e84ae9d24494729ca 100644
--- a/src/Project/ReturnObjects/ProjectQuotaReturnObject.cs
+++ b/src/Project/ReturnObjects/ProjectQuotaReturnObject.cs
@@ -23,5 +23,10 @@ namespace Coscine.Api.Project.ReturnObjects
         /// How much space is availabe to be taken by resources (in gb).
         /// </summary>
         public int Allocated { get; set; }
+
+        /// <summary>
+        /// Maximum amount of quota (in gb).
+        /// </summary>
+        public int Maximum { get; set; }
     }
 }