diff --git a/github-oauth/pom.xml b/github-oauth/pom.xml
index 409b0ee..0b7a9b5 100644
--- a/github-oauth/pom.xml
+++ b/github-oauth/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <groupId>com.googlesource.gerrit.plugins.github</groupId>
     <artifactId>github-parent</artifactId>
-    <version>3.4.0-rc0</version>
+    <version>3.5.0.1</version>
   </parent>
   <artifactId>github-oauth</artifactId>
   <name>Gerrit Code Review - GitHub OAuth login</name>
diff --git a/github-plugin/pom.xml b/github-plugin/pom.xml
index 1e79934..fed554e 100644
--- a/github-plugin/pom.xml
+++ b/github-plugin/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <artifactId>github-parent</artifactId>
     <groupId>com.googlesource.gerrit.plugins.github</groupId>
-    <version>3.4.0-rc0</version>
+    <version>3.5.0.1</version>
   </parent>
 
   <artifactId>github-plugin</artifactId>
diff --git a/github-plugin/src/main/java/com/google/gerrit/server/account/AccountImporter.java b/github-plugin/src/main/java/com/google/gerrit/server/account/AccountImporter.java
index 19ed82f..e826880 100644
--- a/github-plugin/src/main/java/com/google/gerrit/server/account/AccountImporter.java
+++ b/github-plugin/src/main/java/com/google/gerrit/server/account/AccountImporter.java
@@ -17,6 +17,7 @@
 import com.google.gerrit.entities.Account;
 import com.google.gerrit.server.ServerInitiated;
 import com.google.gerrit.server.account.externalids.ExternalId;
+import com.google.gerrit.server.account.externalids.ExternalIdFactory;
 import com.google.gerrit.server.notedb.Sequences;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
@@ -28,21 +29,25 @@
 public class AccountImporter {
   private final Sequences sequences;
   private final Provider<AccountsUpdate> accountsUpdateProvider;
+  private final ExternalIdFactory externalIdFactory;
 
   @Inject
   public AccountImporter(
-      Sequences sequences, @ServerInitiated Provider<AccountsUpdate> accountsUpdateProvider) {
+      Sequences sequences,
+      @ServerInitiated Provider<AccountsUpdate> accountsUpdateProvider,
+      ExternalIdFactory externalIdFactory) {
     this.sequences = sequences;
     this.accountsUpdateProvider = accountsUpdateProvider;
+    this.externalIdFactory = externalIdFactory;
   }
 
   public Account.Id importAccount(String login, String name, String email)
       throws IOException, ConfigInvalidException {
     Account.Id id = Account.id(sequences.nextAccountId());
     List<ExternalId> extIds = new ArrayList<>();
-    extIds.add(ExternalId.createEmail(id, email));
-    extIds.add(ExternalId.create(ExternalId.SCHEME_GERRIT, login, id));
-    extIds.add(ExternalId.create(ExternalId.SCHEME_USERNAME, login, id));
+    extIds.add(externalIdFactory.createEmail(id, email));
+    extIds.add(externalIdFactory.create(ExternalId.SCHEME_GERRIT, login, id));
+    extIds.add(externalIdFactory.create(ExternalId.SCHEME_USERNAME, login, id));
     AccountState accountUpdate =
         accountsUpdateProvider
             .get()
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestImportJob.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestImportJob.java
index cb71e78..f706539 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestImportJob.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestImportJob.java
@@ -26,6 +26,7 @@
 import com.google.gerrit.server.account.AccountImporter;
 import com.google.gerrit.server.account.externalids.ExternalId;
 import com.google.gerrit.server.account.externalids.ExternalIds;
+import com.google.gerrit.server.config.AuthConfig;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.project.ProjectState;
@@ -79,6 +80,7 @@
   private final String repoName;
   private final int prId;
   private final GitRepositoryManager repoMgr;
+  private final AuthConfig authConfig;
   private final int jobIndex;
   private final ExternalIds externalIds;
   private PullRequestCreateChange createChange;
@@ -96,10 +98,12 @@
       GitHubRepository.Factory gitHubRepoFactory,
       ScopedProvider<GitHubLogin> ghLoginProvider,
       ExternalIds externalIds,
+      AuthConfig authConfig,
       @Assisted("index") int jobIndex,
       @Assisted("organisation") String organisation,
       @Assisted("name") String repoName,
       @Assisted int pullRequestId) {
+    this.authConfig = authConfig;
     this.jobIndex = jobIndex;
     this.repoMgr = repoMgr;
     this.ghLogin = ghLoginProvider.get();
@@ -217,8 +221,9 @@
 
   private Optional<ExternalId> externalIdByScheme(String scheme, String id) {
     try {
-      return externalIds.get(ExternalId.Key.create(scheme, id));
-    } catch (IOException | ConfigInvalidException e) {
+      return externalIds.get(
+          ExternalId.Key.create(scheme, id, authConfig.isUserNameCaseInsensitive()));
+    } catch (IOException e) {
       LOG.error("Unable to get external id for " + scheme + ":" + id, e);
       return Optional.empty();
     }
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/AccountController.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/AccountController.java
index e2b8041..23edcbc 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/AccountController.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/AccountController.java
@@ -32,7 +32,9 @@
 import com.google.gerrit.server.account.AuthRequest;
 import com.google.gerrit.server.account.AuthResult;
 import com.google.gerrit.server.account.externalids.ExternalId;
+import com.google.gerrit.server.account.externalids.ExternalIdFactory;
 import com.google.gerrit.server.account.externalids.ExternalIds;
+import com.google.gerrit.server.config.AuthConfig;
 import com.google.gerrit.server.restapi.account.AddSshKey;
 import com.google.gerrit.server.restapi.account.GetSshKeys;
 import com.google.gerrit.server.restapi.account.PutName;
@@ -68,6 +70,9 @@
   private final PutName putName;
   private final Provider<AccountsUpdate> accountsUpdateProvider;
   private final ExternalIds externalIds;
+  private final ExternalIdFactory externalIdFactory;
+  private final AuthRequest.Factory authRequestFactory;
+  private final AuthConfig authConfig;
 
   @Inject
   public AccountController(
@@ -78,7 +83,10 @@
       final PutPreferred putPreferred,
       final PutName putName,
       @ServerInitiated final Provider<AccountsUpdate> accountsUpdateProvider,
-      final ExternalIds externalIds) {
+      final ExternalIds externalIds,
+      final ExternalIdFactory externalIdFactory,
+      final AuthRequest.Factory authRequestFactory,
+      final AuthConfig authConfig) {
     this.restAddSshKey = restAddSshKey;
     this.restGetSshKeys = restGetSshKeys;
     this.accountManager = accountManager;
@@ -87,6 +95,9 @@
     this.putName = putName;
     this.accountsUpdateProvider = accountsUpdateProvider;
     this.externalIds = externalIds;
+    this.externalIdFactory = externalIdFactory;
+    this.authRequestFactory = authRequestFactory;
+    this.authConfig = authConfig;
   }
 
   @Override
@@ -120,7 +131,7 @@
     String username = req.getParameter("username");
     try {
       Id accountId = user.getAccountId();
-      AuthResult result = accountManager.link(accountId, AuthRequest.forEmail(email));
+      AuthResult result = accountManager.link(accountId, authRequestFactory.createForEmail(email));
       log.debug("Account {} linked to email {}: result = {}", accountId, email, result);
 
       putPreferred.apply(new AccountResource.Email(user, email), null);
@@ -128,11 +139,12 @@
       nameInput.name = fullName;
       putName.apply(user, nameInput);
 
-      ExternalId.Key key = ExternalId.Key.create(SCHEME_USERNAME, username);
+      ExternalId.Key key =
+          ExternalId.Key.create(SCHEME_USERNAME, username, authConfig.isUserNameCaseInsensitive());
       Optional<ExternalId> other;
       try {
         other = externalIds.get(key);
-      } catch (IOException | ConfigInvalidException e) {
+      } catch (IOException e) {
         throw new IllegalArgumentException(
             "Internal error while fetching username='" + username + "'");
       }
@@ -148,7 +160,7 @@
             .update(
                 "Set Username from GitHub",
                 accountId,
-                u -> u.addExternalId(ExternalId.create(key, accountId, null, null)));
+                u -> u.addExternalId(externalIdFactory.create(key, accountId, null, null)));
       } catch (Exception e) {
         throw new IllegalArgumentException(
             "Internal error while trying to set username='" + username + "'");
diff --git a/pom.xml b/pom.xml
index f613caa..72d4915 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.googlesource.gerrit.plugins.github</groupId>
   <artifactId>github-parent</artifactId>
-  <version>3.4.0-rc1</version>
+  <version>3.5.0.1</version>
   <name>Gerrit Code Review - GitHub integration</name>
   <url>http://www.gerritforge.com</url>
   <packaging>pom</packaging>
