diff --git a/WORKSPACE b/WORKSPACE
index 7659b14..6089c79 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,7 +3,7 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "d3bcb019a27ecbf214334c52322c487830a83cd3",
+    commit = "1d381f01c853e2c02ae35430a8e294e485635d62",
     #local_path = "/home/<user>/projects/bazlets",
 )
 
diff --git a/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java
index a0a6263..4a34958 100644
--- a/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java
+++ b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java
@@ -19,6 +19,7 @@
 import static com.google.gerrit.extensions.client.DiffPreferencesInfo.Whitespace.IGNORE_NONE;
 
 import com.google.common.collect.Sets;
+import com.google.gerrit.exceptions.StorageException;
 import com.google.gerrit.extensions.annotations.Listen;
 import com.google.gerrit.extensions.api.GerritApi;
 import com.google.gerrit.extensions.api.changes.ChangeApi;
@@ -39,7 +40,6 @@
 import com.google.gerrit.server.patch.PatchListNotAvailableException;
 import com.google.gerrit.server.util.ManualRequestContext;
 import com.google.gerrit.server.util.OneOffRequestContext;
-import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import java.io.IOException;
@@ -56,11 +56,8 @@
   private final GerritApi api;
 
   private final PatchListCache patchListCache;
-
   private final GitRepositoryManager repositoryManager;
-
   private final Accounts accounts;
-
   private final ReviewerManager reviewerManager;
 
   private final OneOffRequestContext oneOffReqCtx;
@@ -101,7 +98,7 @@
   private void handleGitReferenceUpdatedAsUser(Event event, Account.Id updaterAccountId) {
     try (ManualRequestContext ctx = oneOffReqCtx.openAs(updaterAccountId)) {
       handleGitReferenceUpdated(event);
-    } catch (OrmException e) {
+    } catch (StorageException e) {
       logger.warn("Unable to process event {} on project {}", event, event.getProjectName(), e);
     }
   }
@@ -109,7 +106,7 @@
   private void handleGitReferenceUpdatedAsServer(Event event) {
     try (ManualRequestContext ctx = oneOffReqCtx.open()) {
       handleGitReferenceUpdated(event);
-    } catch (OrmException e) {
+    } catch (StorageException e) {
       logger.warn("Unable to process event {} on project {}", event, event.getProjectName(), e);
     }
   }
diff --git a/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/ReviewerManager.java b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/ReviewerManager.java
index efb9910..4a16316 100644
--- a/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/ReviewerManager.java
+++ b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/ReviewerManager.java
@@ -25,7 +25,6 @@
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.server.util.ManualRequestContext;
 import com.google.gerrit.server.util.OneOffRequestContext;
-import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import java.util.ArrayList;
@@ -63,7 +62,7 @@
         }
         gApi.changes().id(changeInfo.id).current().review(in);
       }
-    } catch (RestApiException | OrmException e) {
+    } catch (RestApiException e) {
       log.error("Couldn't add reviewers to the change", e);
       throw new ReviewerManagerException(e);
     }
diff --git a/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerIT.java b/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerIT.java
index f009bde..24c07a3 100644
--- a/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerIT.java
+++ b/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerIT.java
@@ -21,11 +21,9 @@
 import com.google.gerrit.acceptance.TestPlugin;
 import com.google.gerrit.extensions.events.GitReferenceUpdatedListener;
 import com.google.gerrit.reviewdb.client.RefNames;
-import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.AnonymousUser;
 import com.google.gerrit.server.util.ManualRequestContext;
 import com.google.gerrit.server.util.ThreadLocalRequestContext;
-import com.google.gwtorm.server.SchemaFactory;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import org.eclipse.jgit.transport.ReceiveCommand.Type;
@@ -37,7 +35,6 @@
 public class GitRefListenerIT extends LightweightPluginDaemonTest {
 
   @Inject GitRefListenerTest gitRefListener;
-  @Inject SchemaFactory<ReviewDb> schemaFactory;
   @Inject ThreadLocalRequestContext requestContext;
 
   String aRefChange = RefNames.REFS_CHANGES + "01/01/01";
@@ -60,7 +57,7 @@
             anOldObjectId,
             aNewObjectId,
             Type.CREATE,
-            admin.id);
+            admin.id());
 
     gitRefListener.onGitReferenceUpdated(refUpdatedEvent);
     assertEquals(0, gitRefListener.getProcessedEvents());
@@ -74,8 +71,7 @@
 
   @Test
   public void shouldRetrieveChangeFromAnonymousContext() throws Exception {
-    try (ManualRequestContext ctx =
-        new ManualRequestContext(new AnonymousUser(), schemaFactory, requestContext)) {
+    try (ManualRequestContext ctx = new ManualRequestContext(new AnonymousUser(), requestContext)) {
       gitRefListener.onGitReferenceUpdated(newRefUpdateEvent());
       assertEquals(1, gitRefListener.getProcessedEvents());
     }
@@ -86,8 +82,7 @@
     ReferenceUpdatedEventTest refUpdateWithoutAccountId =
         new ReferenceUpdatedEventTest(
             project, aRefChange, anOldObjectId, aNewObjectId, Type.CREATE, null);
-    try (ManualRequestContext ctx =
-        new ManualRequestContext(new AnonymousUser(), schemaFactory, requestContext)) {
+    try (ManualRequestContext ctx = new ManualRequestContext(new AnonymousUser(), requestContext)) {
       gitRefListener.onGitReferenceUpdated(refUpdateWithoutAccountId);
       assertEquals(1, gitRefListener.getProcessedEvents());
     }
@@ -95,6 +90,6 @@
 
   private ReferenceUpdatedEventTest newRefUpdateEvent() {
     return new ReferenceUpdatedEventTest(
-        project, aRefChange, anOldObjectId, aNewObjectId, Type.CREATE, admin.id);
+        project, aRefChange, anOldObjectId, aNewObjectId, Type.CREATE, admin.id());
   }
 }
diff --git a/owners-common/src/main/java/com/googlesource/gerrit/owners/common/AccountsImpl.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/AccountsImpl.java
index e83269a..b5c1f90 100644
--- a/owners-common/src/main/java/com/googlesource/gerrit/owners/common/AccountsImpl.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/AccountsImpl.java
@@ -32,7 +32,6 @@
 import com.google.gerrit.server.project.NoSuchProjectException;
 import com.google.gerrit.server.util.ManualRequestContext;
 import com.google.gerrit.server.util.OneOffRequestContext;
-import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
 import java.io.IOException;
 import java.util.Collections;
@@ -94,7 +93,7 @@
       return groupMembers.listAccounts(group.get().getGroupUUID(), null).stream()
           .map(Account::getId)
           .collect(Collectors.toSet());
-    } catch (NoSuchProjectException | OrmException | IOException e) {
+    } catch (NoSuchProjectException | IOException e) {
       log.error("Unable to list accounts in group " + group, e);
       return Collections.emptySet();
     }
@@ -102,7 +101,7 @@
 
   private Set<Account.Id> findUserOrEmail(String nameOrEmail) {
     try (ManualRequestContext ctx = oneOffRequestContext.open()) {
-      Set<Id> accountIds = resolver.findAll(nameOrEmail);
+      Set<Id> accountIds = resolver.resolve(nameOrEmail).asIdSet();
       if (accountIds.isEmpty()) {
         log.warn("User '{}' does not resolve to any account.", nameOrEmail);
         return accountIds;
@@ -133,7 +132,7 @@
       }
 
       return accountIds;
-    } catch (OrmException | IOException | ConfigInvalidException e) {
+    } catch (IOException | ConfigInvalidException e) {
       log.error("Error trying to resolve user " + nameOrEmail, e);
       return Collections.emptySet();
     }
diff --git a/owners-common/src/main/java/com/googlesource/gerrit/owners/common/ConfigurationParser.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/ConfigurationParser.java
index 2f5c5c0..dcdd9f7 100644
--- a/owners-common/src/main/java/com/googlesource/gerrit/owners/common/ConfigurationParser.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/ConfigurationParser.java
@@ -43,7 +43,7 @@
       final OwnersConfig ret = new OwnersConfig();
       JsonNode jsonNode = new ObjectMapper(new YAMLFactory()).readValue(yamlBytes, JsonNode.class);
       Boolean inherited =
-          Optional.ofNullable(jsonNode.get("inherited")).map(JsonNode::asBoolean).orElse(false);
+          Optional.ofNullable(jsonNode.get("inherited")).map(JsonNode::asBoolean).orElse(true);
       ret.setInherited(inherited);
       addClassicMatcher(jsonNode, ret);
       addMatchers(jsonNode, ret);
