diff --git a/build.gradle b/build.gradle
index 2e6f0b6..f324caf 100644
--- a/build.gradle
+++ b/build.gradle
@@ -26,6 +26,7 @@ dependencies {
     compileOnly 'org.geysermc.floodgate:api:2.2.2-SNAPSHOT'
     implementation 'org.apache.httpcomponents:httpclient:4.5.14'
     implementation 'com.sparkjava:spark-core:2.9.4'
+    implementation 'org.reflections:reflections:0.10.2'
 }
 
 def targetJavaVersion = 21
diff --git a/src/main/java/eu/mhsl/craftattack/spawn/Main.java b/src/main/java/eu/mhsl/craftattack/spawn/Main.java
index 833ba41..56d8198 100644
--- a/src/main/java/eu/mhsl/craftattack/spawn/Main.java
+++ b/src/main/java/eu/mhsl/craftattack/spawn/Main.java
@@ -2,47 +2,17 @@ package eu.mhsl.craftattack.spawn;
 
 import eu.mhsl.craftattack.spawn.api.HttpServer;
 import eu.mhsl.craftattack.spawn.appliance.Appliance;
-import eu.mhsl.craftattack.spawn.appliances.antiSignEdit.AntiSignEdit;
-import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarker;
-import eu.mhsl.craftattack.spawn.appliances.autoShulker.AutoShulker;
-import eu.mhsl.craftattack.spawn.appliances.chatMention.ChatMention;
-import eu.mhsl.craftattack.spawn.appliances.chatMessages.ChatMessages;
-import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements;
-import eu.mhsl.craftattack.spawn.appliances.debug.Debug;
-import eu.mhsl.craftattack.spawn.appliances.displayName.DisplayName;
-import eu.mhsl.craftattack.spawn.appliances.doubeDoor.DoubleDoor;
-import eu.mhsl.craftattack.spawn.appliances.event.Event;
-import eu.mhsl.craftattack.spawn.appliances.fleischerchest.Fleischerchest;
-import eu.mhsl.craftattack.spawn.appliances.glowingBerries.GlowingBerries;
-import eu.mhsl.craftattack.spawn.appliances.help.Help;
-import eu.mhsl.craftattack.spawn.appliances.hotbarRefill.HotbarRefill;
-import eu.mhsl.craftattack.spawn.appliances.kick.Kick;
-import eu.mhsl.craftattack.spawn.appliances.knockDoor.KnockDoor;
-import eu.mhsl.craftattack.spawn.appliances.maintenance.Maintenance;
-import eu.mhsl.craftattack.spawn.appliances.optionLinks.OptionLinks;
-import eu.mhsl.craftattack.spawn.appliances.outlawed.Outlawed;
-import eu.mhsl.craftattack.spawn.appliances.packSelect.PackSelect;
-import eu.mhsl.craftattack.spawn.appliances.panicBan.PanicBan;
-import eu.mhsl.craftattack.spawn.appliances.playerlimit.PlayerLimit;
-import eu.mhsl.craftattack.spawn.appliances.portableCrafting.PortableCrafting;
-import eu.mhsl.craftattack.spawn.appliances.projectStart.ProjectStart;
-import eu.mhsl.craftattack.spawn.appliances.report.Report;
-import eu.mhsl.craftattack.spawn.appliances.restart.Restart;
-import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
-import eu.mhsl.craftattack.spawn.appliances.tablist.Tablist;
-import eu.mhsl.craftattack.spawn.appliances.titleClear.TitleClear;
-import eu.mhsl.craftattack.spawn.appliances.whitelist.Whitelist;
-import eu.mhsl.craftattack.spawn.appliances.worldmuseum.WorldMuseum;
-import eu.mhsl.craftattack.spawn.appliances.yearRank.YearRank;
 import eu.mhsl.craftattack.spawn.config.Configuration;
 import org.bukkit.Bukkit;
 import org.bukkit.event.HandlerList;
 import org.bukkit.plugin.java.JavaPlugin;
+import org.reflections.Reflections;
 
 import java.lang.reflect.ParameterizedType;
 import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
 import java.util.logging.Logger;
-import java.util.stream.Stream;
 
 public final class Main extends JavaPlugin {
     private static Main instance;
@@ -56,59 +26,46 @@ public final class Main extends JavaPlugin {
         instance = this;
         logger = instance().getLogger();
         saveDefaultConfig();
-        Configuration.readConfig();
+        try {
+            this.wrappedEnable();
+        } catch (Exception e) {
+            Main.logger().log(Level.SEVERE, "Error while initializing Spawn plugin, shutting down!", e);
+            Bukkit.shutdown();
+        }
+    }
 
+    private void wrappedEnable() {
+        Configuration.readConfig();
         List<String> disabledAppliances = Configuration.pluginConfig.getStringList("disabledAppliances");
-        this.appliances = Stream.of(
-            new AdminMarker(),
-            new WorldMuseum(),
-            new TitleClear(),
-            new ProjectStart(),
-            new Tablist(),
-            new ChatMessages(),
-            new Report(),
-            new Event(),
-            new Help(),
-            new PlayerLimit(),
-            new Whitelist(),
-            new Restart(),
-            new Kick(),
-            new PanicBan(),
-            new Outlawed(),
-            new DisplayName(),
-            new Debug(),
-            new Fleischerchest(),
-            new CustomAdvancements(),
-            new Settings(),
-            new PortableCrafting(),
-            new AutoShulker(),
-            new AntiSignEdit(),
-            new HotbarRefill(),
-            new ChatMention(),
-            new DoubleDoor(),
-            new KnockDoor(),
-            new PackSelect(),
-            new GlowingBerries(),
-            new Maintenance(),
-            new OptionLinks(),
-            new YearRank()
-        )
-            .filter(appliance -> disabledAppliances.stream()
-                .noneMatch(s -> s.equalsIgnoreCase(appliance.getClass().getSimpleName())))
-            .toList();
 
         Main.logger.info("Loading appliances...");
-        appliances.forEach(appliance -> {
-            Main.logger().info("Enabling " + appliance.getClass().getSimpleName());
+        Reflections reflections = new Reflections(this.getClass().getPackageName());
+        Set<Class<? extends Appliance>> applianceClasses = reflections.getSubTypesOf(Appliance.class);
+
+        this.appliances = applianceClasses.stream()
+            .filter(applianceClass -> !disabledAppliances.contains(applianceClass.getSimpleName()))
+            .map(applianceClass -> {
+                try {
+                    return (Appliance) applianceClass.getDeclaredConstructor().newInstance();
+                } catch (Exception e) {
+                    throw new RuntimeException(String.format("Failed to create instance of '%s'", applianceClass.getName()), e);
+                }
+            })
+            .toList();
+        Main.logger().info(String.format("Loaded %d appliances!", appliances.size()));
+
+        Main.logger().info("Initializing appliances...");
+        this.appliances.forEach(appliance -> {
             appliance.onEnable();
             appliance.initialize(this);
         });
-        Main.logger().info("Loaded " + appliances.size() + " appliances!");
+        Main.logger().info(String.format("Initialized %d appliances!", appliances.size()));
 
-        Main.logger().info("Starting HTTP API");
+        Main.logger().info("Starting HTTP API...");
         this.httpApi = new HttpServer();
 
         getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
+        Main.logger().info("Startup complete!");
     }
 
     @Override