diff --git a/GitVersion.yml b/GitVersion.yml
index 1bdc0fe219f5f35d8a024a66d9fd715f44539640..5a111397d4a13dbd97c0549853e62ebaf3abd2cf 100644
--- a/GitVersion.yml
+++ b/GitVersion.yml
@@ -1,5 +1,5 @@
 mode: ContinuousDeployment
-next-version: 1.0.0
+next-version: 2.22.0
 major-version-bump-message: 'Breaking:'
 minor-version-bump-message: '(Update|New):'
 patch-version-bump-message: 'Fix:'
diff --git a/src/Database.Actions/Database.Actions.csproj b/src/Database.Actions/Database.Actions.csproj
index 28142ceb29b50340546c805d9eabfd038dad2de9..318d986bed6d52488e6d6bfff7a0129043ef0d12 100644
--- a/src/Database.Actions/Database.Actions.csproj
+++ b/src/Database.Actions/Database.Actions.csproj
@@ -4,7 +4,7 @@
 		<RootNamespace>Coscine.Database.Actions</RootNamespace>
 		<AssemblyName>Coscine.Database.Actions</AssemblyName>
 		<TargetFramework>net6.0</TargetFramework>
-		<Version>2.20.0</Version>
+		<Version>2.21.0</Version>
 	</PropertyGroup>
 
 	<ItemGroup>
diff --git a/src/Database.Tests/Database.Tests.csproj b/src/Database.Tests/Database.Tests.csproj
index 953c5b59c8001f11372f2ceef81efc0c0dbc85ea..cc816e62f794183ce9dcb5bc112f4907ef1b6d36 100644
--- a/src/Database.Tests/Database.Tests.csproj
+++ b/src/Database.Tests/Database.Tests.csproj
@@ -5,7 +5,7 @@
 		<AssemblyName>Coscine.Database.Tests</AssemblyName>
 		<TargetFramework>net6.0</TargetFramework>
 		<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
-		<Version>2.20.0</Version>
+		<Version>2.21.0</Version>
 	</PropertyGroup>
 
 	<ItemGroup>
diff --git a/src/Database/Database.csproj b/src/Database/Database.csproj
index bddb13c83d2ef7ba7fae1b921b141a49f7788768..523494d1e27df1bcd4eeea8d3dbe5224b41356e8 100644
--- a/src/Database/Database.csproj
+++ b/src/Database/Database.csproj
@@ -4,9 +4,9 @@
 		<RootNamespace>Coscine.Database</RootNamespace>
 		<AssemblyName>Coscine.Database</AssemblyName>
 		<TargetFramework>net6.0</TargetFramework>
-		<Version>2.20.0</Version>
+		<Version>2.21.0</Version>
 	</PropertyGroup>
-	
+
 	<PropertyGroup>
 		<Authors>RWTH Aachen University</Authors>
 		<Company>IT Center, RWTH Aachen University</Company>
@@ -16,23 +16,23 @@
 		<PackageProjectUrl>https://git.rwth-aachen.de/coscine/backend/libraries/database</PackageProjectUrl>
 		<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
 	</PropertyGroup>
-	
+
 	<PropertyGroup>
 		<SignAssembly>true</SignAssembly>
 		<AssemblyOriginatorKeyFile>Coscine.Database.Key.snk</AssemblyOriginatorKeyFile>
 	</PropertyGroup>
-	
+
 	<ItemGroup>
 		<None Include="Coscine.Database.Key.snk" />
 		<Reference Include="System.Web" Condition="'$(TargetFramework)' == 'net461'" />
 	</ItemGroup>
-	
+
 	<ItemGroup>
 		<Compile Include="..\Scaffolding\DataModel\*.*">
 			<Link>DataModel\%(Filename)%(Extension)</Link>
 		</Compile>
 	</ItemGroup>
-	
+
 	<ItemGroup>
 		<PackageReference Include="Coscine.Configuration" Version="*-*" />
 		<PackageReference Include="LinqKit" Version="1.2.3" />
@@ -40,7 +40,7 @@
 		<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.11" PrivateAssets="all" />
 		<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.11" />
 	</ItemGroup>
-	
+
 	<PropertyGroup>
 		<LangVersion>Preview</LangVersion>
 	</PropertyGroup>
diff --git a/src/Database/Models/UserModel.cs b/src/Database/Models/UserModel.cs
index a4f0efcf5222effe2ff063b3ca27a21aaa8b83e0..71043d881941b8e4f5b1d7205c560c076ec39ec2 100644
--- a/src/Database/Models/UserModel.cs
+++ b/src/Database/Models/UserModel.cs
@@ -65,7 +65,6 @@ namespace Coscine.Database.Models
                 user.Title == null ? null : new TitleObject(user.Title.Id, user.Title.DisplayName),
                 user.Language == null ? null : new LanguageObject(user.Language.Id, user.Language.DisplayName, user.Language.Abbreviation),
                 user.Organization,
-                user.Institute,
                 disciplines,
                 false,
                 externalAuthenticators);
@@ -78,7 +77,6 @@ namespace Coscine.Database.Models
             user.Surname = userObject.Surname;
             user.DisplayName = userObject.DisplayName;
             user.Organization = userObject.Organization;
-            user.Institute = userObject.Institute;
             user.LanguageId = userObject.Language?.Id;
             SetDisciplines(user, userObject.Disciplines);
             return Update(user);
diff --git a/src/Database/ReturnObjects/UserObject.cs b/src/Database/ReturnObjects/UserObject.cs
index 959285634286b12f6297d863921085473b5e0a1a..daa9f425875205b8a1741d32704832290c58a5e3 100644
--- a/src/Database/ReturnObjects/UserObject.cs
+++ b/src/Database/ReturnObjects/UserObject.cs
@@ -24,15 +24,13 @@ namespace Coscine.Database.ReturnObjects
 
         public string Organization { get; set; }
 
-        public string Institute { get; set; }
-
         public IEnumerable<DisciplineObject> Disciplines { get; set; }
 
         public bool IsRegistered { get; set; }
 
         public IEnumerable<ExternalAuthenticatorsObject> ExternalAuthenticators { get; set; }
 
-        public UserObject(Guid id, string displayName, string givenname, string surname, string emailAddress, bool hasProjectRole = false, TitleObject title = null, LanguageObject language = null, string organization = "", string institute = "", IEnumerable<DisciplineObject> disciplines = null, bool isRegistered = false, IEnumerable<ExternalAuthenticatorsObject> externalAuthenticators = null)
+        public UserObject(Guid id, string displayName, string givenname, string surname, string emailAddress, bool hasProjectRole = false, TitleObject title = null, LanguageObject language = null, string organization = "", IEnumerable<DisciplineObject> disciplines = null, bool isRegistered = false, IEnumerable<ExternalAuthenticatorsObject> externalAuthenticators = null)
         {
             Id = id;
             DisplayName = displayName;
@@ -43,7 +41,6 @@ namespace Coscine.Database.ReturnObjects
             Title = title;
             Language = language;
             Organization = organization;
-            Institute = institute;
             Disciplines = disciplines;
 
             HasProjectRole = hasProjectRole;
diff --git a/src/Scaffolding/DataModel/ExternalAuthenticator.cs b/src/Scaffolding/DataModel/ExternalAuthenticator.cs
index f629158b5c989fb9b1728f2d3150331b6be95686..61115f145b37f3b523f9350017c160668af4b8c7 100644
--- a/src/Scaffolding/DataModel/ExternalAuthenticator.cs
+++ b/src/Scaffolding/DataModel/ExternalAuthenticator.cs
@@ -12,7 +12,6 @@ namespace Coscine.Database.DataModel
 
         public Guid Id { get; set; }
         public string DisplayName { get; set; }
-        public string IssuerUri { get; set; }
 
         public virtual ICollection<ExternalId> ExternalIds { get; set; }
     }
diff --git a/src/Scaffolding/DataModel/ExternalId.cs b/src/Scaffolding/DataModel/ExternalId.cs
index e85c13735910d804be2ed1cdfe6e63530f32dbb6..b25c56d450796c23dce8fd20690b54c7b166b5ce 100644
--- a/src/Scaffolding/DataModel/ExternalId.cs
+++ b/src/Scaffolding/DataModel/ExternalId.cs
@@ -10,7 +10,6 @@ namespace Coscine.Database.DataModel
         public Guid ExternalAuthenticatorId { get; set; }
         public string ExternalId1 { get; set; }
         public string Organization { get; set; }
-        public string IssuerUri { get; set; }
 
         public virtual ExternalAuthenticator ExternalAuthenticator { get; set; }
         public virtual User User { get; set; }
diff --git a/src/Scaffolding/DataModel/Model.cs b/src/Scaffolding/DataModel/Model.cs
index 9a2dde6d57232edfdacfba8bc3d2353352b21a68..71976797f72706f2d91a3b3ce335f0cdce60ea53 100644
--- a/src/Scaffolding/DataModel/Model.cs
+++ b/src/Scaffolding/DataModel/Model.cs
@@ -36,6 +36,7 @@ namespace Coscine.Database.DataModel
         public virtual DbSet<Project> Projects { get; set; }
         public virtual DbSet<ProjectDiscipline> ProjectDisciplines { get; set; }
         public virtual DbSet<ProjectInstitute> ProjectInstitutes { get; set; }
+        public virtual DbSet<ProjectPublicationRequest> ProjectPublicationRequests { get; set; }
         public virtual DbSet<ProjectQuota> ProjectQuotas { get; set; }
         public virtual DbSet<ProjectResource> ProjectResources { get; set; }
         public virtual DbSet<ProjectRole> ProjectRoles { get; set; }
@@ -168,15 +169,11 @@ namespace Coscine.Database.DataModel
 
             modelBuilder.Entity<ExternalAuthenticator>(entity =>
             {
-                entity.HasIndex(e => e.IssuerUri, "IX_IssuerUri");
-
                 entity.Property(e => e.Id).HasDefaultValueSql("(newid())");
 
                 entity.Property(e => e.DisplayName)
                     .IsRequired()
                     .HasMaxLength(50);
-
-                entity.Property(e => e.IssuerUri).HasMaxLength(255);
             });
 
             modelBuilder.Entity<ExternalId>(entity =>
@@ -187,8 +184,6 @@ namespace Coscine.Database.DataModel
 
                 entity.HasIndex(e => e.UserId, "IX_ExternalIds_UserId");
 
-                entity.HasIndex(e => e.IssuerUri, "IX_IssuerUri");
-
                 entity.Property(e => e.RelationId).HasDefaultValueSql("(newid())");
 
                 entity.Property(e => e.ExternalId1)
@@ -196,11 +191,6 @@ namespace Coscine.Database.DataModel
                     .HasMaxLength(255)
                     .HasColumnName("ExternalId");
 
-                entity.Property(e => e.IssuerUri)
-                    .IsRequired()
-                    .HasMaxLength(255)
-                    .HasDefaultValueSql("(N'')");
-
                 entity.Property(e => e.Organization).HasMaxLength(255);
 
                 entity.HasOne(d => d.ExternalAuthenticator)
@@ -478,6 +468,46 @@ namespace Coscine.Database.DataModel
                     .HasConstraintName("FK_ProjectInstitute_ProjectId_Projects_Id");
             });
 
+            modelBuilder.Entity<ProjectPublicationRequest>(entity =>
+            {
+                entity.HasIndex(e => e.CreatorId, "IX_ProjectPublicationRequests_CreatorId");
+
+                entity.HasIndex(e => e.ProjectId, "IX_ProjectPublicationRequests_ProjectId");
+
+                entity.Property(e => e.Id).ValueGeneratedNever();
+
+                entity.Property(e => e.DateCreated)
+                    .HasColumnType("datetime")
+                    .HasDefaultValueSql("(getutcdate())");
+
+                entity.Property(e => e.PublicationServiceRorId).IsRequired();
+
+                entity.HasOne(d => d.Creator)
+                    .WithMany(p => p.ProjectPublicationRequests)
+                    .HasForeignKey(d => d.CreatorId)
+                    .OnDelete(DeleteBehavior.ClientSetNull);
+
+                entity.HasOne(d => d.Project)
+                    .WithMany(p => p.ProjectPublicationRequests)
+                    .HasForeignKey(d => d.ProjectId)
+                    .OnDelete(DeleteBehavior.ClientSetNull);
+
+                entity.HasMany(d => d.Resources)
+                    .WithMany(p => p.PublicationRequests)
+                    .UsingEntity<Dictionary<string, object>>(
+                        "ProjectPublicationRequestResource",
+                        l => l.HasOne<Resource>().WithMany().HasForeignKey("ResourcesId"),
+                        r => r.HasOne<ProjectPublicationRequest>().WithMany().HasForeignKey("PublicationRequestsId"),
+                        j =>
+                        {
+                            j.HasKey("PublicationRequestsId", "ResourcesId");
+
+                            j.ToTable("ProjectPublicationRequestResource");
+
+                            j.HasIndex(new[] { "ResourcesId" }, "IX_ProjectPublicationRequestResource_ResourcesId");
+                        });
+            });
+
             modelBuilder.Entity<ProjectQuota>(entity =>
             {
                 entity.HasKey(e => e.RelationId);
@@ -854,8 +884,6 @@ namespace Coscine.Database.DataModel
 
                 entity.Property(e => e.Givenname).HasMaxLength(200);
 
-                entity.Property(e => e.Institute).HasMaxLength(200);
-
                 entity.Property(e => e.LatestActivity)
                     .HasColumnType("datetime")
                     .HasDefaultValueSql("(getutcdate())");
diff --git a/src/Scaffolding/DataModel/Project.cs b/src/Scaffolding/DataModel/Project.cs
index 24f0af4476a7c91e9ed09f11a509a3ed628c85f9..8e31fa931ea6f39729e1bb529b39c2ea80d8e68b 100644
--- a/src/Scaffolding/DataModel/Project.cs
+++ b/src/Scaffolding/DataModel/Project.cs
@@ -11,6 +11,7 @@ namespace Coscine.Database.DataModel
             Invitations = new HashSet<Invitation>();
             ProjectDisciplines = new HashSet<ProjectDiscipline>();
             ProjectInstitutes = new HashSet<ProjectInstitute>();
+            ProjectPublicationRequests = new HashSet<ProjectPublicationRequest>();
             ProjectQuotas = new HashSet<ProjectQuota>();
             ProjectResources = new HashSet<ProjectResource>();
             ProjectRoles = new HashSet<ProjectRole>();
@@ -38,6 +39,7 @@ namespace Coscine.Database.DataModel
         public virtual ICollection<Invitation> Invitations { get; set; }
         public virtual ICollection<ProjectDiscipline> ProjectDisciplines { get; set; }
         public virtual ICollection<ProjectInstitute> ProjectInstitutes { get; set; }
+        public virtual ICollection<ProjectPublicationRequest> ProjectPublicationRequests { get; set; }
         public virtual ICollection<ProjectQuota> ProjectQuotas { get; set; }
         public virtual ICollection<ProjectResource> ProjectResources { get; set; }
         public virtual ICollection<ProjectRole> ProjectRoles { get; set; }
diff --git a/src/Scaffolding/DataModel/ProjectPublicationRequest.cs b/src/Scaffolding/DataModel/ProjectPublicationRequest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..500a6f04868be73e13315cca17f398cbf61b8674
--- /dev/null
+++ b/src/Scaffolding/DataModel/ProjectPublicationRequest.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+
+namespace Coscine.Database.DataModel
+{
+    public partial class ProjectPublicationRequest
+    {
+        public ProjectPublicationRequest()
+        {
+            Resources = new HashSet<Resource>();
+        }
+
+        public Guid Id { get; set; }
+        public Guid ProjectId { get; set; }
+        public string PublicationServiceRorId { get; set; }
+        public Guid CreatorId { get; set; }
+        public DateTime DateCreated { get; set; }
+        public string Message { get; set; }
+
+        public virtual User Creator { get; set; }
+        public virtual Project Project { get; set; }
+
+        public virtual ICollection<Resource> Resources { get; set; }
+    }
+}
diff --git a/src/Scaffolding/DataModel/Resource.cs b/src/Scaffolding/DataModel/Resource.cs
index 3d1224b7e5d0fa645fa222afe8fd81b5f6dc1ecd..65d8e23c7971ace761bb6ffeaffd0d997d5764ce 100644
--- a/src/Scaffolding/DataModel/Resource.cs
+++ b/src/Scaffolding/DataModel/Resource.cs
@@ -10,6 +10,7 @@ namespace Coscine.Database.DataModel
             MetadataExtractions = new HashSet<MetadataExtraction>();
             ProjectResources = new HashSet<ProjectResource>();
             ResourceDisciplines = new HashSet<ResourceDiscipline>();
+            PublicationRequests = new HashSet<ProjectPublicationRequest>();
         }
 
         public Guid Id { get; set; }
@@ -36,5 +37,7 @@ namespace Coscine.Database.DataModel
         public virtual ICollection<MetadataExtraction> MetadataExtractions { get; set; }
         public virtual ICollection<ProjectResource> ProjectResources { get; set; }
         public virtual ICollection<ResourceDiscipline> ResourceDisciplines { get; set; }
+
+        public virtual ICollection<ProjectPublicationRequest> PublicationRequests { get; set; }
     }
 }
diff --git a/src/Scaffolding/DataModel/User.cs b/src/Scaffolding/DataModel/User.cs
index 204320e5e55a2750d68e077419a69a4fd5548c81..ce69a28adc2bbc3380ce3d666e7260a9bc089a66 100644
--- a/src/Scaffolding/DataModel/User.cs
+++ b/src/Scaffolding/DataModel/User.cs
@@ -13,6 +13,7 @@ namespace Coscine.Database.DataModel
             ExternalIds = new HashSet<ExternalId>();
             GroupMemberships = new HashSet<GroupMembership>();
             Invitations = new HashSet<Invitation>();
+            ProjectPublicationRequests = new HashSet<ProjectPublicationRequest>();
             ProjectRoles = new HashSet<ProjectRole>();
             Tosaccepteds = new HashSet<Tosaccepted>();
             UserDisciplines = new HashSet<UserDiscipline>();
@@ -27,8 +28,8 @@ namespace Coscine.Database.DataModel
         public string Organization { get; set; }
         public Guid? TitleId { get; set; }
         public Guid? LanguageId { get; set; }
-        public string Institute { get; set; }
         public DateTime? LatestActivity { get; set; }
+        public DateTime? DeletedAt { get; set; }
 
         public virtual Language Language { get; set; }
         public virtual Title Title { get; set; }
@@ -38,6 +39,7 @@ namespace Coscine.Database.DataModel
         public virtual ICollection<ExternalId> ExternalIds { get; set; }
         public virtual ICollection<GroupMembership> GroupMemberships { get; set; }
         public virtual ICollection<Invitation> Invitations { get; set; }
+        public virtual ICollection<ProjectPublicationRequest> ProjectPublicationRequests { get; set; }
         public virtual ICollection<ProjectRole> ProjectRoles { get; set; }
         public virtual ICollection<Tosaccepted> Tosaccepteds { get; set; }
         public virtual ICollection<UserDiscipline> UserDisciplines { get; set; }
diff --git a/src/Scaffolding/Scaffolding.csproj b/src/Scaffolding/Scaffolding.csproj
index 15b68fec33c543f14a0acc459010ccc28db92ebf..850f7a3b89d5b62eab0dfb9dbf9a33992caedfc5 100644
--- a/src/Scaffolding/Scaffolding.csproj
+++ b/src/Scaffolding/Scaffolding.csproj
@@ -3,9 +3,9 @@
 		<RootNamespace>Coscine.Database</RootNamespace>
 		<AssemblyName>Coscine.Database.Scaffolding</AssemblyName>
 		<TargetFramework>net6.0</TargetFramework>
-		<Version>2.20.0</Version>
+		<Version>2.21.0</Version>
 	</PropertyGroup>
-	
+
 	<ItemGroup>
 		<PackageReference Include="Inflector.NetStandard" Version="1.2.2" />
 		<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.11" PrivateAssets="all" />