diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/event/SecurityEventToken.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/event/SecurityEventToken.java
deleted file mode 100644
index 9104fd7c5db83edbda3bda797c820c819690058e..0000000000000000000000000000000000000000
--- a/api/src/main/java/de/fitko/fitconnect/api/domain/model/event/SecurityEventToken.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package de.fitko.fitconnect.api.domain.model.event;
-
-public class SecurityEventToken {
-}
diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/events/SecurityEventToken.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/events/SecurityEventToken.java
new file mode 100644
index 0000000000000000000000000000000000000000..177de51519ad7a4e2416344226433039a6fafab1
--- /dev/null
+++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/events/SecurityEventToken.java
@@ -0,0 +1,4 @@
+package de.fitko.fitconnect.api.domain.model.events;
+
+public class SecurityEventToken {
+}
diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/CreatedSubmission.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionForPickup.java
similarity index 91%
rename from api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/CreatedSubmission.java
rename to api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionForPickup.java
index d07b2de501c0b766674c26d70c6d54a6cdbcfcab..4c179568b54a015dda2d6828f2e752b2825f4848 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/CreatedSubmission.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionForPickup.java
@@ -6,7 +6,7 @@ import lombok.Value;
 import java.util.UUID;
 
 @Value
-public class CreatedSubmission {
+public class SubmissionForPickup {
 
     @JsonProperty("destinationId")
     private final UUID destinationId;
diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionRequest.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionSubmit.java
similarity index 95%
rename from api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionRequest.java
rename to api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionSubmit.java
index 0b691c7ba65675947f2b5548ed4df7dcfbba27ec..a90e0398aaf566908a6e9605f6a313245e36ea17 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionRequest.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionSubmit.java
@@ -14,7 +14,7 @@ import java.util.UUID;
 @Setter
 @Value
 @Builder
-public class SubmissionRequest {
+public class SubmissionSubmit {
 
     @JsonProperty("destinationId")
     UUID destinationId;
diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/AvailableSubmissions.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionsForPickup.java
similarity index 67%
rename from api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/AvailableSubmissions.java
rename to api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionsForPickup.java
index 07dc7552dbc4e6da3ff0571947f01fae859df9fa..54f0f14a0ebd3e2d4295e9d958401ccfcd8d16dd 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/AvailableSubmissions.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionsForPickup.java
@@ -1,13 +1,16 @@
 package de.fitko.fitconnect.api.domain.model.submission;
 
+
 import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Builder;
 import lombok.Value;
 
+import java.util.Collections;
 import java.util.List;
 
 @Value
-public class AvailableSubmissions {
-
+@Builder
+public class SubmissionsForPickup{
     @JsonProperty("count")
     int count;
 
@@ -18,5 +21,5 @@ public class AvailableSubmissions {
     int totalCount;
 
     @JsonProperty("submissions")
-    List<CreatedSubmission> submissions;
-}
+    List<SubmissionForPickup> submissions = Collections.emptyList();
+}
\ No newline at end of file
diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/validation/ValidationResult.java b/api/src/main/java/de/fitko/fitconnect/api/domain/validation/ValidationResult.java
index 0293bfbeddd683860d1d44d37dd93b1b2d93d04e..c9f74030f8932f433b4b40c416da9c1df68e76aa 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/domain/validation/ValidationResult.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/domain/validation/ValidationResult.java
@@ -1,44 +1,39 @@
 package de.fitko.fitconnect.api.domain.validation;
 
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * Wrapper for validations including errors that occurred
  */
 public class ValidationResult {
 
     private final boolean isValid;
-    private final List<Exception> errors;
+    private Exception error;
 
     private ValidationResult(final boolean isValid) {
         this.isValid = isValid;
-        this.errors = Collections.emptyList();
     }
 
-    private ValidationResult(final boolean isValid, Exception... exceptions) {
+    private ValidationResult(final boolean isValid, Exception exception) {
         this.isValid = isValid;
-        this.errors = Arrays.asList(exceptions);
+        this.error = exception;
     }
 
     public static ValidationResult ok() {
         return new ValidationResult(true);
     }
 
-    public static ValidationResult error(Exception... exceptions) {
-        return new ValidationResult(false, exceptions);
+    public static ValidationResult error(Exception exception) {
+        return new ValidationResult(false, exception);
     }
 
     public boolean isValid() {
         return this.isValid;
     }
 
-    public boolean hasErrors() {
-        return !isValid || !errors.isEmpty();
+    public boolean hasError() {
+        return !isValid || error != null;
     }
 
-    public List<Exception> getErrors() {
-        return this.errors;
+    public Exception getError() {
+        return this.error;
     }
 }
diff --git a/core/src/main/java/de/fitko/fitconnect/core/SubmissionSender.java b/core/src/main/java/de/fitko/fitconnect/core/SubmissionSender.java
index fc12ed0f868a3efa063ba6ab2abd3c01d8f0eabf..68e965b1f49219cb96fc321d654f91e41db9e49d 100644
--- a/core/src/main/java/de/fitko/fitconnect/core/SubmissionSender.java
+++ b/core/src/main/java/de/fitko/fitconnect/core/SubmissionSender.java
@@ -8,10 +8,10 @@ import de.fitko.fitconnect.api.domain.model.metadata.attachment.Attachment;
 import de.fitko.fitconnect.api.domain.model.metadata.attachment.signature.Hash__1;
 import de.fitko.fitconnect.api.domain.model.metadata.attachment.signature.Type;
 import de.fitko.fitconnect.api.domain.model.metadata.data.Data;
-import de.fitko.fitconnect.api.domain.model.submission.SubmissionRequest;
-import de.fitko.fitconnect.api.domain.model.submission.CreatedSubmission;
+import de.fitko.fitconnect.api.domain.model.submission.SubmissionForPickup;
+import de.fitko.fitconnect.api.domain.model.submission.SubmissionSubmit;
 import de.fitko.fitconnect.api.domain.validation.ValidationResult;
-import de.fitko.fitconnect.api.exceptions.internal.AuthenticationException;
+import de.fitko.fitconnect.api.exceptions.AttachmentCreationException;
 import de.fitko.fitconnect.api.services.Sender;
 import de.fitko.fitconnect.api.services.auth.OAuthService;
 import de.fitko.fitconnect.api.services.crypto.CryptoService;
@@ -24,7 +24,6 @@ import org.slf4j.LoggerFactory;
 import java.io.File;
 import java.io.IOException;
 import java.util.List;
-import java.util.Optional;
 import java.util.UUID;
 
 public class SubmissionSender implements Sender {
@@ -35,8 +34,7 @@ public class SubmissionSender implements Sender {
     private final CertificateValidator certificateValidator;
     private final CryptoService cryptoService;
     private final MetadataService metadataService;
-
-    private HashUtil hashUtil = new HashUtil();
+    private final HashUtil hashUtil = new HashUtil();
 
     @Inject
     public SubmissionSender(final OAuthService authService,
@@ -51,77 +49,72 @@ public class SubmissionSender implements Sender {
 
 
     @Override
-    public ValidationResult validatePublicKey(RSAKey publicKey) {
+    public ValidationResult validatePublicKey(final RSAKey publicKey) {
         return certificateValidator.validatePublicKey(publicKey);
     }
 
     @Override
-    public Optional<Data> encryptSubmissionData(RSAKey publicKey, Data data) {
+    public Data encryptSubmissionData(final RSAKey publicKey, final Data data) {
         throw new UnsupportedOperationException("not yet implemented");
     }
 
     @Override
-    public Optional<Attachment> encryptAttachment(RSAKey publicKey, Attachment attachment) {
+    public Attachment encryptAttachment(final RSAKey publicKey, final Attachment attachment) {
         throw new UnsupportedOperationException("not yet implemented");
     }
 
     @Override
-    public Optional<OAuthToken> retrieveOAuthToken(String clientId, String clientSecret, String... scope) {
-        try {
-            final OAuthToken token = authService.authenticate(clientId, clientSecret, scope);
-            logger.debug("successfully retrieved token {}", token.getAccessToken());
-            return Optional.of(token);
-        } catch (AuthenticationException e) {
-            logger.error("client could not be authenticated", e.getMessage());
-            return Optional.empty();
-        }
+    public OAuthToken retrieveOAuthToken(final String clientId, final String clientSecret, final String... scope) {
+        final OAuthToken token = authService.authenticate(clientId, clientSecret, scope);
+        logger.debug("Successfully retrieved OAuth token: {}", token.getAccessToken());
+        return token;
     }
 
     @Override
-    public Optional<Metadata> createMetadata(Data data, List<Attachment> attachments) {
+    public Metadata createMetadata(final Data data, final List<Attachment> attachments) {
         throw new UnsupportedOperationException("not yet implemented");
     }
 
     @Override
-    public Optional<Metadata> createMetadata(List<Attachment> attachments) {
+    public Metadata createMetadata(final List<Attachment> attachments) {
         throw new UnsupportedOperationException("not yet implemented");
     }
 
     @Override
-    public Optional<CreatedSubmission> createSubmission(SubmissionRequest submission) {
+    public SubmissionForPickup createSubmission(final SubmissionSubmit submission) {
         throw new UnsupportedOperationException("not yet implemented");
     }
 
     @Override
-    public Optional<CreatedSubmission> sendSubmission(UUID submissionId, Metadata encryptedMetadata) {
+    public SubmissionForPickup sendSubmission(final UUID submissionId, final Metadata encryptedMetadata) {
         throw new UnsupportedOperationException("not yet implemented");
     }
 
     @Override
-    public void uploadAttachments(UUID submissionId, List<Attachment> encryptedAttachments) {
+    public void uploadAttachments(final UUID submissionId, final List<Attachment> encryptedAttachments) {
         throw new UnsupportedOperationException("not yet implemented");
     }
 
     @Override
-    public Optional<Attachment> createAttachment(File file) {
+    public Attachment createAttachment(final File file) {
         try {
-            String hashedFileContent = hashUtil.createHashFromFile(file);
-            Hash__1 hash = new Hash__1();
+            final String hashedFileContent = hashUtil.createHashFromFile(file);
+            final Hash__1 hash = new Hash__1();
             hash.setType(Type.SHA_512);
             hash.setContent(hashedFileContent);
-            return Optional.ofNullable(Attachment.builder()
+            return Attachment.builder()
                     .attachmentId(UUID.randomUUID())
                     .filename(file.getName())
                     .hash(hash)
-                    .build());
-        } catch (IOException e) {
+                    .build();
+        } catch (final IOException e) {
             logger.error("Attachment could not be read", e);
-            return Optional.empty();
+            throw new AttachmentCreationException(e.getMessage(), e);
         }
     }
 
     @Override
-    public RSAKey getEncryptionKeyForDestination(UUID destinationId) {
+    public RSAKey getEncryptionKeyForDestination(final UUID destinationId) {
         throw new UnsupportedOperationException("not yet implemented");
     }