diff --git a/QSB/GetAttachedOWRigidbodyPatch.cs b/QSB/GetAttachedOWRigidbodyPatch.cs
new file mode 100644
index 00000000..7ee82ab1
--- /dev/null
+++ b/QSB/GetAttachedOWRigidbodyPatch.cs
@@ -0,0 +1,43 @@
+using HarmonyLib;
+using QSB.Patches;
+using UnityEngine;
+
+namespace QSB;
+
+///
+/// TODO: TEST THIS. see if things horribly break. this could be huge.
+///
+[HarmonyPatch(typeof(OWExtensions))]
+public class GetAttachedOWRigidbodyPatch : QSBPatch
+{
+ public override QSBPatchTypes Type => QSBPatchTypes.OnModStart;
+
+ [HarmonyPrefix]
+ [HarmonyPatch(nameof(OWExtensions.GetAttachedOWRigidbody), typeof(GameObject), typeof(bool))]
+ private static bool GetAttachedOWRigidbody(GameObject obj, bool ignoreThisTransform, out OWRigidbody __result)
+ {
+ OWRigidbody owrigidbody = null;
+ var transform = obj.transform;
+ if (ignoreThisTransform)
+ {
+ transform = obj.transform.parent;
+ }
+ while (owrigidbody == null)
+ {
+ owrigidbody = transform.GetComponent();
+ /*
+ if (owrigidbody != null && !owrigidbody.gameObject.activeInHierarchy)
+ {
+ owrigidbody = null;
+ }
+ */
+ if ((transform == obj.transform.root && owrigidbody == null) || owrigidbody != null)
+ {
+ break;
+ }
+ transform = transform.parent;
+ }
+ __result = owrigidbody;
+ return false;
+ }
+}