diff --git a/README.md b/README.md
index f375030..d5cb3db 100644
--- a/README.md
+++ b/README.md
@@ -37,9 +37,10 @@
 
 - ts: epoch timestamp in millis of the test
 - elapsed: elapsed time in millis to perform the check
+- querychanges: check that Gerrit can query changes
 - reviewdb: check that Gerrit can connect and query ReviewDb
 - projectslist: check that Gerrit can list projects
-- jgit: check that Gerrit can access repositories 
+- jgit: check that Gerrit can access repositories
 
 Each check returns a JSON payload with the following information:
 
@@ -60,9 +61,15 @@
 200 OK
 Content-Type: application/json
 
+)]}'
 {
   "ts": 139402910202,
   "elapsed": 100,
+  "querychanges": {
+    "ts": 139402910202,
+    "elapsed": 20,
+    "result": "passed"
+  },
   "reviewdb": {
     "ts": 139402910202,
     "elapsed": 50,
@@ -89,9 +96,15 @@
 500 ERROR
 Content-Type: application/json
 
+)]}'
 {
   "ts": 139402910202,
   "elapsed": 100,
+  "querychanges": {
+    "ts": 139402910202,
+    "elapsed": 20,
+    "result": "passed"
+  },
   "reviewdb": {
     "ts": 139402910202,
     "elapsed": 50,
@@ -118,4 +131,4 @@
 Some additional metrics are also produced to give extra insights on their result about results and latency of healthcheck
 sub component, such as jgit, reviewdb, etc.
 
-More information can be found in the [config.md](resources/Documentation/config.md) file.
\ No newline at end of file
+More information can be found in the [config.md](resources/Documentation/config.md) file.
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckSubsystemsModule.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckSubsystemsModule.java
index 078010a..e64b188 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckSubsystemsModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckSubsystemsModule.java
@@ -23,13 +23,11 @@
 import com.googlesource.gerrit.plugins.healthcheck.check.JGitHealthCheck;
 import com.googlesource.gerrit.plugins.healthcheck.check.ProjectsListHealthCheck;
 import com.googlesource.gerrit.plugins.healthcheck.check.QueryChangesHealthCheck;
-import com.googlesource.gerrit.plugins.healthcheck.check.ReviewDbHealthCheck;
 
 public class HealthCheckSubsystemsModule extends AbstractModule {
 
   @Override
   protected void configure() {
-    bindChecker(ReviewDbHealthCheck.class);
     bindChecker(JGitHealthCheck.class);
     bindChecker(ProjectsListHealthCheck.class);
     bindChecker(QueryChangesHealthCheck.class);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheckNames.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheckNames.java
index 9614484..4ce705d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheckNames.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheckNames.java
@@ -15,7 +15,6 @@
 package com.googlesource.gerrit.plugins.healthcheck.check;
 
 public interface HealthCheckNames {
-  String REVIEWDB = "reviewdb";
   String JGIT = "jgit";
   String PROJECTSLIST = "projectslist";
   String QUERYCHANGES = "querychanges";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/ReviewDbHealthCheck.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/ReviewDbHealthCheck.java
deleted file mode 100644
index 2a184c8..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/ReviewDbHealthCheck.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2019 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.googlesource.gerrit.plugins.healthcheck.check;
-
-import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.REVIEWDB;
-
-import com.google.common.util.concurrent.ListeningExecutorService;
-import com.google.gerrit.reviewdb.client.CurrentSchemaVersion;
-import com.google.gerrit.reviewdb.server.ReviewDb;
-import com.google.gwtorm.server.SchemaFactory;
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-import com.googlesource.gerrit.plugins.healthcheck.HealthCheckConfig;
-
-@Singleton
-public class ReviewDbHealthCheck extends AbstractHealthCheck {
-  private final SchemaFactory<ReviewDb> reviewDb;
-
-  @Inject
-  public ReviewDbHealthCheck(
-      ListeningExecutorService executor,
-      HealthCheckConfig config,
-      SchemaFactory<ReviewDb> reviewDb) {
-    super(executor, config, REVIEWDB);
-    this.reviewDb = reviewDb;
-  }
-
-  @Override
-  protected Result doCheck() throws Exception {
-    try (ReviewDb db = reviewDb.open()) {
-      db.schemaVersion().get(new CurrentSchemaVersion.Key());
-      return Result.PASSED;
-    }
-  }
-}
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 739a43a..1d8c912 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -14,9 +14,9 @@
 {
   "ts": 139402910202,
   "elapsed": 100,
-  "reviewdb": {
+  "querychanges": {
     "ts": 139402910202,
-    "elapsed": 50,
+    "elapsed": 20,
     "result": "passed"
   },
   "projectslist": {
@@ -44,7 +44,7 @@
 
 The following check names are available:
 
-- `reviewdb` : check connectivity and ability to query ReviewDb
+- `querychanges`: check the ability to query changes
 - `jgit` : check connectivity to the filesystem and ability to open a JGit ref and object
 - `projectslist` : check the ability to list projects with their descriptions
 - `auth`: check the ability to authenticate with username and password
@@ -81,7 +81,7 @@
    Default: healthcheck
 
  - `healthcheck.auth.password` : Password to use for authentication
-
+ 
    Default: no password
 
  - `healthcheck.activeworkers.threshold` : Percent of queue occupancy above which queue is consider 
diff --git a/src/resources/Documentation/config.md b/src/resources/Documentation/config.md
index ea51c10..aa59c29 100644
--- a/src/resources/Documentation/config.md
+++ b/src/resources/Documentation/config.md
@@ -48,9 +48,6 @@
 # TYPE plugins_healthcheck_projectslist_latest_measured_latency gauge
 plugins_healthcheck_projectslist_latest_measured_latency 5.0
 
-# HELP plugins_healthcheck_reviewdb_latest_measured_latency Generated from Dropwizard metric import (metric=plugins/healthcheck/reviewdb/latency, type=com.google.gerrit.metrics.dropwizard.CallbackMetricImpl0$1)
-# TYPE plugins_healthcheck_reviewdb_latest_measured_latency gauge
-plugins_healthcheck_reviewdb_latest_measured_latency 3.0
 
 # HELP plugins_healthcheck_jgit_failure_total Generated from Dropwizard metric import (metric=plugins/healthcheck/jgit/failure, type=com.codahale.metrics.Meter)
 # TYPE plugins_healthcheck_jgit_failure_total counter
@@ -59,10 +56,6 @@
 # HELP plugins_healthcheck_projectslist_failure_total Generated from Dropwizard metric import (metric=plugins/healthcheck/projectslist/failure, type=com.codahale.metrics.Meter)
 # TYPE plugins_healthcheck_projectslist_failure_total counter
 plugins_healthcheck_projectslist_failure_total 0.0
-
-# HELP plugins_healthcheck_reviewdb_failure_total Generated from Dropwizard metric import (metric=plugins/healthcheck/reviewdb/failure, type=com.codahale.metrics.Meter)
-# TYPE plugins_healthcheck_reviewdb_failure_total counter
-plugins_healthcheck_reviewdb_failure_total 0.0
 ```
 
 Metrics will be exposed to prometheus by the [metrics-reporter-prometheus](https://gerrit.googlesource.com/plugins/metrics-reporter-prometheus/) plugin.
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckIT.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckIT.java
index 87061f5..199543b 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckIT.java
@@ -20,7 +20,6 @@
 import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.AUTH;
 import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.JGIT;
 import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.QUERYCHANGES;
-import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.REVIEWDB;
 
 import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
 import com.google.gerrit.acceptance.RestResponse;
@@ -64,23 +63,6 @@
   }
 
   @Test
-  public void shouldReturnReviewDbCheck() throws Exception {
-    RestResponse resp = getHealthCheckStatus();
-
-    resp.assertOK();
-    assertCheckResult(getResponseJson(resp), REVIEWDB, "passed");
-  }
-
-  @Test
-  public void shouldReturnReviewDbCheckAsDisabled() throws Exception {
-    disableCheck(REVIEWDB);
-    RestResponse resp = getHealthCheckStatus();
-
-    resp.assertOK();
-    assertCheckResult(getResponseJson(resp), REVIEWDB, "disabled");
-  }
-
-  @Test
   public void shouldReturnJGitCheck() throws Exception {
     RestResponse resp = getHealthCheckStatus();
 
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 1a8ec63..59dfd71 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/JGitHealthCheckTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/JGitHealthCheckTest.java
@@ -67,9 +67,9 @@
 
   @Test
   public void shouldBeHealthyWhenJGitIsWorking() {
-    JGitHealthCheck reviewDbCheck =
+    JGitHealthCheck check =
         new JGitHealthCheck(executor, DEFAULT_CONFIG, getWorkingRepositoryManager());
-    assertThat(reviewDbCheck.run().result).isEqualTo(Result.PASSED);
+    assertThat(check.run().result).isEqualTo(Result.PASSED);
   }
 
   @Test
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 cb41000..2ab0d83 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ProjectsListHealthCheckTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ProjectsListHealthCheckTest.java
@@ -34,6 +34,8 @@
 public class ProjectsListHealthCheckTest {
   @Inject private ListeningExecutorService executor;
 
+  private Config gerritConfig = new Config();
+
   @Before
   public void setUp() throws Exception {
     Guice.createInjector(new HealthCheckModule()).injectMembers(this);
@@ -62,7 +64,8 @@
   }
 
   private ListProjects getFailingProjectList() {
-    return new ListProjects(null, null, null, null, null, null, null, null, null, new Config()) {
+    return new ListProjects(null, null, null, null, null, null, null, null, null, gerritConfig) {
+
       @Override
       public SortedMap<String, ProjectInfo> apply() throws BadRequestException {
         throw new IllegalArgumentException("Unable to return project list");
@@ -71,7 +74,8 @@
   }
 
   private ListProjects getWorkingProjectList(long execTime) {
-    return new ListProjects(null, null, null, null, null, null, null, null, null, new Config()) {
+    return new ListProjects(null, null, null, null, null, null, null, null, null, gerritConfig) {
+
       @Override
       public SortedMap<String, ProjectInfo> apply() throws BadRequestException {
         SortedMap<String, ProjectInfo> projects = new TreeMap<>();
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ReviewDbHealthCheckTest.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ReviewDbHealthCheckTest.java
deleted file mode 100644
index 5c85f42..0000000
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/ReviewDbHealthCheckTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (C) 2019 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.googlesource.gerrit.plugins.healthcheck;
-
-import static com.google.common.truth.Truth.assertThat;
-import static com.googlesource.gerrit.plugins.healthcheck.HealthCheckConfig.DEFAULT_CONFIG;
-
-import com.google.common.util.concurrent.ListeningExecutorService;
-import com.google.gerrit.lifecycle.LifecycleManager;
-import com.google.gerrit.reviewdb.server.ReviewDb;
-import com.google.gerrit.testing.DisabledReviewDb;
-import com.google.gerrit.testing.InMemoryDatabase;
-import com.google.gwtorm.server.SchemaFactory;
-import com.google.inject.Guice;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
-import com.googlesource.gerrit.plugins.healthcheck.check.HealthCheck;
-import com.googlesource.gerrit.plugins.healthcheck.check.ReviewDbHealthCheck;
-import org.junit.Before;
-import org.junit.Test;
-
-public class ReviewDbHealthCheckTest {
-  private SchemaFactory<ReviewDb> workingReviewDbFactory;
-  @Inject private ListeningExecutorService executor;
-
-  @Before
-  public void setUp() throws Exception {
-    Injector testInjector = Guice.createInjector(new HealthCheckModule());
-    testInjector.injectMembers(this);
-
-    workingReviewDbFactory = InMemoryDatabase.newDatabase(new LifecycleManager()).create();
-  }
-
-  @Test
-  public void shouldBeHealthyWhenReviewDbIsWorking() {
-    ReviewDbHealthCheck reviewDbCheck =
-        new ReviewDbHealthCheck(executor, DEFAULT_CONFIG, workingReviewDbFactory);
-    assertThat(reviewDbCheck.run().result).isEqualTo(HealthCheck.Result.PASSED);
-  }
-
-  @Test
-  public void shouldBeUnhealthyWhenReviewDbIsFailing() {
-    ReviewDbHealthCheck reviewDbCheck =
-        new ReviewDbHealthCheck(executor, DEFAULT_CONFIG, getFailingReviewDbProvider());
-    assertThat(reviewDbCheck.run().result).isEqualTo(HealthCheck.Result.FAILED);
-  }
-
-  private SchemaFactory<ReviewDb> getFailingReviewDbProvider() {
-    return new SchemaFactory<ReviewDb>() {
-      @Override
-      public ReviewDb open() {
-        return new DisabledReviewDb();
-      }
-    };
-  }
-}
