diff --git a/app/Config/app.php b/app/Config/app.php
index 738aacdbc..98f83fc39 100644
--- a/app/Config/app.php
+++ b/app/Config/app.php
@@ -114,6 +114,8 @@ return [
         Illuminate\Foundation\Providers\FoundationServiceProvider::class,
         Illuminate\Hashing\HashServiceProvider::class,
         Illuminate\Mail\MailServiceProvider::class,
+        Illuminate\Notifications\NotificationServiceProvider::class,
+        Illuminate\Pagination\PaginationServiceProvider::class,
         Illuminate\Pipeline\PipelineServiceProvider::class,
         Illuminate\Queue\QueueServiceProvider::class,
         Illuminate\Redis\RedisServiceProvider::class,
@@ -121,27 +123,22 @@ return [
         Illuminate\Session\SessionServiceProvider::class,
         Illuminate\Validation\ValidationServiceProvider::class,
         Illuminate\View\ViewServiceProvider::class,
-        Illuminate\Notifications\NotificationServiceProvider::class,
-        SocialiteProviders\Manager\ServiceProvider::class,
 
         // Third party service providers
-        Intervention\Image\ImageServiceProvider::class,
         Barryvdh\DomPDF\ServiceProvider::class,
         Barryvdh\Snappy\ServiceProvider::class,
-
-        // BookStack replacement service providers (Extends Laravel)
-        BookStack\Providers\PaginationServiceProvider::class,
-        BookStack\Providers\TranslationServiceProvider::class,
+        Intervention\Image\ImageServiceProvider::class,
+        SocialiteProviders\Manager\ServiceProvider::class,
 
         // BookStack custom service providers
         BookStack\Providers\ThemeServiceProvider::class,
-        BookStack\Providers\AuthServiceProvider::class,
         BookStack\Providers\AppServiceProvider::class,
-        BookStack\Providers\BroadcastServiceProvider::class,
+        BookStack\Providers\AuthServiceProvider::class,
         BookStack\Providers\EventServiceProvider::class,
         BookStack\Providers\RouteServiceProvider::class,
-        BookStack\Providers\CustomFacadeProvider::class,
-        BookStack\Providers\CustomValidationServiceProvider::class,
+        BookStack\Providers\TranslationServiceProvider::class,
+        BookStack\Providers\ValidationRuleServiceProvider::class,
+        BookStack\Providers\ViewTweaksServiceProvider::class,
     ],
 
     /*
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index 3c1212e32..d0841059b 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -2,32 +2,44 @@
 
 namespace BookStack\Providers;
 
-use BookStack\Auth\Access\LoginService;
+use BookStack\Actions\ActivityLogger;
 use BookStack\Auth\Access\SocialAuthService;
-use BookStack\Entities\BreadcrumbsViewComposer;
 use BookStack\Entities\Models\Book;
 use BookStack\Entities\Models\Bookshelf;
 use BookStack\Entities\Models\Chapter;
 use BookStack\Entities\Models\Page;
 use BookStack\Exceptions\WhoopsBookStackPrettyHandler;
-use BookStack\Settings\Setting;
 use BookStack\Settings\SettingService;
 use BookStack\Util\CspService;
 use GuzzleHttp\Client;
-use Illuminate\Contracts\Cache\Repository;
 use Illuminate\Database\Eloquent\Relations\Relation;
-use Illuminate\Pagination\Paginator;
-use Illuminate\Support\Facades\Blade;
 use Illuminate\Support\Facades\Schema;
 use Illuminate\Support\Facades\URL;
-use Illuminate\Support\Facades\View;
 use Illuminate\Support\ServiceProvider;
-use Laravel\Socialite\Contracts\Factory as SocialiteFactory;
 use Psr\Http\Client\ClientInterface as HttpClientInterface;
 use Whoops\Handler\HandlerInterface;
 
 class AppServiceProvider extends ServiceProvider
 {
+    /**
+     * Custom container bindings to register.
+     * @var string[]
+     */
+    public $bindings = [
+        HandlerInterface::class => WhoopsBookStackPrettyHandler::class,
+    ];
+
+    /**
+     * Custom singleton bindings to register.
+     * @var string[]
+     */
+    public $singletons = [
+        'activity' => ActivityLogger::class,
+        SettingService::class => SettingService::class,
+        SocialAuthService::class => SocialAuthService::class,
+        CspService::class => CspService::class,
+    ];
+
     /**
      * Bootstrap any application services.
      *
@@ -43,11 +55,6 @@ class AppServiceProvider extends ServiceProvider
             URL::forceScheme($isHttps ? 'https' : 'http');
         }
 
-        // Custom blade view directives
-        Blade::directive('icon', function ($expression) {
-            return "<?php echo icon($expression); ?>";
-        });
-
         // Allow longer string lengths after upgrade to utf8mb4
         Schema::defaultStringLength(191);
 
@@ -58,12 +65,6 @@ class AppServiceProvider extends ServiceProvider
             'chapter'   => Chapter::class,
             'page'      => Page::class,
         ]);
-
-        // View Composers
-        View::composer('entities.breadcrumbs', BreadcrumbsViewComposer::class);
-
-        // Set paginator to use bootstrap-style pagination
-        Paginator::useBootstrap();
     }
 
     /**
@@ -73,22 +74,6 @@ class AppServiceProvider extends ServiceProvider
      */
     public function register()
     {
-        $this->app->bind(HandlerInterface::class, function ($app) {
-            return $app->make(WhoopsBookStackPrettyHandler::class);
-        });
-
-        $this->app->singleton(SettingService::class, function ($app) {
-            return new SettingService($app->make(Setting::class), $app->make(Repository::class));
-        });
-
-        $this->app->singleton(SocialAuthService::class, function ($app) {
-            return new SocialAuthService($app->make(SocialiteFactory::class), $app->make(LoginService::class));
-        });
-
-        $this->app->singleton(CspService::class, function ($app) {
-            return new CspService();
-        });
-
         $this->app->bind(HttpClientInterface::class, function ($app) {
             return new Client([
                 'timeout' => 3,
diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php
index a4022cc50..5e16179ab 100644
--- a/app/Providers/AuthServiceProvider.php
+++ b/app/Providers/AuthServiceProvider.php
@@ -24,9 +24,7 @@ class AuthServiceProvider extends ServiceProvider
     {
         // Password Configuration
         // Changes here must be reflected in ApiDocsGenerate@getValidationAsString.
-        Password::defaults(function () {
-            return Password::min(8);
-        });
+        Password::defaults(fn () => Password::min(8));
 
         // Custom guards
         Auth::extend('api-token', function ($app, $name, array $config) {
diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php
deleted file mode 100644
index 69925e945..000000000
--- a/app/Providers/BroadcastServiceProvider.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-namespace BookStack\Providers;
-
-use Illuminate\Support\ServiceProvider;
-
-class BroadcastServiceProvider extends ServiceProvider
-{
-    /**
-     * Bootstrap any application services.
-     *
-     * @return void
-     */
-    public function boot()
-    {
-//        Broadcast::routes();
-//
-//        /*
-//         * Authenticate the user's personal channel...
-//         */
-//        Broadcast::channel('BookStack.User.*', function ($user, $userId) {
-//            return (int) $user->id === (int) $userId;
-//        });
-    }
-}
diff --git a/app/Providers/CustomFacadeProvider.php b/app/Providers/CustomFacadeProvider.php
deleted file mode 100644
index 6ba5632e6..000000000
--- a/app/Providers/CustomFacadeProvider.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-namespace BookStack\Providers;
-
-use BookStack\Actions\ActivityLogger;
-use BookStack\Theming\ThemeService;
-use Illuminate\Support\ServiceProvider;
-
-class CustomFacadeProvider extends ServiceProvider
-{
-    /**
-     * Bootstrap the application services.
-     *
-     * @return void
-     */
-    public function boot()
-    {
-        //
-    }
-
-    /**
-     * Register the application services.
-     *
-     * @return void
-     */
-    public function register()
-    {
-        $this->app->singleton('activity', function () {
-            return $this->app->make(ActivityLogger::class);
-        });
-
-        $this->app->singleton('theme', function () {
-            return $this->app->make(ThemeService::class);
-        });
-    }
-}
diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php
index 659843ce3..0edc7f09c 100644
--- a/app/Providers/EventServiceProvider.php
+++ b/app/Providers/EventServiceProvider.php
@@ -10,7 +10,7 @@ class EventServiceProvider extends ServiceProvider
     /**
      * The event listener mappings for the application.
      *
-     * @var array
+     * @var array<class-string, array<int, class-string>>
      */
     protected $listen = [
         SocialiteWasCalled::class => [
diff --git a/app/Providers/PaginationServiceProvider.php b/app/Providers/PaginationServiceProvider.php
deleted file mode 100644
index 416aa5f34..000000000
--- a/app/Providers/PaginationServiceProvider.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace BookStack\Providers;
-
-use Illuminate\Pagination\PaginationServiceProvider as IlluminatePaginationServiceProvider;
-use Illuminate\Pagination\Paginator;
-
-class PaginationServiceProvider extends IlluminatePaginationServiceProvider
-{
-    /**
-     * Register the service provider.
-     *
-     * @return void
-     */
-    public function register()
-    {
-        Paginator::viewFactoryResolver(function () {
-            return $this->app['view'];
-        });
-
-        Paginator::currentPathResolver(function () {
-            return url($this->app['request']->path());
-        });
-
-        Paginator::currentPageResolver(function ($pageName = 'page') {
-            $page = $this->app['request']->input($pageName);
-
-            if (filter_var($page, FILTER_VALIDATE_INT) !== false && (int) $page >= 1) {
-                return $page;
-            }
-
-            return 1;
-        });
-    }
-}
diff --git a/app/Providers/ThemeServiceProvider.php b/app/Providers/ThemeServiceProvider.php
index 54c83884a..50c4a5d19 100644
--- a/app/Providers/ThemeServiceProvider.php
+++ b/app/Providers/ThemeServiceProvider.php
@@ -15,9 +15,8 @@ class ThemeServiceProvider extends ServiceProvider
      */
     public function register()
     {
-        $this->app->singleton(ThemeService::class, function ($app) {
-            return new ThemeService();
-        });
+        // Register the ThemeService as a singleton
+        $this->app->singleton(ThemeService::class, fn ($app) => new ThemeService());
     }
 
     /**
@@ -27,6 +26,7 @@ class ThemeServiceProvider extends ServiceProvider
      */
     public function boot()
     {
+        // Boot up the theme system
         $themeService = $this->app->make(ThemeService::class);
         $themeService->readThemeActions();
         $themeService->dispatch(ThemeEvents::APP_BOOT, $this->app);
diff --git a/app/Providers/CustomValidationServiceProvider.php b/app/Providers/ValidationRuleServiceProvider.php
similarity index 93%
rename from app/Providers/CustomValidationServiceProvider.php
rename to app/Providers/ValidationRuleServiceProvider.php
index ac95099cc..928918dc7 100644
--- a/app/Providers/CustomValidationServiceProvider.php
+++ b/app/Providers/ValidationRuleServiceProvider.php
@@ -6,7 +6,7 @@ use BookStack\Uploads\ImageService;
 use Illuminate\Support\Facades\Validator;
 use Illuminate\Support\ServiceProvider;
 
-class CustomValidationServiceProvider extends ServiceProvider
+class ValidationRuleServiceProvider extends ServiceProvider
 {
     /**
      * Register our custom validation rules when the application boots.
diff --git a/app/Providers/ViewTweaksServiceProvider.php b/app/Providers/ViewTweaksServiceProvider.php
new file mode 100644
index 000000000..f1f1554ae
--- /dev/null
+++ b/app/Providers/ViewTweaksServiceProvider.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace BookStack\Providers;
+
+use BookStack\Entities\BreadcrumbsViewComposer;
+use Illuminate\Pagination\Paginator;
+use Illuminate\Support\Facades\Blade;
+use Illuminate\Support\Facades\View;
+use Illuminate\Support\ServiceProvider;
+
+class ViewTweaksServiceProvider extends ServiceProvider
+{
+    /**
+     * Bootstrap services.
+     *
+     * @return void
+     */
+    public function boot()
+    {
+        // Set paginator to use bootstrap-style pagination
+        Paginator::useBootstrap();
+
+        // View Composers
+        View::composer('entities.breadcrumbs', BreadcrumbsViewComposer::class);
+
+        // Custom blade view directives
+        Blade::directive('icon', function ($expression) {
+            return "<?php echo icon($expression); ?>";
+        });
+    }
+}