diff --git a/SignalServiceKit/src/Messages/OWSFailedAttachmentDownloadsJob.h b/SignalServiceKit/src/Messages/OWSFailedAttachmentDownloadsJob.h
index 7ad6b20ee..a727f1656 100644
--- a/SignalServiceKit/src/Messages/OWSFailedAttachmentDownloadsJob.h
+++ b/SignalServiceKit/src/Messages/OWSFailedAttachmentDownloadsJob.h
@@ -16,7 +16,7 @@ NS_ASSUME_NONNULL_BEGIN
 /**
  * Database extensions required for class to work.
  */
-- (void)asyncRegisterDatabaseExtensions;
++ (void)asyncRegisterDatabaseExtensionsWithStorageManager:(TSStorageManager *)storageManager;
 
 /**
  * Only use the sync version for testing, generally we'll want to register extensions async
diff --git a/SignalServiceKit/src/Messages/OWSFailedAttachmentDownloadsJob.m b/SignalServiceKit/src/Messages/OWSFailedAttachmentDownloadsJob.m
index fb00bec7e..3021d30b9 100644
--- a/SignalServiceKit/src/Messages/OWSFailedAttachmentDownloadsJob.m
+++ b/SignalServiceKit/src/Messages/OWSFailedAttachmentDownloadsJob.m
@@ -96,7 +96,7 @@ static NSString *const OWSFailedAttachmentDownloadsJobAttachmentStateIndex = @"i
 
 #pragma mark - YapDatabaseExtension
 
-- (YapDatabaseSecondaryIndex *)indexDatabaseExtension
++ (YapDatabaseSecondaryIndex *)indexDatabaseExtension
 {
     YapDatabaseSecondaryIndexSetup *setup = [YapDatabaseSecondaryIndexSetup new];
     [setup addColumn:OWSFailedAttachmentDownloadsJobAttachmentStateColumn
@@ -121,21 +121,21 @@ static NSString *const OWSFailedAttachmentDownloadsJobAttachmentStateIndex = @"i
 // Useful for tests, don't use in app startup path because it's slow.
 - (void)blockingRegisterDatabaseExtensions
 {
-    [self.storageManager registerExtension:[self indexDatabaseExtension]
+    [self.storageManager registerExtension:[self.class indexDatabaseExtension]
                                   withName:OWSFailedAttachmentDownloadsJobAttachmentStateIndex];
 }
 
-- (void)asyncRegisterDatabaseExtensions
++ (void)asyncRegisterDatabaseExtensionsWithStorageManager:(TSStorageManager *)storageManager
 {
-    [self.storageManager asyncRegisterExtension:[self indexDatabaseExtension]
-                                       withName:OWSFailedAttachmentDownloadsJobAttachmentStateIndex
-                                completionBlock:^(BOOL ready) {
-                                    if (ready) {
-                                        DDLogDebug(@"%@ completed registering extension async.", self.logTag);
-                                    } else {
-                                        DDLogError(@"%@ failed registering extension async.", self.logTag);
-                                    }
-                                }];
+    [storageManager asyncRegisterExtension:[self indexDatabaseExtension]
+                                  withName:OWSFailedAttachmentDownloadsJobAttachmentStateIndex
+                           completionBlock:^(BOOL ready) {
+                               if (ready) {
+                                   DDLogDebug(@"%@ completed registering extension async.", self.logTag);
+                               } else {
+                                   DDLogError(@"%@ failed registering extension async.", self.logTag);
+                               }
+                           }];
 }
 
 @end
diff --git a/SignalServiceKit/src/Messages/OWSFailedMessagesJob.h b/SignalServiceKit/src/Messages/OWSFailedMessagesJob.h
index 49d8c67d2..29b8761bf 100644
--- a/SignalServiceKit/src/Messages/OWSFailedMessagesJob.h
+++ b/SignalServiceKit/src/Messages/OWSFailedMessagesJob.h
@@ -16,7 +16,7 @@ NS_ASSUME_NONNULL_BEGIN
 /**
  * Database extensions required for class to work.
  */
-- (void)asyncRegisterDatabaseExtensions;
++ (void)asyncRegisterDatabaseExtensionsWithStorageManager:(TSStorageManager *)storageManager;
 
 /**
  * Only use the sync version for testing, generally we'll want to register extensions async
diff --git a/SignalServiceKit/src/Messages/OWSFailedMessagesJob.m b/SignalServiceKit/src/Messages/OWSFailedMessagesJob.m
index 886fd9112..4c39906e2 100644
--- a/SignalServiceKit/src/Messages/OWSFailedMessagesJob.m
+++ b/SignalServiceKit/src/Messages/OWSFailedMessagesJob.m
@@ -105,7 +105,7 @@ static NSString *const OWSFailedMessagesJobMessageStateIndex = @"index_outoing_m
 
 #pragma mark - YapDatabaseExtension
 
-- (YapDatabaseSecondaryIndex *)indexDatabaseExtension
++ (YapDatabaseSecondaryIndex *)indexDatabaseExtension
 {
     YapDatabaseSecondaryIndexSetup *setup = [YapDatabaseSecondaryIndexSetup new];
     [setup addColumn:OWSFailedMessagesJobMessageStateColumn withType:YapDatabaseSecondaryIndexTypeInteger];
@@ -130,21 +130,21 @@ static NSString *const OWSFailedMessagesJobMessageStateIndex = @"index_outoing_m
 // Useful for tests, don't use in app startup path because it's slow.
 - (void)blockingRegisterDatabaseExtensions
 {
-    [self.storageManager registerExtension:[self indexDatabaseExtension]
+    [self.storageManager registerExtension:[self.class indexDatabaseExtension]
                                   withName:OWSFailedMessagesJobMessageStateIndex];
 }
 
-- (void)asyncRegisterDatabaseExtensions
++ (void)asyncRegisterDatabaseExtensionsWithStorageManager:(TSStorageManager *)storageManager
 {
-    [self.storageManager asyncRegisterExtension:[self indexDatabaseExtension]
-                                       withName:OWSFailedMessagesJobMessageStateIndex
-                                completionBlock:^(BOOL ready) {
-                                    if (ready) {
-                                        DDLogDebug(@"%@ completed registering extension async.", self.logTag);
-                                    } else {
-                                        DDLogError(@"%@ failed registering extension async.", self.logTag);
-                                    }
-                                }];
+    [storageManager asyncRegisterExtension:[self indexDatabaseExtension]
+                                  withName:OWSFailedMessagesJobMessageStateIndex
+                           completionBlock:^(BOOL ready) {
+                               if (ready) {
+                                   DDLogDebug(@"%@ completed registering extension async.", self.logTag);
+                               } else {
+                                   DDLogError(@"%@ failed registering extension async.", self.logTag);
+                               }
+                           }];
 }
 
 @end
diff --git a/SignalServiceKit/src/Storage/AxolotlStore/TSStorageManager+PreKeyStore.m b/SignalServiceKit/src/Storage/AxolotlStore/TSStorageManager+PreKeyStore.m
index 5cd933b9b..6654c1691 100644
--- a/SignalServiceKit/src/Storage/AxolotlStore/TSStorageManager+PreKeyStore.m
+++ b/SignalServiceKit/src/Storage/AxolotlStore/TSStorageManager+PreKeyStore.m
@@ -2,6 +2,7 @@
 //  Copyright (c) 2017 Open Whisper Systems. All rights reserved.
 //
 
+#import "TSStorageKeys.h"
 #import "TSStorageManager+PreKeyStore.h"
 #import "TSStorageManager+keyFromIntLong.h"
 #import "YapDatabaseConnection+OWS.h"
diff --git a/SignalServiceKit/src/Storage/OWSIncomingMessageFinder.h b/SignalServiceKit/src/Storage/OWSIncomingMessageFinder.h
index 6a5fb7794..d4a1e3028 100644
--- a/SignalServiceKit/src/Storage/OWSIncomingMessageFinder.h
+++ b/SignalServiceKit/src/Storage/OWSIncomingMessageFinder.h
@@ -14,7 +14,7 @@ NS_ASSUME_NONNULL_BEGIN
 /**
  * Must be called before using this finder.
  */
-- (void)asyncRegisterExtension;
++ (void)asyncRegisterExtensionWithStorageManager:(TSStorageManager *)storageManager;
 
 /**
  * Detects existance of a duplicate incoming message.
diff --git a/SignalServiceKit/src/Storage/OWSIncomingMessageFinder.m b/SignalServiceKit/src/Storage/OWSIncomingMessageFinder.m
index 854b61989..77492524a 100644
--- a/SignalServiceKit/src/Storage/OWSIncomingMessageFinder.m
+++ b/SignalServiceKit/src/Storage/OWSIncomingMessageFinder.m
@@ -62,7 +62,7 @@ NSString *const OWSIncomingMessageFinderColumnSourceDeviceId = @"OWSIncomingMess
 
 #pragma mark - YAP integration
 
-- (YapDatabaseSecondaryIndex *)indexExtension
++ (YapDatabaseSecondaryIndex *)indexExtension
 {
     YapDatabaseSecondaryIndexSetup *setup = [YapDatabaseSecondaryIndexSetup new];
 
@@ -92,21 +92,21 @@ NSString *const OWSIncomingMessageFinderColumnSourceDeviceId = @"OWSIncomingMess
     return [[YapDatabaseSecondaryIndex alloc] initWithSetup:setup handler:handler];
 }
 
-- (void)asyncRegisterExtension
++ (void)asyncRegisterExtensionWithStorageManager:(TSStorageManager *)storageManager
 {
     DDLogInfo(@"%@ registering async.", self.logTag);
-    [self.storageManager asyncRegisterExtension:self.indexExtension
-                                       withName:OWSIncomingMessageFinderExtensionName
-                                completionBlock:^(BOOL ready) {
-                                    DDLogInfo(@"%@ finished registering async.", self.logTag);
-                                }];
+    [storageManager asyncRegisterExtension:self.indexExtension
+                                  withName:OWSIncomingMessageFinderExtensionName
+                           completionBlock:^(BOOL ready) {
+                               DDLogInfo(@"%@ finished registering async.", self.logTag);
+                           }];
 }
 
 // We should not normally hit this, as we should have prefer registering async, but it is useful for testing.
 - (void)registerExtension
 {
     DDLogError(@"%@ registering SYNC. We should prefer async when possible.", self.logTag);
-    [self.storageManager registerExtension:self.indexExtension withName:OWSIncomingMessageFinderExtensionName];
+    [self.storageManager registerExtension:self.class.indexExtension withName:OWSIncomingMessageFinderExtensionName];
 }
 
 #pragma mark - instance methods
diff --git a/SignalServiceKit/src/Storage/TSStorageManager.h b/SignalServiceKit/src/Storage/TSStorageManager.h
index 3ae073a8a..642d499d5 100644
--- a/SignalServiceKit/src/Storage/TSStorageManager.h
+++ b/SignalServiceKit/src/Storage/TSStorageManager.h
@@ -3,7 +3,6 @@
 //
 
 #import "OWSStorage.h"
-#import "TSStorageKeys.h"
 
 NS_ASSUME_NONNULL_BEGIN
 
diff --git a/SignalServiceKit/src/Storage/TSStorageManager.m b/SignalServiceKit/src/Storage/TSStorageManager.m
index a389cd39d..23c7078a5 100644
--- a/SignalServiceKit/src/Storage/TSStorageManager.m
+++ b/SignalServiceKit/src/Storage/TSStorageManager.m
@@ -11,13 +11,8 @@
 #import "OWSFileSystem.h"
 #import "OWSIncomingMessageFinder.h"
 #import "OWSMessageReceiver.h"
-#import "SignalRecipient.h"
-#import "TSAttachmentStream.h"
 #import "TSDatabaseSecondaryIndexes.h"
 #import "TSDatabaseView.h"
-#import "TSInteraction.h"
-#import "TSThread.h"
-#import <YapDatabase/YapDatabaseRelationship.h>
 
 NS_ASSUME_NONNULL_BEGIN
 
@@ -110,14 +105,11 @@ NSString *const TSStorageManagerExceptionName_CouldNotCreateDatabaseDirectory
     [TSDatabaseView asyncRegisterThreadSpecialMessagesDatabaseView];
 
     // Register extensions which aren't essential for rendering threads async.
-    [[OWSIncomingMessageFinder new] asyncRegisterExtension];
+    [OWSIncomingMessageFinder asyncRegisterExtensionWithStorageManager:self];
     [TSDatabaseView asyncRegisterSecondaryDevicesDatabaseView];
     [OWSDisappearingMessagesFinder asyncRegisterDatabaseExtensions:self];
-    OWSFailedMessagesJob *failedMessagesJob = [[OWSFailedMessagesJob alloc] initWithStorageManager:self];
-    [failedMessagesJob asyncRegisterDatabaseExtensions];
-    OWSFailedAttachmentDownloadsJob *failedAttachmentDownloadsMessagesJob =
-        [[OWSFailedAttachmentDownloadsJob alloc] initWithStorageManager:self];
-    [failedAttachmentDownloadsMessagesJob asyncRegisterDatabaseExtensions];
+    [OWSFailedMessagesJob asyncRegisterDatabaseExtensionsWithStorageManager:self];
+    [OWSFailedAttachmentDownloadsJob asyncRegisterDatabaseExtensionsWithStorageManager:self];
 
     // NOTE: [TSDatabaseView asyncRegistrationCompletion] ensures that
     // DatabaseViewRegistrationCompleteNotification is not fired until all