diff --git a/alfa-service/pom.xml b/alfa-service/pom.xml
index 525cf2e219bd65e3edfade89158b536bd1fc71d8..67e37c00dbdaa4eaadd4696180e0a39f18ed092e 100644
--- a/alfa-service/pom.xml
+++ b/alfa-service/pom.xml
@@ -132,16 +132,6 @@
 			<artifactId>mapstruct</artifactId>
 		</dependency>
 
-		<!-- aspectJ -->
-		<dependency>
-			<groupId>org.aspectj</groupId>
-			<artifactId>aspectjweaver</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.aspectj</groupId>
-			<artifactId>aspectjrt</artifactId>
-		</dependency>
-
 		<!-- Dev -->
 		<dependency>
 			<groupId>org.projectlombok</groupId>
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangProperties.java
index b0413eb8dacc873c3cdeb3d98ba2ae1532b0302a..6886fd5c92ff3f7a0e3c7ff12c433d76cd4e7d58 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangProperties.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangProperties.java
@@ -19,8 +19,7 @@ class VorgangProperties {
 	public static final String PREFIX = "ozgcloud.vorgang";
 
 	/**
-	 * Konfiguriert für welche Art von Anträgen der Button zur Erstellung von Bescheiden angezeigt wird. Der Art eines Antrags wird basierend auf form
-	 * id und form engine name bestimmt.
+	 * List of Vorgänge for which notices can be issued.
 	 */
 	private List<VorgangProperty> bescheid = Collections.emptyList();
 
@@ -29,7 +28,13 @@ class VorgangProperties {
 	@Getter
 	static class VorgangProperty {
 
+		/**
+		 * ID of the received formular
+		 */
 		private String formId;
+		/**
+		 * Name of the form engine providing the used formular
+		 */
 		private String formEngineName;
 
 	}
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProzessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProzessor.java
index 763dadcc1fc104b2728193388416e3cc9d130a99..d39f9fdf782a0f534cd3f63d11df212f33e83cae 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProzessor.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProzessor.java
@@ -30,7 +30,6 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.function.Predicate;
 
-import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.Link;
@@ -67,9 +66,6 @@ class VorgangWithEingangProzessor implements RepresentationModelProcessor<Entity
 	static final String USER_PROFILE_SEARCH_DELETED_PARAM = "deleted";
 	static final String USER_PROFILE_SEARCH_ORGANISATIONS_EINHEIT_ID_PARAM = "organisationsEinheitId";
 
-	private static final Predicate<EingangHeader> HAS_FORM_ID_WITH_ENGINE_NAME =
-			eingangHeader -> ObjectUtils.allNotNull(eingangHeader.getFormEngineName(), eingangHeader.getFormId());
-
 	@Autowired
 	private PostfachMailController postfachMailController;
 	@Autowired
@@ -104,7 +100,7 @@ class VorgangWithEingangProzessor implements RepresentationModelProcessor<Entity
 				.ifMatch(HAS_REPRESENTATIONS)
 				.addLink(vorgangWithEingang -> linkTo(
 						methodOn(RepresentationController.class).getAllByEingang(vorgangWithEingang.getEingang().getId()))
-						.withRel(REL_REPRESENTATIONS))
+								.withRel(REL_REPRESENTATIONS))
 				.ifMatch(this::isPostfachConfigured)
 				.addLink(linkTo(methodOn(PostfachMailController.class).getAll(vorgang.getId())).withRel(REL_POSTFACH_MAILS))
 				.ifMatch(this::isEinheitlicherAnsprechpartner)
@@ -148,16 +144,15 @@ class VorgangWithEingangProzessor implements RepresentationModelProcessor<Entity
 	boolean hasVorgangCreateBescheidEnabled(VorgangWithEingang vorgang) {
 		return ofNullable(vorgang.getEingang())
 				.map(Eingang::getHeader)
-				.filter(HAS_FORM_ID_WITH_ENGINE_NAME)
 				.map(this::isCreateBescheidEnabled)
 				.orElse(false);
 	}
 
 	private boolean isCreateBescheidEnabled(EingangHeader eingangHeader) {
-		return vorgangProperties.getBescheid().stream().filter(prop -> isFormIdAndFormEngineNameMatching(eingangHeader, prop)).count() > 0;
+		return vorgangProperties.getBescheid().stream().anyMatch(prop -> isFormIdAndFormEngineNameMatching(eingangHeader, prop));
 	}
 
-	private boolean isFormIdAndFormEngineNameMatching(EingangHeader eingangHeader, VorgangProperty prop) {
-		return prop.getFormId().equals(eingangHeader.getFormId()) && prop.getFormEngineName().equals(eingangHeader.getFormEngineName());
+	private boolean isFormIdAndFormEngineNameMatching(EingangHeader eingangHeader, VorgangProperty property) {
+		return property.getFormId().equals(eingangHeader.getFormId()) && property.getFormEngineName().equals(eingangHeader.getFormEngineName());
 	}
 }
\ No newline at end of file
diff --git a/goofy-client/apps/goofy-e2e/Jenkinsfile b/goofy-client/apps/goofy-e2e/Jenkinsfile
index a2d3aaf4a684ca4d52a5ce2fc5ef1653d827d3d9..6cf3ad53c272f1997b0095b7e3124851f4cc5d2f 100644
--- a/goofy-client/apps/goofy-e2e/Jenkinsfile
+++ b/goofy-client/apps/goofy-e2e/Jenkinsfile
@@ -151,7 +151,7 @@ pipeline {
                 script {
                     FAILED_STAGE = env.STAGE_NAME
 
-                    configFileProvider([configFile(fileId: 'kubeconfig-ovh-cluster', variable: 'KUBE_CONFIG')]) {
+                    configFileProvider([configFile(fileId: 'kubeconfig-dev-okd-cluster', variable: 'KUBE_CONFIG')]) {
                         sh 'mkdir ~/.kube'
                         sh 'cp ${KUBE_CONFIG} ~/.kube/config'
                     }
@@ -705,7 +705,7 @@ Map getUserManagerDatabaseSecret(String namespace) {
 
 String getKeycloakUuid(realm, userName) {
     def shScript = """curl -H 'Content-Type: application/json' \
-                        -H 'Authorization: bearer ${getKeycloakAccessToken()}' \
+                        -H 'Authorization: bearer ${getKeycloakAccessToken(realm)}' \
                         'https://${env.SSO_URL}/admin/realms/${realm}/users'
                     """
 
@@ -720,12 +720,21 @@ String getKeycloakUuid(realm, userName) {
 	}
 }
 
-String getKeycloakAccessToken() {
-	withCredentials([usernamePassword(credentialsId: 'keycloak-ovh-cluster', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) {
-		def token = readJSON text: sh (script: 'curl -d "client_id=admin-cli" -d "username=$USER" -d "password=$PASSWORD" -d "grant_type=password" https://$SSO_URL/realms/master/protocol/openid-connect/token', returnStdout: true)
+String getKeycloakAccessToken(String realm) {
+    userManagerApiUserCredentials = getUserManagerApiUserCredentials(realm)
 
-		return token.access_token
-	}
+	def token = readJSON text: sh (script: "set +x && curl -d \"client_id=admin-cli\" -d \"username=${userManagerApiUserCredentials.user}\" -d \"password=${userManagerApiUserCredentials.password}\" -d \"grant_type=password\" https://$SSO_URL/realms/$realm/protocol/openid-connect/token", returnStdout: true)
+
+	return token.access_token
+}
+
+Map getUserManagerApiUserCredentials(String namespace) {
+    userManagerApiUserCredentials = readJSON ( text: sh (script: "kubectl get secret usermanagerapiuser-credentials -n ${namespace} -o jsonpath={.data}", returnStdout: true))
+
+    return [
+        "user": decodeString(userManagerApiUserCredentials.name),
+        "password": decodeString(userManagerApiUserCredentials.password)
+    ]
 }
 
 Void sendFailureMessage() {
diff --git a/goofy-client/apps/goofy-e2e/src/fixtures/argocd/by-ea-dev.yaml b/goofy-client/apps/goofy-e2e/src/fixtures/argocd/by-ea-dev.yaml
index 0a18187db799a58c2400314050e44443e36d3599..0a7bac13ba55363111aa138ee5592e815b798fbb 100644
--- a/goofy-client/apps/goofy-e2e/src/fixtures/argocd/by-ea-dev.yaml
+++ b/goofy-client/apps/goofy-e2e/src/fixtures/argocd/by-ea-dev.yaml
@@ -1,7 +1,11 @@
 kop:
   bezeichner: mastere2eea
   environment: dev
-  
+e2eTest: true
+project:
+  destinations:
+    - namespace: '*'
+      server: https://kubernetes.default.svc
 goofy:
   env:
     overrideSpringProfiles: "oc,ea,e2e,dev"
@@ -14,6 +18,7 @@ goofy:
           - name: EINHEITLICHER_ANSPRECHPARTNER
   ingress:
     use_staging_cert: true
+    className: openshift-default
   baseUrl: dev.by.ozg-cloud.de
 
 pluto:
@@ -44,4 +49,8 @@ user_manager:
         role: view-users
       - name: realm-management
         role: manage-users
-  baseUrl: dev.by.ozg-cloud.de
\ No newline at end of file
+  baseUrl: dev.by.ozg-cloud.de
+
+  ingress:
+    use_staging_cert: true
+    className: openshift-default
\ No newline at end of file
diff --git a/goofy-client/apps/goofy-e2e/src/fixtures/argocd/by-main-dev.yaml b/goofy-client/apps/goofy-e2e/src/fixtures/argocd/by-main-dev.yaml
index 462ead53f18ef32acd8a7e141d64248564c562be..bd69db0457d9187ad5b1bef98bdb103d63065a77 100644
--- a/goofy-client/apps/goofy-e2e/src/fixtures/argocd/by-main-dev.yaml
+++ b/goofy-client/apps/goofy-e2e/src/fixtures/argocd/by-main-dev.yaml
@@ -1,7 +1,11 @@
 kop:
   bezeichner: mastere2emain
   environment: dev
-
+e2eTest: true
+project:
+  destinations:
+    - namespace: '*'
+      server: https://kubernetes.default.svc
 goofy:
   env:
     overrideSpringProfiles: "oc,e2e,dev"
@@ -10,6 +14,7 @@ goofy:
     apiPassword: "Test1234!"
   ingress:
     use_staging_cert: true
+    className: openshift-default
   baseUrl: dev.by.ozg-cloud.de
     
 pluto:
@@ -40,4 +45,8 @@ user_manager:
         role: view-users
       - name: realm-management
         role: manage-users
-  baseUrl: dev.by.ozg-cloud.de
\ No newline at end of file
+  baseUrl: dev.by.ozg-cloud.de
+
+  ingress:
+    use_staging_cert: true
+    className: openshift-default
\ No newline at end of file
diff --git a/goofy-server/pom.xml b/goofy-server/pom.xml
index d8828e90c1595e36866312085376c49d5d71dfad..eef1d5ae068925c2f68e71b17f809dfcef184831 100644
--- a/goofy-server/pom.xml
+++ b/goofy-server/pom.xml
@@ -1,19 +1,20 @@
-<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">
-  <modelVersion>4.0.0</modelVersion>
+<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">
+	<modelVersion>4.0.0</modelVersion>
 
-  <parent>
-    <groupId>de.itvsh.ozg</groupId>
-    <artifactId>goofy</artifactId>
-    <version>1.17.0-SNAPSHOT</version>
-  </parent>
+	<parent>
+		<groupId>de.itvsh.ozg</groupId>
+		<artifactId>goofy</artifactId>
+		<version>1.17.0-SNAPSHOT</version>
+	</parent>
 
-  <artifactId>goofy-server</artifactId>
-  <name>Goofy Server</name>
-  <groupId>de.itvsh.ozg</groupId>
+	<artifactId>goofy-server</artifactId>
+	<name>Goofy Server</name>
+	<groupId>de.itvsh.ozg</groupId>
 
-  <properties>
-    <maven.compiler.source>${java.version}</maven.compiler.source>
-    <maven.compiler.target>${java.version}</maven.compiler.target>
+	<properties>
+		<maven.compiler.source>${java.version}</maven.compiler.source>
+		<maven.compiler.target>${java.version}</maven.compiler.target>
 
 		<spring-boot.build-image.imageName>docker.ozg-sh.de/goofy:build-latest</spring-boot.build-image.imageName>
 	</properties>
@@ -35,84 +36,96 @@
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter</artifactId>
 		</dependency>
+
+		<!-- aspectJ -->
+		<dependency>
+			<groupId>org.aspectj</groupId>
+			<artifactId>aspectjweaver</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.aspectj</groupId>
+			<artifactId>aspectjrt</artifactId>
+		</dependency>
 	</dependencies>
 
-  <build>
-    <finalName>${project.artifactId}</finalName>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.springframework.boot</groupId>
-        <artifactId>spring-boot-maven-plugin</artifactId>
-        <configuration>
-          <docker>
-            <publishRegistry>
-              <username>${docker-username}</username>
-              <password>${docker-password}</password>
-              <url>${docker-url}</url>
-            </publishRegistry>
-          </docker>
-        </configuration>
-      </plugin>
+	<build>
+		<finalName>${project.artifactId}</finalName>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+				<configuration>
+					<docker>
+						<publishRegistry>
+							<username>${docker-username}</username>
+							<password>${docker-password}</password>
+							<url>${docker-url}</url>
+						</publishRegistry>
+					</docker>
+				</configuration>
+			</plugin>
 
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-failsafe-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.jacoco</groupId>
-        <artifactId>jacoco-maven-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>pl.project13.maven</groupId>
-        <artifactId>git-commit-id-plugin</artifactId>
-      </plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-failsafe-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.jacoco</groupId>
+				<artifactId>jacoco-maven-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>pl.project13.maven</groupId>
+				<artifactId>git-commit-id-plugin</artifactId>
+			</plugin>
 
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-resources-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>copy-client</id>
-            <phase>compile</phase>
-            <goals>
-              <goal>copy-resources</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>
-                ${project.build.directory}/classes/META-INF/resources</outputDirectory>
-              <resources>
-                <resource>
-                  <directory>
-                    ../${project.parent.artifactId}-client/dist/apps/goofy/</directory>
-                </resource>
-              </resources>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <version>3.3.0</version>
-        <executions>
-          <execution>
-            <id>Jar Tests Package</id>
-            <phase>package</phase>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-resources-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>copy-client</id>
+						<phase>compile</phase>
+						<goals>
+							<goal>copy-resources</goal>
+						</goals>
+						<configuration>
+							<outputDirectory>
+								${project.build.directory}/classes/META-INF/resources
+							</outputDirectory>
+							<resources>
+								<resource>
+									<directory>
+										../${project.parent.artifactId}-client/dist/apps/goofy/
+									</directory>
+								</resource>
+							</resources>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jar-plugin</artifactId>
+				<version>3.3.0</version>
+				<executions>
+					<execution>
+						<id>Jar Tests Package</id>
+						<phase>package</phase>
+						<goals>
+							<goal>test-jar</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
 
 </project>
diff --git a/goofy-server/src/main/java/de/ozgcloud/alfa/logging/AlfaAspectPointcuts.java b/goofy-server/src/main/java/de/ozgcloud/alfa/logging/AlfaAspectPointcuts.java
new file mode 100644
index 0000000000000000000000000000000000000000..7f72dd6b7afa91fc5466381f258ddba7a6440003
--- /dev/null
+++ b/goofy-server/src/main/java/de/ozgcloud/alfa/logging/AlfaAspectPointcuts.java
@@ -0,0 +1,31 @@
+package de.ozgcloud.alfa.logging;
+
+import org.aspectj.lang.annotation.Pointcut;
+
+public class AlfaAspectPointcuts {
+
+	@Pointcut("execution(public * *(..))")
+	void anyPublicMethods() {
+		// aspect pointcut - no implementation needed
+	}
+
+	@Pointcut("within(de.ozgcloud..*)")
+	void anythingInOzgCloud() {
+		// aspect pointcut - no implementation needed
+	}
+
+	@Pointcut("anyPublicMethods() && anythingInOzgCloud()")
+	void anyPublicMethodInOzgCloud() {
+		// aspect pointcut - no implementation needed
+	}
+
+	@Pointcut("anyPublicMethodInOzgCloud() && @target(org.springframework.stereotype.Service)")
+	void anyPublicServiceMethod() {
+		// aspect pointcut - no implementation needed
+	}
+
+	@Pointcut("anyPublicMethodInOzgCloud() && @target(org.springframework.web.bind.annotation.RestController)")
+	void anyPublicRestControllerMethod() {
+		// aspect pointcut - no implementation needed
+	}
+}
diff --git a/goofy-server/src/main/java/de/ozgcloud/alfa/logging/AlfaLoggingAspect.java b/goofy-server/src/main/java/de/ozgcloud/alfa/logging/AlfaLoggingAspect.java
new file mode 100644
index 0000000000000000000000000000000000000000..2a422d1b4b3eebaea5b90f1fa9d01aab438f6a12
--- /dev/null
+++ b/goofy-server/src/main/java/de/ozgcloud/alfa/logging/AlfaLoggingAspect.java
@@ -0,0 +1,31 @@
+package de.ozgcloud.alfa.logging;
+
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.AfterReturning;
+import org.aspectj.lang.annotation.AfterThrowing;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.springframework.stereotype.Component;
+
+import de.itvsh.kop.common.logging.AspectLoggingUtils;
+
+@Aspect
+@Component
+public class AlfaLoggingAspect extends AlfaAspectPointcuts {
+
+	@Before("anyPublicServiceMethod() || anyPublicRestControllerMethod()")
+	public void onLoggedMethod(JoinPoint joinPoint) {
+		AspectLoggingUtils.log(joinPoint);
+	}
+
+	@AfterThrowing(pointcut = "anyPublicServiceMethod() || anyPublicRestControllerMethod()", throwing = "ex")
+	public void afterExceptionInLoggedMethod(JoinPoint joinPoint, Exception ex) {
+		AspectLoggingUtils.logException(joinPoint, ex);
+	}
+
+	@AfterReturning(pointcut = "anyPublicServiceMethod() || anyPublicRestControllerMethod()", returning = "returnValue")
+	public void afterLoggedMethod(JoinPoint joinPoint, Object returnValue) {
+		AspectLoggingUtils.logReturnValue(joinPoint, returnValue);
+	}
+
+}