diff --git a/.gitignore b/.gitignore
index 74819ac..17867fe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -118,3 +118,5 @@ run/
 !gradle-wrapper.jar
 /gradlew
 /gradlew.bat
+
+local.gradle
diff --git a/build.gradle b/build.gradle
index 6d7f27f..64aa638 100644
--- a/build.gradle
+++ b/build.gradle
@@ -46,4 +46,8 @@ shadowJar {
     relocate 'com.sparkjava', 'eu.mhsl.lib.shadow.spark-core'
 
     mergeServiceFiles()
-}
\ No newline at end of file
+}
+
+if (file("local.gradle").exists()) {
+    apply from: "local.gradle"
+}
diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/settings/Settings.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/settings/Settings.java
index 002744a..bb31285 100644
--- a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/settings/Settings.java
+++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/settings/Settings.java
@@ -107,6 +107,9 @@ public class Settings extends Appliance {
                     .filter(setting -> ((CategorizedSetting) setting).category().equals(category))
                     .toList();
 
+                //skip empty category rows
+                if(categorizedSettings.isEmpty()) return;
+
                 for(int i = 0; i < categorizedSettings.size(); i++) {
                     int slot = row.get() * 9 + i % 9;
                     inventory.setItem(slot, categorizedSettings.get(i).buildItem());
@@ -139,17 +142,23 @@ public class Settings extends Appliance {
         int countOfUncategorized = (int) settings.stream()
             .filter(setting -> !(setting instanceof CategorizedSetting))
             .count();
+        int rowsOfUncategorized = (int) Math.ceil((double) countOfUncategorized / 9);
 
-        return Arrays.stream(SettingCategory.values())
+        int rowsOfCategorized = Arrays.stream(SettingCategory.values())
             .map(settingCategory -> settings.stream()
                 .filter(setting -> setting instanceof CategorizedSetting)
                 .map(setting -> (CategorizedSetting) setting)
                 .filter(categorizedSetting -> categorizedSetting.category().equals(settingCategory))
                 .count())
-            .map(itemCount -> itemCount + countOfUncategorized)
             .map(itemCount -> (int) Math.ceil((double) itemCount / 9))
             .reduce(Integer::sum)
             .orElse(1) * 9;
+
+        int rows = rowsOfUncategorized + rowsOfCategorized;
+        if(rows % 9 != 0) throw new IllegalStateException(
+            String.format("Failed to calculate settings inventory size. %d is not an multiple of 9", rows)
+        );
+        return rows;
     }
 
     public void onSettingsClose(Player player) {
diff --git a/core/src/main/java/eu/mhsl/craftattack/core/Main.java b/core/src/main/java/eu/mhsl/craftattack/core/Main.java
index d2d84f0..a232c7d 100644
--- a/core/src/main/java/eu/mhsl/craftattack/core/Main.java
+++ b/core/src/main/java/eu/mhsl/craftattack/core/Main.java
@@ -66,8 +66,10 @@ public final class Main extends JavaPlugin {
         });
         Main.logger().info(String.format("Initialized %d appliances!", this.appliances.size()));
 
-        Main.logger().info("Starting HTTP API...");
-        new HttpServer();
+        if(Configuration.pluginConfig.getBoolean("httpServerEnabled", true)) {
+            Main.logger().info("Starting HTTP API...");
+            new HttpServer();
+        }
 
         this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
         Main.logger().info("Startup complete!");
diff --git a/core/src/main/resources/config.yml b/core/src/main/resources/config.yml
index cb8870b..57faf93 100644
--- a/core/src/main/resources/config.yml
+++ b/core/src/main/resources/config.yml
@@ -1,4 +1,5 @@
 plugin:
+  httpServerEnabled: true
   disabledAppliances:
     - NameOfApplianceClass