diff --git a/build.gradle b/build.gradle
index 9f27f39dbf33f6c6e4bbd90b2f659f85982d58d8..27ab7f527b7d28e03c55855ef5e613be4caf13c9 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,30 +1,37 @@
 plugins {
-	id 'org.springframework.boot' version '2.2.2.RELEASE'
-	id 'io.spring.dependency-management' version '1.0.8.RELEASE'
 	id 'java'
+	id 'org.springframework.boot' version '3.2.3'
+	id 'io.spring.dependency-management' version '1.1.4'
 }
 
+group = 'nl.utwente.soa'
+version = '0.1.0'
+
 java {
-	sourceCompatibility = '1.8'
+	sourceCompatibility = '21'
 }
 
-group = 'nl.utwente.soa'
-version = '0.0.1-SNAPSHOT'
-
 repositories {
 	mavenCentral()
+	jcenter()
 }
 
 dependencies {
+	// Spring boot
 	implementation 'org.springframework.boot:spring-boot-starter-web'
-	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
 
+	// Lombok
 	compileOnly 'org.projectlombok:lombok:1.18.24'
 	annotationProcessor 'org.projectlombok:lombok:1.18.24'
 
-	implementation 'org.springframework.boot:spring-boot-starter-websocket:2.2.2.RELEASE'
+	// Websockets
+	compileOnly "jakarta.websocket:jakarta.websocket-api:2.1.1"
+	implementation 'org.springframework.boot:spring-boot-starter-websocket:3.2.3'
+
+	// templating engine
+	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
 }
 
 test {
 	useJUnitPlatform()
-}
+}
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index f398c33c4b08dabb3f1275e57706c2de4effb50c..509c4a29b43a961196788b476fbc8f7dace75544 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
 networkTimeout=10000
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
diff --git a/src/main/java/nl/utwente/soa/sampleWebapplication/services/EchoProxyService.java b/src/main/java/nl/utwente/soa/sampleWebapplication/services/EchoProxyService.java
index ca37392916376a2eda1715c6a278ee47f773e7dd..b98d94a7cf4f58b1375cdbcd930607ac26110031 100644
--- a/src/main/java/nl/utwente/soa/sampleWebapplication/services/EchoProxyService.java
+++ b/src/main/java/nl/utwente/soa/sampleWebapplication/services/EchoProxyService.java
@@ -1,6 +1,7 @@
 package nl.utwente.soa.sampleWebapplication.services;
 
-import javax.websocket.EncodeException;
+import jakarta.websocket.EncodeException;
+
 import java.io.IOException;
 
 public interface EchoProxyService {
diff --git a/src/main/java/nl/utwente/soa/sampleWebapplication/web/IndexController.java b/src/main/java/nl/utwente/soa/sampleWebapplication/web/IndexController.java
index ba84ce4ea79a2403760275b0851097578b8c0ccd..9da4d0e52d0a8c5335c7b78a8ee20ee3c45d0e56 100644
--- a/src/main/java/nl/utwente/soa/sampleWebapplication/web/IndexController.java
+++ b/src/main/java/nl/utwente/soa/sampleWebapplication/web/IndexController.java
@@ -1,5 +1,6 @@
 package nl.utwente.soa.sampleWebapplication.web;
 
+import jakarta.websocket.EncodeException;
 import nl.utwente.soa.sampleWebapplication.services.EchoProxyService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -10,7 +11,6 @@ import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
-import javax.websocket.EncodeException;
 import java.io.IOException;
 
 @Controller