diff --git a/src/Project.Tests/DefaultControllerTests.cs b/src/Project.Tests/DefaultControllerTests.cs
index 146d7570c8925290090f524c505333113217e9ac..23a03e8ecc96c23982af9dd2852cde5520bc1ff9 100644
--- a/src/Project.Tests/DefaultControllerTests.cs
+++ b/src/Project.Tests/DefaultControllerTests.cs
@@ -46,7 +46,8 @@ namespace Coscine.Api.Project.Tests
             DisciplineModel disciplineModel = new DisciplineModel();
             Discipline = new Discipline()
             {
-                DisplayName = "TestDiscipline",
+                DisplayNameDe = "TestDiscipline",
+                DisplayNameEn = "TestDiscipline",
                 Url = "http://rwth-aachen.de"
             };
             disciplineModel.Insert(Discipline);
diff --git a/src/Project.Tests/Project.Tests.csproj b/src/Project.Tests/Project.Tests.csproj
index 9b8843fcb2c77d99a8d227d25ab6090331d32245..6df5275950f7a0fbb3ab7bf63c20f9703a64a2a3 100644
--- a/src/Project.Tests/Project.Tests.csproj
+++ b/src/Project.Tests/Project.Tests.csproj
@@ -56,17 +56,17 @@
     <Reference Include="Consul, Version=0.7.2.6, Culture=neutral, PublicKeyToken=20a6ad9a81df1d95, processorArchitecture=MSIL">
       <HintPath>..\packages\Consul.0.7.2.6\lib\net45\Consul.dll</HintPath>
     </Reference>
-    <Reference Include="Coscine.Action, Version=1.3.1.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\Coscine.Action.1.3.1\lib\net461\Coscine.Action.dll</HintPath>
+    <Reference Include="Coscine.Action, Version=1.6.0.0, Culture=neutral, processorArchitecture=AMD64">
+      <HintPath>..\packages\Coscine.Action.1.6.0\lib\net461\Coscine.Action.dll</HintPath>
     </Reference>
-    <Reference Include="Coscine.ApiCommons, Version=1.2.1.0, Culture=neutral, PublicKeyToken=af4c1345df96546b, processorArchitecture=MSIL">
-      <HintPath>..\packages\Coscine.ApiCommons.1.2.1\lib\net461\Coscine.ApiCommons.dll</HintPath>
+    <Reference Include="Coscine.ApiCommons, Version=1.2.2.0, Culture=neutral, PublicKeyToken=af4c1345df96546b, processorArchitecture=MSIL">
+      <HintPath>..\packages\Coscine.ApiCommons.1.2.2\lib\net461\Coscine.ApiCommons.dll</HintPath>
     </Reference>
     <Reference Include="Coscine.Configuration, Version=1.4.0.0, Culture=neutral, PublicKeyToken=ce3d7a32d7dc1e5a, processorArchitecture=MSIL">
       <HintPath>..\packages\Coscine.Configuration.1.4.0\lib\net461\Coscine.Configuration.dll</HintPath>
     </Reference>
-    <Reference Include="Coscine.Database, Version=1.8.0.0, Culture=neutral, PublicKeyToken=767d77427707b70a, processorArchitecture=MSIL">
-      <HintPath>..\packages\Coscine.Database.1.8.0\lib\net461\Coscine.Database.dll</HintPath>
+    <Reference Include="Coscine.Database, Version=1.9.0.0, Culture=neutral, PublicKeyToken=767d77427707b70a, processorArchitecture=MSIL">
+      <HintPath>..\packages\Coscine.Database.1.9.0\lib\net461\Coscine.Database.dll</HintPath>
     </Reference>
     <Reference Include="Coscine.ProxyApi, Version=1.2.0.0, Culture=neutral, processorArchitecture=MSIL">
       <HintPath>..\packages\Coscine.ProxyApi.1.2.0\lib\net461\Coscine.ProxyApi.dll</HintPath>
@@ -362,14 +362,14 @@
     <Reference Include="microsoft.identitymodel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       <HintPath>..\packages\Microsoft.IdentityModel.7.0.0\lib\net35\microsoft.identitymodel.dll</HintPath>
     </Reference>
-    <Reference Include="Microsoft.IdentityModel.JsonWebTokens, Version=5.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\Microsoft.IdentityModel.JsonWebTokens.5.5.0\lib\net461\Microsoft.IdentityModel.JsonWebTokens.dll</HintPath>
+    <Reference Include="Microsoft.IdentityModel.JsonWebTokens, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <HintPath>..\packages\Microsoft.IdentityModel.JsonWebTokens.5.6.0\lib\net461\Microsoft.IdentityModel.JsonWebTokens.dll</HintPath>
     </Reference>
-    <Reference Include="Microsoft.IdentityModel.Logging, Version=5.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\Microsoft.IdentityModel.Logging.5.5.0\lib\net461\Microsoft.IdentityModel.Logging.dll</HintPath>
+    <Reference Include="Microsoft.IdentityModel.Logging, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <HintPath>..\packages\Microsoft.IdentityModel.Logging.5.6.0\lib\net461\Microsoft.IdentityModel.Logging.dll</HintPath>
     </Reference>
-    <Reference Include="Microsoft.IdentityModel.Tokens, Version=5.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\Microsoft.IdentityModel.Tokens.5.5.0\lib\net461\Microsoft.IdentityModel.Tokens.dll</HintPath>
+    <Reference Include="Microsoft.IdentityModel.Tokens, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <HintPath>..\packages\Microsoft.IdentityModel.Tokens.5.6.0\lib\net461\Microsoft.IdentityModel.Tokens.dll</HintPath>
     </Reference>
     <Reference Include="Microsoft.Net.Http.Headers, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
       <HintPath>..\packages\Microsoft.Net.Http.Headers.2.2.0\lib\netstandard2.0\Microsoft.Net.Http.Headers.dll</HintPath>
@@ -428,8 +428,8 @@
       <Private>True</Private>
     </Reference>
     <Reference Include="System.Drawing" />
-    <Reference Include="System.IdentityModel.Tokens.Jwt, Version=5.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\System.IdentityModel.Tokens.Jwt.5.5.0\lib\net461\System.IdentityModel.Tokens.Jwt.dll</HintPath>
+    <Reference Include="System.IdentityModel.Tokens.Jwt, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.IdentityModel.Tokens.Jwt.5.6.0\lib\net461\System.IdentityModel.Tokens.Jwt.dll</HintPath>
     </Reference>
     <Reference Include="System.IO, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
       <HintPath>..\packages\System.IO.4.3.0\lib\net462\System.IO.dll</HintPath>
diff --git a/src/Project.Tests/ProjectControllerTests.cs b/src/Project.Tests/ProjectControllerTests.cs
index d58925000986501d2e1309460d8766664cde61ec..d7792930d0b013539f663ba38f92307e765851e7 100644
--- a/src/Project.Tests/ProjectControllerTests.cs
+++ b/src/Project.Tests/ProjectControllerTests.cs
@@ -105,7 +105,7 @@ namespace Coscine.Api.Project.Tests
         public void TestControllerStore()
         {
             ProjectObject newProjectObject = new ProjectObject(Guid.NewGuid(), "NewProject", "NewDisplayName", DateTime.Now, DateTime.Now.AddYears(1), "test2;test3", "abc", "investigator", "grandId", 
-                                                                new List<DisciplineObject>() { new DisciplineObject(Discipline.Id, Discipline.Url, Discipline.DisplayName) },
+                                                                new List<DisciplineObject>() { new DisciplineObject(Discipline.Id, Discipline.Url, Discipline.DisplayNameDe, Discipline.DisplayNameEn) },
                                                                 new List<InstituteObject>() { new InstituteObject(Institute.Id, Institute.IKZ, Institute.DisplayName) },
                                                                 new VisibilityObject(Visibility.Id, Visibility.DisplayName));
 
@@ -140,7 +140,7 @@ namespace Coscine.Api.Project.Tests
         public void TestControllerDelete()
         {
             ProjectObject newProjectObject = new ProjectObject(Guid.NewGuid(), "NewProject", "NewDisplayName", DateTime.Now, DateTime.Now.AddYears(1), "test2;test3", "abc", "investigator", "grandId",
-                                                                new List<DisciplineObject>() { new DisciplineObject(Discipline.Id, Discipline.Url, Discipline.DisplayName) },
+                                                                new List<DisciplineObject>() { new DisciplineObject(Discipline.Id, Discipline.Url, Discipline.DisplayNameDe, Discipline.DisplayNameEn) },
                                                                 new List<InstituteObject>() { new InstituteObject(Institute.Id, Institute.IKZ, Institute.DisplayName) },
                                                                 new VisibilityObject(Visibility.Id, Visibility.DisplayName));
 
@@ -174,7 +174,7 @@ namespace Coscine.Api.Project.Tests
         public void TestControllerDeleteWithSubProjects()
         {
             ProjectObject newProjectObject = new ProjectObject(Guid.NewGuid(), "NewProject", "NewDisplayName", DateTime.Now, DateTime.Now.AddYears(1), "test2;test3", "abc", "investigator", "grandId",
-                                                                new List<DisciplineObject>() { new DisciplineObject(Discipline.Id, Discipline.Url, Discipline.DisplayName) },
+                                                                new List<DisciplineObject>() { new DisciplineObject(Discipline.Id, Discipline.Url, Discipline.DisplayNameDe, Discipline.DisplayNameEn) },
                                                                 new List<InstituteObject>() { new InstituteObject(Institute.Id, Institute.IKZ, Institute.DisplayName) },
                                                                 new VisibilityObject(Visibility.Id, Visibility.DisplayName));
 
@@ -189,7 +189,7 @@ namespace Coscine.Api.Project.Tests
             stream.Close();
 
             newProjectObject = new ProjectObject(Guid.NewGuid(), "NewProject", "NewDisplayName", DateTime.Now, DateTime.Now.AddYears(1), "test2;test3", "abc", "investigator", "grandId",
-                                                                new List<DisciplineObject>() { new DisciplineObject(Discipline.Id, Discipline.Url, Discipline.DisplayName) },
+                                                                new List<DisciplineObject>() { new DisciplineObject(Discipline.Id, Discipline.Url, Discipline.DisplayNameDe, Discipline.DisplayNameEn) },
                                                                 new List<InstituteObject>() { new InstituteObject(Institute.Id, Institute.IKZ, Institute.DisplayName) },
                                                                 new VisibilityObject(Visibility.Id, Visibility.DisplayName),
                                                                 createdProjectObject.Id);
@@ -217,7 +217,7 @@ namespace Coscine.Api.Project.Tests
         public void TestControllerStoreWithSubProject()
         {
             ProjectObject newProjectObject = new ProjectObject(Guid.NewGuid(), "NewProject", "NewDisplayName", DateTime.Now, DateTime.Now.AddYears(1), "test2;test3", "abc", "investigator", "grandId",
-                                                                    new List<DisciplineObject>() { new DisciplineObject(Discipline.Id, Discipline.Url, Discipline.DisplayName) },
+                                                                    new List<DisciplineObject>() { new DisciplineObject(Discipline.Id, Discipline.Url, Discipline.DisplayNameDe, Discipline.DisplayNameEn) },
                                                                     new List<InstituteObject>() { new InstituteObject(Institute.Id, Institute.IKZ, Institute.DisplayName) },
                                                                     new VisibilityObject(Visibility.Id, Visibility.DisplayName));
 
@@ -229,7 +229,7 @@ namespace Coscine.Api.Project.Tests
             ProjectObject createdProjectObject = (ProjectObject)okObjectResult.Value;
 
             ProjectObject newSubProjectObject = new ProjectObject(Guid.NewGuid(), "NewSubProject", "NewDisplayNameSub", DateTime.Now, DateTime.Now.AddYears(1), "test2;test3", "abc", "investigator", "grandId",
-                                                                        new List<DisciplineObject>() { new DisciplineObject(Discipline.Id, Discipline.Url, Discipline.DisplayName) },
+                                                                        new List<DisciplineObject>() { new DisciplineObject(Discipline.Id, Discipline.Url, Discipline.DisplayNameDe, Discipline.DisplayNameEn) },
                                                                         new List<InstituteObject>() { new InstituteObject(Institute.Id, Institute.IKZ, Institute.DisplayName) },
                                                                         new VisibilityObject(Visibility.Id, Visibility.DisplayName), 
                                                                         createdProjectObject.Id);
diff --git a/src/Project.Tests/Properties/AssemblyInfo.cs b/src/Project.Tests/Properties/AssemblyInfo.cs
index e217d1d7bf9764e873de8e9cfa945b4d808efd29..7a72ddf9c9a21948d51027cd1ad6e485f33a2eb2 100644
--- a/src/Project.Tests/Properties/AssemblyInfo.cs
+++ b/src/Project.Tests/Properties/AssemblyInfo.cs
@@ -9,8 +9,8 @@ using System.Reflection;
 [assembly: AssemblyDescription("Project.Tests is a part of the CoScInE group.")]
 [assembly: AssemblyCompany("IT Center, RWTH Aachen University")]
 [assembly: AssemblyProduct("Project.Tests")]
-[assembly: AssemblyVersion("1.4.1.0")]
-[assembly: AssemblyFileVersion("1.4.1.0")]
-[assembly: AssemblyInformationalVersion("1.4.1.0")]
+[assembly: AssemblyVersion("1.7.1.0")]
+[assembly: AssemblyFileVersion("1.7.1.0")]
+[assembly: AssemblyInformationalVersion("1.7.1.0")]
 [assembly: AssemblyCopyright("2019 IT Center, RWTH Aachen University")]
 
diff --git a/src/Project.Tests/ResourceControllerTests.cs b/src/Project.Tests/ResourceControllerTests.cs
index 8c5d692dc929b7513497e258ee73378b9d1f5622..70cff59f23f3593b8114a91b44ae63a128165425 100644
--- a/src/Project.Tests/ResourceControllerTests.cs
+++ b/src/Project.Tests/ResourceControllerTests.cs
@@ -90,10 +90,11 @@ namespace Coscine.Api.Project.Tests
                 Guid.NewGuid(),
                 "Test",
                 "testR",
+                "testD",
                 "keys",
                 "usageR",
                 new ResourceTypeObject(Resources[0].Type.Id, Resources[0].Type.DisplayName),
-                new List<DisciplineObject>() { new DisciplineObject(Discipline.Id, Discipline.Url, Discipline.DisplayName) },
+                new List<DisciplineObject>() { new DisciplineObject(Discipline.Id, Discipline.Url, Discipline.DisplayNameDe, Discipline.DisplayNameEn) },
                 new VisibilityObject(Visibility.Id, Visibility.DisplayName),
                 new LicenseObject(License.Id, License.DisplayName),
                 JObject.FromObject(new RDSResourceTypeObject(Guid.NewGuid(), "PITLABTTEST", "accesskey", "secretkey")),
diff --git a/src/Project.Tests/app.config b/src/Project.Tests/app.config
index a4522c8ec90b9bf11d952ae9d3ae684788930732..f6dfb039b509aaf965b7964f472acb0b4be58c57 100644
--- a/src/Project.Tests/app.config
+++ b/src/Project.Tests/app.config
@@ -88,15 +88,15 @@
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="Coscine.Database" publicKeyToken="767d77427707b70a" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-1.8.0.0" newVersion="1.8.0.0" />
+        <bindingRedirect oldVersion="0.0.0.0-1.9.0.0" newVersion="1.9.0.0" />
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="System.IdentityModel.Tokens.Jwt" publicKeyToken="31bf3856ad364e35" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
+        <bindingRedirect oldVersion="0.0.0.0-5.6.0.0" newVersion="5.6.0.0" />
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="Microsoft.IdentityModel.Tokens" publicKeyToken="31bf3856ad364e35" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
+        <bindingRedirect oldVersion="0.0.0.0-5.6.0.0" newVersion="5.6.0.0" />
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="Coscine.SharePoint.Webparts.Vue" publicKeyToken="0fe8d3e516df6d98" culture="neutral" />
diff --git a/src/Project.Tests/packages.config b/src/Project.Tests/packages.config
index 65792be94db3206f7449256b9e651059387a9c3a..099b2ecc373f53b1e7de9c119bfc7c1dc5f16846 100644
--- a/src/Project.Tests/packages.config
+++ b/src/Project.Tests/packages.config
@@ -4,10 +4,10 @@
   <package id="AutoMapper.Extensions.Microsoft.DependencyInjection" version="6.0.0" targetFramework="net472" />
   <package id="Castle.Core" version="4.4.0" targetFramework="net472" />
   <package id="Consul" version="0.7.2.6" targetFramework="net472" />
-  <package id="Coscine.Action" version="1.3.1" targetFramework="net472" />
-  <package id="Coscine.ApiCommons" version="1.2.1" targetFramework="net472" />
+  <package id="Coscine.Action" version="1.6.0" targetFramework="net472" />
+  <package id="Coscine.ApiCommons" version="1.2.2" targetFramework="net472" />
   <package id="Coscine.Configuration" version="1.4.0" targetFramework="net472" />
-  <package id="Coscine.Database" version="1.8.0" targetFramework="net472" />
+  <package id="Coscine.Database" version="1.9.0" targetFramework="net472" />
   <package id="Coscine.ProxyApi" version="1.2.0" targetFramework="net472" />
   <package id="Coscine.SharePoint.Webparts.Vue" version="1.4.0" targetFramework="net472" />
   <package id="dotNetRDF" version="2.2.1" targetFramework="net472" />
@@ -112,9 +112,9 @@
   <package id="Microsoft.Extensions.Primitives" version="2.2.0" targetFramework="net472" />
   <package id="Microsoft.Extensions.WebEncoders" version="2.2.0" targetFramework="net472" />
   <package id="Microsoft.IdentityModel" version="7.0.0" targetFramework="net472" />
-  <package id="Microsoft.IdentityModel.JsonWebTokens" version="5.5.0" targetFramework="net472" />
-  <package id="Microsoft.IdentityModel.Logging" version="5.5.0" targetFramework="net472" />
-  <package id="Microsoft.IdentityModel.Tokens" version="5.5.0" targetFramework="net472" />
+  <package id="Microsoft.IdentityModel.JsonWebTokens" version="5.6.0" targetFramework="net472" />
+  <package id="Microsoft.IdentityModel.Logging" version="5.6.0" targetFramework="net472" />
+  <package id="Microsoft.IdentityModel.Tokens" version="5.6.0" targetFramework="net472" />
   <package id="Microsoft.Net.Http.Headers" version="2.2.0" targetFramework="net472" />
   <package id="Microsoft.Win32.Registry" version="4.5.0" targetFramework="net472" />
   <package id="Moq" version="4.12.0" targetFramework="net472" />
@@ -134,7 +134,7 @@
   <package id="System.Diagnostics.FileVersionInfo" version="4.3.0" targetFramework="net472" />
   <package id="System.Diagnostics.StackTrace" version="4.3.0" targetFramework="net472" />
   <package id="System.Dynamic.Runtime" version="4.3.0" targetFramework="net472" />
-  <package id="System.IdentityModel.Tokens.Jwt" version="5.5.0" targetFramework="net472" />
+  <package id="System.IdentityModel.Tokens.Jwt" version="5.6.0" targetFramework="net472" />
   <package id="System.IO" version="4.3.0" targetFramework="net472" />
   <package id="System.IO.Compression" version="4.3.0" targetFramework="net472" />
   <package id="System.IO.FileSystem" version="4.3.0" targetFramework="net472" />
diff --git a/src/Project/App.config b/src/Project/App.config
index 46cfafcc43a3efcd2492faefae8a1c06e2f2e0e4..0377893e70371aa9607fad0299905c9ec6f5cff9 100644
--- a/src/Project/App.config
+++ b/src/Project/App.config
@@ -91,15 +91,15 @@
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="Coscine.Database" publicKeyToken="767d77427707b70a" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-1.8.0.0" newVersion="1.8.0.0" />
+        <bindingRedirect oldVersion="0.0.0.0-1.9.0.0" newVersion="1.9.0.0" />
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="System.IdentityModel.Tokens.Jwt" publicKeyToken="31bf3856ad364e35" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
+        <bindingRedirect oldVersion="0.0.0.0-5.6.0.0" newVersion="5.6.0.0" />
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="Microsoft.IdentityModel.Tokens" publicKeyToken="31bf3856ad364e35" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
+        <bindingRedirect oldVersion="0.0.0.0-5.6.0.0" newVersion="5.6.0.0" />
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="Coscine.SharePoint.Webparts.Vue" publicKeyToken="0fe8d3e516df6d98" culture="neutral" />
diff --git a/src/Project/Controllers/DataSourceController.cs b/src/Project/Controllers/DataSourceController.cs
index 112e4833a781ccae8be62a40feab9e21062b2173..3e3a1ed2882a27be2d0bb4044ada9b0e93d4501f 100644
--- a/src/Project/Controllers/DataSourceController.cs
+++ b/src/Project/Controllers/DataSourceController.cs
@@ -1,6 +1,7 @@
 using Coscine.Api.Project.Models;
 using Coscine.Api.Project.ReturnObjects;
 using Coscine.ApiCommons;
+using Coscine.ApiCommons.Factories;
 using Coscine.ApiCommons.Utils;
 using Coscine.Configuration;
 using Coscine.Database.Model;
@@ -94,7 +95,7 @@ namespace Coscine.Api.Project.Controllers
                 }
                 else
                 {
-                    return FailedRequeset(response, path);
+                    return FailedRequest(response, path);
                 }
             }
         }
@@ -137,15 +138,13 @@ namespace Coscine.Api.Project.Controllers
                     }
                     else
                     {
-                        return FailedRequeset(response, path);
+                        return FailedRequest(response, path);
                     }
                 }
                 catch (Exception e)
                 {
-
                     Console.WriteLine(e);
                     return BadRequest(e);
-
                 }
             }
         }
@@ -188,15 +187,13 @@ namespace Coscine.Api.Project.Controllers
                     }
                     else
                     {
-                        return FailedRequeset(response, path);
+                        return FailedRequest(response, path);
                     }
                 }
                 catch (Exception e)
                 {
-
                     Console.WriteLine(e);
                     return BadRequest(e);
-
                 }
             }
         }
@@ -233,7 +230,7 @@ namespace Coscine.Api.Project.Controllers
             else
             {
                 // If the path is null, an empty string is added.
-                string url = $"{_configuration.GetString("coscine/global/waterbutler_url")}{resource.Type.DisplayName.ToLower()}/{path}";
+                string url = $"{_configuration.GetString("coscine/global/waterbutler_url")}{resource.Type.DisplayName.ToLower()}{path}";
 
                 var request = new HttpRequestMessage(HttpMethod.Delete, url);
                 request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authHeader);
@@ -248,26 +245,84 @@ namespace Coscine.Api.Project.Controllers
                     }
                     else
                     {
-                        return FailedRequeset(response, path);
+                        return FailedRequest(response, path);
                     }
                 }
                 catch (Exception e)
                 {
-
                     Console.WriteLine(e);
                     return BadRequest(e);
                 }
             }
         }
 
-        private IActionResult FailedRequeset(HttpResponseMessage response, string path)
+        [HttpPost("[controller]/validate")]
+        public async Task<IActionResult> IsResourceValid()
+        {
+            var path = "/";
+
+            JToken resource = ObjectFactory<JToken>.DeserializeFromStream(Request.Body);
+
+
+            string authHeader = null;
+            if (resource["type"]["displayName"].ToString().ToLower() == "rds")
+            {
+                RDSResourceType rdsResourceType = new RDSResourceType();
+                rdsResourceType.BucketName = resource["resourceTypeOption"]["BucketName"].ToString();
+                rdsResourceType.AccessKey = resource["resourceTypeOption"]["AccessKey"].ToString();
+                rdsResourceType.SecretKey = resource["resourceTypeOption"]["SecretKey"].ToString();
+                authHeader = BuildRdsAuthHeader(rdsResourceType);
+            }
+            else if (resource["type"]["displayName"].ToString().ToLower() == "gitlab")
+            {
+                GitlabResourceType gitlabResourceType = new GitlabResourceType();
+                gitlabResourceType.RepositoryNumber = (int)resource["resourceTypeOption"]["RepositoryNumber"];
+                gitlabResourceType.RepositoryUrl = resource["resourceTypeOption"]["RepositoryUrl"].ToString();
+                gitlabResourceType.Token = resource["resourceTypeOption"]["Token"].ToString();
+                authHeader = BuildGitlabAuthHeader(gitlabResourceType);
+            }
+
+            if (authHeader == null)
+            {
+                return BadRequest($"No provider for: \"{resource["type"]["displayName"].ToString()}\".");
+            }
+            else
+            {
+                // If the path is null, an empty string is added.
+                string url = $"{_configuration.GetString("coscine/global/waterbutler_url")}{resource["type"]["displayName"].ToString().ToLower()}{path}";
+
+                var request = new HttpRequestMessage(HttpMethod.Get, url);
+                request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authHeader);
+
+                // Thread safe according to msdn and HttpCompletionOption sets it to get only headers first.
+                var response = await Client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
+                if (response.IsSuccessStatusCode)
+                {
+                    if (response.Content.Headers.Contains("Content-Disposition"))
+                    {
+                        return File(await response.Content.ReadAsStreamAsync(),
+                            response.Content.Headers.GetValues("Content-Type").First());
+                    }
+                    else
+                    {
+                        var data = JObject.Parse(await response.Content.ReadAsStringAsync())["data"];
+                        return Ok(new WaterbutlerObject(path, data));
+                    }
+                }
+                else
+                {
+                    return FailedRequest(response, path);
+                }
+            }
+        }
+
+        private IActionResult FailedRequest(HttpResponseMessage response, string path)
         {
             if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
             {
                 return NotFound($"Could not find object for: \"{path}\".");
             }
-            else
-                       if (response.StatusCode == System.Net.HttpStatusCode.Forbidden)
+            else if (response.StatusCode == System.Net.HttpStatusCode.Forbidden)
             {
                 return Forbid("Not allowed to access the datasource.");
             }
@@ -292,24 +347,23 @@ namespace Coscine.Api.Project.Controllers
                 return BadRequest($"Your path \"{path}\" contains bad chars. Only {@"^[0-9a-zA-Z_\-./ ]+"} are allowed as chars.");
             }
 
-            if (!Guid.TryParse(resourceId, out Guid resouceGuid))
+            if (!Guid.TryParse(resourceId, out Guid resourceGuid))
             {
                 return BadRequest($"{resourceId} is not a guid.");
             }
-
-            var user = _authenticator.GetUserFromToken();
-            if (!_resourceModel.OwnsResource(user, resource))
-            {
-                return Forbid($"The user does not own the resource {resourceId}");
-            }
-
+            
             try
             {
-                resource = _resourceModel.GetById(resouceGuid);
+                resource = _resourceModel.GetById(resourceGuid);
                 if (resource == null)
                 {
                     return NotFound($"Could not find resource with id: {resourceId}");
                 }
+                var user = _authenticator.GetUserFromToken();
+                if (!_resourceModel.OwnsResource(user, resource))
+                {
+                    return Forbid($"The user does not own the resource {resourceId}");
+                }
             }
             catch (Exception)
             {
@@ -400,9 +454,9 @@ namespace Coscine.Api.Project.Controllers
 
             var settings = new Dictionary<string, object>
             {
-                {"owner", "Tester"},
+                { "owner", "Tester"},
                 { "repo", gitlabResourceType.RepositoryUrl},
-                { "repo_id", gitlabResourceType.RepositoryNumber},
+                { "repo_id", gitlabResourceType.RepositoryNumber.ToString()},
                 { "host", "https://git.rwth-aachen.de"}
             };
 
diff --git a/src/Project/Controllers/DisciplineController.cs b/src/Project/Controllers/DisciplineController.cs
index ec9f932f55e398a0ed1b382419608f1374fdba8c..62c1ea0c994bbfb054171c03ae4986067e8a4198 100644
--- a/src/Project/Controllers/DisciplineController.cs
+++ b/src/Project/Controllers/DisciplineController.cs
@@ -26,7 +26,7 @@ namespace Coscine.Api.Project.Controllers
         {
             return Ok(_authenticator.ValidateAndExecute((user) =>
             {
-                return _disciplineModel.GetAll().Select((discipline) => new DisciplineObject(discipline.Id, discipline.Url, discipline.DisplayName));
+                return _disciplineModel.GetAll().OrderBy(discipline => discipline.DisplayNameDe.Substring(discipline.DisplayNameDe.Length - 3)).Select((discipline) => new DisciplineObject(discipline.Id, discipline.Url, discipline.DisplayNameDe, discipline.DisplayNameEn));
             }));
         }
     }
diff --git a/src/Project/Controllers/LicenseController.cs b/src/Project/Controllers/LicenseController.cs
new file mode 100644
index 0000000000000000000000000000000000000000..88568555a35a52b99644f414926b96c1588db74f
--- /dev/null
+++ b/src/Project/Controllers/LicenseController.cs
@@ -0,0 +1,33 @@
+using Coscine.Api.Project.Models;
+using Coscine.Api.Project.ReturnObjects;
+using Coscine.ApiCommons;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Coscine.Api.Project.Controllers
+{
+    public class LicenseController : Controller
+    {
+        private readonly Authenticator _authenticator;
+        private readonly LicenseModel _licenseModel;
+
+        public LicenseController()
+        {
+            _authenticator = new Authenticator(this, Program.Configuration);
+            _licenseModel = new LicenseModel();
+        }
+
+        [Route("[controller]")]
+        public IActionResult Index()
+        {
+            return Ok(_authenticator.ValidateAndExecute((user) =>
+            {
+                return _licenseModel.GetAll().Select((license) => new LicenseObject(license.Id, license.DisplayName));
+            }));
+        }
+    }
+}
diff --git a/src/Project/Controllers/MetadataController.cs b/src/Project/Controllers/MetadataController.cs
index c517da4f694cfe96db921cdc4567d946ad091c53..8d1f4060e92a80104770b3edfc396169d546906b 100644
--- a/src/Project/Controllers/MetadataController.cs
+++ b/src/Project/Controllers/MetadataController.cs
@@ -137,7 +137,6 @@ namespace Coscine.Api.Project.Controllers
 
                     // Default values is not checked or added
 
-                    Console.WriteLine(VDS.RDF.Writing.StringWriter.Write(graph, new RdfJsonWriter()));
                     // validate the data
                     if (_util.ValidateShacl(graph, graphNameUri))
                     {
diff --git a/src/Project/Controllers/ProjectController.cs b/src/Project/Controllers/ProjectController.cs
index 8ac5cbdaf020c022312ebb46d186d23def32b987..75b5cdd82bb4736833a0fbb32c4341a550ce24b6 100644
--- a/src/Project/Controllers/ProjectController.cs
+++ b/src/Project/Controllers/ProjectController.cs
@@ -11,24 +11,22 @@ using Microsoft.AspNetCore.Mvc;
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using Coscine.Configuration;
 
 namespace Coscine.Api.Project.Controllers
 {
     public class ProjectController : Controller
     {
         private readonly Authenticator _authenticator;
-        private readonly List<IProjectAction> _projectActions;
         private readonly ProjectModel _projectModel;
-
+        private readonly IConfiguration _configuration;
+        private readonly Emitter _emitter; 
         public ProjectController()
         {
             _authenticator = new Authenticator(this, Program.Configuration);
-            _projectActions = new List<IProjectAction>()
-            {
-                new PIDAction(),
-                new SharePointSiteAction()
-            };
+            _configuration = Program.Configuration;
             _projectModel = new ProjectModel();
+            _emitter = new Emitter(this._configuration);
         }
 
         [Route("[controller]")]
@@ -164,16 +162,9 @@ namespace Coscine.Api.Project.Controllers
                 projectInstituteModel.Delete(projectInstitute);
             }
 
-            FireEvents((projectAction, projectEventArgs) =>
+            _emitter.EmitProjectDelete(new ProjectEventArgs(_configuration)
             {
-                try
-                {
-                    projectAction.OnProjectDelete(project, projectEventArgs);
-                }
-                catch (Exception)
-                {
-                    // Filter exception, because sometimes the PID or SharePoint site might not be generated in e.g. tests 
-                }
+                Project = project
             });
 
             _projectModel.Delete(project);
@@ -195,19 +186,14 @@ namespace Coscine.Api.Project.Controllers
                     subProjectModel.LinkSubProject(projectObject.ParentId, project.Id);
                 }
 
-                FireEvents((projectAction, projectEventArgs) => projectAction.OnProjectCreate(project, projectEventArgs));
+                _emitter.EmitProjectCreate(new ProjectEventArgs(_configuration)
+                {
+                    Project = project,
+                    ProjectOwner = user
+                });
 
                 return _projectModel.CreateReturnObjectFromDatabaseObject(project);
             }));
         }
-
-        private void FireEvents(Action<IProjectAction, ProjectEventArgs> eventAction)
-        {
-            ProjectEventArgs projectEventArgs = new ProjectEventArgs(Program.Configuration, new object[0]);
-            foreach (var projectAction in _projectActions)
-            {
-                eventAction(projectAction, projectEventArgs);
-            }
-        }
     }
 }
diff --git a/src/Project/Controllers/ProjectRoleController.cs b/src/Project/Controllers/ProjectRoleController.cs
index 8830979fdbb95b85f5c2f0c9c9a81f2599952271..f7638fdeeb9ba3ac0c90e482c0ac0e2d25c17d3d 100644
--- a/src/Project/Controllers/ProjectRoleController.cs
+++ b/src/Project/Controllers/ProjectRoleController.cs
@@ -1,4 +1,7 @@
-using Coscine.Api.Project.Models;
+using Coscine.Action;
+using Coscine.Action.EventArgs;
+using Coscine.Action.Implementations.User;
+using Coscine.Api.Project.Models;
 using Coscine.Api.Project.ReturnObjects;
 using Coscine.ApiCommons;
 using Coscine.ApiCommons.Exceptions;
@@ -17,11 +20,15 @@ namespace Coscine.Api.Project.Controllers
     {
         private readonly Authenticator _authenticator;
         private readonly ProjectRoleModel _projectRoleModel;
+        private readonly Emitter _emitter;
+        private readonly Coscine.Configuration.IConfiguration _configuration;
 
         public ProjectRoleController()
         {
+            _emitter = new Emitter(Program.Configuration);
             _authenticator = new Authenticator(this, Program.Configuration);
             _projectRoleModel = new ProjectRoleModel();
+            _configuration = Program.Configuration;
         }
 
         [Route("[controller]/{projectId}")]
@@ -49,7 +56,7 @@ namespace Coscine.Api.Project.Controllers
                         {
                             role = roleModel.GetById(projectRole.RoleId);
                         }
-                        return new ProjectRoleObject(projectRole.ProjectId, new UserObject(userInst.Id, userInst.DisplayName, userInst.EmailAddress), new RoleObject(role.Id, role.DisplayName));
+                        return new ProjectRoleObject(projectRole.ProjectId, new UserObject(userInst.Id, userInst.DisplayName, userInst.Givenname, userInst.Surname, userInst.EmailAddress), new RoleObject(role.Id, role.DisplayName));
                     });
                 }
                 else
@@ -67,7 +74,7 @@ namespace Coscine.Api.Project.Controllers
             {
                 RoleModel roleModel = new RoleModel();
                 Guid.TryParse(projectId, out Guid projectIdGuid);
-                UserObject userObject = new UserObject(user.Id, user.DisplayName, user.EmailAddress);
+                UserObject userObject = new UserObject(user.Id, user.DisplayName, user.Givenname, user.Surname, user.EmailAddress);
 
                 return _projectRoleModel.GetAllWhere((projectRole) =>
                     (projectRole.UserId == user.Id &&
@@ -89,8 +96,19 @@ namespace Coscine.Api.Project.Controllers
             {
                 ProjectRoleObject projectRoleObject = ObjectFactory<ProjectRoleObject>.DeserializeFromStream(Request.Body);
                 ProjectModel projectModel = new ProjectModel();
-                if (projectModel.OwnsProject(user, projectModel.GetById(projectRoleObject.ProjectId)))
+                var project = projectModel.GetById(projectRoleObject.ProjectId);
+                RoleModel roleModel = new RoleModel();
+                var role = roleModel.GetById(projectRoleObject.Role.Id);
+                UserModel userModel = new UserModel();
+                var userToAdd = userModel.GetById(projectRoleObject.User.Id);
+                if (projectModel.OwnsProject(user, project))
                 {
+                    _emitter.EmitUserAdd(new UserEventArgs(this._configuration)
+                    {
+                        Project = project,
+                        Role = role,
+                        User = userToAdd
+                    });
                     return _projectRoleModel.SetFromObject(projectRoleObject);
                 }
                 else
@@ -110,6 +128,16 @@ namespace Coscine.Api.Project.Controllers
                 {
                     _projectRoleModel.CheckIfLastOwnerWillBeRemoved(roleId, projectId);
 
+                    var project = projectModel.GetById(projectId);
+                    UserModel userModel = new UserModel();
+                    var userToRemove = userModel.GetById(userId);
+
+                    _emitter.EmitUserRemove(new UserEventArgs(this._configuration)
+                    {
+                        Project = project,
+                        User = userToRemove
+                    });
+
                     return _projectRoleModel.Delete(_projectRoleModel.GetWhere((projectRole) =>
                             projectRole.ProjectId == projectId
                             && projectRole.UserId == userId
diff --git a/src/Project/Models/ProjectModel.cs b/src/Project/Models/ProjectModel.cs
index eb7680078e97f6bd03a2148b333c0a335cd317a9..97b533d40b1fb2f5f8f30922d00e65f0c11cc969 100644
--- a/src/Project/Models/ProjectModel.cs
+++ b/src/Project/Models/ProjectModel.cs
@@ -172,11 +172,11 @@ namespace Coscine.Api.Project.Models
             {
                 DisciplineModel disciplineModel = new DisciplineModel();
                 disciplines = disciplineModel.GetAllWhere((discipline) => (from relation in discipline.ProjectDisciplineDisciplineIdIds where relation.ProjectId == project.Id select relation).Any())
-                                                .Select((discipline) => new DisciplineObject(discipline.Id, discipline.Url, discipline.DisplayName));
+                                                .Select((discipline) => new DisciplineObject(discipline.Id, discipline.Url, discipline.DisplayNameDe, discipline.DisplayNameEn));
             }
             else
             {
-                disciplines = project.ProjectDisciplineProjectIdIds.Select((discipline) => new DisciplineObject(discipline.Discipline.Id, discipline.Discipline.Url, discipline.Discipline.DisplayName));
+                disciplines = project.ProjectDisciplineProjectIdIds.Select((discipline) => new DisciplineObject(discipline.Discipline.Id, discipline.Discipline.Url, discipline.Discipline.DisplayNameDe, discipline.Discipline.DisplayNameEn));
             }
             IEnumerable<InstituteObject> institutes = new List<InstituteObject>();
             if (project.ProjectInstituteProjectIdIds == null)
diff --git a/src/Project/Models/ResourceModel.cs b/src/Project/Models/ResourceModel.cs
index 4516f24186dfc065590abedaed3baa1089aec43f..99c6643efb3c7d1feca482048e956bdbbea1d938 100644
--- a/src/Project/Models/ResourceModel.cs
+++ b/src/Project/Models/ResourceModel.cs
@@ -27,13 +27,18 @@ namespace Coscine.Api.Project.Models
             {                
                 DisplayName = resourceObject.DisplayName,
                 ResourceName = resourceObject.ResourceName,
+                Description = resourceObject.Description,
                 Keywords = resourceObject.Keywords,
                 UsageRights = resourceObject.UsageRights,
                 TypeId = resourceObject.Type.Id,
                 Type = new ResourceTypeModel().GetById(resourceObject.Type.Id),
                 VisibilityId = resourceObject.Visibility.Id,
-                LicenseId = resourceObject.License.Id
+                
             };
+            if(resourceObject.License != null)
+            {
+                resource.LicenseId = resourceObject.License.Id;
+            }
             Insert(resource);
             
             try
@@ -130,7 +135,7 @@ namespace Coscine.Api.Project.Models
                 throw new ArgumentException("Not supported resource type!");
             }
         }
-        
+
         private void SetDisciplines(Resource resource, IEnumerable<DisciplineObject> disciplines)
         {
             ResourceDisciplineModel resourceDisciplineModel = new ResourceDisciplineModel();
@@ -176,12 +181,17 @@ namespace Coscine.Api.Project.Models
 
             resource.DisplayName = resourceObject.DisplayName;
             resource.ResourceName = resourceObject.ResourceName;
+            resource.Description = resourceObject.Description;
             resource.Keywords = resourceObject.Keywords;
             resource.UsageRights = resourceObject.UsageRights;
             resource.TypeId = resourceObject.Type.Id;
             resource.Type = new ResourceTypeModel().GetById(resourceObject.Type.Id);
             resource.VisibilityId = resourceObject.Visibility.Id;
-            resource.LicenseId = resourceObject.License.Id;
+            if(resourceObject.License != null)
+            {
+                resource.LicenseId = resourceObject.License.Id;
+            }
+            
             resource.ApplicationProfile = resourceObject.ApplicationProfile;
             resource.FixedValues = resourceObject.FixedValues.ToString();
 
@@ -225,7 +235,7 @@ namespace Coscine.Api.Project.Models
                             (from relation in discipline.ResourceDisciplineDisciplineIdIds
                              where relation.ResourceId == resource.Id
                              select relation).Any())
-                            .Select((discipline) => new DisciplineObject(discipline.Id, discipline.Url, discipline.DisplayName));
+                            .Select((discipline) => new DisciplineObject(discipline.Id, discipline.Url, discipline.DisplayNameDe, discipline.DisplayNameEn));
 
             if (resource.Visibility == null && resource.VisibilityId != null)
             {
@@ -257,6 +267,7 @@ namespace Coscine.Api.Project.Models
                 resource.Id,
                 resource.DisplayName,
                 resource.ResourceName,
+                resource.Description,
                 resource.Keywords,
                 resource.UsageRights,
                 new ResourceTypeObject(resource.Type.Id, resource.Type.DisplayName),
diff --git a/src/Project/Project.csproj b/src/Project/Project.csproj
index 216ae1db39b2a2c87588c8cb22eca16620952f02..608699fb6997cd3a6c6e279432d78bc6327daf55 100644
--- a/src/Project/Project.csproj
+++ b/src/Project/Project.csproj
@@ -45,17 +45,17 @@
     <Reference Include="Consul, Version=0.7.2.6, Culture=neutral, PublicKeyToken=20a6ad9a81df1d95, processorArchitecture=MSIL">
       <HintPath>..\packages\Consul.0.7.2.6\lib\net45\Consul.dll</HintPath>
     </Reference>
-    <Reference Include="Coscine.Action, Version=1.3.1.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\Coscine.Action.1.3.1\lib\net461\Coscine.Action.dll</HintPath>
+    <Reference Include="Coscine.Action, Version=1.6.0.0, Culture=neutral, processorArchitecture=AMD64">
+      <HintPath>..\packages\Coscine.Action.1.6.0\lib\net461\Coscine.Action.dll</HintPath>
     </Reference>
-    <Reference Include="Coscine.ApiCommons, Version=1.2.1.0, Culture=neutral, PublicKeyToken=af4c1345df96546b, processorArchitecture=MSIL">
-      <HintPath>..\packages\Coscine.ApiCommons.1.2.1\lib\net461\Coscine.ApiCommons.dll</HintPath>
+    <Reference Include="Coscine.ApiCommons, Version=1.2.2.0, Culture=neutral, PublicKeyToken=af4c1345df96546b, processorArchitecture=MSIL">
+      <HintPath>..\packages\Coscine.ApiCommons.1.2.2\lib\net461\Coscine.ApiCommons.dll</HintPath>
     </Reference>
     <Reference Include="Coscine.Configuration, Version=1.4.0.0, Culture=neutral, PublicKeyToken=ce3d7a32d7dc1e5a, processorArchitecture=MSIL">
       <HintPath>..\packages\Coscine.Configuration.1.4.0\lib\net461\Coscine.Configuration.dll</HintPath>
     </Reference>
-    <Reference Include="Coscine.Database, Version=1.8.0.0, Culture=neutral, PublicKeyToken=767d77427707b70a, processorArchitecture=MSIL">
-      <HintPath>..\packages\Coscine.Database.1.8.0\lib\net461\Coscine.Database.dll</HintPath>
+    <Reference Include="Coscine.Database, Version=1.9.0.0, Culture=neutral, PublicKeyToken=767d77427707b70a, processorArchitecture=MSIL">
+      <HintPath>..\packages\Coscine.Database.1.9.0\lib\net461\Coscine.Database.dll</HintPath>
     </Reference>
     <Reference Include="Coscine.ProxyApi, Version=1.2.0.0, Culture=neutral, processorArchitecture=MSIL">
       <HintPath>..\packages\Coscine.ProxyApi.1.2.0\lib\net461\Coscine.ProxyApi.dll</HintPath>
@@ -356,14 +356,14 @@
     <Reference Include="microsoft.identitymodel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       <HintPath>..\packages\Microsoft.IdentityModel.7.0.0\lib\net35\microsoft.identitymodel.dll</HintPath>
     </Reference>
-    <Reference Include="Microsoft.IdentityModel.JsonWebTokens, Version=5.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\Microsoft.IdentityModel.JsonWebTokens.5.5.0\lib\net461\Microsoft.IdentityModel.JsonWebTokens.dll</HintPath>
+    <Reference Include="Microsoft.IdentityModel.JsonWebTokens, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <HintPath>..\packages\Microsoft.IdentityModel.JsonWebTokens.5.6.0\lib\net461\Microsoft.IdentityModel.JsonWebTokens.dll</HintPath>
     </Reference>
-    <Reference Include="Microsoft.IdentityModel.Logging, Version=5.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\Microsoft.IdentityModel.Logging.5.5.0\lib\net461\Microsoft.IdentityModel.Logging.dll</HintPath>
+    <Reference Include="Microsoft.IdentityModel.Logging, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <HintPath>..\packages\Microsoft.IdentityModel.Logging.5.6.0\lib\net461\Microsoft.IdentityModel.Logging.dll</HintPath>
     </Reference>
-    <Reference Include="Microsoft.IdentityModel.Tokens, Version=5.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\Microsoft.IdentityModel.Tokens.5.5.0\lib\net461\Microsoft.IdentityModel.Tokens.dll</HintPath>
+    <Reference Include="Microsoft.IdentityModel.Tokens, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <HintPath>..\packages\Microsoft.IdentityModel.Tokens.5.6.0\lib\net461\Microsoft.IdentityModel.Tokens.dll</HintPath>
     </Reference>
     <Reference Include="Microsoft.Net.Http.Headers, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
       <HintPath>..\packages\Microsoft.Net.Http.Headers.2.2.0\lib\netstandard2.0\Microsoft.Net.Http.Headers.dll</HintPath>
@@ -418,8 +418,8 @@
       <Private>True</Private>
     </Reference>
     <Reference Include="System.Drawing" />
-    <Reference Include="System.IdentityModel.Tokens.Jwt, Version=5.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\System.IdentityModel.Tokens.Jwt.5.5.0\lib\net461\System.IdentityModel.Tokens.Jwt.dll</HintPath>
+    <Reference Include="System.IdentityModel.Tokens.Jwt, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.IdentityModel.Tokens.Jwt.5.6.0\lib\net461\System.IdentityModel.Tokens.Jwt.dll</HintPath>
     </Reference>
     <Reference Include="System.IO, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
       <HintPath>..\packages\System.IO.4.3.0\lib\net462\System.IO.dll</HintPath>
@@ -587,6 +587,7 @@
   <ItemGroup>
     <Compile Include="Controllers\DataSourceController.cs" />
     <Compile Include="Controllers\MetadataController.cs" />
+    <Compile Include="Controllers\LicenseController.cs" />
     <Compile Include="Controllers\VisibilityController.cs" />
     <Compile Include="Controllers\InstituteController.cs" />
     <Compile Include="Controllers\DisciplineController.cs" />
diff --git a/src/Project/Properties/AssemblyInfo.cs b/src/Project/Properties/AssemblyInfo.cs
index bec7ae16ce5e6310075f8a134414ae1705473bf1..5538c3d3d05ad92fc7b77787e3040ec30c4eff5b 100644
--- a/src/Project/Properties/AssemblyInfo.cs
+++ b/src/Project/Properties/AssemblyInfo.cs
@@ -9,8 +9,8 @@ using System.Reflection;
 [assembly: AssemblyDescription("Project is a part of the CoScInE group.")]
 [assembly: AssemblyCompany("IT Center, RWTH Aachen University")]
 [assembly: AssemblyProduct("Project")]
-[assembly: AssemblyVersion("1.4.1.0")]
-[assembly: AssemblyFileVersion("1.4.1.0")]
-[assembly: AssemblyInformationalVersion("1.4.1.0")]
+[assembly: AssemblyVersion("1.7.1.0")]
+[assembly: AssemblyFileVersion("1.7.1.0")]
+[assembly: AssemblyInformationalVersion("1.7.1.0")]
 [assembly: AssemblyCopyright("2019 IT Center, RWTH Aachen University")]
 
diff --git a/src/Project/ReturnObjects/DisciplineObject.cs b/src/Project/ReturnObjects/DisciplineObject.cs
index 9352f5e840945dbb758fce21285da3a90e558fbf..5a2fed7b9ff54a4dbeed030401d239467f7f31d6 100644
--- a/src/Project/ReturnObjects/DisciplineObject.cs
+++ b/src/Project/ReturnObjects/DisciplineObject.cs
@@ -13,13 +13,16 @@ namespace Coscine.Api.Project.ReturnObjects
         public Guid Id { get; set; }
 
         public string Url { get; set; }
-        public string DisplayName { get; set; }
+        public string DisplayNameDe { get; set; }
 
-        public DisciplineObject(Guid id, string url, string displayName)
+        public string DisplayNameEn { get; set; }
+
+        public DisciplineObject(Guid id, string url, string displayNameDe, string displayNameEn)
         {
             Id = id;
             Url = url;
-            DisplayName = displayName;
+            DisplayNameDe = displayNameDe;
+            DisplayNameEn = displayNameEn;
         }
     }
 }
diff --git a/src/Project/ReturnObjects/ResourceObject.cs b/src/Project/ReturnObjects/ResourceObject.cs
index 76e56ead7250e158f47ac107b1dbf8b86ab59001..9ffa57aeeba18ade02d3689845627a2176bad2b4 100644
--- a/src/Project/ReturnObjects/ResourceObject.cs
+++ b/src/Project/ReturnObjects/ResourceObject.cs
@@ -11,6 +11,7 @@ namespace Coscine.Api.Project.ReturnObjects
         public Guid Id { get; set; }
         public string DisplayName { get; set; }
         public string ResourceName { get; set; }
+        public string Description { get; set; }
         public string Keywords { get; set; }
         public string UsageRights { get; set; }
         public ResourceTypeObject Type { get; set; }
@@ -21,12 +22,13 @@ namespace Coscine.Api.Project.ReturnObjects
         public string ApplicationProfile { get; set; }
         public JToken FixedValues { get; set; }
 
-        public ResourceObject(Guid id,  string displayName, string resourceName, string keywords, string usageRights, ResourceTypeObject type, IEnumerable<DisciplineObject> disciplines, VisibilityObject visibility, LicenseObject license, JObject resourceTypeOption, string applicationProfile, JToken fixedValues)
+        public ResourceObject(Guid id,  string displayName, string resourceName, string description, string keywords, string usageRights, ResourceTypeObject type, IEnumerable<DisciplineObject> disciplines, VisibilityObject visibility, LicenseObject license, JObject resourceTypeOption, string applicationProfile, JToken fixedValues)
         {
             Id = id;
 
             DisplayName = displayName;
             ResourceName = resourceName;
+            Description = description;
             Keywords = keywords;
             UsageRights = usageRights;
             
diff --git a/src/Project/ReturnObjects/UserObject.cs b/src/Project/ReturnObjects/UserObject.cs
index d8cd98f8de6645caf5c7e8fd97586524d676075c..13114f86363b2c4bdf19821627b18cf28a82ce49 100644
--- a/src/Project/ReturnObjects/UserObject.cs
+++ b/src/Project/ReturnObjects/UserObject.cs
@@ -9,12 +9,19 @@ namespace Coscine.Api.Project.ReturnObjects
         public Guid Id { get; set; }
 
         public string DisplayName { get; set; }
+
+        public string Givenname { get; set; }
+
+        public string Surname { get; set; }
+
         public string EmailAddress { get; set; }
 
-        public UserObject(Guid id, string displayName, string emailAddress)
+        public UserObject(Guid id, string displayName, string givenname, string surname, string emailAddress)
         {
             Id = id;
             DisplayName = displayName;
+            Givenname = givenname;
+            Surname = surname;
             EmailAddress = emailAddress;
         }
     }
diff --git a/src/Project/packages.config b/src/Project/packages.config
index 8d10d75d55fb1d0f54e505dadbe6b6be0b664e37..ecbbf110e08cba77a12cb82f7de0d1554ff7205f 100644
--- a/src/Project/packages.config
+++ b/src/Project/packages.config
@@ -3,10 +3,10 @@
   <package id="AutoMapper" version="8.0.0" targetFramework="net472" />
   <package id="AutoMapper.Extensions.Microsoft.DependencyInjection" version="6.0.0" targetFramework="net472" />
   <package id="Consul" version="0.7.2.6" targetFramework="net472" />
-  <package id="Coscine.Action" version="1.3.1" targetFramework="net472" />
-  <package id="Coscine.ApiCommons" version="1.2.1" targetFramework="net472" />
+  <package id="Coscine.Action" version="1.6.0" targetFramework="net472" />
+  <package id="Coscine.ApiCommons" version="1.2.2" targetFramework="net472" />
   <package id="Coscine.Configuration" version="1.4.0" targetFramework="net472" />
-  <package id="Coscine.Database" version="1.8.0" targetFramework="net472" />
+  <package id="Coscine.Database" version="1.9.0" targetFramework="net472" />
   <package id="Coscine.ProxyApi" version="1.2.0" targetFramework="net472" />
   <package id="Coscine.SharePoint.Webparts.Vue" version="1.4.0" targetFramework="net472" />
   <package id="dotNetRDF" version="2.2.1" targetFramework="net472" />
@@ -111,9 +111,9 @@
   <package id="Microsoft.Extensions.Primitives" version="2.2.0" targetFramework="net472" />
   <package id="Microsoft.Extensions.WebEncoders" version="2.2.0" targetFramework="net472" />
   <package id="Microsoft.IdentityModel" version="7.0.0" targetFramework="net472" />
-  <package id="Microsoft.IdentityModel.JsonWebTokens" version="5.5.0" targetFramework="net472" />
-  <package id="Microsoft.IdentityModel.Logging" version="5.5.0" targetFramework="net472" />
-  <package id="Microsoft.IdentityModel.Tokens" version="5.5.0" targetFramework="net472" />
+  <package id="Microsoft.IdentityModel.JsonWebTokens" version="5.6.0" targetFramework="net472" />
+  <package id="Microsoft.IdentityModel.Logging" version="5.6.0" targetFramework="net472" />
+  <package id="Microsoft.IdentityModel.Tokens" version="5.6.0" targetFramework="net472" />
   <package id="Microsoft.Net.Http.Headers" version="2.2.0" targetFramework="net472" />
   <package id="Microsoft.Win32.Registry" version="4.5.0" targetFramework="net472" />
   <package id="Newtonsoft.Json" version="12.0.2" targetFramework="net472" />
@@ -133,7 +133,7 @@
   <package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net472" />
   <package id="System.Dynamic.Runtime" version="4.3.0" targetFramework="net472" />
   <package id="System.Globalization" version="4.3.0" targetFramework="net472" />
-  <package id="System.IdentityModel.Tokens.Jwt" version="5.5.0" targetFramework="net472" />
+  <package id="System.IdentityModel.Tokens.Jwt" version="5.6.0" targetFramework="net472" />
   <package id="System.IO" version="4.3.0" targetFramework="net472" />
   <package id="System.IO.Compression" version="4.3.0" targetFramework="net472" />
   <package id="System.IO.FileSystem" version="4.3.0" targetFramework="net472" />