diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerUsernameIntegrationTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerUsernameIntegrationTest.java
index 87efd662bfca9a71a8dd4ec24351b32b75474c5a..4b95d27cdde0a282bb6e7f086e65a32172a0c504 100644
--- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerUsernameIntegrationTest.java
+++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerUsernameIntegrationTest.java
@@ -8,6 +8,7 @@ package org.whispersystems.textsecuregcm.storage;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doReturn;
@@ -27,10 +28,12 @@ import java.util.Base64;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.Executor;
 import java.util.function.Supplier;
+import org.apache.commons.lang3.RandomUtils;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
@@ -299,4 +302,34 @@ class AccountsManagerUsernameIntegrationTest {
     assertArrayEquals(account.getUsernameHash().orElseThrow(), USERNAME_HASH_2);
     assertArrayEquals(account.getEncryptedUsername().orElseThrow(), ENCRYPTED_USERNAME_2);
   }
+
+  @Test
+  public void testUsernameLinks() throws InterruptedException {
+    Account account = accountsManager.create("+18005551111", "password", null, new AccountAttributes(), new ArrayList<>());
+    account.setUsernameHash(RandomUtils.nextBytes(16));
+    accounts.create(account);
+
+    final UUID linkHandle = UUID.randomUUID();
+    final byte[] encryptedUsername = RandomUtils.nextBytes(32);
+    accountsManager.update(account, a -> a.setUsernameLinkDetails(linkHandle, encryptedUsername));
+
+    final Optional<Account> maybeAccount = accountsManager.getByUsernameLinkHandle(linkHandle).join();
+    assertTrue(maybeAccount.isPresent());
+    assertTrue(maybeAccount.get().getEncryptedUsername().isPresent());
+    assertArrayEquals(encryptedUsername, maybeAccount.get().getEncryptedUsername().get());
+
+    // making some unrelated change and updating account to check that username link data is still there
+    final Optional<Account> accountToChange = accountsManager.getByAccountIdentifier(account.getUuid());
+    assertTrue(accountToChange.isPresent());
+    accountsManager.update(accountToChange.get(), a -> a.setDiscoverableByPhoneNumber(!a.isDiscoverableByPhoneNumber()));
+    final Optional<Account> accountAfterChange = accountsManager.getByUsernameLinkHandle(linkHandle).join();
+    assertTrue(accountAfterChange.isPresent());
+    assertTrue(accountAfterChange.get().getEncryptedUsername().isPresent());
+    assertArrayEquals(encryptedUsername, accountAfterChange.get().getEncryptedUsername().get());
+
+    // now deleting the link
+    final Optional<Account> accountToDeleteLink = accountsManager.getByAccountIdentifier(account.getUuid());
+    accountsManager.update(accountToDeleteLink.orElseThrow(), a -> a.setUsernameLinkDetails(null, null));
+    assertTrue(accounts.getByUsernameLinkHandle(linkHandle).join().isEmpty());
+  }
 }
diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsTest.java
index 7d8c0833f30c0e1eac35a8ddc79d147bbaea7f57..11e5225ab5d312de286d31e6a58fa2e8b1c55e00 100644
--- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsTest.java
+++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsTest.java
@@ -22,7 +22,6 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.uuid.UUIDComparator;
 import java.nio.charset.StandardCharsets;
 import java.security.SecureRandom;
-import java.time.Clock;
 import java.time.Duration;
 import java.time.Instant;
 import java.util.ArrayList;
@@ -35,14 +34,12 @@ import java.util.Random;
 import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.CompletionException;
-import java.util.concurrent.Executor;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.BiConsumer;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import org.apache.commons.lang3.RandomUtils;
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.api.extension.RegisterExtension;
@@ -51,12 +48,7 @@ import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;
 import org.junit.jupiter.params.provider.ValueSource;
 import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicConfiguration;
-import org.whispersystems.textsecuregcm.experiment.ExperimentEnrollmentManager;
 import org.whispersystems.textsecuregcm.identity.IdentityType;
-import org.whispersystems.textsecuregcm.push.ClientPresenceManager;
-import org.whispersystems.textsecuregcm.redis.FaultTolerantRedisCluster;
-import org.whispersystems.textsecuregcm.securestorage.SecureStorageClient;
-import org.whispersystems.textsecuregcm.securevaluerecovery.SecureValueRecovery2Client;
 import org.whispersystems.textsecuregcm.storage.DynamoDbExtensionSchema.Tables;
 import org.whispersystems.textsecuregcm.tests.util.AccountsHelper;
 import org.whispersystems.textsecuregcm.tests.util.DevicesHelper;
@@ -131,7 +123,7 @@ class AccountsTest {
   }
 
   @Test
-  public void testStoreAndLookupUsernameLink() throws Exception {
+  public void testStoreAndLookupUsernameLink() {
     final Account account = nextRandomAccount();
     account.setUsernameHash(RandomUtils.nextBytes(16));
     accounts.create(account);
@@ -165,54 +157,6 @@ class AccountsTest {
     assertTrue(accounts.getByUsernameLinkHandle(linkHandle2).join().isEmpty());
   }
 
-  @Test
-  @Disabled
-  // TODO: @Sergey: what's the story with this test?
-  public void testUsernameLinksViaAccountsManager() {
-    final AccountsManager accountsManager = new AccountsManager(
-        accounts,
-        mock(PhoneNumberIdentifiers.class),
-        mock(FaultTolerantRedisCluster.class),
-        mock(AccountLockManager.class),
-        mock(KeysManager.class),
-        mock(MessagesManager.class),
-        mock(ProfilesManager.class),
-        mock(SecureStorageClient.class),
-        mock(SecureValueRecovery2Client.class),
-        mock(ClientPresenceManager.class),
-        mock(ExperimentEnrollmentManager.class),
-        mock(RegistrationRecoveryPasswordsManager.class),
-        mock(Executor.class),
-        mock(Clock.class));
-
-    final Account account = nextRandomAccount();
-    account.setUsernameHash(RandomUtils.nextBytes(16));
-    accounts.create(account);
-
-    final UUID linkHandle = UUID.randomUUID();
-    final byte[] encryptedUsername = RandomUtils.nextBytes(32);
-    accountsManager.update(account, a -> a.setUsernameLinkDetails(linkHandle, encryptedUsername));
-
-    final Optional<Account> maybeAccount = accountsManager.getByUsernameLinkHandle(linkHandle).join();
-    assertTrue(maybeAccount.isPresent());
-    assertTrue(maybeAccount.get().getEncryptedUsername().isPresent());
-    assertArrayEquals(encryptedUsername, maybeAccount.get().getEncryptedUsername().get());
-
-    // making some unrelated change and updating account to check that username link data is still there
-    final Optional<Account> accountToChange = accountsManager.getByAccountIdentifier(account.getUuid());
-    assertTrue(accountToChange.isPresent());
-    accountsManager.update(accountToChange.get(), a -> a.setDiscoverableByPhoneNumber(!a.isDiscoverableByPhoneNumber()));
-    final Optional<Account> accountAfterChange = accountsManager.getByUsernameLinkHandle(linkHandle).join();
-    assertTrue(accountAfterChange.isPresent());
-    assertTrue(accountAfterChange.get().getEncryptedUsername().isPresent());
-    assertArrayEquals(encryptedUsername, accountAfterChange.get().getEncryptedUsername().get());
-
-    // now deleting the link
-    final Optional<Account> accountToDeleteLink = accountsManager.getByAccountIdentifier(account.getUuid());
-    accountsManager.update(accountToDeleteLink.get(), a -> a.setUsernameLinkDetails(null, null));
-    assertTrue(accounts.getByUsernameLinkHandle(linkHandle).join().isEmpty());
-  }
-
   @Test
   void testStore() {
     Device device = generateDevice(1);