diff --git a/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java b/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java
index 18875cd..56501fd 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java
@@ -95,7 +95,11 @@ public class SingleUserGroup extends AbstractGroupBackend {
     ImmutableList.Builder<AccountGroup.UUID> groups = ImmutableList.builder();
     groups.add(uuid(user.getAccountId()));
     if (user.getUserName().isPresent()) {
-      groups.add(uuid(user.getUserName().get()));
+      String username = user.getUserName().get();
+      groups.add(uuid(username));
+      if (username.contains(".")) {
+        groups.add(uuid(username.replace('.', ':')));
+      }
     }
     return new ListGroupMembership(groups.build());
   }
@@ -160,13 +164,13 @@ public class SingleUserGroup extends AbstractGroupBackend {
 
   private static GroupReference accountToGroup(AccountState s) {
     AccountGroup.UUID uuid =
-        s.getUserName().isPresent() ? uuid(s.getUserName().get()) : uuid(s.getAccount().getId());
+        s.getUserName().isPresent() ? uuid(s.getUserName().get().replace('.', ':')) : uuid(s.getAccount().getId());
     return new GroupReference(uuid, nameOf(uuid, s));
   }
 
   private static String username(AccountGroup.UUID uuid) {
     checkUUID(uuid);
-    return uuid.get().substring(UUID_PREFIX.length());
+    return uuid.get().substring(UUID_PREFIX.length()).replace(':', '.');
   }
 
   private static AccountGroup.UUID uuid(Account.Id ident) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroupTest.java b/src/test/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroupTest.java
index 9bc8859..720aa0c 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroupTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroupTest.java
@@ -18,9 +18,16 @@ import static com.google.common.truth.Truth.assertThat;
 
 import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
 import com.google.gerrit.acceptance.NoHttpd;
+import com.google.gerrit.acceptance.TestAccount;
 import com.google.gerrit.acceptance.TestPlugin;
+import com.google.gerrit.common.data.GroupDescription;
 import com.google.gerrit.extensions.common.GroupInfo;
+import com.google.gerrit.reviewdb.client.AccountGroup;
+import com.google.gerrit.server.account.GroupMembership;
+
+import java.beans.Transient;
 import java.util.Map;
+import org.junit.Before;
 import org.junit.Test;
 
 @NoHttpd
@@ -28,11 +35,55 @@ import org.junit.Test;
     name = "singleusergroup",
     sysModule = "com.googlesource.gerrit.plugins.singleusergroup.SingleUserGroup$Module")
 public class SingleUserGroupTest extends LightweightPluginDaemonTest {
-  @Test
-  public void testSuggestion() throws Exception {
+  private static final String DOTTED_USER_NAME = "user/Dotted User (dotted.user)";
+  private TestAccount dottedUserAccount;
+
+  @Before
+  public void setUp() throws Exception {
     // No ability to modify account and therefore no ACL to see secondary email
     setApiUser(user);
+    dottedUserAccount = accountCreator.create("dotted.user", "dotted.user@domain.com", "Dotted User");
+  }
+
+  @Test
+  public void testSuggestion() throws Exception {
     Map<String, GroupInfo> groups = gApi.groups().list().withSuggest("adm").getAsMap();
     assertThat(groups).containsKey("user/Administrator (admin)");
   }
+
+  @Test
+  public void testDottedUserSuggestion() throws Exception {
+    Map<String, GroupInfo> groups = gApi.groups().list().withSuggest("dot").getAsMap();
+    assertThat(groups).containsKey(DOTTED_USER_NAME);
+    GroupInfo info = groups.get(DOTTED_USER_NAME);
+    assertThat(info.id).isEqualTo("user%3Adotted%3Auser");
+  }
+
+  @Test
+  public void testMembershipIncludesDottedGroup() throws Exception {
+    GroupMembership membership = groupBackend.membershipsOf(identifiedUserFactory.create(dottedUserAccount.getId()));
+    assertThat(membership.getKnownGroups()).contains(uuid("user:dotted.user"));
+  }
+
+  @Test
+  public void testMembershipIncludesDottedColonGroup() throws Exception {
+    GroupMembership membership = groupBackend.membershipsOf(identifiedUserFactory.create(dottedUserAccount.getId()));
+    assertThat(membership.getKnownGroups()).contains(uuid("user:dotted:user"));
+  }
+
+  @Test
+  public void testGetDottedGroup() throws Exception {
+    GroupDescription.Basic desc = groupBackend.get(uuid("user:dotted.user"));
+    assertThat(desc.getName()).isEqualTo(DOTTED_USER_NAME);
+  }
+
+  @Test
+  public void testGetDottedColonGroup() throws Exception {
+    GroupDescription.Basic desc = groupBackend.get(uuid("user:dotted:user"));
+    assertThat(desc.getName()).isEqualTo(DOTTED_USER_NAME);
+  }
+
+  private static AccountGroup.UUID uuid(String id) {
+    return new AccountGroup.UUID(id);
+  }
 }