diff --git a/src/Pid/Controllers/PidController.cs b/src/Pid/Controllers/PidController.cs
index 590c3e6ce5e9955727c0a0195b21318eb9800fe2..ab845a8eed8327138210564a8a12f051ad03bd70 100644
--- a/src/Pid/Controllers/PidController.cs
+++ b/src/Pid/Controllers/PidController.cs
@@ -48,6 +48,64 @@ namespace Coscine.Api.Pid.Controllers
             _visibilityModel = new VisibilityModel();
         }
 
+        /// <summary>
+        /// Returns a 200, if a PID is valid.
+        /// </summary>
+        /// <param name="pid">PID</param>
+        /// <returns>200 if successful, 400 if pid is badly formatted, 403 if project or resource is deleted, 404 if not exists.</returns>
+        [HttpGet("[controller]/valid/{pid}")]
+        public IActionResult IsValid(string pid)
+        {
+            var id = Uri.UnescapeDataString(pid);
+            if (id.Contains('/'))
+            {
+                id = id[(id.IndexOf("/") + 1)..];
+            }
+            else
+            {
+                return BadRequest($"PID {pid} is badly formatted.");
+            }
+            if (id.Contains('@'))
+            {
+                id = id[..id.IndexOf("@")];
+            }
+            if (id.Contains('/'))
+            {
+                id = id[..id.IndexOf("/")];
+            }
+
+            Resource resource = null;
+            try
+            {
+                resource = _resourceModel.GetByIdIncludingDeleted(new Guid(id));
+            } 
+            catch
+            {
+
+            }
+            Project project = null;
+            try
+            {
+                project = _projectModel.GetByIdIncludingDeleted(new Guid(id));
+            }
+            catch
+            {
+
+            }
+
+            if (resource == null && project == null)
+            {
+                return NotFound($"No project/resource with PID {pid} exists.");
+            }
+
+            if ((resource != null && resource.Deleted) || (project != null && project.Deleted))
+            {
+                return Forbid();
+            }
+
+            return Ok();
+        }
+
         /// <summary>
         /// Sends a request to the pid owner.
         /// </summary>
@@ -56,8 +114,38 @@ namespace Coscine.Api.Pid.Controllers
         [HttpPost("[controller]/sendMailToOwner")]
         public IActionResult SendMailToOwner([FromBody] MessageObject messageObject)
         {
-            var resource = _resourceModel.GetById(new Guid(messageObject.Guid));
-            var project = _projectModel.GetById(new Guid(messageObject.Guid));
+            Resource resource = null;
+            try
+            {
+                resource = _resourceModel.GetByIdIncludingDeleted(new Guid(messageObject.Guid));
+            }
+            catch
+            {
+
+            }
+            Project project = null;
+            try
+            {
+                project = _projectModel.GetByIdIncludingDeleted(new Guid(messageObject.Guid));
+            }
+            catch
+            {
+
+            }
+
+            if (resource == null && project == null)
+            {
+                // Log the error.
+                // ProjectId and ResourceId will be null and indicate an error in the logs.
+                LogAnalyticsPidEnquiry(null, null, null, null, null, null, null, null);
+                return NotFound($"No project/resource with PID {messageObject.Pid} exists.");
+            }
+
+            if ((resource != null && resource.Deleted) || (project != null && project.Deleted))
+            {
+                return Forbid();
+            }
+
             var user = new User()
             {
                 DisplayName = messageObject.Name,
@@ -108,13 +196,6 @@ namespace Coscine.Api.Pid.Controllers
                 var ownerId = _roleModel.GetAllWhere((x) => (x.DisplayName == "owner")).First().Id;
                 projectOwners = _projectRoleModel.GetAllWhere((x) => x.RoleId == ownerId && x.ProjectId == project.Id);
             }
-            else
-            {
-                // Log the error.
-                // ProjectId and ResourceId will be null and indicate an error in the logs.
-                LogAnalyticsPidEnquiry(null, null, null, null, null, null, null, null);
-                return BadRequest("No project/resource with this pid exists.");
-            }
 
             if (CoscineLoggerConfiguration.IsLogLevelActivated(LogType.Analytics))
             {
@@ -126,7 +207,7 @@ namespace Coscine.Api.Pid.Controllers
         }
 
         private void LogAnalyticsPidEnquiry(Project project, Resource resource, string applicationsProfile, string license,
-            IEnumerable<DisciplineObject> disciplines, IEnumerable<OrganizationObject> organizations, IEnumerable<ProjectRole> owners, string email)
+        IEnumerable<DisciplineObject> disciplines, IEnumerable<OrganizationObject> organizations, IEnumerable<ProjectRole> owners, string email)
         {
             string visibility = null;
             if (project != null && project.VisibilityId.HasValue) 
diff --git a/src/Pid/Models/MessageObject.cs b/src/Pid/Models/MessageObject.cs
index f3d28f1f51a2d348a5b616de1c714f9bf0afe820..e75c2dca4468d0a150ca2f47b8520ff2bab5c0e9 100644
--- a/src/Pid/Models/MessageObject.cs
+++ b/src/Pid/Models/MessageObject.cs
@@ -1,10 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Coscine.Api.Pid.Models
+namespace Coscine.Api.Pid.Models
 {
     /// <summary>
     /// Message Object.
diff --git a/src/Pid/Pid.csproj b/src/Pid/Pid.csproj
index 72a7839270e5670270bd5aba50535e1826dbf559..7ab6d302688394eb4ef6e1c341f3642b9fa59985 100644
--- a/src/Pid/Pid.csproj
+++ b/src/Pid/Pid.csproj
@@ -17,7 +17,7 @@
 		<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
 	</PropertyGroup>
 	<ItemGroup>
-		<PackageReference Include="Coscine.Action" Version="2.*-*" />
+		<PackageReference Include="Coscine.Action" Version="3.*-*" />
 		<PackageReference Include="Coscine.ApiCommons" Version="2.*-*" />
 		<PackageReference Include="Coscine.Database" Version="2.*-*" />
 		<PackageReference Include="Coscine.Logging" Version="2.*-*" />
diff --git a/src/Pid/Program.cs b/src/Pid/Program.cs
index 427a2a3f8ef5dacac001ddc9f1fa49fc1a9c7af2..318c0d9827b3cb51e279a490110d56d551a74506 100644
--- a/src/Pid/Program.cs
+++ b/src/Pid/Program.cs
@@ -1,10 +1,5 @@
 using Coscine.ApiCommons;
 using Coscine.Configuration;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 
 namespace Coscine.Api.Pid
 {
diff --git a/src/Pid/Startup.cs b/src/Pid/Startup.cs
index 4101959709dd1e97bbbfae586f93bb3aacb9cf0e..42ea5e7e88ae651448728e54879d53e891df53e6 100644
--- a/src/Pid/Startup.cs
+++ b/src/Pid/Startup.cs
@@ -1,16 +1,11 @@
 using Coscine.ApiCommons;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 
 namespace Coscine.Api.Pid
 {
     /// <summary>
     /// Standard Startup class.
     /// </summary>
-    public class Startup : AbstractDefaultStartup
+    public class Startup : AbstractStartup
     {
         /// <summary>
         /// Standard Startup constructor.