diff --git a/core/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java b/core/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java
index d838699..a174bde 100644
--- a/core/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java
+++ b/core/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java
@@ -698,7 +698,7 @@
      * @param classpathResourceOrFile Classpath resource URL or file path
      * @param processor Processes input stream
      */
-    @SuppressWarnings({ "null", "deprecation" })
+    @SuppressWarnings("null")
     private <T> @NotNull T processInputStreamFromClasspathOrFilesystem(@NotNull String classpathResourceOrFile, @NotNull Function<InputStream,T> processor) {
         InputStream is = ContentLoader.class.getResourceAsStream(classpathResourceOrFile);
         if (is == null) {
diff --git a/core/src/test/java/org/apache/sling/testing/mock/sling/MockResourceBundleTest.java b/core/src/test/java/org/apache/sling/testing/mock/sling/MockResourceBundleTest.java
index 8ebd22d..2fedbd5 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/sling/MockResourceBundleTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/sling/MockResourceBundleTest.java
@@ -23,13 +23,12 @@
 import static org.junit.Assert.assertTrue;
 
 import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
 
 import org.junit.Before;
 import org.junit.Test;
 
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-
 public class MockResourceBundleTest {
 
     private static final String MY_NAME = "my-name";
@@ -45,20 +44,20 @@
     @Test
     public void testEmpty() {
         assertEquals("unknown", underTest.getString("unknown"));
-        assertEquals(ImmutableSet.of(), underTest.keySet());
+        assertEquals(Set.of(), underTest.keySet());
         assertFalse(underTest.getKeys().hasMoreElements());
     }
 
     @Test
     public void testWithMappings() {
         underTest.put("key1", "value1");
-        underTest.putAll(ImmutableMap.of("key2", "value2", "key3" ,"value3"));
+        underTest.putAll(Map.of("key2", "value2", "key3" ,"value3"));
 
         assertEquals("value1", underTest.getString("key1"));
         assertEquals("value2", underTest.getString("key2"));
         assertEquals("value3", underTest.getString("key3"));
 
-        assertEquals(ImmutableSet.of("key1", "key2", "key3"), underTest.keySet());
+        assertEquals(Set.of("key1", "key2", "key3"), underTest.keySet());
         assertTrue(underTest.getKeys().hasMoreElements());
     }
 
diff --git a/core/src/test/java/org/apache/sling/testing/mock/sling/builder/ContentBuilderTest.java b/core/src/test/java/org/apache/sling/testing/mock/sling/builder/ContentBuilderTest.java
index ac65cda..52c085c 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/sling/builder/ContentBuilderTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/sling/builder/ContentBuilderTest.java
@@ -22,6 +22,8 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import java.util.Map;
+
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.api.resource.ValueMap;
@@ -30,8 +32,6 @@
 import org.junit.Rule;
 import org.junit.Test;
 
-import com.google.common.collect.ImmutableMap;
-
 public class ContentBuilderTest {
 
     @Rule
@@ -47,10 +47,9 @@
 
     @Test
     public void testResourceWithProperties_Map() {
-        Resource resource = context.create().resource("/content/test1/resource2", ImmutableMap.<String,Object>builder()
-                .put("jcr:title", "Test Title")
-                .put("stringProp", "value1")
-                .build());
+        Resource resource = context.create().resource("/content/test1/resource2", Map.<String,Object>of(
+                "jcr:title", "Test Title",
+                "stringProp", "value1"));
         assertNotNull(resource);
         assertEquals("resource2", resource.getName());
         ValueMap props = ResourceUtil.getValueMap(resource);
diff --git a/core/src/test/java/org/apache/sling/testing/mock/sling/builder/ImmutableValueMapTest.java b/core/src/test/java/org/apache/sling/testing/mock/sling/builder/ImmutableValueMapTest.java
index 5f8005e..42119a5 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/sling/builder/ImmutableValueMapTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/sling/builder/ImmutableValueMapTest.java
@@ -30,12 +30,11 @@
 import org.junit.Before;
 import org.junit.Test;
 
-import com.google.common.collect.ImmutableMap;
-
 public class ImmutableValueMapTest {
 
-    private static final Map<String, Object> SAMPLE_PROPS = ImmutableMap.<String, Object> builder()
-            .put("prop1", "value1").put("prop2", 55).build();
+    private static final Map<String, Object> SAMPLE_PROPS = Map.<String, Object>of(
+            "prop1", "value1",
+            "prop2", 55);
 
     private ValueMap underTest;
 
@@ -84,7 +83,9 @@
 
     @Test(expected = UnsupportedOperationException.class)
     public void testMapPutAll() {
-        underTest.putAll(ImmutableMap.<String, Object> builder().put("prop4", 25).put("prop5", 33).build());
+        underTest.putAll(Map.<String, Object>of(
+                "prop4", 25,
+                "prop5", 33));
     }
 
     @Test
@@ -141,8 +142,8 @@
     @Test
     public void testBuilder() {
         ValueMap map = ImmutableValueMap.builder().put("p1", "v1")
-                .putAll(ImmutableMap.<String, Object> of("p2", "v2", "p3", "v3"))
-                .put(ImmutableMap.<String, Object> of("p4", "v4").entrySet().iterator().next()).put("p5", "v5").build();
+                .putAll(Map.<String, Object> of("p2", "v2", "p3", "v3"))
+                .put(Map.<String, Object> of("p4", "v4").entrySet().iterator().next()).put("p5", "v5").build();
         assertEquals(5, map.size());
         assertEquals("v1", map.get("p1"));
         assertEquals("v2", map.get("p2"));
diff --git a/core/src/test/java/org/apache/sling/testing/mock/sling/jcrmock/resource/FindResourcesTest.java b/core/src/test/java/org/apache/sling/testing/mock/sling/jcrmock/resource/FindResourcesTest.java
index 5b4f520..55a9bb7 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/sling/jcrmock/resource/FindResourcesTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/sling/jcrmock/resource/FindResourcesTest.java
@@ -20,6 +20,7 @@
 
 import java.util.Collections;
 import java.util.Iterator;
+import java.util.Map;
 
 import javax.jcr.Node;
 import javax.jcr.Session;
@@ -34,8 +35,6 @@
 import org.junit.Rule;
 import org.junit.Test;
 
-import com.google.common.collect.ImmutableMap;
-
 @SuppressWarnings("null")
 public class FindResourcesTest {
 
@@ -46,8 +45,9 @@
   public void setUp() {
     Resource resource = context.create().resource(
         "/test",
-        ImmutableMap.<String, Object> builder().put("prop1", "value1")
-            .put("prop2", "value2").build());
+        Map.<String, Object>of(
+            "prop1", "value1",
+            "prop2", "value2"));
     Node node = resource.adaptTo(Node.class);
     Session session = context.resourceResolver().adaptTo(Session.class);
 
diff --git a/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderFileVaultXmlTest.java b/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderFileVaultXmlTest.java
index 6ef153a..4dd192c 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderFileVaultXmlTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderFileVaultXmlTest.java
@@ -21,6 +21,8 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 
+import java.util.List;
+
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
@@ -37,8 +39,6 @@
 import org.junit.Rule;
 import org.junit.Test;
 
-import com.google.common.collect.ImmutableList;
-
 @SuppressWarnings("null")
 public abstract class AbstractContentLoaderFileVaultXmlTest {
 
@@ -55,7 +55,7 @@
 
         try {
             NodeTypeDefinitionScanner.get().register(context.resourceResolver().adaptTo(Session.class),
-                    ImmutableList.of("SLING-INF/nodetypes/app.cnd"),
+                    List.of("SLING-INF/nodetypes/app.cnd"),
                     getResourceResolverType().getNodeTypeMode());
         }
         catch (RepositoryException ex) {
diff --git a/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderFolderFileVaultXmlTest.java b/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderFolderFileVaultXmlTest.java
index 7942f8b..bff494b 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderFolderFileVaultXmlTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderFolderFileVaultXmlTest.java
@@ -27,6 +27,7 @@
 import java.io.InputStream;
 import java.util.List;
 
+import org.apache.commons.collections4.IteratorUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.vault.util.JcrConstants;
 import org.apache.sling.api.resource.Resource;
@@ -37,8 +38,6 @@
 import org.junit.Rule;
 import org.junit.Test;
 
-import com.google.common.collect.ImmutableList;
-
 @SuppressWarnings("null")
 public abstract class AbstractContentLoaderFolderFileVaultXmlTest {
 
@@ -68,7 +67,7 @@
     @Test
     public void testContentListChildren() {
         Resource resource = context.resourceResolver().getResource("/content/samples/en");
-        List<Resource> result = ImmutableList.copyOf(resource.listChildren());
+        List<Resource> result = IteratorUtils.toList(resource.listChildren());
         assertEquals("jcr:content", result.get(0).getName());
         assertEquals("tools", result.get(1).getName());
     }
diff --git a/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderFolderJsonTest.java b/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderFolderJsonTest.java
index dfb486d..205d0d3 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderFolderJsonTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderFolderJsonTest.java
@@ -26,6 +26,7 @@
 import java.io.IOException;
 import java.util.List;
 
+import org.apache.commons.collections4.IteratorUtils;
 import org.apache.jackrabbit.vault.util.JcrConstants;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.testing.mock.sling.ResourceResolverType;
@@ -35,8 +36,6 @@
 import org.junit.Rule;
 import org.junit.Test;
 
-import com.google.common.collect.ImmutableList;
-
 @SuppressWarnings("null")
 public abstract class AbstractContentLoaderFolderJsonTest {
 
@@ -66,7 +65,7 @@
     @Test
     public void testContentListChildren() {
         Resource resource = context.resourceResolver().getResource("/mount/content");
-        List<Resource> result = ImmutableList.copyOf(resource.listChildren());
+        List<Resource> result = IteratorUtils.toList(resource.listChildren());
         assertEquals("jcr:content", result.get(0).getName());
         assertEquals("toolbar", result.get(1).getName());
     }
diff --git a/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderJsonDamTest.java b/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderJsonDamTest.java
index 7fb2b6f..843c54d 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderJsonDamTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderJsonDamTest.java
@@ -25,6 +25,7 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.List;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
@@ -42,8 +43,6 @@
 import org.junit.Rule;
 import org.junit.Test;
 
-import com.google.common.collect.ImmutableList;
-
 @SuppressWarnings("null")
 public abstract class AbstractContentLoaderJsonDamTest {
 
@@ -60,7 +59,7 @@
 
         try {
             NodeTypeDefinitionScanner.get().register(context.resourceResolver().adaptTo(Session.class),
-                    ImmutableList.of("SLING-INF/nodetypes/app.cnd"),
+                    List.of("SLING-INF/nodetypes/app.cnd"),
                     getResourceResolverType().getNodeTypeMode());
         }
         catch (RepositoryException ex) {
diff --git a/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderJsonTest.java b/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderJsonTest.java
index 5e767f6..fbb3542 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderJsonTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderJsonTest.java
@@ -24,6 +24,7 @@
 import static org.junit.Assert.assertNotNull;
 
 import java.util.Calendar;
+import java.util.List;
 import java.util.TimeZone;
 
 import javax.jcr.Node;
@@ -42,8 +43,6 @@
 import org.junit.Rule;
 import org.junit.Test;
 
-import com.google.common.collect.ImmutableList;
-
 @SuppressWarnings("null")
 public abstract class AbstractContentLoaderJsonTest {
 
@@ -60,7 +59,7 @@
 
         try {
             NodeTypeDefinitionScanner.get().register(context.resourceResolver().adaptTo(Session.class),
-                    ImmutableList.of("SLING-INF/nodetypes/app.cnd"),
+                    List.of("SLING-INF/nodetypes/app.cnd"),
                     getResourceResolverType().getNodeTypeMode());
         }
         catch (RepositoryException ex) {
diff --git a/core/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java b/core/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java
index ed12ce2..115aba9 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java
@@ -30,11 +30,13 @@
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
+import org.apache.commons.collections4.IteratorUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.time.DateUtils;
 import org.apache.jackrabbit.JcrConstants;
@@ -49,9 +51,6 @@
 import org.junit.Rule;
 import org.junit.Test;
 
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-
 /**
  * Implements simple write and read resource and values test.
  * JCR API is used to create the test data.
@@ -141,7 +140,7 @@
         is2.close();
         assertArrayEquals(BINARY_VALUE, dataFromResource2);
 
-        List<Resource> children = ImmutableList.copyOf(resource1.listChildren());
+        List<Resource> children = IteratorUtils.toList(resource1.listChildren());
         assertEquals(2, children.size());
         assertEquals("node11", children.get(0).getName());
         assertEquals("node12", children.get(1).getName());
@@ -151,8 +150,8 @@
     public void testCreateNodeWithPrimaryType() throws RepositoryException, PersistenceException {
         Resource parent = context.resourceResolver().getResource(getTestRootNode().getPath());
 
-        Resource child = context.resourceResolver().create(parent, "nodeTypeResource", ImmutableMap.<String, Object> builder()
-                .put("sling:resourceType", JcrConstants.NT_UNSTRUCTURED).build());
+        Resource child = context.resourceResolver().create(parent, "nodeTypeResource", Map.<String, Object>of(
+                "sling:resourceType", JcrConstants.NT_UNSTRUCTURED));
         assertNotNull(child);
         assertEquals(JcrConstants.NT_UNSTRUCTURED, child.getResourceType());
         assertEquals(JcrConstants.NT_UNSTRUCTURED, child.adaptTo(Node.class).getPrimaryNodeType().getName());
diff --git a/core/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractMultipleResourceResolverTest.java b/core/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractMultipleResourceResolverTest.java
index a9434bb..4270db7 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractMultipleResourceResolverTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractMultipleResourceResolverTest.java
@@ -24,6 +24,7 @@
 import static org.junit.Assert.assertTrue;
 
 import java.util.Collections;
+import java.util.Map;
 
 import org.apache.sling.api.resource.PersistenceException;
 import org.apache.sling.api.resource.Resource;
@@ -37,8 +38,6 @@
 import org.junit.Test;
 import org.osgi.framework.BundleContext;
 
-import com.google.common.collect.ImmutableMap;
-
 /**
  * Tests content access accross multiple resource resolvers.
  */
@@ -73,7 +72,7 @@
 
         // add a resource in resolver 1
         Resource root = resolver1.getResource("/");
-        resolver1.create(root, "test", ImmutableMap.<String, Object>of());
+        resolver1.create(root, "test", Map.<String, Object>of());
         resolver1.commit();
 
         // try to get resource in resolver 2
diff --git a/core/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java b/core/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java
index 0b84181..1cccf5f 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java
@@ -33,7 +33,10 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.TreeMap;
 
+import org.apache.commons.collections4.IterableUtils;
+import org.apache.commons.collections4.IteratorUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.jackrabbit.JcrConstants;
@@ -49,10 +52,6 @@
 import org.junit.Rule;
 import org.junit.Test;
 
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-
 /**
  * Implements simple write and read resource and values test. Sling CRUD API is
  * used to create the test data.
@@ -97,9 +96,8 @@
         props.put("binaryProp", new ByteArrayInputStream(BINARY_VALUE));
         Resource node1 = context.resourceResolver().create(rootNode, "node1", props);
 
-        context.resourceResolver().create(node1, "node11", ImmutableMap.<String, Object>builder()
-                .put("stringProp11", STRING_VALUE)
-                .build());
+        context.resourceResolver().create(node1, "node11", Map.<String, Object>of(
+                "stringProp11", STRING_VALUE));
         context.resourceResolver().create(node1, "node12", ValueMap.EMPTY);
 
         context.resourceResolver().commit();
@@ -203,7 +201,7 @@
     public void testListChildren() throws IOException {
         Resource resource1 = context.resourceResolver().getResource(getTestRootResource().getPath() + "/node1");
 
-        List<Resource> children = ImmutableList.copyOf(resource1.listChildren());
+        List<Resource> children = IteratorUtils.toList(resource1.listChildren());
         assertEquals(2, children.size());
         assertEquals("node11", children.get(0).getName());
         assertEquals("node12", children.get(1).getName());
@@ -213,11 +211,11 @@
     public void testListChildren_RootNode() throws IOException {
         Resource resource1 = context.resourceResolver().getResource("/");
 
-        List<Resource> children = Lists.newArrayList(resource1.listChildren());
+        List<Resource> children = IteratorUtils.toList(resource1.listChildren());
         assertFalse(children.isEmpty());
         assertTrue(containsResource(children, getTestRootResource().getParent()));
 
-        children = Lists.newArrayList(resource1.getChildren());
+        children = IterableUtils.toList(resource1.getChildren());
         assertFalse(children.isEmpty());
         assertTrue(containsResource(children, getTestRootResource().getParent()));
     }
@@ -296,23 +294,23 @@
     @Test
     public void testCreateNestedResources() throws IOException {
         Resource nested = context.create().resource(getTestRootResource().getPath() + "/nested",
-                ImmutableMap.<String,Object>of(
+                new TreeMap<>(Map.<String,Object>of(
                         "prop1", "value1",
-                        "child1", ImmutableMap.<String,Object>of(
+                        "child1", new TreeMap<>(Map.<String,Object>of(
                             "prop2","value2",
-                            "child1a", ImmutableMap.<String,Object>of(
+                            "child1a", Map.<String,Object>of(
                                 "prop3", "value3"),
-                            "child1b", ImmutableMap.<String,Object>of(
+                            "child1b", Map.<String,Object>of(
                                 "prop4", "value4")
-                        ),
-                        "child2", ImmutableMap.<String,Object>of(
+                        )),
+                        "child2", Map.<String,Object>of(
                             "prop5","value5"
-                        )));
+                        ))));
 
         assertNotNull(nested);
         assertEquals("value1", nested.getValueMap().get("prop1", String.class));
 
-        List<Resource> children = ImmutableList.copyOf(nested.getChildren());
+        List<Resource> children = IterableUtils.toList(nested.getChildren());
         assertEquals(2, children.size());
 
         Resource child1 = children.get(0);
@@ -323,7 +321,7 @@
         assertEquals("child2", child2.getName());
         assertEquals("value5", child2.getValueMap().get("prop5", String.class));
 
-        List<Resource> child1children = ImmutableList.copyOf(child1.getChildren());
+        List<Resource> child1children = IterableUtils.toList(child1.getChildren());
         assertEquals(2, child1children.size());
 
         Resource child1a = child1children.get(0);
diff --git a/core/src/test/java/org/apache/sling/testing/mock/sling/services/MockSlingSettingServiceTest.java b/core/src/test/java/org/apache/sling/testing/mock/sling/services/MockSlingSettingServiceTest.java
index fd81ace..0e1bef9 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/sling/services/MockSlingSettingServiceTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/sling/services/MockSlingSettingServiceTest.java
@@ -27,17 +27,15 @@
 
 import org.junit.Test;
 
-import com.google.common.collect.ImmutableSet;
-
 public class MockSlingSettingServiceTest {
 
     @Test
     public void testDefaultRunModes() {
-        Set<String> defaultRunModes = ImmutableSet.<String> builder().add("mode0").build();
+        Set<String> defaultRunModes = Set.of("mode0");
         MockSlingSettingService underTest = new MockSlingSettingService(defaultRunModes);
         assertEquals(defaultRunModes, underTest.getRunModes());
 
-        Set<String> newRunModes = ImmutableSet.<String> builder().add("mode1").add("mode2").build();
+        Set<String> newRunModes = Set.of("mode1", "mode2");
         underTest.setRunModes(newRunModes);
         assertEquals(newRunModes, underTest.getRunModes());
     }
@@ -47,7 +45,7 @@
         MockSlingSettingService underTest = new MockSlingSettingService();
         assertTrue(underTest.getRunModes().isEmpty());
 
-        Set<String> newRunModes = ImmutableSet.<String> builder().add("mode1").add("mode2").build();
+        Set<String> newRunModes = Set.of("mode1", "mode2");
         underTest.setRunModes(newRunModes);
         assertEquals(newRunModes, underTest.getRunModes());
     }
diff --git a/junit5/src/test/java/org/apache/sling/testing/mock/sling/junit5/SlingContextPluginTest.java b/junit5/src/test/java/org/apache/sling/testing/mock/sling/junit5/SlingContextPluginTest.java
index be31245..26ddded 100644
--- a/junit5/src/test/java/org/apache/sling/testing/mock/sling/junit5/SlingContextPluginTest.java
+++ b/junit5/src/test/java/org/apache/sling/testing/mock/sling/junit5/SlingContextPluginTest.java
@@ -24,6 +24,8 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
+import java.util.Map;
+
 import org.apache.sling.testing.mock.sling.ResourceResolverType;
 import org.apache.sling.testing.mock.sling.context.modelsautoreg.ClasspathRegisteredModel;
 import org.junit.jupiter.api.AfterEach;
@@ -31,8 +33,6 @@
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 
-import com.google.common.collect.ImmutableMap;
-
 /**
  * Test with {@link SlingContext} with context plugins.
  */
@@ -51,7 +51,7 @@
             .beforeTearDown(contextBeforeTeardown)
             .afterTearDown(contextAfterTeardown)
             .resourceResolverFactoryActivatorProps(
-                    ImmutableMap.<String, Object> of("resource.resolver.searchpath", new String[] { "/apps", "/libs", "/testpath", }))
+                    Map.<String, Object> of("resource.resolver.searchpath", new String[] { "/apps", "/libs", "/testpath", }))
             .build();
 
     @BeforeEach
diff --git a/parent/pom.xml b/parent/pom.xml
index 68aa099..686452c 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling-bundle-parent</artifactId>
-        <version>49</version>
+        <version>52</version>
         <relativePath />
     </parent>
 
@@ -305,13 +305,6 @@
             <scope>provided</scope>
         </dependency>
 
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-            <version>15.0</version>
-            <scope>test</scope>
-        </dependency>
-
     </dependencies>
 
     <build>
