diff --git a/Source/Mods/JecsTools.cs b/Source/Mods/JecsTools.cs
new file mode 100644
index 00000000..894f198f
--- /dev/null
+++ b/Source/Mods/JecsTools.cs
@@ -0,0 +1,143 @@
+using System.Collections;
+using System.Linq;
+using HarmonyLib;
+using Multiplayer.API;
+using Verse;
+
+namespace Multiplayer.Compat
+{
+ /// JecsTools by jecrell and contributors
+ ///
+ ///
+ [MpCompatFor("jecrell.jecstools")]
+ public class JecsTools
+ {
+ #region Main patch
+
+ public JecsTools(ModContentPack mod)
+ {
+ // AbilityUser
+ PatchAbilities();
+
+ // CompActivatableEffect
+ {
+ // Deactivate/Activate gizmo
+ MpCompat.RegisterLambdaMethod("CompActivatableEffect.CompActivatableEffect", "EquippedGizmos", 0, 1);
+ }
+
+ // CompInstalledPart
+ {
+ MpCompat.RegisterLambdaDelegate("CompInstalledPart.InstalledPartFloatMenuPatch", "GetFloatMenus", 3);
+ // Looking at the code, it seems there's no built-in way to uninstall those?
+ }
+
+ // CompSlotLoadable
+ {
+ var type = AccessTools.TypeByName("CompSlotLoadable.CompSlotLoadable");
+ MP.RegisterSyncMethod(type, "TryCancel"); // Gizmo -> cancel
+ MP.RegisterSyncMethod(type, "TryGiveLoadSlotJob"); // Gizmo -> float menu -> load option
+ MP.RegisterSyncMethod(type, "TryEmptySlot"); // Gizmo -> float menu -> empty option
+ MpCompat.RegisterLambdaDelegate("CompSlotLoadable.SloatLoadbleFloatMenuPatch", "GetFloatMenus", 1);
+ }
+
+ // CompToggleDef
+ {
+ MP.RegisterSyncMethod(AccessTools.Method("CompToggleDef.ToggleDefCardUtility:SwapThing")).SetContext(SyncContext.MapSelected);
+ }
+ }
+
+ #endregion
+
+ #region Abilities
+
+ // PawnAbility
+ private static AccessTools.FieldRef