diff --git a/components/sbm-core/src/main/java/org/springframework/sbm/engine/recipe/ConditionDeserializer.java b/components/sbm-core/src/main/java/org/springframework/sbm/engine/recipe/ConditionDeserializer.java
index b2d3f35f9..de9b7a46e 100644
--- a/components/sbm-core/src/main/java/org/springframework/sbm/engine/recipe/ConditionDeserializer.java
+++ b/components/sbm-core/src/main/java/org/springframework/sbm/engine/recipe/ConditionDeserializer.java
@@ -22,7 +22,6 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
 import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
-import org.springframework.util.ClassUtils;
 
 import java.io.IOException;
 
diff --git a/components/sbm-openrewrite/src/main/java/org/openrewrite/maven/AddMavenRepository.java b/components/sbm-openrewrite/src/main/java/org/openrewrite/maven/AddMavenRepository.java
index b19bde3cd..e762f17d5 100644
--- a/components/sbm-openrewrite/src/main/java/org/openrewrite/maven/AddMavenRepository.java
+++ b/components/sbm-openrewrite/src/main/java/org/openrewrite/maven/AddMavenRepository.java
@@ -27,7 +27,7 @@
 
 public class AddMavenRepository extends Recipe {
 
-    private RepositoryDefinition mavenRepository;
+    private final RepositoryDefinition mavenRepository;
 
     public AddMavenRepository(RepositoryDefinition repository) {
         this.mavenRepository = repository;
diff --git a/components/sbm-openrewrite/src/main/java/org/springframework/sbm/support/openrewrite/java/RemoveAnnotationVisitor.java b/components/sbm-openrewrite/src/main/java/org/springframework/sbm/support/openrewrite/java/RemoveAnnotationVisitor.java
index e11dff451..9433547e3 100644
--- a/components/sbm-openrewrite/src/main/java/org/springframework/sbm/support/openrewrite/java/RemoveAnnotationVisitor.java
+++ b/components/sbm-openrewrite/src/main/java/org/springframework/sbm/support/openrewrite/java/RemoveAnnotationVisitor.java
@@ -17,11 +17,14 @@
 
 import org.openrewrite.ExecutionContext;
 import org.openrewrite.java.JavaIsoVisitor;
+import org.openrewrite.java.tree.Expression;
 import org.openrewrite.java.tree.J;
+import org.openrewrite.java.tree.JavaType;
 import org.openrewrite.java.tree.JavaType.FullyQualified;
 import org.openrewrite.java.tree.TypeUtils;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 public class RemoveAnnotationVisitor extends JavaIsoVisitor<ExecutionContext> {
@@ -35,6 +38,7 @@ public RemoveAnnotationVisitor(J target, String fqAnnotationName) {
         this.target = target;
     }
 
+    @Override
     public J.ClassDeclaration visitClassDeclaration(J.ClassDeclaration cd, ExecutionContext executionContext) {
         J.ClassDeclaration classDecl = super.visitClassDeclaration(cd, executionContext);
         if (target == classDecl) {
@@ -46,14 +50,15 @@ public J.ClassDeclaration visitClassDeclaration(J.ClassDeclaration cd, Execution
                     })
                     .collect(Collectors.toList());
             if (classDecl.getLeadingAnnotations().size() != keptAnnotations.size()) {
-                // TODO: Analyze annotation for more types referenced by annotation and maybeRemoveImports, then remove the call to removeUnusedImports in MigrateJeeTransactionsToSpringBootAction
                 maybeRemoveImport(fqAnnotationName);
+                maybeRemoveAnnotationParameterImports(classDecl.getLeadingAnnotations());
                 classDecl = classDecl.withLeadingAnnotations(keptAnnotations);
             }
         }
         return classDecl;
     }
 
+    @Override
     public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, ExecutionContext executionContext) {
         J.MethodDeclaration methodDecl = super.visitMethodDeclaration(md, executionContext);
         if (target.getId().equals(methodDecl.getId())) {
@@ -66,6 +71,7 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, Execut
                     .collect(Collectors.toList());
             if (methodDecl.getLeadingAnnotations().size() != annotations.size()) {
                 maybeRemoveImport(fqAnnotationName);
+                maybeRemoveAnnotationParameterImports(methodDecl.getLeadingAnnotations());
                 methodDecl = methodDecl.withLeadingAnnotations(annotations);
             }
         }
@@ -84,10 +90,21 @@ public J.VariableDeclarations visitVariableDeclarations(J.VariableDeclarations m
                     .collect(Collectors.toList());
             if (multiVariable.getLeadingAnnotations().size() != annotations.size()) {
                 maybeRemoveImport(fqAnnotationName);
+                maybeRemoveAnnotationParameterImports(multiVariable.getLeadingAnnotations());
                 multiVariable = multiVariable.withLeadingAnnotations(annotations);
             }
         }
         return multiVariable;
     }
 
+    private void maybeRemoveAnnotationParameterImports(List<J.Annotation> leadingAnnotations) {
+        leadingAnnotations
+                .stream()
+                .filter(a -> a.getArguments() != null && !a.getArguments().isEmpty())
+                .flatMap(a -> a.getArguments().stream())
+                .map(Expression::getType)
+                .map(TypeUtils::asFullyQualified)
+                .filter(Objects::nonNull)
+                .forEach(e -> maybeRemoveImport(TypeUtils.asFullyQualified(e)));
+    }
 }
diff --git a/components/sbm-openrewrite/src/test/java/org/springframework/sbm/java/OpenRewriteTestSupport.java b/components/sbm-openrewrite/src/test/java/org/springframework/sbm/java/OpenRewriteTestSupport.java
index ff9bc94ca..1044037b4 100644
--- a/components/sbm-openrewrite/src/test/java/org/springframework/sbm/java/OpenRewriteTestSupport.java
+++ b/components/sbm-openrewrite/src/test/java/org/springframework/sbm/java/OpenRewriteTestSupport.java
@@ -15,11 +15,11 @@
  */
 package org.springframework.sbm.java;
 
+import org.intellij.lang.annotations.Language;
 import org.jboss.shrinkwrap.resolver.api.maven.Maven;
 import org.openrewrite.*;
 import org.springframework.sbm.java.util.JavaSourceUtil;
 import org.springframework.sbm.testhelper.common.utils.TestDiff;
-import org.assertj.core.api.Assertions;
 import org.openrewrite.java.JavaIsoVisitor;
 import org.openrewrite.java.JavaParser;
 import org.openrewrite.java.JavaVisitor;
@@ -33,6 +33,9 @@
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
 
 public class OpenRewriteTestSupport {
 
@@ -42,10 +45,10 @@ public class OpenRewriteTestSupport {
      * The first class name and package is used to retrieve the file path of the <code>J.CompilationUnit</code>.
      *
      * @param classpath   entries in <code>artifact:gruopId:version</code> format.
-     * @param sourceCodes
+     * @param sourceCodes source code
      * @return list of <code>J.CompilationUnit</code>s
      */
-    public static List<J.CompilationUnit> createCompilationUnitsFromStrings(List<String> classpath, String... sourceCodes) {
+    public static List<J.CompilationUnit> createCompilationUnitsFromStrings(List<String> classpath, @Language("java") String... sourceCodes) {
         JavaParser javaParser = OpenRewriteTestSupport.getJavaParser(classpath.toArray(new String[]{}));
         List<J.CompilationUnit> compilationUnits = javaParser.parse(sourceCodes);
         return compilationUnits.stream()
@@ -61,10 +64,10 @@ public static List<J.CompilationUnit> createCompilationUnitsFromStrings(List<Str
      * <p>
      * The first class name and package is used to retrieve the file path of the <code>J.CompilationUnit</code>.
      *
-     * @param sourceCodes
+     * @param sourceCodes source code
      * @return list of <code>J.CompilationUnit</code>s
      */
-    public static List<J.CompilationUnit> createCompilationUnitsFromStrings(String... sourceCodes) {
+    public static List<J.CompilationUnit> createCompilationUnitsFromStrings(@Language("java") String... sourceCodes) {
         return createCompilationUnitsFromStrings(List.of(), sourceCodes);
     }
 
@@ -73,19 +76,19 @@ public static List<J.CompilationUnit> createCompilationUnitsFromStrings(String..
      * <p>
      * The first class name and package is used to retrieve the file path of the <code>J.CompilationUnit</code>.
      *
-     * @param sourceCode
+     * @param sourceCode source code
      * @return the created <code>J.CompilationUnit</code>
      */
-    public static J.CompilationUnit createCompilationUnitFromString(String sourceCode) {
+    public static J.CompilationUnit createCompilationUnitFromString(@Language("java") String sourceCode) {
         return createCompilationUnitsFromStrings(List.of(), sourceCode).get(0);
     }
 
-    public static J.CompilationUnit createCompilationUnit(JavaParser parser, Path sourceFolder, String sourceCode) {
+    public static J.CompilationUnit createCompilationUnit(JavaParser parser, Path sourceFolder, @Language("java") String sourceCode) {
         J.CompilationUnit cu = parser.parse(sourceCode).get(0);
         return cu.withSourcePath(cu.getPackageDeclaration() == null
                 ? sourceFolder.resolve(cu.getSourcePath())
                 : sourceFolder
-                .resolve(cu.getPackageDeclaration().getExpression().printTrimmed().replace('.', File.separatorChar))
+                .resolve(cu.getPackageDeclaration().getPackageName().replace('.', File.separatorChar))
                 .resolve(cu.getSourcePath()));
     }
 
@@ -98,12 +101,10 @@ public static J.CompilationUnit createCompilationUnit(JavaParser parser, Path so
      * @param classpath required for resolving dependencies to create a CompilationUnit from given
      */
     public static <P> void verifyChange(Supplier<JavaIsoVisitor<ExecutionContext>> visitor, String given, String
-
             expected, String... classpath) {
         verifyChange(visitor.get(), given, expected, classpath);
     }
 
-
     /**
      * Verifies that applying the visitor to given results in expected.
      *
@@ -112,7 +113,7 @@ public static <P> void verifyChange(Supplier<JavaIsoVisitor<ExecutionContext>> v
      * @param expected  source code after applying the visitor
      * @param classpath required for resolving dependencies to create a CompilationUnit from given
      */
-    public static <P> void verifyChange(JavaIsoVisitor<ExecutionContext> visitor, String given, String expected, String... classpath) {
+    public static <P> void verifyChange(JavaIsoVisitor<ExecutionContext> visitor, @Language("java") String given, String expected, String... classpath) {
         J.CompilationUnit compilationUnit = createCompilationUnit(given, classpath);
         verifyChange(visitor, compilationUnit, expected);
     }
@@ -120,7 +121,7 @@ public static <P> void verifyChange(JavaIsoVisitor<ExecutionContext> visitor, St
     /**
      * Verifies that applying the visitor to given results in expected.
      * <p>
-     * Additionally it's verified that the returned change contains exactly given as before and expected as after
+     * Additionally, it's verified that the returned change contains exactly given as before and expected as after
      * <p>
      * Use this method if you had to create a CompilationUnit, e.g. to define a scope for the tested visitor.
      * If the visitor is not scoped it is probably easier (and less caller code)
@@ -133,22 +134,26 @@ public static <P> void verifyChange(JavaIsoVisitor<ExecutionContext> visitor, St
      * @param given    CompilationUnit the visitor will be applied on
      * @param expected source code after applying the visitor
      */
-    public static <P> void verifyChange(JavaIsoVisitor<ExecutionContext> visitor, J.CompilationUnit given, String expected) {
+    public static void verifyChange(JavaIsoVisitor<ExecutionContext> visitor, J.CompilationUnit given, String expected) {
         final Collection<Result> newChanges = refactor(given, visitor).getResults();
-        Assertions.assertThat(newChanges.iterator().hasNext()).as("No change was found.").isTrue();
-        Assertions.assertThat(given.printAll())
-                .as(TestDiff.of(given.printAll(), newChanges.iterator().next().getBefore().printAll()))
-                .isEqualTo(newChanges.iterator().next().getBefore().printAll());
+        assertThat(newChanges.iterator().hasNext()).as("No change was found.").isTrue();
+        SourceFile before = newChanges.iterator().next().getBefore();
+        assertNotNull(before);
+        assertThat(given.printAll())
+                .as(TestDiff.of(given.printAll(), before.printAll()))
+                .isEqualTo(before.printAll());
 
-        Assertions.assertThat(newChanges.iterator().next().getAfter().printAll())
-                .as(TestDiff.of(newChanges.iterator().next().getAfter().printAll(), expected))
+        SourceFile after = newChanges.iterator().next().getAfter();
+        assertNotNull(after);
+        assertThat(after.printAll())
+                .as(TestDiff.of(after.printAll(), expected))
                 .isEqualTo(expected);
     }
 
     /**
      * Verifies that applying the visitor to given results in expected.
      * <p>
-     * It's does not check that given equals before in the change.
+     * It does not check that given equals before in the change.
      * Use this method if you had to create a CompilationUnit, e.g. to define a scope for the tested visitor.
      * If the visitor is not scoped it is probably easier (and less caller code)
      * to use
@@ -160,13 +165,15 @@ public static <P> void verifyChange(JavaIsoVisitor<ExecutionContext> visitor, J.
      * @param given    CompilationUnit the visitor will be applied on
      * @param expected source code after applying the visitor
      */
-    public static <P> void verifyChangeIgnoringGiven(JavaIsoVisitor<ExecutionContext> visitor, String given, String expected, String... classpath) {
+    public static void verifyChangeIgnoringGiven(JavaIsoVisitor<ExecutionContext> visitor, @Language("java") String given, String expected, String... classpath) {
         J.CompilationUnit compilationUnit = createCompilationUnit(given, classpath);
         final Collection<Result> newChanges = refactor(compilationUnit, visitor).getResults();
-        Assertions.assertThat(newChanges.iterator().hasNext()).as("No change was found.").isTrue();
-        Assertions.assertThat(expected)
-                .as(TestDiff.of(expected, newChanges.iterator().next().getAfter().printAll()))
-                .isEqualTo(newChanges.iterator().next().getAfter().printAll());
+        assertThat(newChanges.iterator().hasNext()).as("No change was found.").isTrue();
+        SourceFile after = newChanges.iterator().next().getAfter();
+        assertNotNull(after);
+        assertThat(expected)
+                .as(TestDiff.of(expected, after.printAll()))
+                .isEqualTo(after.printAll());
     }
 
     /**
@@ -176,10 +183,10 @@ public static <P> void verifyChangeIgnoringGiven(JavaIsoVisitor<ExecutionContext
      * @param given     the source code to apply the visitor on
      * @param classpath required to compile the given sourceCode in 'groupId:artifactId:version' format
      */
-    public static <P> void verifyNoChange(Supplier<JavaIsoVisitor<ExecutionContext>> visitor, String given, String... classpath) {
+    public static void verifyNoChange(Supplier<JavaIsoVisitor<ExecutionContext>> visitor, @Language("java") String given, String... classpath) {
         J.CompilationUnit compilationUnit = createCompilationUnit(given, classpath);
         final Collection<Result> newChanges = refactor(compilationUnit, visitor.get()).getResults();
-        Assertions.assertThat(newChanges).isEmpty();
+        assertThat(newChanges).isEmpty();
     }
 
     /**
@@ -189,10 +196,10 @@ public static <P> void verifyNoChange(Supplier<JavaIsoVisitor<ExecutionContext>>
      * @param given     the source code to apply the visitor on
      * @param classpath required to compile the given sourceCode in 'groupId:artifactId:version' format
      */
-    public static <P> void verifyNoChange(JavaIsoVisitor<ExecutionContext> visitor, String given, String... classpath) {
+    public static void verifyNoChange(JavaIsoVisitor<ExecutionContext> visitor, @Language("java") String given, String... classpath) {
         J.CompilationUnit compilationUnit = createCompilationUnit(given, classpath);
         final Collection<Result> newChanges = refactor(compilationUnit, visitor).getResults();
-        Assertions.assertThat(newChanges).isEmpty();
+        assertThat(newChanges).isEmpty();
     }
 
     /**
@@ -201,13 +208,14 @@ public static <P> void verifyNoChange(JavaIsoVisitor<ExecutionContext> visitor,
      * @param given     sourceCode
      * @param classpath provided in 'groupId:artifactId:version' format
      */
-    public static J.CompilationUnit createCompilationUnit(String given, String... classpath) {
+    public static J.CompilationUnit createCompilationUnit(@Language("java") String given, String... classpath) {
         JavaParser javaParser = getJavaParser(classpath);
 
-        List<J.CompilationUnit> compilationUnits = javaParser
-                .parse(given);
-        if (compilationUnits.size() > 1)
+        List<J.CompilationUnit> compilationUnits = javaParser.parse(given);
+        if (compilationUnits.size() > 1) {
             throw new RuntimeException("More than one compilation was found in given String");
+        }
+
         return compilationUnits.get(0);
     }
 
diff --git a/components/sbm-openrewrite/src/test/java/org/springframework/sbm/support/openrewrite/api/RemoveImportTest.java b/components/sbm-openrewrite/src/test/java/org/springframework/sbm/support/openrewrite/api/RemoveImportTest.java
index d7e8c8dee..16f8d5f14 100644
--- a/components/sbm-openrewrite/src/test/java/org/springframework/sbm/support/openrewrite/api/RemoveImportTest.java
+++ b/components/sbm-openrewrite/src/test/java/org/springframework/sbm/support/openrewrite/api/RemoveImportTest.java
@@ -15,6 +15,7 @@
  */
 package org.springframework.sbm.support.openrewrite.api;
 
+import org.intellij.lang.annotations.Language;
 import org.openrewrite.RecipeRun;
 import org.springframework.sbm.java.OpenRewriteTestSupport;
 import org.springframework.sbm.support.openrewrite.GenericOpenRewriteRecipe;
@@ -31,41 +32,42 @@ public class RemoveImportTest {
     @Test
         // Shows that the import to TransactionAttributeType is not removed when @TransactionAttribute is removed
     void failing() {
-        String source =
-                "import org.springframework.transaction.annotation.Propagation;\n" +
-                        "import org.springframework.transaction.annotation.Transactional;\n" +
-                        "\n" +
-                        "import javax.ejb.TransactionAttributeType;\n" +
-                        "import javax.ejb.TransactionAttribute;\n" +
-                        "\n" +
-                        "@TransactionAttribute(TransactionAttributeType.NEVER)\n" +
-                        "public class TransactionalService {\n" +
-                        "   public void requiresNewFromType() {}\n" +
-                        "\n" +
-                        "\n" +
-                        "    @Transactional(propagation = Propagation.NOT_SUPPORTED)\n" +
-                        "    public void notSupported() {}\n" +
-                        "}";
+        @Language("java")
+        String source = """
+                import org.springframework.transaction.annotation.Propagation;
+                import org.springframework.transaction.annotation.Transactional;
+                
+                import javax.ejb.TransactionAttributeType;
+                import javax.ejb.TransactionAttribute;
+                
+                @TransactionAttribute(TransactionAttributeType.NEVER)
+                public class TransactionalService {
+                    public void requiresNewFromType() {}
+                
+                
+                    @Transactional(propagation = Propagation.NOT_SUPPORTED)
+                    public void notSupported() {}
+                }""";
 
         final J.CompilationUnit compilationUnit = OpenRewriteTestSupport.createCompilationUnit(source, "javax.ejb:javax.ejb-api:3.2", "org.springframework.boot:spring-boot-starter-data-jpa:2.4.2");
 
         RecipeRun results = new GenericOpenRewriteRecipe<>(() -> new RemoveAnnotationVisitor(compilationUnit.getClasses().get(0), "javax.ejb.TransactionAttribute")).run(List.of(compilationUnit));
         J.CompilationUnit compilationUnit1 = (J.CompilationUnit) results.getResults().get(0).getAfter();
 
-        assertThat(compilationUnit1.printAll()).isEqualTo(
-                "import org.springframework.transaction.annotation.Propagation;\n" +
-                        "import org.springframework.transaction.annotation.Transactional;\n" +
-                        "\n" +
-                        "import javax.ejb.TransactionAttributeType;\n" +
-                        "\n" +
-                        "\n" +
-                        "public class TransactionalService {\n" +
-                        "   public void requiresNewFromType() {}\n" +
-                        "\n" +
-                        "\n" +
-                        "    @Transactional(propagation = Propagation.NOT_SUPPORTED)\n" +
-                        "    public void notSupported() {}\n" +
-                        "}"
-        );
+        @Language("java")
+        String expected = """
+                import org.springframework.transaction.annotation.Propagation;
+                import org.springframework.transaction.annotation.Transactional;
+                
+                
+                public class TransactionalService {
+                    public void requiresNewFromType() {}
+                
+                              
+                    @Transactional(propagation = Propagation.NOT_SUPPORTED)
+                    public void notSupported() {}
+                }""";
+
+        assertThat(compilationUnit1.printAll()).isEqualToNormalizingNewlines(expected);
     }
 }
diff --git a/components/sbm-openrewrite/src/test/java/org/springframework/sbm/support/openrewrite/java/RemoveAnnotationVisitorTest.java b/components/sbm-openrewrite/src/test/java/org/springframework/sbm/support/openrewrite/java/RemoveAnnotationVisitorTest.java
index 86094d0a2..a4c925346 100644
--- a/components/sbm-openrewrite/src/test/java/org/springframework/sbm/support/openrewrite/java/RemoveAnnotationVisitorTest.java
+++ b/components/sbm-openrewrite/src/test/java/org/springframework/sbm/support/openrewrite/java/RemoveAnnotationVisitorTest.java
@@ -15,6 +15,7 @@
  */
 package org.springframework.sbm.support.openrewrite.java;
 
+import org.intellij.lang.annotations.Language;
 import org.openrewrite.RecipeRun;
 import org.springframework.sbm.java.OpenRewriteTestSupport;
 import org.springframework.sbm.support.openrewrite.GenericOpenRewriteRecipe;
@@ -24,7 +25,6 @@
 import org.openrewrite.java.tree.J;
 
 import java.util.List;
-import java.util.stream.Collectors;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -33,22 +33,26 @@ class RemoveAnnotationVisitorTest {
 
     @Test
     void removeAnnotationOnTypeLevel() {
-        String javaSource =
-                "import org.junit.jupiter.api.extension.ExtendWith;\n" +
-                        "import org.mockito.junit.jupiter.MockitoExtension;\n" +
-                        "import org.junit.jupiter.api.Disabled;\n" +
-                        "@ExtendWith(MockitoExtension.class)\n" +
-                        "@Disabled\n" +
-                        "public class Foo {" +
-                        "}";
-
-        String expected =
-                "import org.mockito.junit.jupiter.MockitoExtension;\n" +
-                        "import org.junit.jupiter.api.Disabled;\n" +
-                        "\n" +
-                        "@Disabled\n" +
-                        "public class Foo {" +
-                        "}";
+        @Language("java")
+        String javaSource = """
+                import org.junit.jupiter.api.extension.ExtendWith;
+                import org.mockito.junit.jupiter.MockitoExtension;
+                import org.junit.jupiter.api.Disabled;
+                 
+                @ExtendWith(MockitoExtension.class)
+                @Disabled
+                public class Foo {}
+                """;
+
+        @Language("java")
+        String expected = """
+                import org.mockito.junit.jupiter.MockitoExtension;
+                import org.junit.jupiter.api.Disabled;
+                
+                
+                @Disabled
+                public class Foo {}
+                """;
 
         J.CompilationUnit cu = OpenRewriteTestSupport.createCompilationUnitsFromStrings(List.of("org.junit.jupiter:junit-jupiter-api:5.7.0"), javaSource).get(0);
         RemoveAnnotationVisitor sut = new RemoveAnnotationVisitor(cu.getClasses().get(0), "org.junit.jupiter.api.extension.ExtendWith");
@@ -58,87 +62,111 @@ void removeAnnotationOnTypeLevel() {
 
     @Test
     void removeAnnotationOnMethodLevel() {
-        String given =
-                "import javax.ejb.*;\n" +
-                        "@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)\n" +
-                        "public class TransactionalService {\n" +
-                        "   public void requiresNewFromType() {}\n" +
-                        "   @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)\n" +
-                        "   public void notSupported() {}\n" +
-                        "   @TransactionAttribute(TransactionAttributeType.MANDATORY)\n" +
-                        "   public void mandatory() {}\n" +
-                        "}";
-
-        String expected =
-                "import javax.ejb.*;\n" +
-                        "@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)\n" +
-                        "public class TransactionalService {\n" +
-                        "   public void requiresNewFromType() {}\n" +
-                        "   \n" +
-                        "   public void notSupported() {}\n" +
-                        "   \n" +
-                        "   public void mandatory() {}\n" +
-                        "}";
+        @Language("java")
+        String given = """
+                import javax.ejb.*;
+                
+                @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
+                public class TransactionalService {
+                
+                    public void requiresNewFromType() {}
+                
+                    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
+                    public void notSupported() {}
+                                
+                    @TransactionAttribute(TransactionAttributeType.MANDATORY)
+                    public void mandatory() {}
+                }
+                """;
+
+        @Language("java")
+        String expected = """
+                import javax.ejb.*;
+                
+                @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
+                public class TransactionalService {
+                
+                    public void requiresNewFromType() {}
+                
+                   \s
+                    public void notSupported() {}
+                
+                   \s
+                    public void mandatory() {}
+                }
+                """;
 
         J.CompilationUnit cu = OpenRewriteTestSupport.createCompilationUnitsFromStrings(List.of("javax.ejb:javax.ejb-api:3.2"), given).get(0);
 
         List<J.MethodDeclaration> methodDeclarationList = cu.getClasses().get(0).getBody().getStatements().stream()
                 .filter(J.MethodDeclaration.class::isInstance)
                 .map(J.MethodDeclaration.class::cast)
-                .collect(Collectors.toList());
+                .toList();
 
         J.CompilationUnit result = cu;
         for (J.MethodDeclaration md : methodDeclarationList) {
             RemoveAnnotationVisitor sut1 = new RemoveAnnotationVisitor(md, "javax.ejb.TransactionAttribute");
-            RecipeRun run = new GenericOpenRewriteRecipe(() -> sut1).run(List.of(result));
+            RecipeRun run = new GenericOpenRewriteRecipe<>(() -> sut1).run(List.of(result));
             if (!run.getResults().isEmpty()) {
                 result = (J.CompilationUnit) run.getResults().get(0).getAfter();
             }
         }
 
-        assertThat(result.print()).isEqualTo(expected);
+        assertThat(result.print()).isEqualToNormalizingNewlines(expected);
     }
 
     @Test
     void removeAnnotationOnMemberLevel() {
-        String given =
-                "import javax.ejb.*;\n" +
-                        "@EJB\n" +
-                        "public class TransactionalService {\n" +
-                        "   @EJB\n" +
-                        "   private Object that;\n" +
-                        "   private Object other;\n" +
-                        "   @EJB\n" +
-                        "   public void setEJB(Object some) {}\n" +
-                        "}";
-
-        String expected =
-                "import javax.ejb.*;\n" +
-                        "@EJB\n" +
-                        "public class TransactionalService {\n" +
-                        "   \n" +
-                        "   private Object that;\n" +
-                        "   private Object other;\n" +
-                        "   @EJB\n" +
-                        "   public void setEJB(Object some) {}\n" +
-                        "}";
+        @Language("java")
+        String given = """
+                import javax.ejb.EJB;
+                
+                @EJB
+                public class TransactionalService {
+                
+                    @EJB
+                    private Object that;
+                
+                    private Object other;
+                
+                    @EJB
+                    public void setEJB(Object some) {}
+                }
+                """;
+
+        @Language("java")
+        String expected = """
+                import javax.ejb.EJB;
+                
+                @EJB
+                public class TransactionalService {
+                
+                   \s
+                    private Object that;
+                
+                    private Object other;
+                
+                    @EJB
+                    public void setEJB(Object some) {}
+                }
+                """;
 
         J.CompilationUnit cu = OpenRewriteTestSupport.createCompilationUnitsFromStrings(List.of("javax.ejb:javax.ejb-api:3.2"), given).get(0);
 
         List<J.VariableDeclarations> variableDeclarations = cu.getClasses().get(0).getBody().getStatements().stream()
                 .filter(J.VariableDeclarations.class::isInstance)
                 .map(J.VariableDeclarations.class::cast)
-                .collect(Collectors.toList());
+                .toList();
 
         J.CompilationUnit result = cu;
         for (J.VariableDeclarations vd : variableDeclarations) {
             RemoveAnnotationVisitor sut1 = new RemoveAnnotationVisitor(vd, "javax.ejb.EJB");
-            RecipeRun run = new GenericOpenRewriteRecipe(() -> sut1).run(List.of(result));
+            RecipeRun run = new GenericOpenRewriteRecipe<>(() -> sut1).run(List.of(result));
             if (!run.getResults().isEmpty()) {
                 result = (J.CompilationUnit) run.getResults().get(0).getAfter();
             }
         }
 
-        assertThat(result.print()).isEqualTo(expected);
+        assertThat(result.print()).isEqualToNormalizingNewlines(expected);
     }
 }
\ No newline at end of file
diff --git a/components/sbm-recipes-spring-framework/src/main/java/org/springframework/sbm/actions/spring/xml/migration/BeanMethodFactory.java b/components/sbm-recipes-spring-framework/src/main/java/org/springframework/sbm/actions/spring/xml/migration/BeanMethodFactory.java
index 76dbf4a8d..7b0670e21 100644
--- a/components/sbm-recipes-spring-framework/src/main/java/org/springframework/sbm/actions/spring/xml/migration/BeanMethodFactory.java
+++ b/components/sbm-recipes-spring-framework/src/main/java/org/springframework/sbm/actions/spring/xml/migration/BeanMethodFactory.java
@@ -31,7 +31,6 @@
 import java.io.InputStream;
 import java.nio.file.Path;
 import java.util.*;
-import java.util.stream.Collectors;
 
 import static org.springframework.sbm.actions.spring.xml.migration.Helper.classNameMatches;
 import static org.springframework.sbm.actions.spring.xml.migration.Helper.isOfType;
@@ -41,7 +40,6 @@
 @RequiredArgsConstructor
 public class BeanMethodFactory {
 
-    private final Helper helper;
     private final ListBeanHandler listBeanHandler;
     private final GenericBeanHandler genericBeanHandler;
 
@@ -57,7 +55,7 @@ void addBeanDefinitionsToType(MigrationContext migrationContext, TypeSpec.Builde
         List<XmlBeanDef> otherBeans = migrationContext.getBeanDefinitions().values()
                 .stream()
                 .filter(bd -> !classNameMatches(bd, "PropertyPlaceholderConfigurer"))
-                .collect(Collectors.toList());
+                .toList();
 
         // create
         otherBeans.forEach(beanDef -> {
@@ -163,10 +161,8 @@ private void processPropertyLocation(MigrationContext migrationContext, String l
             properties.entrySet().stream()
                     .map(p -> new Property(p.getKey(), p.getValue()))
                     .forEach(p -> {
-                        Optional<Class> aClass = resolvePropertyType(migrationContext, p);
-                        if(aClass.isPresent()) {
-                            p.setType(aClass.get());
-                        }
+                        Optional<Class<?>> aClass = resolvePropertyType(migrationContext, p);
+                        aClass.ifPresent(p::setType);
                         propertiesFile.addProperty(p);
                     });
         } catch (IOException e) {
@@ -174,11 +170,12 @@ private void processPropertyLocation(MigrationContext migrationContext, String l
         }
     }
 
-    private Optional<Class> resolvePropertyType(MigrationContext migrationContext, Property p) {
+    private Optional<Class<?>> resolvePropertyType(MigrationContext migrationContext, Property p) {
         return migrationContext.getBeanDefinitions().values().stream()
                 .map(xmlBeanDef -> xmlBeanDef.getTypeOfProperty(migrationContext.getClassLoader(), p.getFieldName()))
-                .filter(t -> t.isPresent())
-                .map(t -> t.get())
+                .flatMap(Optional::stream)
+                //.filter(t -> t.isPresent())
+                //.map(t -> t.get())
                 .findFirst();
     }
 
@@ -188,7 +185,7 @@ void createMembersForProperties(TypeSpec.Builder typeSpec, Set<PropertiesFile> p
                 .forEach(es -> {
                     String fieldName = es.getFieldName();
                     // get type of field
-//                                        bd.getTypeOfProperty(es.getKey());
+                    //bd.getTypeOfProperty(es.getKey());
                     Class<?> fieldType = es.getPropertyType();
                     // get type of field here and use as type of member
                     typeSpec.addField(FieldSpec.builder(fieldType, fieldName, Modifier.PRIVATE)
@@ -218,7 +215,7 @@ public MethodSpec createBeanConfigurationMethod(MigrationContext migrationContex
     }
 
     private boolean isListBeanDefinition(XmlBeanDef xmlBeanDefinition) {
-        return xmlBeanDefinition.getBeanDefinition().getBeanClassName().equals("org.springframework.beans.factory.config.ListFactoryBean");
+        return "org.springframework.beans.factory.config.ListFactoryBean".equals(xmlBeanDefinition.getBeanDefinition().getBeanClassName());
     }
 
 }
diff --git a/components/sbm-recipes-spring-framework/src/main/java/org/springframework/sbm/actions/spring/xml/migration/XmlBeanDef.java b/components/sbm-recipes-spring-framework/src/main/java/org/springframework/sbm/actions/spring/xml/migration/XmlBeanDef.java
index eda89162c..10e9f8b3e 100644
--- a/components/sbm-recipes-spring-framework/src/main/java/org/springframework/sbm/actions/spring/xml/migration/XmlBeanDef.java
+++ b/components/sbm-recipes-spring-framework/src/main/java/org/springframework/sbm/actions/spring/xml/migration/XmlBeanDef.java
@@ -36,7 +36,7 @@ public XmlBeanDef(String name, BeanDefinition beanDefinition) {
         this.beanDefinition = beanDefinition;
     }
 
-    public Optional<Class> getTypeOfProperty(ClassLoader classLoader, String property) {
+    public Optional<Class<?>> getTypeOfProperty(ClassLoader classLoader, String property) {
         boolean hasProperty = getBeanDefinition().getPropertyValues().stream()
                 .filter(v -> v.getValue().getClass().isAssignableFrom(TypedStringValue.class))
                 .map(v -> (TypedStringValue) v.getValue())