diff --git a/src/main/java/it/inaf/oats/vospace/exception/ContainerNotFoundException.java b/src/main/java/it/inaf/oats/vospace/exception/ContainerNotFoundException.java
index d2847872d3f53c01b999efa8b0989ec7a9bde243..402470515d4d63584a0cd09d98b42369685b91c8 100644
--- a/src/main/java/it/inaf/oats/vospace/exception/ContainerNotFoundException.java
+++ b/src/main/java/it/inaf/oats/vospace/exception/ContainerNotFoundException.java
@@ -1,6 +1,5 @@
 package it.inaf.oats.vospace.exception;
 
-import net.ivoa.xml.uws.v1.ErrorSummaryFactory;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.ResponseStatus;
 
@@ -8,7 +7,7 @@ import org.springframework.web.bind.annotation.ResponseStatus;
 public class ContainerNotFoundException extends VoSpaceErrorSummarizableException {
 
     public ContainerNotFoundException(String path) {
-        super("Container Not Found at path: " + path, 
-                ErrorSummaryFactory.VOSpaceFault.NODE_NOT_FOUND);
+        super("Path: " + path, 
+                VOSpaceFaultEnum.NODE_NOT_FOUND);
     }
 }
diff --git a/src/main/java/it/inaf/oats/vospace/exception/DuplicateNodeException.java b/src/main/java/it/inaf/oats/vospace/exception/DuplicateNodeException.java
index 0b09d37b93a7f062ce87ccb81652018f23b637c7..e8f1c46051c5aa901a879b072c389170381ff816 100644
--- a/src/main/java/it/inaf/oats/vospace/exception/DuplicateNodeException.java
+++ b/src/main/java/it/inaf/oats/vospace/exception/DuplicateNodeException.java
@@ -1,6 +1,5 @@
 package it.inaf.oats.vospace.exception;
 
-import net.ivoa.xml.uws.v1.ErrorSummaryFactory;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.ResponseStatus;
 
@@ -8,7 +7,7 @@ import org.springframework.web.bind.annotation.ResponseStatus;
 public class DuplicateNodeException extends VoSpaceErrorSummarizableException {
 
     public DuplicateNodeException(String path) {
-        super("Duplicate Node at path: " + path,
-                ErrorSummaryFactory.VOSpaceFault.DUPLICATE_NODE);
+        super("Path: " + path,
+                VOSpaceFaultEnum.DUPLICATE_NODE);
     }
 }
diff --git a/src/main/java/it/inaf/oats/vospace/exception/ErrorSummaryFactory.java b/src/main/java/it/inaf/oats/vospace/exception/ErrorSummaryFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..f50eadeb28e4a348cdc4d23628011012350c02a2
--- /dev/null
+++ b/src/main/java/it/inaf/oats/vospace/exception/ErrorSummaryFactory.java
@@ -0,0 +1,32 @@
+package it.inaf.oats.vospace.exception;
+
+import net.ivoa.xml.uws.v1.ErrorSummary;
+
+public class ErrorSummaryFactory {    
+
+    public static ErrorSummary newErrorSummary(VOSpaceFaultEnum error, String detailMessage) {
+        ErrorSummary result = new ErrorSummary();
+        result.setMessage(error.getFaultRepresentation());
+        result.setType(error.getType());
+
+        if (detailMessage == null || detailMessage.isBlank()) {
+            result.setHasDetail(false);
+        } else {
+            result.setHasDetail(true);
+            result.setDetailMessage(error.getFaultCaptionForDetails()
+                    + ". "
+                    + detailMessage);
+        }
+
+        return result;
+    }
+
+    public static ErrorSummary newErrorSummary(VOSpaceFaultEnum error) {
+        return newErrorSummary(error, null);
+    }
+    
+    public static ErrorSummary newErrorSummary(VoSpaceErrorSummarizableException e)
+    {
+        return newErrorSummary(e.getFault(), e.getDetailMessage());
+    }
+}
diff --git a/src/main/java/it/inaf/oats/vospace/exception/InternalFaultException.java b/src/main/java/it/inaf/oats/vospace/exception/InternalFaultException.java
index 05d702e5f1fe8c0b51790c8007b3b72a9f572840..8ae2febe3559c2599d0486c2d0bbcc022fd1493a 100644
--- a/src/main/java/it/inaf/oats/vospace/exception/InternalFaultException.java
+++ b/src/main/java/it/inaf/oats/vospace/exception/InternalFaultException.java
@@ -1,6 +1,5 @@
 package it.inaf.oats.vospace.exception;
 
-import net.ivoa.xml.uws.v1.ErrorSummaryFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.http.HttpStatus;
@@ -12,13 +11,13 @@ public class InternalFaultException extends VoSpaceErrorSummarizableException {
     private static final Logger LOG = LoggerFactory.getLogger(InternalFaultException.class);
 
     public InternalFaultException(String msg) {
-        super("InternalFaultException: " + msg,
-                ErrorSummaryFactory.VOSpaceFault.INTERNAL_FAULT);
+        super("Description: " + msg,
+                VOSpaceFaultEnum.INTERNAL_FAULT);
     }
 
     public InternalFaultException(Throwable cause) {
-        super("InternalFaultException: " + getMessage(cause),
-                ErrorSummaryFactory.VOSpaceFault.INTERNAL_FAULT);
+        super("Description: " + getMessage(cause),
+                VOSpaceFaultEnum.INTERNAL_FAULT);
     }
 
     private static String getMessage(Throwable cause) {
diff --git a/src/main/java/it/inaf/oats/vospace/exception/InvalidArgumentException.java b/src/main/java/it/inaf/oats/vospace/exception/InvalidArgumentException.java
index d24af645b56c8f1fb4680a18eea85f20027d6d65..67fbab63ec5827f9aac94f7612846be94d6e1e09 100644
--- a/src/main/java/it/inaf/oats/vospace/exception/InvalidArgumentException.java
+++ b/src/main/java/it/inaf/oats/vospace/exception/InvalidArgumentException.java
@@ -1,6 +1,5 @@
 package it.inaf.oats.vospace.exception;
 
-import net.ivoa.xml.uws.v1.ErrorSummaryFactory;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.ResponseStatus;
 
@@ -8,6 +7,6 @@ import org.springframework.web.bind.annotation.ResponseStatus;
 public class InvalidArgumentException extends VoSpaceErrorSummarizableException {
 
     public InvalidArgumentException(String message) {
-        super(message, ErrorSummaryFactory.VOSpaceFault.NODE_NOT_FOUND);
+        super("Description: " + message, VOSpaceFaultEnum.NODE_NOT_FOUND);
     }
 }
diff --git a/src/main/java/it/inaf/oats/vospace/exception/InvalidURIException.java b/src/main/java/it/inaf/oats/vospace/exception/InvalidURIException.java
index e91e3f5432563c9c86cda2032a22fbba295aacea..74b155c9b1288b7f11caf43e31a14c4d2c9381d7 100644
--- a/src/main/java/it/inaf/oats/vospace/exception/InvalidURIException.java
+++ b/src/main/java/it/inaf/oats/vospace/exception/InvalidURIException.java
@@ -1,6 +1,5 @@
 package it.inaf.oats.vospace.exception;
 
-import net.ivoa.xml.uws.v1.ErrorSummaryFactory;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.ResponseStatus;
 
@@ -8,18 +7,18 @@ import org.springframework.web.bind.annotation.ResponseStatus;
 public class InvalidURIException extends VoSpaceErrorSummarizableException {
 
     public InvalidURIException(String URI, String path) {
-        super("InvalidURI. Payload node URI: " + URI
+        super("Payload node URI: " + URI
                 + " is not consistent with request path: " + path,
-                ErrorSummaryFactory.VOSpaceFault.INVALID_URI);
+                VOSpaceFaultEnum.INVALID_URI);
     }
 
     public InvalidURIException(String URI) {
-        super("InvalidURI. URI: " + URI + " is not in a valid format",
-                ErrorSummaryFactory.VOSpaceFault.INVALID_URI);
+        super("URI: " + URI + " is not in a valid format",
+                VOSpaceFaultEnum.INVALID_URI);
     }
 
     public InvalidURIException(IllegalArgumentException ex) {
-        super("InvalidURI. " + ex.getMessage(),
-                ErrorSummaryFactory.VOSpaceFault.INVALID_URI);
+        super("Description: " + ex.getMessage(),
+                VOSpaceFaultEnum.INVALID_URI);
     }
 }
diff --git a/src/main/java/it/inaf/oats/vospace/exception/LinkFoundException.java b/src/main/java/it/inaf/oats/vospace/exception/LinkFoundException.java
index dc4946eb338907019670fb955a003ec82dfc3356..2eb01282e42f5fed742c7f79aac7eb4c27e93dd7 100644
--- a/src/main/java/it/inaf/oats/vospace/exception/LinkFoundException.java
+++ b/src/main/java/it/inaf/oats/vospace/exception/LinkFoundException.java
@@ -1,6 +1,5 @@
 package it.inaf.oats.vospace.exception;
 
-import net.ivoa.xml.uws.v1.ErrorSummaryFactory;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.ResponseStatus;
 
@@ -8,7 +7,7 @@ import org.springframework.web.bind.annotation.ResponseStatus;
 public class LinkFoundException extends VoSpaceErrorSummarizableException {
 
     public LinkFoundException(String path) {
-        super("Link Found at path: " + path, 
-                ErrorSummaryFactory.VOSpaceFault.INVALID_URI);
+        super("Link Node found at path: " + path, 
+                VOSpaceFaultEnum.INVALID_URI);
     }
 }
diff --git a/src/main/java/it/inaf/oats/vospace/exception/NodeBusyException.java b/src/main/java/it/inaf/oats/vospace/exception/NodeBusyException.java
index 2586ac6c1afaed1688673ba2e8d0c19193c54e68..2ed84fa165a74cdcffd633c1d71757af3e512f4b 100644
--- a/src/main/java/it/inaf/oats/vospace/exception/NodeBusyException.java
+++ b/src/main/java/it/inaf/oats/vospace/exception/NodeBusyException.java
@@ -1,12 +1,10 @@
 package it.inaf.oats.vospace.exception;
 
-import net.ivoa.xml.uws.v1.ErrorSummaryFactory;
-
 public class NodeBusyException extends VoSpaceErrorSummarizableException {
 
     public NodeBusyException(String path) {
-        super("Node Busy: at path " + path,
-                 ErrorSummaryFactory.VOSpaceFault.NODE_BUSY);
+        super("Path: " + path,
+                 VOSpaceFaultEnum.NODE_BUSY);
     }
 
 }
diff --git a/src/main/java/it/inaf/oats/vospace/exception/NodeNotFoundException.java b/src/main/java/it/inaf/oats/vospace/exception/NodeNotFoundException.java
index a7bb797373f1f53d06a61e4abc7e649c8977e265..d4066fe95787612ec3dbb34ebbdc496a00b0e15e 100644
--- a/src/main/java/it/inaf/oats/vospace/exception/NodeNotFoundException.java
+++ b/src/main/java/it/inaf/oats/vospace/exception/NodeNotFoundException.java
@@ -1,6 +1,5 @@
 package it.inaf.oats.vospace.exception;
 
-import net.ivoa.xml.uws.v1.ErrorSummaryFactory;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.ResponseStatus;
 
@@ -8,7 +7,7 @@ import org.springframework.web.bind.annotation.ResponseStatus;
 public class NodeNotFoundException extends VoSpaceErrorSummarizableException {
 
     public NodeNotFoundException(String path) {
-        super("NodeNotFound: " + path,
-                ErrorSummaryFactory.VOSpaceFault.NODE_NOT_FOUND);
+        super("Path: " + path,
+                VOSpaceFaultEnum.NODE_NOT_FOUND);
     }
 }
diff --git a/src/main/java/it/inaf/oats/vospace/exception/PermissionDeniedException.java b/src/main/java/it/inaf/oats/vospace/exception/PermissionDeniedException.java
index 31194db844fdf21d97e203a9229b0a15a13928c4..6563a894bb20c30d77775d675b565b0f1e674a61 100644
--- a/src/main/java/it/inaf/oats/vospace/exception/PermissionDeniedException.java
+++ b/src/main/java/it/inaf/oats/vospace/exception/PermissionDeniedException.java
@@ -1,6 +1,5 @@
 package it.inaf.oats.vospace.exception;
 
-import net.ivoa.xml.uws.v1.ErrorSummaryFactory;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.ResponseStatus;
 
@@ -8,7 +7,7 @@ import org.springframework.web.bind.annotation.ResponseStatus;
 public class PermissionDeniedException extends VoSpaceErrorSummarizableException {
 
     public PermissionDeniedException(String path) {
-        super("Permission Denied at path: " + path,
-                ErrorSummaryFactory.VOSpaceFault.PERMISSION_DENIED);
+        super("Path: " + path,
+                VOSpaceFaultEnum.PERMISSION_DENIED);
     }
 }
diff --git a/src/main/java/it/inaf/oats/vospace/exception/ProtocolNotSupportedException.java b/src/main/java/it/inaf/oats/vospace/exception/ProtocolNotSupportedException.java
index d13d941890927da670ea1e07f9fe69e8adbf6c78..205e0f8ebecc8806037fe44da88f9a6318937f75 100644
--- a/src/main/java/it/inaf/oats/vospace/exception/ProtocolNotSupportedException.java
+++ b/src/main/java/it/inaf/oats/vospace/exception/ProtocolNotSupportedException.java
@@ -1,12 +1,10 @@
 package it.inaf.oats.vospace.exception;
 
-import net.ivoa.xml.uws.v1.ErrorSummaryFactory;
-
 public class ProtocolNotSupportedException extends VoSpaceErrorSummarizableException{
     
     public ProtocolNotSupportedException(String protocol) {
-        super("Protocol Not Supported: " + protocol, 
-                ErrorSummaryFactory.VOSpaceFault.PROTOCOL_NOT_SUPPORTED);
+        super("Protocol: " + protocol, 
+                VOSpaceFaultEnum.PROTOCOL_NOT_SUPPORTED);
     }
     
 }
diff --git a/src/main/java/it/inaf/oats/vospace/exception/VOSpaceFaultEnum.java b/src/main/java/it/inaf/oats/vospace/exception/VOSpaceFaultEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..6aeb655d9c6edf98b9c55055d55f3675c3893321
--- /dev/null
+++ b/src/main/java/it/inaf/oats/vospace/exception/VOSpaceFaultEnum.java
@@ -0,0 +1,50 @@
+package it.inaf.oats.vospace.exception;
+
+// NFC: ErrorType usage is not covered in documentation, as far as I can see
+// these are tentative default values.
+import net.ivoa.xml.uws.v1.ErrorType;
+
+public enum VOSpaceFaultEnum {
+    // pushto
+    OPERATION_NOT_SUPPORTED("Operation Not Supported", ErrorType.FATAL, "OperationNotSupported"),
+    INTERNAL_FAULT("Internal Fault", ErrorType.TRANSIENT, "InternalFault"),
+    PERMISSION_DENIED("Permission Denied", ErrorType.FATAL, "PermissionDenied"),
+    VIEW_NOT_SUPPORTED("View Not Supported", ErrorType.FATAL, "ViewNotSupported"),
+    PROTOCOL_NOT_SUPPORTED("Protocol Not Supported", ErrorType.FATAL, "ProtocolNotSupported"),
+    INVALID_ARGUMENT("Invalid Argument", ErrorType.FATAL, "InvalidArgument"),
+    NODE_BUSY("Node Busy", ErrorType.TRANSIENT, "NodeBusy"),
+    // additional for pullto
+    INVALID_URI("Invalid URI", ErrorType.FATAL, "InvalidURI"),
+    INVALID_DATA("Invalid Data", ErrorType.FATAL, "InvalidData"),
+    // additional for pullfrom
+    NODE_NOT_FOUND("Node Not Found", ErrorType.FATAL, "NodeNotFound"),
+    // additional for pushfrom
+    TRANSFER_FAILED("Transfer Failed", ErrorType.FATAL, "TransferFailed"),
+    // additional for movenode/copynode
+    DUPLICATE_NODE("Duplicate Node", ErrorType.FATAL, "DuplicateNode");
+
+    private final String faultRepresentation;
+    private final ErrorType type;
+    private final String faultCaptionForDetails;
+
+    private VOSpaceFaultEnum(String faultRepresentation,
+            ErrorType type,
+            String faultCaptionForDetails) {
+        this.faultRepresentation = faultRepresentation;
+        this.type = type;
+        this.faultCaptionForDetails = faultCaptionForDetails;
+    }
+
+    public String getFaultRepresentation() {
+        return this.faultRepresentation;
+    }
+
+    public ErrorType getType() {
+        return this.type;
+    }
+
+    public String getFaultCaptionForDetails() {
+        return faultCaptionForDetails;
+    }
+
+}
diff --git a/src/main/java/it/inaf/oats/vospace/exception/VoSpaceErrorSummarizableException.java b/src/main/java/it/inaf/oats/vospace/exception/VoSpaceErrorSummarizableException.java
index caed42e1deef61783d8242e57b3eed0d43ec3906..be0f0d17b40b3fef67407fbaf106ca15fde7166a 100644
--- a/src/main/java/it/inaf/oats/vospace/exception/VoSpaceErrorSummarizableException.java
+++ b/src/main/java/it/inaf/oats/vospace/exception/VoSpaceErrorSummarizableException.java
@@ -1,23 +1,26 @@
 package it.inaf.oats.vospace.exception;
 
-import net.ivoa.xml.uws.v1.ErrorSummaryFactory;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.ResponseStatus;
 
 @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
-public class VoSpaceErrorSummarizableException extends VoSpaceException {
+public abstract class VoSpaceErrorSummarizableException extends VoSpaceException {
     
-    ErrorSummaryFactory.VOSpaceFault fault;
+    VOSpaceFaultEnum fault;
     
-    public VoSpaceErrorSummarizableException(String message,
-            ErrorSummaryFactory.VOSpaceFault fault)
+    public VoSpaceErrorSummarizableException(String message, VOSpaceFaultEnum fault)
     {
         super(message);
         this.fault = fault;        
     }
-    
-    public ErrorSummaryFactory.VOSpaceFault getFault()
+        
+    public VOSpaceFaultEnum getFault()
     {
         return this.fault;
     }
+        
+    public String getDetailMessage()
+    {
+        return this.getMessage();
+    }
 }