diff --git a/src/main/java/com/minelittlepony/unicopia/IKeyBinding.java b/src/main/java/com/minelittlepony/unicopia/IKeyBinding.java
new file mode 100644
index 00000000..f79bbe4b
--- /dev/null
+++ b/src/main/java/com/minelittlepony/unicopia/IKeyBinding.java
@@ -0,0 +1,9 @@
+package com.minelittlepony.unicopia;
+
+public interface IKeyBinding {
+    String getKeyCategory();
+
+    String getKeyName();
+
+    int getKeyCode();
+}
diff --git a/src/main/java/com/minelittlepony/unicopia/IKeyBindingHandler.java b/src/main/java/com/minelittlepony/unicopia/IKeyBindingHandler.java
deleted file mode 100644
index 97e4e060..00000000
--- a/src/main/java/com/minelittlepony/unicopia/IKeyBindingHandler.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.minelittlepony.unicopia;
-
-public interface IKeyBindingHandler {
-
-    void addKeybind(IKeyBinding bind);
-
-    default void onKeyInput() {
-
-    }
-
-    public interface IKeyBinding {
-        String getKeyCategory();
-
-        String getKeyName();
-
-        int getKeyCode();
-    }
-}
diff --git a/src/main/java/com/minelittlepony/unicopia/InteractionManager.java b/src/main/java/com/minelittlepony/unicopia/InteractionManager.java
index e3e3c5d5..825c5596 100644
--- a/src/main/java/com/minelittlepony/unicopia/InteractionManager.java
+++ b/src/main/java/com/minelittlepony/unicopia/InteractionManager.java
@@ -12,9 +12,10 @@ import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.server.world.ServerWorld;
 
 public class InteractionManager {
+    public static InteractionManager instance = new InteractionManager();
 
     public static InteractionManager instance() {
-        return UnicopiaCore.interactionManager;
+        return instance;
     }
 
     public boolean isClientPlayer(@Nullable PlayerEntity player) {
diff --git a/src/main/java/com/minelittlepony/unicopia/UnicopiaCore.java b/src/main/java/com/minelittlepony/unicopia/UnicopiaCore.java
index 2a9d3586..12374b01 100644
--- a/src/main/java/com/minelittlepony/unicopia/UnicopiaCore.java
+++ b/src/main/java/com/minelittlepony/unicopia/UnicopiaCore.java
@@ -27,8 +27,6 @@ public class UnicopiaCore implements ModInitializer {
 
     public static final Logger LOGGER = LogManager.getLogger();
 
-    public static InteractionManager interactionManager = new InteractionManager();
-
     private static Channel channel;
 
     public static Channel getConnection() {
diff --git a/src/main/java/com/minelittlepony/unicopia/ability/IPower.java b/src/main/java/com/minelittlepony/unicopia/ability/IPower.java
index 832b84cf..05f1c5f7 100644
--- a/src/main/java/com/minelittlepony/unicopia/ability/IPower.java
+++ b/src/main/java/com/minelittlepony/unicopia/ability/IPower.java
@@ -2,13 +2,13 @@ package com.minelittlepony.unicopia.ability;
 
 import javax.annotation.Nullable;
 
-import com.minelittlepony.unicopia.IKeyBindingHandler;
+import com.minelittlepony.unicopia.IKeyBinding;
 import com.minelittlepony.unicopia.Race;
 import com.minelittlepony.unicopia.entity.player.IPlayer;
 
 import net.minecraft.world.World;
 
-public interface IPower<T extends IPower.IData> extends IKeyBindingHandler.IKeyBinding {
+public interface IPower<T extends IPower.IData> extends IKeyBinding {
 
     @Override
     default String getKeyCategory() {
@@ -20,7 +20,6 @@ public interface IPower<T extends IPower.IData> extends IKeyBindingHandler.IKeyB
      */
     int getWarmupTime(IPlayer player);
 
-
     /**
      * Returns the number of ticks allowed for cooldown
      */
diff --git a/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java b/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java
index b814d38a..bfbd0e29 100644
--- a/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java
+++ b/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java
@@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.client;
 import java.util.HashSet;
 import java.util.Set;
 
-import com.minelittlepony.unicopia.IKeyBindingHandler;
+import com.minelittlepony.unicopia.IKeyBinding;
 import com.minelittlepony.unicopia.SpeciesList;
 import com.minelittlepony.unicopia.UnicopiaCore;
 import com.minelittlepony.unicopia.ability.PowersRegistry;
@@ -17,7 +17,7 @@ import net.minecraft.client.util.InputUtil;
 import net.minecraft.util.Identifier;
 
 
-class KeyBindingsHandler implements IKeyBindingHandler {
+class KeyBindingsHandler {
     private final MinecraftClient client = MinecraftClient.getInstance();
 
     private final Set<KeyBinding> bindings = new HashSet<>();
@@ -25,7 +25,6 @@ class KeyBindingsHandler implements IKeyBindingHandler {
 
     private final Set<KeyBinding> pressed = new HashSet<>();
 
-    @Override
     public void addKeybind(IKeyBinding p) {
         KeyBindingRegistry.INSTANCE.addCategory(p.getKeyCategory());
 
@@ -35,7 +34,6 @@ class KeyBindingsHandler implements IKeyBindingHandler {
         bindings.add(b);
     }
 
-    @Override
     public void onKeyInput() {
         if (client.currentScreen != null
             || client.player == null) {
diff --git a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaCoreClient.java b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaCoreClient.java
index fa4a2bf2..dfa4c84a 100644
--- a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaCoreClient.java
+++ b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaCoreClient.java
@@ -8,7 +8,6 @@ import javax.annotation.Nullable;
 import com.minelittlepony.common.event.ClientReadyCallback;
 import com.minelittlepony.jumpingcastle.api.Target;
 import com.minelittlepony.unicopia.Config;
-import com.minelittlepony.unicopia.IKeyBindingHandler;
 import com.minelittlepony.unicopia.InteractionManager;
 import com.minelittlepony.unicopia.Race;
 import com.minelittlepony.unicopia.SpeciesList;
@@ -43,7 +42,7 @@ import net.minecraft.world.ExtendedBlockView;
 
 public class UnicopiaCoreClient extends InteractionManager implements ClientModInitializer {
 
-    private final IKeyBindingHandler keyboard = new KeyBindingsHandler();
+    private final KeyBindingsHandler keyboard = new KeyBindingsHandler();
 
     /**
      * The race preferred by the client - as determined by mine little pony.
@@ -140,7 +139,7 @@ public class UnicopiaCoreClient extends InteractionManager implements ClientModI
     @Override
     public void onInitializeClient() {
         clientPlayerRace = getclientPlayerRace();
-        UnicopiaCore.interactionManager = this;
+        InteractionManager.instance = this;
 
         ClientTickCallback.EVENT.register(this::tick);
         ClientReadyCallback.EVENT.register(client -> {
diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/AbstractAttachableSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/AbstractAttachableSpell.java
index dac65afc..9dd53b43 100644
--- a/src/main/java/com/minelittlepony/unicopia/magic/spell/AbstractAttachableSpell.java
+++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/AbstractAttachableSpell.java
@@ -6,7 +6,6 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import com.minelittlepony.unicopia.entity.SpellcastEntity;
-import com.minelittlepony.unicopia.magic.AbstractSpell;
 import com.minelittlepony.unicopia.magic.ICaster;
 
 import net.minecraft.entity.Entity;
diff --git a/src/main/java/com/minelittlepony/unicopia/magic/AbstractSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/AbstractSpell.java
similarity index 92%
rename from src/main/java/com/minelittlepony/unicopia/magic/AbstractSpell.java
rename to src/main/java/com/minelittlepony/unicopia/magic/spell/AbstractSpell.java
index 9032b7c4..eecf1340 100644
--- a/src/main/java/com/minelittlepony/unicopia/magic/AbstractSpell.java
+++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/AbstractSpell.java
@@ -1,4 +1,7 @@
-package com.minelittlepony.unicopia.magic;
+package com.minelittlepony.unicopia.magic.spell;
+
+import com.minelittlepony.unicopia.magic.ICaster;
+import com.minelittlepony.unicopia.magic.IMagicEffect;
 
 import net.minecraft.nbt.CompoundTag;
 
diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/AwkwardSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/AwkwardSpell.java
index 96a675e0..45feb678 100644
--- a/src/main/java/com/minelittlepony/unicopia/magic/spell/AwkwardSpell.java
+++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/AwkwardSpell.java
@@ -5,7 +5,6 @@ import java.util.List;
 
 import javax.annotation.Nullable;
 
-import com.minelittlepony.unicopia.magic.AbstractSpell;
 import com.minelittlepony.unicopia.magic.Affinity;
 import com.minelittlepony.unicopia.magic.CastResult;
 import com.minelittlepony.unicopia.magic.CasterUtils;
diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/ChangelingTrapSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/ChangelingTrapSpell.java
index 809762fd..685f21eb 100644
--- a/src/main/java/com/minelittlepony/unicopia/magic/spell/ChangelingTrapSpell.java
+++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/ChangelingTrapSpell.java
@@ -7,7 +7,6 @@ import com.minelittlepony.unicopia.UEntities;
 import com.minelittlepony.unicopia.USounds;
 import com.minelittlepony.unicopia.entity.CuccoonEntity;
 import com.minelittlepony.unicopia.entity.IMagicals;
-import com.minelittlepony.unicopia.magic.AbstractSpell;
 import com.minelittlepony.unicopia.magic.Affinity;
 import com.minelittlepony.unicopia.magic.CasterUtils;
 import com.minelittlepony.unicopia.magic.IAttachedEffect;
diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/DisguiseSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/DisguiseSpell.java
index 52b7e86f..a0f63b48 100644
--- a/src/main/java/com/minelittlepony/unicopia/magic/spell/DisguiseSpell.java
+++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/DisguiseSpell.java
@@ -13,7 +13,6 @@ import com.minelittlepony.unicopia.ability.IFlyingPredicate;
 import com.minelittlepony.unicopia.ability.IHeightPredicate;
 import com.minelittlepony.unicopia.entity.Owned;
 import com.minelittlepony.unicopia.entity.player.IPlayer;
-import com.minelittlepony.unicopia.magic.AbstractSpell;
 import com.minelittlepony.unicopia.magic.Affinity;
 import com.minelittlepony.unicopia.magic.CasterUtils;
 import com.minelittlepony.unicopia.magic.IAttachedEffect;
diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/FaithfulAssistantSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/FaithfulAssistantSpell.java
index a1f45651..06187bb2 100644
--- a/src/main/java/com/minelittlepony/unicopia/magic/spell/FaithfulAssistantSpell.java
+++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/FaithfulAssistantSpell.java
@@ -4,7 +4,6 @@ import javax.annotation.Nullable;
 
 import com.minelittlepony.unicopia.entity.SpellcastEntity;
 import com.minelittlepony.unicopia.entity.ai.FollowCasterGoal;
-import com.minelittlepony.unicopia.magic.AbstractSpell;
 import com.minelittlepony.unicopia.magic.Affinity;
 import com.minelittlepony.unicopia.magic.ICaster;
 import com.minelittlepony.unicopia.magic.IMagicEffect;
diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/FireSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/FireSpell.java
index cafb2d1f..16d9b8f8 100644
--- a/src/main/java/com/minelittlepony/unicopia/magic/spell/FireSpell.java
+++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/FireSpell.java
@@ -4,7 +4,6 @@ import javax.annotation.Nullable;
 
 import com.minelittlepony.unicopia.EquinePredicates;
 import com.minelittlepony.unicopia.entity.IMagicals;
-import com.minelittlepony.unicopia.magic.AbstractSpell;
 import com.minelittlepony.unicopia.magic.Affinity;
 import com.minelittlepony.unicopia.magic.CastResult;
 import com.minelittlepony.unicopia.magic.ICaster;
diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/FlameSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/FlameSpell.java
index 46b63a46..2591023d 100644
--- a/src/main/java/com/minelittlepony/unicopia/magic/spell/FlameSpell.java
+++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/FlameSpell.java
@@ -1,7 +1,6 @@
 package com.minelittlepony.unicopia.magic.spell;
 
 import com.minelittlepony.unicopia.entity.player.IPlayer;
-import com.minelittlepony.unicopia.magic.AbstractSpell;
 import com.minelittlepony.unicopia.magic.Affinity;
 import com.minelittlepony.unicopia.magic.ICaster;
 import com.minelittlepony.unicopia.magic.IHeldEffect;
diff --git a/src/main/java/com/minelittlepony/unicopia/magic/GenericSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/GenericSpell.java
similarity index 82%
rename from src/main/java/com/minelittlepony/unicopia/magic/GenericSpell.java
rename to src/main/java/com/minelittlepony/unicopia/magic/spell/GenericSpell.java
index c028bf45..33f0f966 100644
--- a/src/main/java/com/minelittlepony/unicopia/magic/GenericSpell.java
+++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/GenericSpell.java
@@ -1,7 +1,11 @@
-package com.minelittlepony.unicopia.magic;
+package com.minelittlepony.unicopia.magic.spell;
 
 import java.util.function.Supplier;
 
+import com.minelittlepony.unicopia.magic.Affinity;
+import com.minelittlepony.unicopia.magic.ICaster;
+import com.minelittlepony.unicopia.magic.IMagicEffect;
+
 public class GenericSpell extends AbstractSpell {
 
     private final String name;
diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/GlowingSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/GlowingSpell.java
index 3b733eeb..bbdfb8fa 100644
--- a/src/main/java/com/minelittlepony/unicopia/magic/spell/GlowingSpell.java
+++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/GlowingSpell.java
@@ -2,7 +2,6 @@ package com.minelittlepony.unicopia.magic.spell;
 
 import com.minelittlepony.unicopia.entity.player.IPlayer;
 import com.minelittlepony.unicopia.magic.Affinity;
-import com.minelittlepony.unicopia.magic.GenericSpell;
 import com.minelittlepony.unicopia.magic.ICaster;
 import com.minelittlepony.unicopia.magic.IHeldEffect;
 
diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/IceSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/IceSpell.java
index a036d07f..00a25fd3 100644
--- a/src/main/java/com/minelittlepony/unicopia/magic/spell/IceSpell.java
+++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/IceSpell.java
@@ -3,7 +3,6 @@ package com.minelittlepony.unicopia.magic.spell;
 import javax.annotation.Nullable;
 
 import com.minelittlepony.unicopia.UMaterials;
-import com.minelittlepony.unicopia.magic.AbstractSpell;
 import com.minelittlepony.unicopia.magic.Affinity;
 import com.minelittlepony.unicopia.magic.CastResult;
 import com.minelittlepony.unicopia.magic.ICaster;
diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/NecromancySpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/NecromancySpell.java
index 7fd78019..981e868d 100644
--- a/src/main/java/com/minelittlepony/unicopia/magic/spell/NecromancySpell.java
+++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/NecromancySpell.java
@@ -3,7 +3,6 @@ package com.minelittlepony.unicopia.magic.spell;
 import java.util.List;
 
 import com.google.common.collect.Lists;
-import com.minelittlepony.unicopia.magic.AbstractSpell;
 import com.minelittlepony.unicopia.magic.Affinity;
 import com.minelittlepony.unicopia.magic.ICaster;
 import com.minelittlepony.unicopia.util.VecHelper;
diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/PortalSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/PortalSpell.java
index b4d43345..0234b2b6 100644
--- a/src/main/java/com/minelittlepony/unicopia/magic/spell/PortalSpell.java
+++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/PortalSpell.java
@@ -10,7 +10,6 @@ import com.minelittlepony.unicopia.SpeciesList;
 import com.minelittlepony.unicopia.entity.IMagicals;
 import com.minelittlepony.unicopia.entity.SpellcastEntity;
 import com.minelittlepony.unicopia.entity.player.IPlayer;
-import com.minelittlepony.unicopia.magic.AbstractSpell;
 import com.minelittlepony.unicopia.magic.Affinity;
 import com.minelittlepony.unicopia.magic.CastResult;
 import com.minelittlepony.unicopia.magic.ICaster;
diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/RevealingSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/RevealingSpell.java
index 16816c0f..0e4cb95a 100644
--- a/src/main/java/com/minelittlepony/unicopia/magic/spell/RevealingSpell.java
+++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/RevealingSpell.java
@@ -1,7 +1,6 @@
 package com.minelittlepony.unicopia.magic.spell;
 
 import com.minelittlepony.unicopia.UParticles;
-import com.minelittlepony.unicopia.magic.AbstractSpell;
 import com.minelittlepony.unicopia.magic.Affinity;
 import com.minelittlepony.unicopia.magic.ICaster;
 import com.minelittlepony.unicopia.magic.ISuppressable;
diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/ShieldSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/ShieldSpell.java
index 8f0de673..80820b06 100644
--- a/src/main/java/com/minelittlepony/unicopia/magic/spell/ShieldSpell.java
+++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/ShieldSpell.java
@@ -7,7 +7,6 @@ import com.minelittlepony.unicopia.EquinePredicates;
 import com.minelittlepony.unicopia.SpeciesList;
 import com.minelittlepony.unicopia.UParticles;
 import com.minelittlepony.unicopia.entity.player.IPlayer;
-import com.minelittlepony.unicopia.magic.AbstractSpell;
 import com.minelittlepony.unicopia.magic.Affinity;
 import com.minelittlepony.unicopia.magic.IAttachedEffect;
 import com.minelittlepony.unicopia.magic.ICaster;
diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/SiphoningSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/SiphoningSpell.java
index d8a88fe3..8ef97ea4 100644
--- a/src/main/java/com/minelittlepony/unicopia/magic/spell/SiphoningSpell.java
+++ b/src/main/java/com/minelittlepony/unicopia/magic/spell/SiphoningSpell.java
@@ -6,7 +6,6 @@ import java.util.stream.Collectors;
 import com.minelittlepony.unicopia.Race;
 import com.minelittlepony.unicopia.SpeciesList;
 import com.minelittlepony.unicopia.entity.player.IPlayer;
-import com.minelittlepony.unicopia.magic.AbstractSpell;
 import com.minelittlepony.unicopia.magic.Affinity;
 import com.minelittlepony.unicopia.magic.ICaster;
 import com.minelittlepony.unicopia.util.MagicalDamageSource;