diff --git a/api/README.md b/api/README.md
index 7f725bc41dda7ffaed8db2c70af8bd7f9ff57ba7..c2be5e50914ede44ab2fa1d65d1887c6d2520446 100644
--- a/api/README.md
+++ b/api/README.md
@@ -66,21 +66,22 @@ classDiagram
     + validateMetadataSchema
     + validateMetadataHashValues
   }
-
-  class SenderClient{
-        Sender
-  }
   
-   class SubscriberClient{
+  class SubscriberClient{
         Subscriber
   }
   
-  class SdkClientFactory {
+  class SenderClient{
+        Sender
+  }
+  
+    class AbstractClient {
         SdkModule (Guice DI)
   }
+  
 
-SdkClientFactory  ..> SenderClient : Creates
-SdkClientFactory  ..> SubscriberClient : Creates
+AbstractClient  <.. SenderClient : IsA
+AbstractClient  <.. SubscriberClient : IsA
 
 SenderClient ..> Sender : Uses
 SubscriberClient ..> Subscriber : Uses
diff --git a/api/src/main/java/de/fitko/fitconnect/api/exceptions/client/AttachmentUploadError.java b/api/src/main/java/de/fitko/fitconnect/api/exceptions/client/AttachmentUploadError.java
new file mode 100644
index 0000000000000000000000000000000000000000..3843c9eb0cec27fd49c61d0a53980e4c5a33f9de
--- /dev/null
+++ b/api/src/main/java/de/fitko/fitconnect/api/exceptions/client/AttachmentUploadError.java
@@ -0,0 +1,14 @@
+package de.fitko.fitconnect.api.exceptions.client;
+
+import de.fitko.fitconnect.api.domain.model.metadata.attachment.Attachment;
+import de.fitko.fitconnect.api.domain.model.submission.Submission;
+
+/**
+ * Error during upload of the {@link Submission}s {@link Attachment}s
+ */
+public class AttachmentUploadError extends RuntimeException {
+
+    public AttachmentUploadError(String errorMessage) {
+        super(errorMessage);
+    }
+}
diff --git a/api/src/main/java/de/fitko/fitconnect/api/exceptions/client/ClientNotAuthenticated.java b/api/src/main/java/de/fitko/fitconnect/api/exceptions/client/ClientNotAuthenticated.java
new file mode 100644
index 0000000000000000000000000000000000000000..f90c48a3e42eebb315684d84bdb44fffd516d2e5
--- /dev/null
+++ b/api/src/main/java/de/fitko/fitconnect/api/exceptions/client/ClientNotAuthenticated.java
@@ -0,0 +1,11 @@
+package de.fitko.fitconnect.api.exceptions.client;
+
+/**
+ * Error during the authentication process of the client
+ */
+public class ClientNotAuthenticated extends RuntimeException {
+
+    public ClientNotAuthenticated(String errorMessage) {
+        super(errorMessage);
+    }
+}
diff --git a/api/src/main/java/de/fitko/fitconnect/api/exceptions/client/SubmissionCreationError.java b/api/src/main/java/de/fitko/fitconnect/api/exceptions/client/SubmissionCreationError.java
new file mode 100644
index 0000000000000000000000000000000000000000..2074888d42301c0b2f58726d5bd30bb1573bc154
--- /dev/null
+++ b/api/src/main/java/de/fitko/fitconnect/api/exceptions/client/SubmissionCreationError.java
@@ -0,0 +1,13 @@
+package de.fitko.fitconnect.api.exceptions.client;
+
+import de.fitko.fitconnect.api.domain.model.submission.Submission;
+
+/**
+ * Error during the creation process of a {@link Submission}
+ */
+public class SubmissionCreationError extends RuntimeException {
+
+    public SubmissionCreationError(String errorMessage) {
+        super(errorMessage);
+    }
+}
diff --git a/api/src/main/java/de/fitko/fitconnect/api/exceptions/client/SubmissionSendError.java b/api/src/main/java/de/fitko/fitconnect/api/exceptions/client/SubmissionSendError.java
new file mode 100644
index 0000000000000000000000000000000000000000..6d0ea812cc00fd1f2186e7cc5e1bc69eecd36f17
--- /dev/null
+++ b/api/src/main/java/de/fitko/fitconnect/api/exceptions/client/SubmissionSendError.java
@@ -0,0 +1,13 @@
+package de.fitko.fitconnect.api.exceptions.client;
+
+import de.fitko.fitconnect.api.domain.model.submission.Submission;
+
+/**
+ * Error during the creation process of a {@link Submission}
+ */
+public class SubmissionSendError extends RuntimeException {
+
+    public SubmissionSendError(String errorMessage) {
+        super(errorMessage);
+    }
+}
diff --git a/api/src/main/java/de/fitko/fitconnect/api/exceptions/AuthenticationException.java b/api/src/main/java/de/fitko/fitconnect/api/exceptions/internal/AuthenticationException.java
similarity index 82%
rename from api/src/main/java/de/fitko/fitconnect/api/exceptions/AuthenticationException.java
rename to api/src/main/java/de/fitko/fitconnect/api/exceptions/internal/AuthenticationException.java
index f2cf92a23fd72c3c5487fde62807af2e99dd0408..6ae103a955aaef3c898cff97c78532fcbede6b9d 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/exceptions/AuthenticationException.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/exceptions/internal/AuthenticationException.java
@@ -1,4 +1,4 @@
-package de.fitko.fitconnect.api.exceptions;
+package de.fitko.fitconnect.api.exceptions.internal;
 
 /**
  * An error that occurred during the OAuth authentication
diff --git a/api/src/main/java/de/fitko/fitconnect/api/exceptions/DecryptionException.java b/api/src/main/java/de/fitko/fitconnect/api/exceptions/internal/DecryptionException.java
similarity index 85%
rename from api/src/main/java/de/fitko/fitconnect/api/exceptions/DecryptionException.java
rename to api/src/main/java/de/fitko/fitconnect/api/exceptions/internal/DecryptionException.java
index 43bfc7a39dea339ddb7b4092c05d9898c69fa8b8..eea8127d6086bd58ac098c44a47ff1ba96413d1e 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/exceptions/DecryptionException.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/exceptions/internal/DecryptionException.java
@@ -1,4 +1,4 @@
-package de.fitko.fitconnect.api.exceptions;
+package de.fitko.fitconnect.api.exceptions.internal;
 
 /**
  * An error that occurred decrypting data or attachments
diff --git a/api/src/main/java/de/fitko/fitconnect/api/exceptions/EncryptionException.java b/api/src/main/java/de/fitko/fitconnect/api/exceptions/internal/EncryptionException.java
similarity index 86%
rename from api/src/main/java/de/fitko/fitconnect/api/exceptions/EncryptionException.java
rename to api/src/main/java/de/fitko/fitconnect/api/exceptions/internal/EncryptionException.java
index eba2e516f46e6886565cbe90609ee646a5262f9a..43cdf2bf4e0633640f0a5d30931ebfb102544f89 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/exceptions/EncryptionException.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/exceptions/internal/EncryptionException.java
@@ -1,4 +1,4 @@
-package de.fitko.fitconnect.api.exceptions;
+package de.fitko.fitconnect.api.exceptions.internal;
 
 /**
  * An error that occurred whilst encrypting data or attachments
diff --git a/api/src/main/java/de/fitko/fitconnect/api/exceptions/InitializationException.java b/api/src/main/java/de/fitko/fitconnect/api/exceptions/internal/InitializationException.java
similarity index 84%
rename from api/src/main/java/de/fitko/fitconnect/api/exceptions/InitializationException.java
rename to api/src/main/java/de/fitko/fitconnect/api/exceptions/internal/InitializationException.java
index 3f042876bac2f273997ba86018ff97f2998806e2..02d40fe756654fa39243f5b5c1d7dc7077ec1615 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/exceptions/InitializationException.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/exceptions/internal/InitializationException.java
@@ -1,4 +1,4 @@
-package de.fitko.fitconnect.api.exceptions;
+package de.fitko.fitconnect.api.exceptions.internal;
 
 public class InitializationException extends RuntimeException {
 
diff --git a/api/src/main/java/de/fitko/fitconnect/api/schema/FitConnectSchemaScopes.java b/api/src/main/java/de/fitko/fitconnect/api/schema/FitConnectSchemaScopes.java
deleted file mode 100644
index aa1cd451eb87bc8133e2547a194da5e12b5a080c..0000000000000000000000000000000000000000
--- a/api/src/main/java/de/fitko/fitconnect/api/schema/FitConnectSchemaScopes.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package de.fitko.fitconnect.api.schema;
-
-public final class FitConnectSchemaScopes {
-
-    // Schema-Basis-URI für alle Services
-    private static final String BASE_URI = "https://schema.fitko.de/fit-connect";
-
-    // Events sind nicht API-spezifisch
-    public static final String EVENTS_BASE_URI = BASE_URI + "/events/";
-
-    // API-spezifische Schema-Basis-URI
-    private static final String API_BASE_URI = BASE_URI + "/submission-api";
-
-    // Callbacks sind API-spezifisch
-    public static final String CALLBACKS_BASE_URI = API_BASE_URI + "/callbacks/";
-
-    // Problems sind API-spezifisch
-    public static final String PROBLEMS_BASE_URI = API_BASE_URI + "/problems/";
-
-    // API-spezifische Schema-Basis-URI
-    private static final String SET_BASE_URI = BASE_URI + "/set-payload";
-
-    // static class only for constants
-    private FitConnectSchemaScopes() {
-    }
-}
-
diff --git a/api/src/main/java/de/fitko/fitconnect/api/services/Sender.java b/api/src/main/java/de/fitko/fitconnect/api/services/Sender.java
index 8caa2175892da068c2f4f2c985ce94ffbd38d0b3..2f5ef4aeeaffd78d7bda6e107ca7f50d3f737d85 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/services/Sender.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/services/Sender.java
@@ -72,5 +72,12 @@ public interface Sender {
      * @param submission
      * @return
      */
-    Submission sendSubmission(Submission submission);
+    Optional<Submission> createSubmission(Submission submission);
+
+    /**
+     *
+     * @param submission
+     * @return
+     */
+    Optional<Submission> sendSubmission(Submission submission);
 }
diff --git a/api/src/main/java/de/fitko/fitconnect/api/services/Subscriber.java b/api/src/main/java/de/fitko/fitconnect/api/services/Subscriber.java
index 2f8051ee8bdc0f9d6c0bf3b65730c8af7415a186..9358d6ba2ac88100f972964c0bf4a4afe142893f 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/services/Subscriber.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/services/Subscriber.java
@@ -69,6 +69,7 @@ public interface Subscriber {
      * @param submissionId
      * @param attachmentId
      * @return
+     *
      */
     Optional<Submission> getSubmission(String submissionId, String attachmentId);
 
diff --git a/api/src/main/java/de/fitko/fitconnect/api/services/auth/OAuthService.java b/api/src/main/java/de/fitko/fitconnect/api/services/auth/OAuthService.java
index 665ffbb1e3bafd7d8f8438d3042bfe3ef5321758..7a18915869ca81c8b91494d9096b7c4f9322f7fb 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/services/auth/OAuthService.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/services/auth/OAuthService.java
@@ -2,7 +2,7 @@ package de.fitko.fitconnect.api.services.auth;
 
 import de.fitko.fitconnect.api.domain.auth.OAuthToken;
 import de.fitko.fitconnect.api.domain.model.submission.Submission;
-import de.fitko.fitconnect.api.exceptions.AuthenticationException;
+import de.fitko.fitconnect.api.exceptions.internal.AuthenticationException;
 
 /**
  * A Service that provides an interface to authenticate against the Fit-Connect API in order
diff --git a/api/src/main/java/de/fitko/fitconnect/api/services/crypto/CryptoService.java b/api/src/main/java/de/fitko/fitconnect/api/services/crypto/CryptoService.java
index 817626780cfc46060a2e87042a857e79561160a0..465fdbb77da11d7655bcf679883954895549a23f 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/services/crypto/CryptoService.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/services/crypto/CryptoService.java
@@ -4,8 +4,8 @@ import com.nimbusds.jose.jwk.RSAKey;
 import de.fitko.fitconnect.api.domain.model.metadata.data.Data;
 import de.fitko.fitconnect.api.domain.model.metadata.attachment.Attachment;
 import de.fitko.fitconnect.api.domain.model.submission.Submission;
-import de.fitko.fitconnect.api.exceptions.DecryptionException;
-import de.fitko.fitconnect.api.exceptions.EncryptionException;
+import de.fitko.fitconnect.api.exceptions.internal.DecryptionException;
+import de.fitko.fitconnect.api.exceptions.internal.EncryptionException;
 
 /**
  * A service that allows to encrypt and decrypt {@link Data} and {@link Attachment}s of a {@link Submission} via JWE.
diff --git a/api/src/main/java/de/fitko/fitconnect/api/services/metadata/MetadataService.java b/api/src/main/java/de/fitko/fitconnect/api/services/metadata/MetadataService.java
index a27af31d8c382f040840936d1ffcf2cf57a29a98..e43dbca1bfbd34dd141530762f272ffa5ccd9771 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/services/metadata/MetadataService.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/services/metadata/MetadataService.java
@@ -12,7 +12,7 @@ import java.util.List;
  *
  * @see
  * <a href="https://docs.fitko.de/fit-connect/docs/metadataoverview">Metadata</a> and
- * <a href="https://docs.fitko.de/fit-connect/docs/getting-started/submission/structure">Strcuture of a submission</a>
+ * <a href="https://docs.fitko.de/fit-connect/docs/getting-started/submission/structure">Structure of a submission</a>
  */
 public interface MetadataService {
 
diff --git a/client/src/main/java/de/fitko/fitconnect/TestRunner.java b/client/src/main/java/de/fitko/fitconnect/TestRunner.java
index 5af8022423fb65c301aea5bb3c9a2081a30dbdfd..029a25693105cc99831a0106a23f738e95d04fde 100644
--- a/client/src/main/java/de/fitko/fitconnect/TestRunner.java
+++ b/client/src/main/java/de/fitko/fitconnect/TestRunner.java
@@ -6,6 +6,9 @@ import de.fitko.fitconnect.api.domain.model.submission.Submission;
 import de.fitko.fitconnect.client.SenderClient;
 import de.fitko.fitconnect.client.SubscriberClient;
 
+import java.util.Collections;
+import java.util.Optional;
+
 public class TestRunner {
 
     public static void main(String[] args) {
@@ -13,10 +16,11 @@ public class TestRunner {
         var clientId = "781f6213-0f0f-4a79-9372-e7187ffda98b";
         var secret = "PnzR8Vbmhpv_VwTkT34wponqXWK8WBm-LADlryYdV4o";
 
-        final Submission sentSubmission = SenderClient.builder()
+        // sample calls to the fluent sender client
+        final Optional<Submission> sentSubmission =  SenderClient.builder()
                 .authenticate(clientId, secret)
                 .createSubmission(Submission.builder().build())
-                .uploadAttachments()
+                .uploadAttachments(Collections.emptyList())
                 .sendSubmission(Metadata.builder().build(), Data.builder().build());
 
         SubscriberClient.builder()
diff --git a/client/src/main/java/de/fitko/fitconnect/client/Client.java b/client/src/main/java/de/fitko/fitconnect/client/Client.java
new file mode 100644
index 0000000000000000000000000000000000000000..d066e86376e1ccb03eac4231233755d8bb6a37a7
--- /dev/null
+++ b/client/src/main/java/de/fitko/fitconnect/client/Client.java
@@ -0,0 +1,14 @@
+package de.fitko.fitconnect.client;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import de.fitko.fitconnect.dependency.SdkModule;
+
+public abstract class Client {
+
+    private static final Injector injector = Guice.createInjector(new SdkModule());
+
+    static <T> T getService(Class<T> clazz){
+        return injector.getInstance(clazz);
+    }
+}
diff --git a/client/src/main/java/de/fitko/fitconnect/client/SenderClient.java b/client/src/main/java/de/fitko/fitconnect/client/SenderClient.java
index bf67f27732fc22fa1fc0f104577eb969363d5c01..dde2aca1823758d2834ce2dda2286bda786d12fe 100644
--- a/client/src/main/java/de/fitko/fitconnect/client/SenderClient.java
+++ b/client/src/main/java/de/fitko/fitconnect/client/SenderClient.java
@@ -1,60 +1,85 @@
 package de.fitko.fitconnect.client;
 
-import com.google.inject.Guice;
-import com.google.inject.Injector;
 import de.fitko.fitconnect.api.domain.auth.OAuthToken;
 import de.fitko.fitconnect.api.domain.model.metadata.Metadata;
+import de.fitko.fitconnect.api.domain.model.metadata.attachment.Attachment;
 import de.fitko.fitconnect.api.domain.model.metadata.data.Data;
 import de.fitko.fitconnect.api.domain.model.submission.Submission;
+import de.fitko.fitconnect.api.exceptions.client.AttachmentUploadError;
+import de.fitko.fitconnect.api.exceptions.client.ClientNotAuthenticated;
 import de.fitko.fitconnect.api.services.Sender;
 import de.fitko.fitconnect.api.services.metadata.MetadataService;
-import de.fitko.fitconnect.dependency.SdkModule;
 
+import java.util.List;
 import java.util.Optional;
 
 /**
- * A fluent client for handing in a {@link Submission}
+ * A fluent client for announcing and handing in a {@link Submission}
  */
-public class SenderClient {
-
-    private static final Injector injector = Guice.createInjector(new SdkModule());
+public class SenderClient extends Client {
 
     private SenderClient() {}
 
      public static Authenticate builder() {
-         Sender sender = injector.getInstance(Sender.class);
-         MetadataService metadataService = injector.getInstance(MetadataService.class);
+         final Sender sender = getService(Sender.class);
+         final MetadataService metadataService = getService(MetadataService.class);
          return new ClientBuilder(sender, metadataService);
     }
 
     public interface Authenticate {
         /**
+         * Authenticates the client against the FitConnect-Auth-API and retrieves an {@link OAuthToken}.
+         *
+         * @param clientId a unique client identifier
+         * @param secret the applications secret key
+         * @param scope 1 or more client scopes that determine if a submission is accepted by the client
+         * @return the step for creating a new submission if the authentication was successful
          *
-         * @param clientId
-         * @param secret
-         * @param scope
-         * @return
+         * @throws ClientNotAuthenticated if the OAuth token could not be retrieved
          */
-        CreateSubmission authenticate(String clientId, String secret, String... scope);
+        CreateSubmission authenticate(String clientId, String secret, String... scope) throws ClientNotAuthenticated;
     }
 
     public interface AttachmentUpload {
-        SendSubmission uploadAttachments();
+        /**
+         * Encrypts and Uploads all {@link Attachment}s to the FitConnect-API
+         *
+         * @param attachments a list of attachments that are uploaded
+         * @return the step for sending the submission if the creating step was successful
+         *
+         * @throws ClientNotAuthenticated if the client is not authenticated
+         * @throws AttachmentUploadError if the upload failed
+         */
+        SendSubmission uploadAttachments(List<Attachment> attachments);
     }
 
     public interface CreateSubmission {
+        /**
+         * Creates and announces a new {@link Submission}
+         *
+         * @param submission the new {@link Submission} that should be created on server-side
+         * @return the step for upload the attachments if the creation was successful
+         */
         AttachmentUpload createSubmission(Submission submission);
     }
 
     public interface SendSubmission {
-        Submission sendSubmission(Metadata metaData, Data data);
+        /**
+         * Encrypts and uploads  the {@link Metadata} and {@link Data} and hands in the {@link Submission} at
+         * the defined destination-id.
+         *
+         * @param metaData the submissions {@link Metadata}
+         * @param data the submissions {@link Data}
+         *
+         * @return the finally uploaded and sent submission, empty if an error occurred
+         */
+        Optional<Submission> sendSubmission(Metadata metaData, Data data);
     }
 
     public static class ClientBuilder implements Authenticate, AttachmentUpload, CreateSubmission, SendSubmission {
 
         private final MetadataService metadataService;
         private Sender sender;
-        private Submission submission;
         private Optional<OAuthToken> token;
 
         private ClientBuilder(Sender sender, MetadataService metadataService) {
@@ -65,32 +90,31 @@ public class SenderClient {
         @Override
         public CreateSubmission authenticate(String clientId, String secret, String... scope) {
             this.token = sender.retrieveOAuthToken(clientId, secret, scope);
+            checkIfAuthenticated();
             return this;
         }
 
         @Override
-        public SendSubmission uploadAttachments() {
+        public SendSubmission uploadAttachments(List<Attachment> attachments) {
             checkIfAuthenticated();
-            //metadataService.createMetadata();
             return this;
         }
 
         @Override
         public AttachmentUpload createSubmission(Submission submission) {
             checkIfAuthenticated();
-            sender.sendSubmission(submission);
             return this;
         }
 
         @Override
-        public Submission sendSubmission(Metadata metaData, Data data) {
+        public Optional<Submission> sendSubmission(Metadata metaData, Data data) {
             checkIfAuthenticated();
             return sender.sendSubmission(Submission.builder().build());
         }
 
         private void checkIfAuthenticated(){
             if(this.token == null || this.token.isEmpty()){
-                throw new IllegalStateException("Not authenticated, please authenticate first");
+                throw new ClientNotAuthenticated("Not authenticated, please authenticate first");
             }
         }
     }
diff --git a/client/src/main/java/de/fitko/fitconnect/client/SubscriberClient.java b/client/src/main/java/de/fitko/fitconnect/client/SubscriberClient.java
index 77f3c997371bc2fd92bc8e5977d54c6e5562e1c4..6b556c1c096a5d537f2acc02320e41a4b848d6d3 100644
--- a/client/src/main/java/de/fitko/fitconnect/client/SubscriberClient.java
+++ b/client/src/main/java/de/fitko/fitconnect/client/SubscriberClient.java
@@ -1,24 +1,19 @@
 package de.fitko.fitconnect.client;
 
-import com.google.inject.Guice;
-import com.google.inject.Injector;
 import de.fitko.fitconnect.api.domain.auth.OAuthToken;
 import de.fitko.fitconnect.api.services.Subscriber;
-import de.fitko.fitconnect.dependency.SdkModule;
 
 import java.util.Optional;
 
 /**
  * A fluent client for handing in a subscription for a {@link Subscriber}
  */
-public class SubscriberClient {
-
-    private static final Injector injector = Guice.createInjector(new SdkModule());
+public class SubscriberClient extends Client {
 
     private SubscriberClient() {}
 
      public static Authenticate builder() {
-         Subscriber subscriber = injector.getInstance(Subscriber.class);
+         final Subscriber subscriber = getService(Subscriber.class);
          return new ClientBuilder(subscriber);
     }
 
diff --git a/impl/src/main/java/de/fitko/fitconnect/impl/SubmissionSender.java b/impl/src/main/java/de/fitko/fitconnect/impl/SubmissionSender.java
index a2ff79758b6c14d3470190ea367756a02ac756bd..250e8d77e76cecd8bbfb872be017bc8b8a137b0a 100644
--- a/impl/src/main/java/de/fitko/fitconnect/impl/SubmissionSender.java
+++ b/impl/src/main/java/de/fitko/fitconnect/impl/SubmissionSender.java
@@ -8,7 +8,7 @@ import de.fitko.fitconnect.api.domain.model.metadata.attachment.Attachment;
 import de.fitko.fitconnect.api.domain.model.metadata.data.Data;
 import de.fitko.fitconnect.api.domain.model.submission.Submission;
 import de.fitko.fitconnect.api.domain.validation.ValidationResult;
-import de.fitko.fitconnect.api.exceptions.AuthenticationException;
+import de.fitko.fitconnect.api.exceptions.internal.AuthenticationException;
 import de.fitko.fitconnect.api.services.Sender;
 import de.fitko.fitconnect.api.services.auth.OAuthService;
 import de.fitko.fitconnect.api.services.crypto.CryptoService;
@@ -59,7 +59,9 @@ public class SubmissionSender implements Sender {
     @Override
     public Optional<OAuthToken> retrieveOAuthToken(String clientId, String clientSecret, String... scope) {
         try {
-            return Optional.of(authService.authenticate(clientId, clientSecret, scope));
+            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();
@@ -72,7 +74,12 @@ public class SubmissionSender implements Sender {
     }
 
     @Override
-    public Submission sendSubmission(Submission submission) {
+    public Optional<Submission> createSubmission(Submission submission) {
+        throw new UnsupportedOperationException("not yet implemented");
+    }
+
+    @Override
+    public Optional<Submission> sendSubmission(Submission submission) {
         throw new UnsupportedOperationException("not yet implemented");
     }
 }
diff --git a/impl/src/main/java/de/fitko/fitconnect/impl/SubmissionSubscriber.java b/impl/src/main/java/de/fitko/fitconnect/impl/SubmissionSubscriber.java
index 654082bd467fcea7bd6fc6f1d1bd27841f49ab3b..b76f2df7ac2200256a81639f6fb1ffc76c59233b 100644
--- a/impl/src/main/java/de/fitko/fitconnect/impl/SubmissionSubscriber.java
+++ b/impl/src/main/java/de/fitko/fitconnect/impl/SubmissionSubscriber.java
@@ -9,7 +9,7 @@ import de.fitko.fitconnect.api.domain.model.metadata.data.Data;
 import de.fitko.fitconnect.api.domain.model.event.SecurityEventToken;
 import de.fitko.fitconnect.api.domain.model.submission.Submission;
 import de.fitko.fitconnect.api.domain.validation.ValidationResult;
-import de.fitko.fitconnect.api.exceptions.AuthenticationException;
+import de.fitko.fitconnect.api.exceptions.internal.AuthenticationException;
 import de.fitko.fitconnect.api.services.Subscriber;
 import de.fitko.fitconnect.api.services.auth.OAuthService;
 import de.fitko.fitconnect.api.services.crypto.CryptoService;
diff --git a/impl/src/main/java/de/fitko/fitconnect/impl/auth/DefaultOAuthService.java b/impl/src/main/java/de/fitko/fitconnect/impl/auth/DefaultOAuthService.java
index 07dc2707dd2665611780cc48c78ce19809c2d1aa..3d808799a91a4030558d0d122de0582397fd3a87 100644
--- a/impl/src/main/java/de/fitko/fitconnect/impl/auth/DefaultOAuthService.java
+++ b/impl/src/main/java/de/fitko/fitconnect/impl/auth/DefaultOAuthService.java
@@ -1,7 +1,7 @@
 package de.fitko.fitconnect.impl.auth;
 
 import de.fitko.fitconnect.api.domain.auth.OAuthToken;
-import de.fitko.fitconnect.api.exceptions.AuthenticationException;
+import de.fitko.fitconnect.api.exceptions.internal.AuthenticationException;
 import de.fitko.fitconnect.api.services.auth.OAuthService;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
diff --git a/impl/src/main/java/de/fitko/fitconnect/impl/crypto/JWECryptoService.java b/impl/src/main/java/de/fitko/fitconnect/impl/crypto/JWECryptoService.java
index 087ac00064a0f25f6d9e37a343f4beda5499f8a1..50353fc42097d4b11d75803deec2eeb87eca5260 100644
--- a/impl/src/main/java/de/fitko/fitconnect/impl/crypto/JWECryptoService.java
+++ b/impl/src/main/java/de/fitko/fitconnect/impl/crypto/JWECryptoService.java
@@ -5,8 +5,8 @@ import com.nimbusds.jose.crypto.RSADecrypter;
 import com.nimbusds.jose.crypto.RSAEncrypter;
 import com.nimbusds.jose.jwk.RSAKey;
 import de.fitko.fitconnect.api.services.crypto.CryptoService;
-import de.fitko.fitconnect.api.exceptions.DecryptionException;
-import de.fitko.fitconnect.api.exceptions.EncryptionException;
+import de.fitko.fitconnect.api.exceptions.internal.DecryptionException;
+import de.fitko.fitconnect.api.exceptions.internal.EncryptionException;
 
 import javax.crypto.KeyGenerator;
 import javax.crypto.SecretKey;
diff --git a/impl/src/main/java/de/fitko/fitconnect/impl/crypto/MetadataVerifier.java b/impl/src/main/java/de/fitko/fitconnect/impl/crypto/MetadataVerifier.java
index 54e2828907438f6bc96078746206c317a7012b3c..192e99ed7e1614994ff785becb5f1aca08c49dcf 100644
--- a/impl/src/main/java/de/fitko/fitconnect/impl/crypto/MetadataVerifier.java
+++ b/impl/src/main/java/de/fitko/fitconnect/impl/crypto/MetadataVerifier.java
@@ -1,6 +1,6 @@
 package de.fitko.fitconnect.impl.crypto;
 
-import de.fitko.fitconnect.api.exceptions.InitializationException;
+import de.fitko.fitconnect.api.exceptions.internal.InitializationException;
 
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;