diff --git a/pom.xml b/pom.xml
index 2ce063708133a2523692511d92e04966adb5ad3d..272d35e62a42e242bb4909c48dc22da129b815b2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,13 +14,6 @@
 	<version>1.0.0-SNAPSHOT</version>
 	<name>Administration</name>
 	<description>Administration Backend Project</description>
-	<properties>
-		<java.version>21</java.version>
-		<!--<maven.compiler.source>21</maven.compiler.source>
-		<maven.compiler.target>21</maven.compiler.target>-->
-		<build.number>x</build.number>
-		<build.url>no-url</build.url>
-	</properties>
 	<dependencies>
 		<!-- Spring -->
 		<dependency>
diff --git a/src/main/java/de/ozgcloud/admin/BasicAppInfoController.java b/src/main/java/de/ozgcloud/admin/BasicAppInfoController.java
deleted file mode 100644
index 52e7115d4f3e51389b79d7b368373007dc527e3e..0000000000000000000000000000000000000000
--- a/src/main/java/de/ozgcloud/admin/BasicAppInfoController.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package de.ozgcloud.admin;
-
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import lombok.AllArgsConstructor;
-
-@RestController
-@AllArgsConstructor
-@RequestMapping(BasicAppInfoController.PATH)
-public class BasicAppInfoController {
-	static final String PATH = "/api"; // NOSONAR
-
-	private BasicAppInfoService basicAppInfoService;
-
-	@GetMapping
-	public BasicAppInfo getInfo() {
-		return buildInfo();
-	}
-
-	private BasicAppInfo buildInfo() {
-		return BasicAppInfo.builder()
-				.javaVersion(basicAppInfoService.getJavaVersion())
-				.buildTime(basicAppInfoService.getBuildTime())
-				.buildVersion(basicAppInfoService.getVersion())
-				.buildNumber(basicAppInfoService.getBuildNumber())
-				.buildUrl(basicAppInfoService.getBuildUrl())
-				.build();
-	}
-
-}
diff --git a/src/main/java/de/ozgcloud/admin/BasicAppInfo.java b/src/main/java/de/ozgcloud/admin/Root.java
similarity index 81%
rename from src/main/java/de/ozgcloud/admin/BasicAppInfo.java
rename to src/main/java/de/ozgcloud/admin/Root.java
index 5f5e4bf0c7906974d8af774f1f4250a60dbd4e04..1b2e658d4bc581baf1bcc5df56d81b95a74b3aa1 100644
--- a/src/main/java/de/ozgcloud/admin/BasicAppInfo.java
+++ b/src/main/java/de/ozgcloud/admin/Root.java
@@ -7,10 +7,9 @@ import lombok.Getter;
 
 @Builder
 @Getter
-public class BasicAppInfo {
+class Root {
 	private String javaVersion;
 	private String buildVersion;
 	private Instant buildTime;
 	private String buildNumber;
-	private String buildUrl;
 }
diff --git a/src/main/java/de/ozgcloud/admin/RootController.java b/src/main/java/de/ozgcloud/admin/RootController.java
new file mode 100644
index 0000000000000000000000000000000000000000..b0fca622fe7b88f1f936a37375078ea5247b86c8
--- /dev/null
+++ b/src/main/java/de/ozgcloud/admin/RootController.java
@@ -0,0 +1,31 @@
+package de.ozgcloud.admin;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import lombok.RequiredArgsConstructor;
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(RootController.PATH)
+public class RootController {
+	static final String PATH = "/api"; // NOSONAR
+
+	private final RootService rootService;
+
+	@GetMapping
+	public Root getRoot() {
+		return buildRoot();
+	}
+
+	private Root buildRoot() {
+		return Root.builder()
+				.javaVersion(rootService.getJavaVersion())
+				.buildTime(rootService.getBuildTime())
+				.buildVersion(rootService.getVersion())
+				.buildNumber(rootService.getBuildNumber())
+				.build();
+	}
+
+}
diff --git a/src/main/java/de/ozgcloud/admin/BasicAppInfoService.java b/src/main/java/de/ozgcloud/admin/RootService.java
similarity index 83%
rename from src/main/java/de/ozgcloud/admin/BasicAppInfoService.java
rename to src/main/java/de/ozgcloud/admin/RootService.java
index acfed49c1d32e06a31a19456cf74e968162dd120..c72ccf2f7c58d4563314d4ae4363a818fae2f3c9 100644
--- a/src/main/java/de/ozgcloud/admin/BasicAppInfoService.java
+++ b/src/main/java/de/ozgcloud/admin/RootService.java
@@ -6,12 +6,12 @@ import java.util.Optional;
 import org.springframework.boot.info.BuildProperties;
 import org.springframework.stereotype.Service;
 
-import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
 
 @Service
-@AllArgsConstructor
-public class BasicAppInfoService {
-	private Optional<BuildProperties> buildProperties;
+@RequiredArgsConstructor
+class RootService {
+	private final Optional<BuildProperties> buildProperties;
 
 	public String getVersion() {
 		return buildProperties.map(BuildProperties::getVersion).orElse("--");
diff --git a/src/test/java/de/ozgcloud/admin/BasicAppInfoControllerTest.java b/src/test/java/de/ozgcloud/admin/BasicAppInfoControllerTest.java
deleted file mode 100644
index 867bc399bed2427b71a95e35a6116de969148036..0000000000000000000000000000000000000000
--- a/src/test/java/de/ozgcloud/admin/BasicAppInfoControllerTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package de.ozgcloud.admin;
-
-import static org.mockito.Mockito.*;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
-
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.ZoneOffset;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.web.servlet.MockMvc;
-import org.springframework.test.web.servlet.ResultActions;
-import org.springframework.test.web.servlet.setup.MockMvcBuilders;
-
-@SpringBootTest
-class BasicAppInfoControllerTest {
-	final Instant sampleTime = LocalDateTime.parse("2021-04-01T10:30").toInstant(ZoneOffset.UTC);
-	final String javaVersion = "1";
-	final String buildVersion = "2";
-	final String buildNumber = "3";
-	final String buildUrl = "url://test";
-
-	@Spy
-	@InjectMocks
-	private BasicAppInfoController basicAppInfoController;
-
-	@Mock
-	private BasicAppInfoService basicAppInfoService;
-
-	private MockMvc mockMvc;
-
-	@BeforeEach
-	void mock() {
-		mockMvc = MockMvcBuilders.standaloneSetup(basicAppInfoController).build();
-	}
-
-	@DisplayName("Basic info")
-	@Nested
-	class TestInfo {
-
-		@Test
-		void shouldHaveJavaVersion() throws Exception {
-			when(basicAppInfoService.getJavaVersion()).thenReturn(javaVersion);
-
-			doRequest()
-					.andExpect(jsonPath("$.javaVersion").value(javaVersion));
-		}
-
-		@Test
-		void shouldHaveVersion() throws Exception {
-			when(basicAppInfoService.getVersion()).thenReturn(buildVersion);
-
-			doRequest()
-					.andExpect(jsonPath("$.buildVersion").value(buildVersion));
-		}
-
-		@Test
-		void shouldHaveBuildTime() throws Exception {
-			when(basicAppInfoService.getBuildTime()).thenReturn(sampleTime);
-
-			doRequest()
-					.andExpect(jsonPath("$.buildTime").value(sampleTime.getEpochSecond()));
-		}
-
-		@Test
-		void shouldHaveBuildNumber() throws Exception {
-			when(basicAppInfoService.getBuildNumber()).thenReturn(buildNumber);
-
-			doRequest()
-					.andExpect(jsonPath("$.buildNumber").value(buildNumber));
-		}
-
-		@Test
-		void shouldHaveBuildUrl() throws Exception {
-			when(basicAppInfoService.getBuildUrl()).thenReturn(buildUrl);
-
-			doRequest()
-					.andExpect(jsonPath("$.buildUrl").value(buildUrl));
-		}
-
-		private ResultActions doRequest() throws Exception {
-			return mockMvc.perform(get(BasicAppInfoController.PATH)).andExpect(status().isOk());
-		}
-
-	}
-
-}
diff --git a/src/test/java/de/ozgcloud/admin/RootControllerTest.java b/src/test/java/de/ozgcloud/admin/RootControllerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..2dc7e661641bcb2bce559cf5b60436190c48118e
--- /dev/null
+++ b/src/test/java/de/ozgcloud/admin/RootControllerTest.java
@@ -0,0 +1,99 @@
+package de.ozgcloud.admin;
+
+import static org.mockito.Mockito.*;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.ResultActions;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+
+import lombok.SneakyThrows;
+
+@ExtendWith(MockitoExtension.class)
+class RootControllerTest {
+	final Instant sampleTime = LocalDateTime.parse("2021-04-01T10:30").toInstant(ZoneOffset.UTC);
+	final String javaVersion = "1";
+	final String buildVersion = "2";
+	final String buildNumber = "3";
+	final String buildUrl = "url://test";
+
+	@Spy
+	@InjectMocks
+	private RootController rootController;
+
+	@Mock
+	private RootService rootService;
+
+	private MockMvc mockMvc;
+
+	@BeforeEach
+	void mock() {
+		mockMvc = MockMvcBuilders.standaloneSetup(rootController).build();
+	}
+
+	@DisplayName("Root")
+	@Nested
+	class TestInfo {
+
+		@Test
+		@SneakyThrows
+		void shouldHaveJavaVersion() {
+			when(rootService.getJavaVersion()).thenReturn(javaVersion);
+
+			ResultActions result = doRequest();
+
+			result.andExpect(jsonPath("$.javaVersion").value(javaVersion));
+		}
+
+		@Test
+		@SneakyThrows
+		void shouldHaveVersion() {
+			when(rootService.getVersion()).thenReturn(buildVersion);
+
+			ResultActions result = doRequest();
+
+			result.andExpect(jsonPath("$.buildVersion").value(buildVersion));
+		}
+
+		@Test
+		@SneakyThrows
+		void shouldHaveBuildTime() {
+			when(rootService.getBuildTime()).thenReturn(sampleTime);
+
+			ResultActions result = doRequest();
+
+			result.andExpect(jsonPath("$.buildTime").value(sampleTime.getEpochSecond()));
+		}
+
+		@Test
+		@SneakyThrows
+		void shouldHaveBuildNumber() {
+			when(rootService.getBuildNumber()).thenReturn(buildNumber);
+
+			ResultActions result = doRequest();
+
+			result.andExpect(jsonPath("$.buildNumber").value(buildNumber));
+		}
+
+		@SneakyThrows
+		private ResultActions doRequest() {
+			return mockMvc.perform(get(RootController.PATH)).andExpect(status().isOk());
+		}
+
+	}
+
+}