diff --git a/.github/workflows/pr-functional-tests.yml b/.github/workflows/pr-functional-tests.yml
index d4343f6..fb8f30a 100644
--- a/.github/workflows/pr-functional-tests.yml
+++ b/.github/workflows/pr-functional-tests.yml
@@ -17,7 +17,7 @@ jobs:
 
     strategy:
       matrix:
-        java: [ 17 ]
+        java: [ 21 ]
 
     steps:
       - uses: actions/checkout@v3
diff --git a/.github/workflows/pr-java-ci.yml b/.github/workflows/pr-java-ci.yml
index 3640c6f..de6b7d5 100644
--- a/.github/workflows/pr-java-ci.yml
+++ b/.github/workflows/pr-java-ci.yml
@@ -17,7 +17,7 @@ jobs:
 
     strategy:
       matrix:
-        java: [ 17 ]
+        java: [ 21 ]
 
     steps:
       - uses: actions/checkout@v3
diff --git a/Dockerfile b/Dockerfile
index 0dc1019..e8022f4 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM amazoncorretto:17
+FROM amazoncorretto:21
 
 WORKDIR /app/prebid-cache
 
diff --git a/pom.xml b/pom.xml
index 699156e..5b55914 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,26 +41,25 @@
         <ci.repository.revision.number>manual</ci.repository.revision.number>
         <mvn.build.timestamp.format>yyyy-MM-dd HH:mm</mvn.build.timestamp.format>
 
-        <java.version>17</java.version>
+        <java.version>21</java.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <maven-source-plugin.version>3.2.1</maven-source-plugin.version>
         <maven-clean-plugin.version>3.2.0</maven-clean-plugin.version>
-        <maven-surefire-plugin.version>3.0.0-M6</maven-surefire-plugin.version>
-        <maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version>
+        <maven-surefire-plugin.version>3.2.1</maven-surefire-plugin.version>
+        <maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
         <maven-release-plugin.version>3.0.0-M5</maven-release-plugin.version>
         <rest-maven-plugin.version>0.1.4</rest-maven-plugin.version>
-        <spring-boot-maven-plugin.version>2.6.7</spring-boot-maven-plugin.version>
+        <spring-boot-maven-plugin.version>3.1.5</spring-boot-maven-plugin.version>
         <lettuce-core.version>6.2.4.RELEASE</lettuce-core.version>
         <gson.version>2.10.1</gson.version>
         <guava.version>32.0.0-jre</guava.version>
         <caffeine.version>3.1.6</caffeine.version>
         <disruptor.version>3.4.4</disruptor.version>
-        <lombok.version>1.18.28</lombok.version>
+        <lombok.version>1.18.30</lombok.version>
         <metrics-graphite.version>4.2.17</metrics-graphite.version>
         <javax.el-api.version>3.0.0</javax.el-api.version>
         <reflections.version>0.10.2</reflections.version>
-        <equals-verifier.version>3.14.1</equals-verifier.version>
         <aerospike-client.version>6.2.0</aerospike-client.version>
         <reactor-extra.version>3.5.1</reactor-extra.version>
         <wiremock.version>3.0.0-beta-10</wiremock.version>
@@ -74,7 +73,7 @@
 
         <!-- Functional Tests -->
         <kotest.version>5.5.5</kotest.version>
-        <kotlin.version>1.8.10</kotlin.version>
+        <kotlin.version>1.9.20</kotlin.version>
         <testcontainers.version>1.17.6</testcontainers.version>
         <mockserver-client.version>5.13.2</mockserver-client.version>
         <ktor.version>2.2.4</ktor.version>
@@ -210,12 +209,6 @@
             <version>${reflections.version}</version>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>nl.jqno.equalsverifier</groupId>
-            <artifactId>equalsverifier</artifactId>
-            <version>${equals-verifier.version}</version>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>com.aerospike</groupId>
             <artifactId>aerospike-client</artifactId>
diff --git a/src/test/java/org/prebid/cache/model/ContractModelTest.java b/src/test/java/org/prebid/cache/model/ContractModelTest.java
deleted file mode 100644
index e93275c..0000000
--- a/src/test/java/org/prebid/cache/model/ContractModelTest.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.prebid.cache.model;
-
-import nl.jqno.equalsverifier.EqualsVerifier;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.MethodSource;
-import org.reflections.Reflections;
-import org.reflections.scanners.SubTypesScanner;
-import org.reflections.util.ConfigurationBuilder;
-import org.reflections.util.FilterBuilder;
-
-import static org.reflections.util.ClasspathHelper.*;
-
-class ContractModelTest {
-
-    @ParameterizedTest
-    @MethodSource("modelClassProvider")
-    void verifyEqualsAndHashCode(Class<?> clazz) {
-        EqualsVerifier.forClass(clazz).verify();
-    }
-
-    static Iterable<Class<?>> modelClassProvider() {
-
-        Reflections reflections = new Reflections(
-                new ConfigurationBuilder().setScanners(
-                        new SubTypesScanner(false)
-                )
-                        .setUrls(forPackage("org.prebid.cache", staticClassLoader()))
-                        .filterInputsBy(new FilterBuilder()
-                                .include("org\\.prebid\\.cache\\.model\\..*\\.class")
-                                .exclude("org\\.prebid\\.cache\\.model\\..*(Builder|Test)\\.class")
-                        )
-        );
-
-        return reflections.getSubTypesOf(Object.class);
-    }
-}
\ No newline at end of file
