diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/GetPreference.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/GetPreference.java
index a7bf3e0..3347a2d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/GetPreference.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/GetPreference.java
@@ -20,7 +20,6 @@
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.extensions.restapi.Response;
-import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.gerrit.extensions.restapi.RestReadView;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.account.AccountResource;
@@ -60,19 +59,15 @@
   }
 
   @Override
-  public Response<ConfigInfo> apply(AccountResource rsrc) throws PermissionBackendException, RestApiException {
+  public Response<ConfigInfo> apply(AccountResource rsrc)
+      throws AuthException, PermissionBackendException {
     if (self.get() != rsrc.getUser()) {
       permissionBackend.currentUser().check(ADMINISTRATE_SERVER);
     }
 
     String username = self.get().getUserName().get();
 
-    ConfigInfo globalCfg;
-    try {
-      globalCfg = getConfig.get().apply(new ConfigResource()).value();
-    } catch (Exception e) {
-      throw new RestApiException("Failed to get global config.");
-    }
+    ConfigInfo globalCfg = getConfig.get().apply(new ConfigResource()).value();
 
     Config db = projectCache.getAllProjects().getConfig(pluginName + ".config").get();
     ConfigInfo info = new ConfigInfo();
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 13d4ab0..3cad325 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageServlet.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageServlet.java
@@ -42,6 +42,7 @@
 import com.google.inject.Singleton;
 import eu.medsea.mimeutil.MimeType;
 import java.io.IOException;
+import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
@@ -102,8 +103,8 @@
     }
 
     ResourceKey key = ResourceKey.fromPath(getEncodedPath(req));
-    ProjectState state = projectCache.get(key.project);
-    if (state == null || key.file == null) {
+    Optional<ProjectState> state = projectCache.get(key.project);
+    if (!state.isPresent() || key.file == null) {
       notFound(res);
       return;
     }
@@ -115,14 +116,10 @@
     }
 
     try {
-      ProjectState projectState = projectCache.get(key.project);
+      ProjectState projectState = projectCache.get(key.project).orElse(null);
       String rev = key.revision;
       if (rev == null || Constants.HEAD.equals(rev)) {
-        try {
-          rev = getHead.get().apply(new ProjectResource(projectState, self.get())).value();
-        } catch (Exception e) {
-          throw new ResourceNotFoundException(String.format("Could not get head of project %s.", key.project));
-        }
+        rev = getHead.get().apply(new ProjectResource(projectState, self.get())).value();
       } else {
         if (!ObjectId.isId(rev)) {
           if (!rev.startsWith(Constants.R_REFS)) {
@@ -147,7 +144,7 @@
         if (ObjectId.isId(rev)) {
           try (RevWalk rw = new RevWalk(repo)) {
             RevCommit commit = rw.parseCommit(repo.resolve(rev));
-            if (!commits.canRead(state, repo, commit)) {
+            if (!commits.canRead(state.get(), repo, commit)) {
               notFound(res);
               return;
             }
@@ -202,6 +199,7 @@
         }
       }
     } catch (RepositoryNotFoundException
+        | AuthException
         | ResourceNotFoundException
         | RevisionSyntaxException
         | PermissionBackendException e) {
