diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/api/HealthCheckStatusEndpoint.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/api/HealthCheckStatusEndpoint.java
index ed16539..58ab01b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/api/HealthCheckStatusEndpoint.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/api/HealthCheckStatusEndpoint.java
@@ -50,14 +50,14 @@
     }
     HealthCheck.StatusSummary globalHealthCheckStatus = healthChecks.run();
 
-    Map<String, Object> result = globalHealthCheckStatus.subChecks;
-    result.put("ts", globalHealthCheckStatus.ts);
-    result.put("elapsed", globalHealthCheckStatus.elapsed);
+    Map<String, Object> result = globalHealthCheckStatus.subChecks();
+    result.put("ts", globalHealthCheckStatus.ts());
+    result.put("elapsed", globalHealthCheckStatus.elapsed());
     return Response.withStatusCode(getHTTPResultCode(globalHealthCheckStatus), result);
   }
 
   private int getHTTPResultCode(HealthCheck.StatusSummary checkStatus) {
-    return checkStatus.result == Result.FAILED
+    return checkStatus.result() == Result.FAILED
         ? HttpServletResponse.SC_INTERNAL_SERVER_ERROR
         : HttpServletResponse.SC_OK;
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/GlobalHealthCheck.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/GlobalHealthCheck.java
index 4e4cef7..8112896 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/GlobalHealthCheck.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/GlobalHealthCheck.java
@@ -93,7 +93,7 @@
 
   @Override
   protected Result doCheck() {
-    return run().result;
+    return run().result();
   }
 
   public static boolean hasAnyFailureOnResults(Map<String, MemoizedStatusSummary> results) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheck.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheck.java
index db07320..4a26f02 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheck.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheck.java
@@ -36,24 +36,13 @@
     DISABLED;
   }
 
-  public class StatusSummary {
+  public record StatusSummary(Result result, long ts, long elapsed, Map<String, Object> subChecks) {
     public static final StatusSummary INITIAL_STATUS =
         new StatusSummary(Result.PASSED, System.currentTimeMillis(), 0L, Collections.emptyMap());
-    public final Result result;
-    public final long ts;
-    public final long elapsed;
-    public final transient Map<String, Object> subChecks;
 
     public static final Set<Result> failingResults =
         new HashSet<>(Arrays.asList(Result.FAILED, Result.TIMEOUT));
 
-    public StatusSummary(Result result, long ts, long elapsed, Map<String, Object> subChecks) {
-      this.result = result;
-      this.ts = ts;
-      this.elapsed = elapsed;
-      this.subChecks = subChecks;
-    }
-
     public Boolean isFailure() {
       return failingResults.contains(this.result);
     }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ActiveWorkersCheckTest.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ActiveWorkersCheckTest.java
index 5c57004..4ca7d82 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ActiveWorkersCheckTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ActiveWorkersCheckTest.java
@@ -42,7 +42,7 @@
     Injector injector = testInjector(new TestModule(new Config(), metricRegistry));
 
     ActiveWorkersCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.PASSED);
+    assertThat(check.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -55,7 +55,7 @@
     Injector injector = testInjector(new TestModule(gerritConfig, metricRegistry));
 
     ActiveWorkersCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.PASSED);
+    assertThat(check.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -69,7 +69,7 @@
     Injector injector = testInjector(new TestModule(gerritConfig, metricRegistry));
 
     ActiveWorkersCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.FAILED);
+    assertThat(check.run().result()).isEqualTo(Result.FAILED);
   }
 
   @Test
@@ -85,7 +85,7 @@
     HealthCheckConfig healthCheckConfig =
         new HealthCheckConfig("[healthcheck \"" + ACTIVEWORKERS + "\"]\n" + "  threshold = 50");
     ActiveWorkersCheck check = createCheck(injector, healthCheckConfig);
-    assertThat(check.run().result).isEqualTo(Result.FAILED);
+    assertThat(check.run().result()).isEqualTo(Result.FAILED);
   }
 
   @Test
@@ -101,7 +101,7 @@
     HealthCheckConfig healthCheckConfig =
         new HealthCheckConfig("[healthcheck \"" + ACTIVEWORKERS + "\"]\n" + "  threshold = 50");
     ActiveWorkersCheck check = createCheck(injector, healthCheckConfig);
-    assertThat(check.run().result).isEqualTo(Result.PASSED);
+    assertThat(check.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -122,7 +122,7 @@
     Injector injector = testInjector(new TestModule(gerritConfig, metricRegistry));
 
     ActiveWorkersCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.FAILED);
+    assertThat(check.run().result()).isEqualTo(Result.FAILED);
   }
 
   private Injector testInjector(AbstractModule testModule) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/BlockedThreadsCheckTest.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/BlockedThreadsCheckTest.java
index 737b4a7..f1f6fbb 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/BlockedThreadsCheckTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/BlockedThreadsCheckTest.java
@@ -63,7 +63,7 @@
   public void shouldPassCheckWhenNoThreadsAreReturned() {
     BlockedThreadsCheck objectUnderTest = createCheck();
     when(beanMock.getThreadInfo(null, 0)).thenReturn(new ThreadInfo[0]);
-    assertThat(objectUnderTest.run().result).isEqualTo(Result.PASSED);
+    assertThat(objectUnderTest.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -111,8 +111,8 @@
             failingThreadInfo.toArray(new ThreadInfo[0]),
             successThreadInfo.toArray(new ThreadInfo[0]));
 
-    assertThat(createCheck().run().result).isEqualTo(Result.FAILED);
-    assertThat(createCheck().run().result).isEqualTo(Result.PASSED);
+    assertThat(createCheck().run().result()).isEqualTo(Result.FAILED);
+    assertThat(createCheck().run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -191,7 +191,7 @@
 
   private void checkResult(Result expected) {
     BlockedThreadsCheck objectUnderTest = createCheck();
-    assertThat(objectUnderTest.run().result).isEqualTo(expected);
+    assertThat(objectUnderTest.run().result()).isEqualTo(expected);
   }
 
   private void mockThreads(int running, int blocked, String prefix) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/DeadlockCheckTest.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/DeadlockCheckTest.java
index a73ca15..23c87e9 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/DeadlockCheckTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/DeadlockCheckTest.java
@@ -39,7 +39,7 @@
     Injector injector = testInjector(new TestModule(new MetricRegistry()));
 
     DeadlockCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.PASSED);
+    assertThat(check.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -47,7 +47,7 @@
     Injector injector = testInjector(new TestModule(createMetricRegistry(0)));
 
     DeadlockCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.PASSED);
+    assertThat(check.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -56,7 +56,7 @@
     Injector injector = testInjector(new TestModule(createMetricRegistry(1)));
 
     DeadlockCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.FAILED);
+    assertThat(check.run().result()).isEqualTo(Result.FAILED);
   }
 
   @Test
@@ -65,7 +65,7 @@
     Injector injector = testInjector(new TestModule(createMetricRegistry(5)));
 
     DeadlockCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.FAILED);
+    assertThat(check.run().result()).isEqualTo(Result.FAILED);
   }
 
   private Injector testInjector(AbstractModule testModule) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HttpActiveWorkersCheckTest.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HttpActiveWorkersCheckTest.java
index 0bda74e..60c233a 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HttpActiveWorkersCheckTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HttpActiveWorkersCheckTest.java
@@ -52,7 +52,7 @@
         new HealthCheckConfig(
             "[healthcheck \"" + HTTPACTIVEWORKERS + "\"]\n" + "  threshold = " + thresholdPerc);
     HttpActiveWorkersCheck check = createCheck(injector, healthCheckConfig);
-    assertThat(check.run().result).isEqualTo(Result.PASSED);
+    assertThat(check.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -72,7 +72,7 @@
         new HealthCheckConfig(
             "[healthcheck \"" + HTTPACTIVEWORKERS + "\"]\n" + "  threshold = " + thresholdPerc);
     HttpActiveWorkersCheck check = createCheck(injector, healthCheckConfig);
-    assertThat(check.run().result).isEqualTo(Result.FAILED);
+    assertThat(check.run().result()).isEqualTo(Result.FAILED);
   }
 
   @Test
@@ -90,7 +90,7 @@
     Injector injector = testInjector(new TestModule(new Config(), metricRegistry));
 
     HttpActiveWorkersCheck check = createCheck(injector);
-    assertThat(check.run().result).isEqualTo(Result.PASSED);
+    assertThat(check.run().result()).isEqualTo(Result.PASSED);
   }
 
   private MetricRegistry createHttpMetricRegistry(Integer value) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/JGitHealthCheckTest.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/JGitHealthCheckTest.java
index 02b914c..ecc471f 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/JGitHealthCheckTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/JGitHealthCheckTest.java
@@ -75,7 +75,7 @@
     JGitHealthCheck check =
         new JGitHealthCheck(
             executor, DEFAULT_CONFIG, getWorkingRepositoryManager(), disabledMetricMaker);
-    assertThat(check.run().result).isEqualTo(Result.PASSED);
+    assertThat(check.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -83,7 +83,7 @@
     JGitHealthCheck jGitHealthCheck =
         new JGitHealthCheck(
             executor, DEFAULT_CONFIG, getFailingGitRepositoryManager(), disabledMetricMaker);
-    assertThat(jGitHealthCheck.run().result).isEqualTo(Result.FAILED);
+    assertThat(jGitHealthCheck.run().result()).isEqualTo(Result.FAILED);
   }
 
   @Test
@@ -97,7 +97,7 @@
                 + "  project = Not-Existing-Repo");
     JGitHealthCheck jGitHealthCheck =
         new JGitHealthCheck(executor, config, getWorkingRepositoryManager(), disabledMetricMaker);
-    assertThat(jGitHealthCheck.run().result).isEqualTo(Result.FAILED);
+    assertThat(jGitHealthCheck.run().result()).isEqualTo(Result.FAILED);
   }
 
   private GitRepositoryManager getFailingGitRepositoryManager() {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ProjectsListHealthCheckTest.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ProjectsListHealthCheckTest.java
index 293c596..836ee5a 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ProjectsListHealthCheckTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ProjectsListHealthCheckTest.java
@@ -60,7 +60,7 @@
     ProjectsListHealthCheck jGitHealthCheck =
         new ProjectsListHealthCheck(
             executor, DEFAULT_CONFIG, getWorkingProjectList(0), mockOneOffCtx, disabledMetricMaker);
-    assertThat(jGitHealthCheck.run().result).isEqualTo(Result.PASSED);
+    assertThat(jGitHealthCheck.run().result()).isEqualTo(Result.PASSED);
   }
 
   @Test
@@ -68,7 +68,7 @@
     ProjectsListHealthCheck jGitHealthCheck =
         new ProjectsListHealthCheck(
             executor, DEFAULT_CONFIG, getFailingProjectList(), mockOneOffCtx, disabledMetricMaker);
-    assertThat(jGitHealthCheck.run().result).isEqualTo(Result.FAILED);
+    assertThat(jGitHealthCheck.run().result()).isEqualTo(Result.FAILED);
   }
 
   @Test
@@ -80,7 +80,7 @@
             getWorkingProjectList(DEFAULT_CONFIG.getTimeout() * 2),
             mockOneOffCtx,
             disabledMetricMaker);
-    assertThat(jGitHealthCheck.run().result).isEqualTo(Result.TIMEOUT);
+    assertThat(jGitHealthCheck.run().result()).isEqualTo(Result.TIMEOUT);
   }
 
   private Provider<ListProjects> getFailingProjectList() {
