diff --git a/pom.xml b/pom.xml
index f48abf5..df34891 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,7 @@
 
   <properties>
     <Gerrit-ApiType>plugin</Gerrit-ApiType>
-    <Gerrit-ApiVersion>2.10-SNAPSHOT</Gerrit-ApiVersion>
+    <Gerrit-ApiVersion>2.11-SNAPSHOT</Gerrit-ApiVersion>
   </properties>
 
   <build>
@@ -71,7 +71,7 @@
       <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>gwt-maven-plugin</artifactId>
-        <version>2.5.1</version>
+        <version>2.6.1</version>
         <configuration>
           <module>com.googlesource.gerrit.plugins.imagare.Imagare</module>
           <disableClassMetadata>true</disableClassMetadata>
@@ -102,37 +102,21 @@
       <groupId>com.google.gerrit</groupId>
       <artifactId>gerrit-plugin-gwtui</artifactId>
       <version>${Gerrit-ApiVersion}</version>
+      <scope>provided</scope>
     </dependency>
 
     <dependency>
       <groupId>com.google.gwt</groupId>
       <artifactId>gwt-user</artifactId>
-      <version>2.5.1</version>
+      <version>2.6.1</version>
       <scope>provided</scope>
     </dependency>
-
-    <dependency>
-      <groupId>gwtexpui</groupId>
-      <artifactId>gwtexpui</artifactId>
-      <version>1.3.4</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>gwtexpui</groupId>
-      <artifactId>gwtexpui</artifactId>
-      <version>1.3.4</version>
-      <classifier>sources</classifier>
-    </dependency>
   </dependencies>
 
   <repositories>
     <repository>
-      <id>gerrit-api-repository</id>
-      <url>https://gerrit-api.storage.googleapis.com/snapshot/</url>
-    </repository>
-    <repository>
-      <id>gerrit-maven-repository</id>
-      <url>https://gerrit-maven.storage.googleapis.com</url>
+      <id>snapshot-repository</id>
+      <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
     </repository>
   </repositories>
 </project>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageServlet.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageServlet.java
index 7396b9b..bda85c4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageServlet.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageServlet.java
@@ -24,6 +24,7 @@
 import com.google.gerrit.extensions.restapi.IdString;
 import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
 import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.FileTypeRegistry;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.project.GetHead;
@@ -64,6 +65,7 @@
 
   public  static final String PATH_PREFIX = "/project/";
 
+  private final Provider<ReviewDb> db;
   private final ProjectControl.Factory projectControlFactory;
   private final ProjectCache projectCache;
   private final Provider<GetHead> getHead;
@@ -72,11 +74,13 @@
 
   @Inject
   ImageServlet(
+      Provider<ReviewDb> db,
       ProjectControl.Factory projectControlFactory,
       ProjectCache projectCache,
       Provider<GetHead> getHead,
       GitRepositoryManager repoManager,
       FileTypeRegistry fileTypeRegistry) {
+    this.db = db;
     this.projectControlFactory = projectControlFactory;
     this.projectCache = projectCache;
     this.getHead = getHead;
@@ -136,7 +140,7 @@
           RevWalk rw = new RevWalk(repo);
           try {
             RevCommit commit = rw.parseCommit(repo.resolve(rev));
-            if (!projectControl.canReadCommit(rw, commit)) {
+            if (!projectControl.canReadCommit(db.get(), rw, commit)) {
               notFound(res);
               return;
             }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java
index de6d0da..ef97ac4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java
@@ -25,6 +25,7 @@
 import com.google.gerrit.extensions.restapi.RestModifyView;
 import com.google.gerrit.reviewdb.client.Branch;
 import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.FileTypeRegistry;
 import com.google.gerrit.server.GerritPersonIdent;
 import com.google.gerrit.server.IdentifiedUser;
@@ -77,6 +78,7 @@
   private final PersonIdent myIdent;
   private final String canonicalWebUrl;
   private final Config cfg;
+  private final Provider<ReviewDb> db;
   private final String pluginName;
 
   @Inject
@@ -84,7 +86,7 @@
       GitRepositoryManager repoManager, GitReferenceUpdated referenceUpdated,
       ChangeHooks hooks, @GerritPersonIdent PersonIdent myIdent,
       @CanonicalWebUrl String canonicalWebUrl, @GerritServerConfig Config cfg,
-      @PluginName String pluginName) {
+      Provider<ReviewDb> db, @PluginName String pluginName) {
     this.registry = registry;
     this.imageDataPattern = Pattern.compile("data:([\\w/.-]+);([\\w]+),(.*)");
     this.self = self;
@@ -94,6 +96,7 @@
     this.myIdent = myIdent;
     this.canonicalWebUrl = canonicalWebUrl;
     this.cfg = cfg;
+    this.db = db;
     this.pluginName = pluginName;
   }
 
@@ -193,7 +196,7 @@
           commitId = oi.insert(cb);
           oi.flush();
 
-          if (!rc.canCreate(rw, rw.parseCommit(commitId), false)) {
+          if (!rc.canCreate(db.get(), rw, rw.parseCommit(commitId))) {
             throw new AuthException(String.format(
                 "Project %s doesn't allow image upload.", pc.getProject().getName()));
           }
