diff --git a/.reuse/dep5 b/.reuse/dep5
index 030883587b0d1e972a7e9f6231ac145b09fb5d06..337467ddde014f5e46e40e83ea75a5b3cd8b3dce 100644
--- a/.reuse/dep5
+++ b/.reuse/dep5
@@ -1,7 +1,7 @@
 Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
 
-Files: api/src/* client/src/* cli/src/* core/src/* integration-tests/src/*
-       api/README.md cli/README.md core/README.md
+Files: api/src/* client/src/* cli/src/* core/src/* demo/src/* integration-tests/src/*
+       api/README.md cli/README.md core/README.md demo/README.md
        README.md CHANGELOG.md SECURITY.md
 Copyright: 2022 FIT-Connect contributors
 License: EUPL-1.2
@@ -10,7 +10,7 @@ Files: .mvn/wrapper/* mvnw mvnw.cmd
 Copyright: 2013-2022 The Apache Software Foundation
 License: Apache-2.0
 
-Files: pom.xml api/pom.xml core/pom.xml client/pom.xml cli/pom.xml integration-tests/pom.xml
+Files: pom.xml api/pom.xml core/pom.xml client/pom.xml cli/pom.xml demo/pom.xml integration-tests/pom.xml
        .gitlab-ci.yml .gitignore .m2/release.xml
        renovate.json checkstyle.xml checkstyle-suppressions.xml config.yml
 Copyright: 2022 FIT-Connect contributors
diff --git a/demo/README.md b/demo/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..e4c20578577cfaac369b115517380d86f1c21305
--- /dev/null
+++ b/demo/README.md
@@ -0,0 +1,30 @@
+# FIT-Connect Java-SDK Demo
+
+An dieser Stelle finden sich alle relevanten Links zur in der Demo genutzten Ressourcen.
+
+## FIT-Connect Dokumentation
+- https://docs.fitko.de/fit-connect/docs
+- Die [Dokumentation](https://docs.fitko.de/fit-connect/docs/receiving/destination), wie man einen Zustellpunkt (und dessen DestinationID) anlegt
+- [Self-Service-Portal]( https://portal.auth-testing.fit-connect.fitko.dev/login) der Testumgebung: _(Für den Login benötigen Sie einen Gitlab- oder Github-Account)_
+
+## CommandLine-Client
+
+ - CLI-Client [Dokumentation](https://git.fitko.de/fit-connect/sdk-java/-/tree/main/cli)
+ - Ausführbarer [fit-connect-cli.jar](https://s01.oss.sonatype.org/content/repositories/snapshots/dev/fitko/fitconnect/sdk/cli/1.1.0-SNAPSHOT/cli-1.1.0-20230705.171100-3.jar) auf Maven Central *[1.1.0-Snapshot vom 05.07.23]*:
+ - Git Repository des [Demoprojekts](demo), welches das SDK einbindet:
+
+Das Commandline Interface kann als runnable .jar kann, wie in der [Doku](https://git.fitko.de/fit-connect/sdk-java/-/tree/main/cli) beschrieben, direkt mit `java -jar` ausgeführt werden oder als Abhängigkeit einem bestehenden Java-/Maven-Projekt hinzugefügt werden, um die Fluent-API des Java-SDK zu nutzen.
+
+Für beide Varianten muss das SDK über eine [Konfigurations-YAML](https://git.fitko.de/fit-connect/sdk-java/-/tree/main/config.yml) eingerichtet werden.
+
+## Maven Dependency 
+
+Um das SDK in einem bestehenden Java-Projekt zu nutzen, wird die Maven-Dependency in der aktuellen Version (RC.2) der POM hinzugefügt:
+      
+```xml
+<dependency>
+  <groupId>dev.fitko.fitconnect.sdk</groupId>
+  <artifactId>client</artifactId>
+  <version>1.0.0-rc.2</version>
+</dependency>
+```
diff --git a/demo/pom.xml b/demo/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5a999365b8b18de4fd970fe964bacee46df1487b
--- /dev/null
+++ b/demo/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>sdk-java</artifactId>
+        <groupId>dev.fitko.fitconnect.sdk</groupId>
+        <version>1.1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>demo</artifactId>
+
+    <properties>
+        <maven.compiler.release>11</maven.compiler.release>
+
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>dev.fitko.fitconnect.sdk</groupId>
+            <artifactId>client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/demo/src/main/java/dev/fitko/fitconnect/sdk/demo/Demo.java b/demo/src/main/java/dev/fitko/fitconnect/sdk/demo/Demo.java
new file mode 100644
index 0000000000000000000000000000000000000000..f3c15ae7e17801a4bf22724176d2382ac6e587d2
--- /dev/null
+++ b/demo/src/main/java/dev/fitko/fitconnect/sdk/demo/Demo.java
@@ -0,0 +1,115 @@
+package dev.fitko.fitconnect.sdk.demo;
+
+import dev.fitko.fitconnect.api.config.ApplicationConfig;
+import dev.fitko.fitconnect.api.domain.model.event.SubmissionStatus;
+import dev.fitko.fitconnect.api.domain.model.event.problems.other.TechnicalError;
+import dev.fitko.fitconnect.api.domain.model.replychannel.ReplyChannel;
+import dev.fitko.fitconnect.api.domain.model.submission.SentSubmission;
+import dev.fitko.fitconnect.api.domain.model.submission.SubmissionForPickup;
+import dev.fitko.fitconnect.client.RouterClient;
+import dev.fitko.fitconnect.client.SenderClient;
+import dev.fitko.fitconnect.client.SubscriberClient;
+import dev.fitko.fitconnect.client.bootstrap.ApplicationConfigLoader;
+import dev.fitko.fitconnect.client.bootstrap.ClientFactory;
+import dev.fitko.fitconnect.client.sender.model.Attachment;
+import dev.fitko.fitconnect.client.sender.model.SendableSubmission;
+import dev.fitko.fitconnect.client.subscriber.ReceivedSubmission;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.net.URI;
+import java.nio.file.Path;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
+public class Demo {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(Demo.class);
+
+    final SubscriberClient subscriberClient;
+    final SenderClient senderClient;
+    final RouterClient routerClient;
+
+    public static void main(final String[] args) {
+
+        // config can be loaded by setting env-var FIT_CONNECT_CONFIG or directly via ApplicationConfigLoader.loadConfig("path/to/config.yml")
+        final var configPath = Path.of("demo/src/main/resources/config.yml");
+
+        // unique identifier of the destination/Zustellpunkt (https://portal.auth-testing.fit-connect.fitko.dev/destinations)
+        final var destinationId = UUID.fromString("DESTINATION_ID");
+
+        final var demo = new Demo(configPath);
+
+        final SentSubmission submissionOne = demo.sendSubmission(destinationId);
+
+        demo.listFirstTenSubmissions(destinationId);
+        demo.printStatus(submissionOne);
+        demo.getSubmission(submissionOne.getSubmissionId());
+        demo.acceptSubmission(submissionOne.getSubmissionId());
+
+        final SentSubmission submissionTwo = demo.sendSubmission(destinationId);
+        demo.reject(submissionTwo.getSubmissionId());
+        demo.printStatus(submissionTwo);
+    }
+
+    Demo(final Path configPath){
+
+        final ApplicationConfig config =  ApplicationConfigLoader.loadConfigFromPath(configPath);
+
+        // init clients
+        subscriberClient = ClientFactory.getSubscriberClient(config);
+        senderClient = ClientFactory.getSenderClient(config);
+        routerClient = ClientFactory.getRouterClient(config);
+    }
+
+    private void acceptSubmission(final UUID submissionId) {
+        subscriberClient.requestSubmission(submissionId).acceptSubmission();
+        LOGGER.info("Accepted submission {}", submissionId);
+    }
+
+    private void reject( final UUID submissionId) {
+        subscriberClient.requestSubmission(submissionId).rejectSubmission(List.of(new TechnicalError()));
+        LOGGER.info("Accepted submission {}", submissionId);
+    }
+
+    private void printStatus(final SentSubmission sentSubmission) {
+        final SubmissionStatus status = senderClient.getStatusForSubmission(sentSubmission);
+        LOGGER.info("Current status for submission {}: {}", sentSubmission.getSubmissionId(), status.getStatus());
+    }
+
+    private void getSubmission(final UUID submissionId) {
+        final ReceivedSubmission receivedSubmission = subscriberClient.requestSubmission(submissionId);
+        LOGGER.info("Received data {}", receivedSubmission.getDataAsString());
+        receivedSubmission.getAttachments().stream().map(Attachment::getDataAString).forEach(attachment -> LOGGER.info("Received attachment {}", attachment));
+
+    }
+
+    private void listFirstTenSubmissions(final UUID destinationId) {
+        final Set<SubmissionForPickup> availableSubmissions = subscriberClient.getAvailableSubmissionsForDestination(destinationId, 0, 10);
+        LOGGER.info("First {} available submission of destination {}", availableSubmissions.size(), destinationId);
+        availableSubmissions.forEach(sub -> LOGGER.info("submission-id {}", sub.getSubmissionId()));
+    }
+
+    private SentSubmission sendSubmission(final UUID destinationId) {
+
+        final SendableSubmission submission = SendableSubmission.Builder()
+                .setDestination(destinationId)
+                .setServiceType("urn:de:fim:leika:leistung:99400048079000", "Führerscheinbeantragung")
+                .setJsonData( getDataAsString("/data.json"), URI.create("https://schema.fitko.de/fim/s00000114_1.1.schema.json"))
+                .addAttachment(Attachment.fromPath(Path.of("demo/src/main/resources/attachment.txt"), "application/text"))
+                .setReplyChannel(ReplyChannel.fromEmail("test@sample.org"))
+                .build();
+
+        return senderClient.send(submission);
+    }
+
+    private String getDataAsString(final String path)  {
+        try {
+            return new String(Demo.class.getResourceAsStream(path).readAllBytes());
+        } catch (final IOException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+}
diff --git a/demo/src/main/resources/attachment.txt b/demo/src/main/resources/attachment.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b4b938d400fe7e94ca3407fa8e638b2d16f27c5f
--- /dev/null
+++ b/demo/src/main/resources/attachment.txt
@@ -0,0 +1,4 @@
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
+At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
+At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
\ No newline at end of file
diff --git a/demo/src/main/resources/config.yml b/demo/src/main/resources/config.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5a6042994b86b7939968b2691cf315441ab225ad
--- /dev/null
+++ b/demo/src/main/resources/config.yml
@@ -0,0 +1,17 @@
+senderConfig:
+  clientId: "SENDER_CLIENT_ID"
+  clientSecret: "SENDER_CLIENT_SECRET"
+
+subscriberConfig:
+  clientId: "SUBSCRIBER_CLIENT_ID"
+  clientSecret: "SUBSCRIBER_CLIENT_SECRET"
+  privateDecryptionKeyPaths: ["path/to/private_decryption_key.json"]
+  privateSigningKeyPath: "path/to/private_signing_key.json"
+
+# Example of ow env properties van be overridden
+# environments:
+#  TEST:
+#    skipSubmissionDataValidation: true
+#    enableAutoReject: false
+
+activeEnvironment: TEST
diff --git a/demo/src/main/resources/data.json b/demo/src/main/resources/data.json
new file mode 100644
index 0000000000000000000000000000000000000000..514fc98294ee6b2622131320d0fb5f16110bdb42
--- /dev/null
+++ b/demo/src/main/resources/data.json
@@ -0,0 +1,23 @@
+{
+  "G00000442": {
+    "F00000690": "",
+    "G00000046": {
+      "F00000038": "000",
+      "G00000245": {
+        "F00000087": ["", ""]
+      }
+    }
+  },
+  "G00000444": {
+    "F00000040": "2022-01-01",
+    "F00000011": "2023-01-01"
+  },
+  "F00000756": "2022-01-01",
+  "F00000757": "",
+  "F00000758": true,
+  "F00000759": true,
+  "F00000760": true,
+  "F00000761": "",
+  "F00000035": "0",
+  "F00000008": "2022-01-01"
+}
diff --git a/pom.xml b/pom.xml
index 42fd801297292f97ed1c43bafa1981cce9b8037c..60704b78d9fc65a785b52c66d36dce80240b58b3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -110,6 +110,7 @@
         <module>api</module>
         <module>core</module>
         <module>client</module>
+        <module>demo</module>
     </modules>
 
     <dependencyManagement>
@@ -140,6 +141,12 @@
                 <version>${project.version}</version>
             </dependency>
 
+            <dependency>
+                <groupId>dev.fitko.fitconnect.sdk</groupId>
+                <artifactId>demo</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+
             <!-- FIT-Connect dependencies -->
             <dependency>
                 <groupId>dev.fitko.fitconnect</groupId>
@@ -482,12 +489,12 @@
             </modules>
         </profile>
         <profile>
-            <id>cli-tests</id>
+            <id>demo</id>
             <activation>
                 <activeByDefault>true</activeByDefault>
             </activation>
             <modules>
-                <module>cli</module>
+                <module>demo</module>
             </modules>
         </profile>
         <profile>