diff --git a/src/Boyfriend.cs b/src/Boyfriend.cs
index 0731ccd..d1c4f7a 100644
--- a/src/Boyfriend.cs
+++ b/src/Boyfriend.cs
@@ -1,4 +1,5 @@
 using Boyfriend.Commands;
+using Boyfriend.Commands.Events;
 using Boyfriend.Services;
 using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.DependencyInjection;
@@ -71,7 +72,7 @@ public class Boyfriend {
                         .AddInteractivity()
                         .AddInteractionGroup<InteractionResponders>()
                         // Slash command event handlers
-                        .AddPreparationErrorEvent<ErrorLoggingPreparationErrorEvent>()
+                        .AddPreparationErrorEvent<LoggingPreparationErrorEvent>()
                         .AddPostExecutionEvent<ErrorLoggingPostExecutionEvent>()
                         // Services
                         .AddSingleton<GuildDataService>()
diff --git a/src/Commands/ErrorLoggingEvents.cs b/src/Commands/Events/ErrorLoggingPostExecutionEvent.cs
similarity index 51%
rename from src/Commands/ErrorLoggingEvents.cs
rename to src/Commands/Events/ErrorLoggingPostExecutionEvent.cs
index c5eba21..51c2a8d 100644
--- a/src/Commands/ErrorLoggingEvents.cs
+++ b/src/Commands/Events/ErrorLoggingPostExecutionEvent.cs
@@ -5,38 +5,7 @@ using Remora.Discord.Commands.Extensions;
 using Remora.Discord.Commands.Services;
 using Remora.Results;
 
-namespace Boyfriend.Commands;
-
-/// <summary>
-///     Handles error logging for slash commands that couldn't be successfully prepared.
-/// </summary>
-[UsedImplicitly]
-public class ErrorLoggingPreparationErrorEvent : IPreparationErrorEvent {
-    private readonly ILogger<ErrorLoggingPreparationErrorEvent> _logger;
-
-    public ErrorLoggingPreparationErrorEvent(ILogger<ErrorLoggingPreparationErrorEvent> logger) {
-        _logger = logger;
-    }
-
-    /// <summary>
-    ///     Logs a warning using the injected <see cref="ILogger" /> if the <paramref name="preparationResult" /> has not
-    ///     succeeded.
-    /// </summary>
-    /// <param name="context">The context of the slash command. Unused.</param>
-    /// <param name="preparationResult">The result whose success is checked.</param>
-    /// <param name="ct">The cancellation token for this operation. Unused.</param>
-    /// <returns>A result which has succeeded.</returns>
-    public Task<Result> PreparationFailed(
-        IOperationContext context, IResult preparationResult, CancellationToken ct = default) {
-        if (!preparationResult.IsSuccess && !preparationResult.Error.IsUserOrEnvironmentError()) {
-            _logger.LogWarning("Error in slash command preparation.\n{ErrorMessage}", preparationResult.Error.Message);
-            if (preparationResult.Error is ExceptionError exerr)
-                _logger.LogError(exerr.Exception, "An exception has been thrown");
-        }
-
-        return Task.FromResult(Result.FromSuccess());
-    }
-}
+namespace Boyfriend.Commands.Events;
 
 /// <summary>
 ///     Handles error logging for slash command groups.
diff --git a/src/Commands/Events/LoggingPreparationErrorEvent.cs b/src/Commands/Events/LoggingPreparationErrorEvent.cs
new file mode 100644
index 0000000..7e8b2bb
--- /dev/null
+++ b/src/Commands/Events/LoggingPreparationErrorEvent.cs
@@ -0,0 +1,39 @@
+using JetBrains.Annotations;
+using Microsoft.Extensions.Logging;
+using Remora.Discord.Commands.Contexts;
+using Remora.Discord.Commands.Extensions;
+using Remora.Discord.Commands.Services;
+using Remora.Results;
+
+namespace Boyfriend.Commands.Events;
+
+/// <summary>
+///     Handles error logging for slash commands that couldn't be successfully prepared.
+/// </summary>
+[UsedImplicitly]
+public class LoggingPreparationErrorEvent : IPreparationErrorEvent {
+    private readonly ILogger<LoggingPreparationErrorEvent> _logger;
+
+    public LoggingPreparationErrorEvent(ILogger<LoggingPreparationErrorEvent> logger) {
+        _logger = logger;
+    }
+
+    /// <summary>
+    ///     Logs a warning using the injected <see cref="ILogger" /> if the <paramref name="preparationResult" /> has not
+    ///     succeeded.
+    /// </summary>
+    /// <param name="context">The context of the slash command. Unused.</param>
+    /// <param name="preparationResult">The result whose success is checked.</param>
+    /// <param name="ct">The cancellation token for this operation. Unused.</param>
+    /// <returns>A result which has succeeded.</returns>
+    public Task<Result> PreparationFailed(
+        IOperationContext context, IResult preparationResult, CancellationToken ct = default) {
+        if (!preparationResult.IsSuccess && !preparationResult.Error.IsUserOrEnvironmentError()) {
+            _logger.LogWarning("Error in slash command preparation.\n{ErrorMessage}", preparationResult.Error.Message);
+            if (preparationResult.Error is ExceptionError exerr)
+                _logger.LogError(exerr.Exception, "An exception has been thrown");
+        }
+
+        return Task.FromResult(Result.FromSuccess());
+    }
+}