diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestCreateChange.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestCreateChange.java
index a93ef9e..9ac3324 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestCreateChange.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestCreateChange.java
@@ -74,7 +74,7 @@
   private final GenericFactory userFactory;
   private final Provider<InternalChangeQuery> queryProvider;
   private final BatchUpdate.Factory updateFactory;
-  private final QueryProcessor<ChangeData> qp;
+  private final Provider<ChangeQueryProcessor> qp;
   private final ChangeQueryBuilder changeQuery;
 
   @Inject
@@ -85,7 +85,7 @@
       IdentifiedUser.GenericFactory userFactory,
       Provider<InternalChangeQuery> queryProvider,
       BatchUpdate.Factory batchUpdateFactory,
-      ChangeQueryProcessor qp,
+      Provider<ChangeQueryProcessor> qp,
       ChangeQueryBuilder changeQuery) {
     this.changeInserterFactory = changeInserterFactory;
     this.patchSetInserterFactory = patchSetInserterFactory;
@@ -225,7 +225,7 @@
   private List<ChangeData> queryChangesForSha1(String pullRequestSha1) {
     QueryResult<ChangeData> results;
     try {
-      results = qp.query(changeQuery.commit(pullRequestSha1));
+      results = qp.get().query(changeQuery.commit(pullRequestSha1));
       return results.entities();
     } catch (OrmException | QueryParseException e) {
       LOG.error(
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/PullRequestListController.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/PullRequestListController.java
index 60beccd..b2998f5 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/PullRequestListController.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/PullRequestListController.java
@@ -62,7 +62,7 @@
   private final ProjectCache projectsCache;
   private final GitRepositoryManager repoMgr;
   private final Provider<ReviewDb> schema;
-  private final ChangeQueryProcessor qp;
+  private final Provider<ChangeQueryProcessor> qp;
   private final ChangeQueryBuilder changeQuery;
 
   @Inject
@@ -71,7 +71,7 @@
       GitRepositoryManager repoMgr,
       Provider<ReviewDb> schema,
       GitHubConfig config,
-      ChangeQueryProcessor qp,
+      Provider<ChangeQueryProcessor> qp,
       ChangeQueryBuilder changeQuery) {
     this.projectsCache = projectsCache;
     this.repoMgr = repoMgr;
@@ -196,7 +196,7 @@
     try {
       for (GHPullRequestCommitDetail pullRequestCommit : ghPullRequest.listCommits()) {
         pullRequestToImport |=
-            qp.query(changeQuery.commit(pullRequestCommit.getSha())).entities().isEmpty();
+            qp.get().query(changeQuery.commit(pullRequestCommit.getSha())).entities().isEmpty();
       }
       return pullRequestToImport;
     } catch (OrmException | QueryParseException e) {
