diff --git a/src/main/java/it/inaf/oats/vospace/persistence/JobDAO.java b/src/main/java/it/inaf/oats/vospace/persistence/JobDAO.java
index 31d443de8836fd53ab4be1e49ed17a36537335cc..5f2e6ec8bcb370fe4516570eb214813d6b37eb84 100644
--- a/src/main/java/it/inaf/oats/vospace/persistence/JobDAO.java
+++ b/src/main/java/it/inaf/oats/vospace/persistence/JobDAO.java
@@ -48,8 +48,8 @@ public class JobDAO {
 
         String sql = 
                 "INSERT INTO job(job_id, owner_id, job_type, phase, job_info,"
-                + " error_message, error_type, error_has_detail) "
-                + "VALUES (?, ?, ?, ?, ?, ? ,? ,?)";
+                + " error_message, error_type, error_has_detail, error_detail) "
+                + "VALUES (?, ?, ?, ?, ?, ? ,? ,? ,?)";
 
         jdbcTemplate.update(sql, ps -> {
             int i = 0;
@@ -63,11 +63,13 @@ public class JobDAO {
             if(errorSummary != null) {
                 ps.setString(++i, errorSummary.getMessage());
                 ps.setObject(++i, errorSummary.getType().value(), Types.OTHER);
-                ps.setBoolean(++i, errorSummary.isHasDetail());                
+                ps.setBoolean(++i, errorSummary.isHasDetail());
+                ps.setString(++i, errorSummary.getDetailMessage());
             } else {
                 ps.setNull(++i, Types.VARCHAR);
                 ps.setNull(++i, Types.OTHER);
-                ps.setNull(++i, Types.BOOLEAN);                
+                ps.setNull(++i, Types.BOOLEAN);
+                ps.setNull(++i, Types.VARCHAR);
             }
         });
     }
@@ -127,8 +129,10 @@ public class JobDAO {
             errorSummary.setType(ErrorType.fromValue(rs.getString("error_type")));
         }
         errorSummary.setHasDetail(rs.getBoolean("error_has_detail"));
+        errorSummary.setDetailMessage(rs.getString("error_detail"));
+        
         jobSummary.setErrorSummary(errorSummary);
-
+        
         return jobSummary;
     }
 
@@ -258,14 +262,14 @@ public class JobDAO {
         ErrorSummary errorSummary = job.getErrorSummary();
         if(errorSummary != null)
         {
-            sql += ", error_message, error_type, error_has_detail";
+            sql += ", error_message, error_type, error_has_detail, error_detail";
         }                
        
         sql += ") = (?, ?";
         
         if(errorSummary != null)
         {
-            sql += ", ?, ?, ?";
+            sql += ", ?, ?, ?, ?";
         }
         
         sql += ") WHERE job_id = ?";
@@ -279,6 +283,7 @@ public class JobDAO {
                 ps.setString(++i, errorSummary.getMessage());
                 ps.setObject(++i, errorSummary.getType().value(), Types.OTHER);                
                 ps.setBoolean(++i, errorSummary.isHasDetail());
+                ps.setString(++i, errorSummary.getDetailMessage());
             }
             ps.setString(++i, job.getJobId());
         });
diff --git a/src/test/java/it/inaf/oats/vospace/persistence/JobDAOTest.java b/src/test/java/it/inaf/oats/vospace/persistence/JobDAOTest.java
index eb04e141d7febd64fcf383fa11ba2265bb641ae1..a3a26c07914455e0bffc0c5aad67268b35ac6d89 100644
--- a/src/test/java/it/inaf/oats/vospace/persistence/JobDAOTest.java
+++ b/src/test/java/it/inaf/oats/vospace/persistence/JobDAOTest.java
@@ -22,7 +22,7 @@ import java.time.Month;
 import net.ivoa.xml.uws.v1.ErrorSummary;
 import net.ivoa.xml.uws.v1.Jobs;
 import it.inaf.oats.vospace.exception.ErrorSummaryFactory;
-import it.inaf.oats.vospace.exception.VOSpaceFaultEnum;
+import it.inaf.oats.vospace.exception.PermissionDeniedException;
 
 @ExtendWith(SpringExtension.class)
 @ContextConfiguration(classes = {DataSourceConfig.class})
@@ -55,10 +55,11 @@ public class JobDAOTest {
     }
 
     // don't want to override equals method just for testing without a use case
-    private boolean areEqual(ErrorSummary a, ErrorSummary b) {
+    private boolean areEqual(ErrorSummary a, ErrorSummary b) {     
         return (a.getMessage().equals(b.getMessage())
                 && a.getType().equals(b.getType())
-                && a.isHasDetail() == b.isHasDetail());
+                && a.isHasDetail() == b.isHasDetail()
+                && a.getDetailMessage().equals(b.getDetailMessage()));
     }
 
     @Test
@@ -83,10 +84,14 @@ public class JobDAOTest {
 
         job.setPhase(ExecutionPhase.ERROR);
 
-        // A generic picked randomly
+        // Generate it from exception        
         ErrorSummary errorSummary
                 = ErrorSummaryFactory.newErrorSummary(
-                        VOSpaceFaultEnum.PERMISSION_DENIED);
+                        new PermissionDeniedException("/pippo1/pippo2"));
+        
+        // Check if properly generated
+        assertTrue(errorSummary.isHasDetail());
+        assertEquals("PermissionDenied. Path: /pippo1/pippo2", errorSummary.getDetailMessage());
 
         job.setErrorSummary(errorSummary);
 
@@ -109,11 +114,15 @@ public class JobDAOTest {
         dao.createJob(job);
 
         job.setPhase(ExecutionPhase.ERROR);
-        // A generic picked randomly
+        // Generate it from exception        
         ErrorSummary errorSummary
                 = ErrorSummaryFactory.newErrorSummary(
-                        VOSpaceFaultEnum.PERMISSION_DENIED);
-
+                        new PermissionDeniedException("/pippo1/pippo2"));
+        
+        // Check if properly generated        
+        assertTrue(errorSummary.isHasDetail());
+        assertEquals("PermissionDenied. Path: /pippo1/pippo2", errorSummary.getDetailMessage());
+                
         job.setErrorSummary(errorSummary);
 
         dao.updateJob(job);