diff --git a/com.unity.netcode.gameobjects/CHANGELOG.md b/com.unity.netcode.gameobjects/CHANGELOG.md
index fccb14d34b..01a351dce1 100644
--- a/com.unity.netcode.gameobjects/CHANGELOG.md
+++ b/com.unity.netcode.gameobjects/CHANGELOG.md
@@ -18,6 +18,7 @@ Additional documentation and release notes are available at [Multiplayer Documen
 - Fixed inconsistencies in the `OnSceneEvent` callback. (#3458)
 - Fixed issues with the `NetworkBehaviour` and `NetworkVariable` length safety checks. (#3405)
 - Fixed memory leaks when domain reload is disabled. (#3427)
+- Fixed issue where disabling the physics or physics2D package modules could result in a compilation error. (#3422)
 - Fixed an exception being thrown when unregistering a custom message handler from within the registered callback. (#3417)
 
 ### Changed
diff --git a/com.unity.netcode.gameobjects/Runtime/Components/NetworkRigidBodyBase.cs b/com.unity.netcode.gameobjects/Runtime/Components/NetworkRigidBodyBase.cs
index 18b393bec0..96cd6b79e0 100644
--- a/com.unity.netcode.gameobjects/Runtime/Components/NetworkRigidBodyBase.cs
+++ b/com.unity.netcode.gameobjects/Runtime/Components/NetworkRigidBodyBase.cs
@@ -44,13 +44,24 @@ public abstract class NetworkRigidbodyBase : NetworkBehaviour
         /// 
         public bool AutoSetKinematicOnDespawn = true;
 
+#if COM_UNITY_MODULES_PHYSICS2D
         // Determines if this is a Rigidbody or Rigidbody2D implementation
         private bool m_IsRigidbody2D => RigidbodyType == RigidbodyTypes.Rigidbody2D;
+#else
+        private bool m_IsRigidbody2D = false;
+#endif
+
+
         // Used to cache the authority state of this Rigidbody during the last frame
         private bool m_IsAuthority;
 
+#if COM_UNITY_MODULES_PHYSICS
         protected internal Rigidbody m_InternalRigidbody { get; private set; }
+#endif
+
+#if COM_UNITY_MODULES_PHYSICS2D
         protected internal Rigidbody2D m_InternalRigidbody2D { get; private set; }
+#endif
 
         internal NetworkTransform NetworkTransform;
         private float m_TickFrequency;
@@ -70,12 +81,67 @@ private enum InterpolationTypes
         /// 
         public enum RigidbodyTypes
         {
+#if COM_UNITY_MODULES_PHYSICS
             Rigidbody,
+#endif
+#if COM_UNITY_MODULES_PHYSICS2D
             Rigidbody2D,
+#endif
         }
 
         public RigidbodyTypes RigidbodyType { get; private set; }
+#if COM_UNITY_MODULES_PHYSICS2D && !COM_UNITY_MODULES_PHYSICS
+        /// 
+        /// Initializes the networked Rigidbody based on the 
+        /// passed in as a parameter.
+        /// 
+        /// 
+        /// Cannot be initialized while the associated  is spawned.
+        /// 
+        /// type of rigid body being initialized
+        /// the  that is associated with this rigid body
+        /// (optional) The  to be used
+        protected void Initialize(RigidbodyTypes rigidbodyType, NetworkTransform networkTransform = null, Rigidbody2D rigidbody2D = null)
+        {
+            // Don't initialize if already spawned
+            if (IsSpawned)
+            {
+                Debug.LogError($"[{name}] Attempting to initialize while spawned is not allowed.");
+                return;
+            }
+            RigidbodyType = rigidbodyType;
+            m_InternalRigidbody2D = rigidbody2D;
+            NetworkTransform = networkTransform;
+
+            if (m_IsRigidbody2D && m_InternalRigidbody2D == null)
+            {
+                m_InternalRigidbody2D = GetComponent();
+            }
+
+            SetOriginalInterpolation();
+
+            if (NetworkTransform == null)
+            {
+                NetworkTransform = GetComponent();
+            }
+
+            if (NetworkTransform != null)
+            {
+                NetworkTransform.RegisterRigidbody(this);
+            }
+            else
+            {
+                throw new System.Exception($"[Missing {nameof(NetworkTransform)}] No {nameof(NetworkTransform)} is assigned or can be found during initialization!");
+            }
+
+            if (AutoUpdateKinematicState)
+            {
+                SetIsKinematic(true);
+            }
+        }
+#endif
 
+#if !COM_UNITY_MODULES_PHYSICS2D && COM_UNITY_MODULES_PHYSICS
         /// 
         /// Initializes the networked Rigidbody based on the 
         /// passed in as a parameter.
@@ -84,6 +150,58 @@ public enum RigidbodyTypes
         /// Cannot be initialized while the associated  is spawned.
         /// 
         /// type of rigid body being initialized
+        /// the  that is associated with this rigid body
+        /// (optional) The  to be used
+        protected void Initialize(RigidbodyTypes rigidbodyType, NetworkTransform networkTransform = null, Rigidbody rigidbody = null)
+        {
+            // Don't initialize if already spawned
+            if (IsSpawned)
+            {
+                Debug.LogError($"[{name}] Attempting to initialize while spawned is not allowed.");
+                return;
+            }
+            RigidbodyType = rigidbodyType;
+            m_InternalRigidbody = rigidbody;
+            NetworkTransform = networkTransform;
+
+            if (m_InternalRigidbody == null)
+            {
+                m_InternalRigidbody = GetComponent();
+            }
+
+            SetOriginalInterpolation();
+
+            if (NetworkTransform == null)
+            {
+                NetworkTransform = GetComponent();
+            }
+
+            if (NetworkTransform != null)
+            {
+                NetworkTransform.RegisterRigidbody(this);
+            }
+            else
+            {
+                throw new System.Exception($"[Missing {nameof(NetworkTransform)}] No {nameof(NetworkTransform)} is assigned or can be found during initialization!");
+            }
+
+            if (AutoUpdateKinematicState)
+            {
+                SetIsKinematic(true);
+            }
+        }
+#endif
+
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+        /// 
+        /// Initializes the networked Rigidbody based on the 
+        /// passed in as a parameter.
+        /// 
+        /// 
+        /// Cannot be initialized while the associated  is spawned.
+        /// 
+        /// type of rigid body being initialized
+        /// the  that is associated with this rigid body
         /// (optional) The  to be used
         /// (optional) The  to be used
         protected void Initialize(RigidbodyTypes rigidbodyType, NetworkTransform networkTransform = null, Rigidbody2D rigidbody2D = null, Rigidbody rigidbody = null)
@@ -95,6 +213,7 @@ protected void Initialize(RigidbodyTypes rigidbodyType, NetworkTransform network
                 return;
             }
             RigidbodyType = rigidbodyType;
+
             m_InternalRigidbody2D = rigidbody2D;
             m_InternalRigidbody = rigidbody;
             NetworkTransform = networkTransform;
@@ -130,7 +249,7 @@ protected void Initialize(RigidbodyTypes rigidbodyType, NetworkTransform network
                 SetIsKinematic(true);
             }
         }
-
+#endif
         internal Vector3 GetAdjustedPositionThreshold()
         {
             // Since the threshold is a measurement of unity world space units per tick, we will allow for the maximum threshold
@@ -183,6 +302,7 @@ internal Vector3 GetAdjustedRotationThreshold()
         /// 
         public void SetLinearVelocity(Vector3 linearVelocity)
         {
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
             if (m_IsRigidbody2D)
             {
 #if COM_UNITY_MODULES_PHYSICS2D_LINEAR
@@ -195,6 +315,17 @@ public void SetLinearVelocity(Vector3 linearVelocity)
             {
                 m_InternalRigidbody.linearVelocity = linearVelocity;
             }
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+            m_InternalRigidbody.linearVelocity = linearVelocity;
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+#if COM_UNITY_MODULES_PHYSICS2D_LINEAR
+            m_InternalRigidbody2D.linearVelocity = linearVelocity;
+#else
+            m_InternalRigidbody2D.velocity = linearVelocity;
+#endif
+#endif
         }
 
         /// 
@@ -207,6 +338,8 @@ public void SetLinearVelocity(Vector3 linearVelocity)
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public Vector3 GetLinearVelocity()
         {
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+#if COM_UNITY_MODULES_PHYSICS2D
             if (m_IsRigidbody2D)
             {
 #if COM_UNITY_MODULES_PHYSICS2D_LINEAR
@@ -216,9 +349,21 @@ public Vector3 GetLinearVelocity()
 #endif
             }
             else
+#endif
             {
                 return m_InternalRigidbody.linearVelocity;
             }
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+            return m_InternalRigidbody.linearVelocity;
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+#if COM_UNITY_MODULES_PHYSICS2D_LINEAR
+            return m_InternalRigidbody2D.linearVelocity;
+#else
+            return m_InternalRigidbody2D.velocity;
+#endif
+#endif
         }
 
         /// 
@@ -232,6 +377,7 @@ public Vector3 GetLinearVelocity()
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public void SetAngularVelocity(Vector3 angularVelocity)
         {
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
             if (m_IsRigidbody2D)
             {
                 m_InternalRigidbody2D.angularVelocity = angularVelocity.z;
@@ -240,6 +386,13 @@ public void SetAngularVelocity(Vector3 angularVelocity)
             {
                 m_InternalRigidbody.angularVelocity = angularVelocity;
             }
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+            m_InternalRigidbody.angularVelocity = angularVelocity;
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+            m_InternalRigidbody2D.angularVelocity = angularVelocity.z;
+#endif
         }
 
         /// 
@@ -252,6 +405,7 @@ public void SetAngularVelocity(Vector3 angularVelocity)
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public Vector3 GetAngularVelocity()
         {
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
             if (m_IsRigidbody2D)
             {
                 return Vector3.forward * m_InternalRigidbody2D.angularVelocity;
@@ -260,6 +414,13 @@ public Vector3 GetAngularVelocity()
             {
                 return m_InternalRigidbody.angularVelocity;
             }
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+           return m_InternalRigidbody.angularVelocity;
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+            return Vector3.forward * m_InternalRigidbody2D.angularVelocity;
+#endif
         }
 
         /// 
@@ -269,6 +430,7 @@ public Vector3 GetAngularVelocity()
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public Vector3 GetPosition()
         {
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
             if (m_IsRigidbody2D)
             {
                 return m_InternalRigidbody2D.position;
@@ -277,8 +439,33 @@ public Vector3 GetPosition()
             {
                 return m_InternalRigidbody.position;
             }
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+            return m_InternalRigidbody.position;
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+            return m_InternalRigidbody2D.position;
+#endif
         }
 
+#if COM_UNITY_MODULES_PHYSICS2D
+        private Quaternion Rotation2D()
+        {
+            var quaternion = Quaternion.identity;
+            var angles = quaternion.eulerAngles;
+            angles.z = m_InternalRigidbody2D.rotation;
+            quaternion.eulerAngles = angles;
+            return quaternion;
+        }
+#endif
+
+#if COM_UNITY_MODULES_PHYSICS
+        private Quaternion Rotation()
+        {
+            return m_InternalRigidbody.rotation;
+        }
+#endif
+
         /// 
         /// Gets the rotation of the Rigidbody
         /// 
@@ -286,18 +473,15 @@ public Vector3 GetPosition()
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public Quaternion GetRotation()
         {
-            if (m_IsRigidbody2D)
-            {
-                var quaternion = Quaternion.identity;
-                var angles = quaternion.eulerAngles;
-                angles.z = m_InternalRigidbody2D.rotation;
-                quaternion.eulerAngles = angles;
-                return quaternion;
-            }
-            else
-            {
-                return m_InternalRigidbody.rotation;
-            }
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+            return m_IsRigidbody2D ? Rotation2D() : Rotation();
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+            return Rotation();
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+            return Rotation2D();
+#endif
         }
 
         /// 
@@ -307,6 +491,7 @@ public Quaternion GetRotation()
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public void MovePosition(Vector3 position)
         {
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
             if (m_IsRigidbody2D)
             {
                 m_InternalRigidbody2D.MovePosition(position);
@@ -315,6 +500,13 @@ public void MovePosition(Vector3 position)
             {
                 m_InternalRigidbody.MovePosition(position);
             }
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+            m_InternalRigidbody.MovePosition(position);
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+            m_InternalRigidbody2D.MovePosition(position);
+#endif
         }
 
         /// 
@@ -324,6 +516,7 @@ public void MovePosition(Vector3 position)
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public void SetPosition(Vector3 position)
         {
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
             if (m_IsRigidbody2D)
             {
                 m_InternalRigidbody2D.position = position;
@@ -332,6 +525,13 @@ public void SetPosition(Vector3 position)
             {
                 m_InternalRigidbody.position = position;
             }
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+            m_InternalRigidbody.position = position;
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+            m_InternalRigidbody2D.position = position;
+#endif
         }
 
         /// 
@@ -340,6 +540,7 @@ public void SetPosition(Vector3 position)
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public void ApplyCurrentTransform()
         {
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
             if (m_IsRigidbody2D)
             {
                 m_InternalRigidbody2D.position = transform.position;
@@ -350,11 +551,49 @@ public void ApplyCurrentTransform()
                 m_InternalRigidbody.position = transform.position;
                 m_InternalRigidbody.rotation = transform.rotation;
             }
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+            m_InternalRigidbody.position = transform.position;
+            m_InternalRigidbody.rotation = transform.rotation;
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+            m_InternalRigidbody2D.position = transform.position;
+            m_InternalRigidbody2D.rotation = transform.eulerAngles.z;
+#endif
         }
 
         // Used for Rigidbody only (see info on normalized below)
         private Vector4 m_QuaternionCheck = Vector4.zero;
 
+#if COM_UNITY_MODULES_PHYSICS2D
+        private void InternalMoveRotation2D(Quaternion rotation)
+        {
+            var quaternion = Quaternion.identity;
+            var angles = quaternion.eulerAngles;
+            angles.z = m_InternalRigidbody2D.rotation;
+            quaternion.eulerAngles = angles;
+            m_InternalRigidbody2D.MoveRotation(quaternion);
+        }
+#endif
+
+#if COM_UNITY_MODULES_PHYSICS
+        private void InternalMoveRotation(Quaternion rotation)
+        {
+            // Evidently we need to check to make sure the quaternion is a perfect
+            // magnitude of 1.0f when applying the rotation to a rigid body.
+            m_QuaternionCheck.x = rotation.x;
+            m_QuaternionCheck.y = rotation.y;
+            m_QuaternionCheck.z = rotation.z;
+            m_QuaternionCheck.w = rotation.w;
+            // If the magnitude is greater than 1.0f (even by a very small fractional value), then normalize the quaternion
+            if (m_QuaternionCheck.magnitude != 1.0f)
+            {
+                rotation.Normalize();
+            }
+            m_InternalRigidbody.MoveRotation(rotation);
+        }
+#endif
+
         /// 
         /// Rotatates the Rigidbody towards a specified rotation
         /// 
@@ -362,29 +601,22 @@ public void ApplyCurrentTransform()
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public void MoveRotation(Quaternion rotation)
         {
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
             if (m_IsRigidbody2D)
             {
-                var quaternion = Quaternion.identity;
-                var angles = quaternion.eulerAngles;
-                angles.z = m_InternalRigidbody2D.rotation;
-                quaternion.eulerAngles = angles;
-                m_InternalRigidbody2D.MoveRotation(quaternion);
+                InternalMoveRotation2D(rotation);
             }
             else
             {
-                // Evidently we need to check to make sure the quaternion is a perfect
-                // magnitude of 1.0f when applying the rotation to a rigid body.
-                m_QuaternionCheck.x = rotation.x;
-                m_QuaternionCheck.y = rotation.y;
-                m_QuaternionCheck.z = rotation.z;
-                m_QuaternionCheck.w = rotation.w;
-                // If the magnitude is greater than 1.0f (even by a very small fractional value), then normalize the quaternion
-                if (m_QuaternionCheck.magnitude != 1.0f)
-                {
-                    rotation.Normalize();
-                }
-                m_InternalRigidbody.MoveRotation(rotation);
+                InternalMoveRotation(rotation);
             }
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+            InternalMoveRotation(rotation);
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+            InternalMoveRotation2D(rotation);
+#endif
         }
 
         /// 
@@ -394,6 +626,7 @@ public void MoveRotation(Quaternion rotation)
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public void SetRotation(Quaternion rotation)
         {
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
             if (m_IsRigidbody2D)
             {
                 m_InternalRigidbody2D.rotation = rotation.eulerAngles.z;
@@ -402,7 +635,62 @@ public void SetRotation(Quaternion rotation)
             {
                 m_InternalRigidbody.rotation = rotation;
             }
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+            m_InternalRigidbody.rotation = rotation;
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+            m_InternalRigidbody2D.rotation = rotation.eulerAngles.z;
+#endif
+        }
+
+#if COM_UNITY_MODULES_PHYSICS2D
+        private void SetOriginalInterpolation2D()
+        {
+            switch (m_InternalRigidbody2D.interpolation)
+            {
+                case RigidbodyInterpolation2D.None:
+                    {
+                        m_OriginalInterpolation = InterpolationTypes.None;
+                        break;
+                    }
+                case RigidbodyInterpolation2D.Interpolate:
+                    {
+                        m_OriginalInterpolation = InterpolationTypes.Interpolate;
+                        break;
+                    }
+                case RigidbodyInterpolation2D.Extrapolate:
+                    {
+                        m_OriginalInterpolation = InterpolationTypes.Extrapolate;
+                        break;
+                    }
+            }
         }
+#endif
+
+#if COM_UNITY_MODULES_PHYSICS
+        private void SetOriginalInterpolation3D()
+        {
+            switch (m_InternalRigidbody.interpolation)
+            {
+                case RigidbodyInterpolation.None:
+                    {
+                        m_OriginalInterpolation = InterpolationTypes.None;
+                        break;
+                    }
+                case RigidbodyInterpolation.Interpolate:
+                    {
+                        m_OriginalInterpolation = InterpolationTypes.Interpolate;
+                        break;
+                    }
+                case RigidbodyInterpolation.Extrapolate:
+                    {
+                        m_OriginalInterpolation = InterpolationTypes.Extrapolate;
+                        break;
+                    }
+            }
+        }
+#endif
 
         /// 
         /// Sets the original interpolation of the Rigidbody while taking the Rigidbody type into consideration
@@ -410,49 +698,44 @@ public void SetRotation(Quaternion rotation)
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         private void SetOriginalInterpolation()
         {
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
             if (m_IsRigidbody2D)
             {
-                switch (m_InternalRigidbody2D.interpolation)
-                {
-                    case RigidbodyInterpolation2D.None:
-                        {
-                            m_OriginalInterpolation = InterpolationTypes.None;
-                            break;
-                        }
-                    case RigidbodyInterpolation2D.Interpolate:
-                        {
-                            m_OriginalInterpolation = InterpolationTypes.Interpolate;
-                            break;
-                        }
-                    case RigidbodyInterpolation2D.Extrapolate:
-                        {
-                            m_OriginalInterpolation = InterpolationTypes.Extrapolate;
-                            break;
-                        }
-                }
+                SetOriginalInterpolation2D();
             }
             else
             {
-                switch (m_InternalRigidbody.interpolation)
-                {
-                    case RigidbodyInterpolation.None:
-                        {
-                            m_OriginalInterpolation = InterpolationTypes.None;
-                            break;
-                        }
-                    case RigidbodyInterpolation.Interpolate:
-                        {
-                            m_OriginalInterpolation = InterpolationTypes.Interpolate;
-                            break;
-                        }
-                    case RigidbodyInterpolation.Extrapolate:
-                        {
-                            m_OriginalInterpolation = InterpolationTypes.Extrapolate;
-                            break;
-                        }
-                }
+                SetOriginalInterpolation3D();
+            }
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+            SetOriginalInterpolation3D();
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+            SetOriginalInterpolation2D();
+#endif
+        }
+
+
+#if COM_UNITY_MODULES_PHYSICS2D
+        private void WakeIfSleeping2D()
+        {
+            if (m_InternalRigidbody2D.IsSleeping())
+            {
+                m_InternalRigidbody2D.WakeUp();
+            }
+        }
+#endif
+
+#if COM_UNITY_MODULES_PHYSICS
+        private void WakeIfSleeping3D()
+        {
+            if (m_InternalRigidbody.IsSleeping())
+            {
+                m_InternalRigidbody.WakeUp();
             }
         }
+#endif
 
         /// 
         /// Wakes the Rigidbody if it is sleeping
@@ -460,20 +743,22 @@ private void SetOriginalInterpolation()
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public void WakeIfSleeping()
         {
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
             if (m_IsRigidbody2D)
             {
-                if (m_InternalRigidbody2D.IsSleeping())
-                {
-                    m_InternalRigidbody2D.WakeUp();
-                }
+                WakeIfSleeping2D();
             }
             else
             {
-                if (m_InternalRigidbody.IsSleeping())
-                {
-                    m_InternalRigidbody.WakeUp();
-                }
+                WakeIfSleeping3D();
             }
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+            WakeIfSleeping3D();
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+            WakeIfSleeping2D();
+#endif
         }
 
         /// 
@@ -482,6 +767,7 @@ public void WakeIfSleeping()
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public void SleepRigidbody()
         {
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
             if (m_IsRigidbody2D)
             {
                 m_InternalRigidbody2D.Sleep();
@@ -490,11 +776,19 @@ public void SleepRigidbody()
             {
                 m_InternalRigidbody.Sleep();
             }
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+            m_InternalRigidbody.Sleep();
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+            m_InternalRigidbody2D.Sleep();
+#endif
         }
 
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public bool IsKinematic()
         {
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
             if (m_IsRigidbody2D)
             {
                 return m_InternalRigidbody2D.bodyType == RigidbodyType2D.Kinematic;
@@ -503,6 +797,13 @@ public bool IsKinematic()
             {
                 return m_InternalRigidbody.isKinematic;
             }
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+            return m_InternalRigidbody.isKinematic;
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+            return m_InternalRigidbody2D.bodyType == RigidbodyType2D.Kinematic;
+#endif
         }
 
         /// 
@@ -524,6 +825,7 @@ public bool IsKinematic()
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public void SetIsKinematic(bool isKinematic)
         {
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
             if (m_IsRigidbody2D)
             {
                 m_InternalRigidbody2D.bodyType = isKinematic ? RigidbodyType2D.Kinematic : RigidbodyType2D.Dynamic;
@@ -532,13 +834,24 @@ public void SetIsKinematic(bool isKinematic)
             {
                 m_InternalRigidbody.isKinematic = isKinematic;
             }
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+            m_InternalRigidbody.isKinematic = isKinematic;
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+            m_InternalRigidbody2D.bodyType = isKinematic ? RigidbodyType2D.Kinematic : RigidbodyType2D.Dynamic;
+#endif
+            PostSetIsKinematic();
+        }
 
+        [MethodImpl(MethodImplOptions.AggressiveInlining)]
+        private void PostSetIsKinematic()
+        {
             // If we are not spawned, then exit early
             if (!IsSpawned)
             {
                 return;
             }
-
             if (UseRigidBodyForMotion)
             {
                 // Only if the NetworkTransform is set to interpolate do we need to check for extrapolation
@@ -567,49 +880,76 @@ public void SetIsKinematic(bool isKinematic)
             }
         }
 
+#if COM_UNITY_MODULES_PHYSICS2D
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
-        private void SetInterpolation(InterpolationTypes interpolationType)
+        private void SetInterpolation2D(InterpolationTypes interpolationType)
         {
             switch (interpolationType)
             {
                 case InterpolationTypes.None:
                     {
-                        if (m_IsRigidbody2D)
-                        {
-                            m_InternalRigidbody2D.interpolation = RigidbodyInterpolation2D.None;
-                        }
-                        else
-                        {
-                            m_InternalRigidbody.interpolation = RigidbodyInterpolation.None;
-                        }
+                        m_InternalRigidbody2D.interpolation = RigidbodyInterpolation2D.None;
                         break;
                     }
                 case InterpolationTypes.Interpolate:
                     {
-                        if (m_IsRigidbody2D)
-                        {
-                            m_InternalRigidbody2D.interpolation = RigidbodyInterpolation2D.Interpolate;
-                        }
-                        else
-                        {
-                            m_InternalRigidbody.interpolation = RigidbodyInterpolation.Interpolate;
-                        }
+                        m_InternalRigidbody2D.interpolation = RigidbodyInterpolation2D.Interpolate;
                         break;
                     }
                 case InterpolationTypes.Extrapolate:
                     {
-                        if (m_IsRigidbody2D)
-                        {
-                            m_InternalRigidbody2D.interpolation = RigidbodyInterpolation2D.Extrapolate;
-                        }
-                        else
-                        {
-                            m_InternalRigidbody.interpolation = RigidbodyInterpolation.Extrapolate;
-                        }
+                        m_InternalRigidbody2D.interpolation = RigidbodyInterpolation2D.Extrapolate;
                         break;
                     }
             }
         }
+#endif
+
+#if COM_UNITY_MODULES_PHYSICS
+        [MethodImpl(MethodImplOptions.AggressiveInlining)]
+        private void SetInterpolation3D(InterpolationTypes interpolationType)
+        {
+            switch (interpolationType)
+            {
+                case InterpolationTypes.None:
+                    {
+                        m_InternalRigidbody.interpolation = RigidbodyInterpolation.None;
+                        break;
+                    }
+                case InterpolationTypes.Interpolate:
+                    {
+                        m_InternalRigidbody.interpolation = RigidbodyInterpolation.Interpolate;
+                        break;
+                    }
+                case InterpolationTypes.Extrapolate:
+                    {
+                        m_InternalRigidbody.interpolation = RigidbodyInterpolation.Extrapolate;
+                        break;
+                    }
+            }
+        }
+#endif
+
+        [MethodImpl(MethodImplOptions.AggressiveInlining)]
+        private void SetInterpolation(InterpolationTypes interpolationType)
+        {
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+            if (m_IsRigidbody2D)
+            {
+                SetInterpolation2D(interpolationType);
+            }
+            else
+            {
+                SetInterpolation3D(interpolationType);
+            }
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+            SetInterpolation3D(interpolationType);
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+            SetInterpolation2D(interpolationType);
+#endif
+        }
 
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public void ResetInterpolation()
@@ -687,8 +1027,6 @@ public override void OnNetworkDespawn()
         // in place relative to the parent so jitter/stutter does not occur.
         // Alternately, users can affix the fixed joint to a child GameObject (without a rigid body) of the parent NetworkObject
         // and then add a NetworkTransform to that in order to get the parented child NetworkObject to move around in "local space"
-        public FixedJoint FixedJoint { get; private set; }
-        public FixedJoint2D FixedJoint2D { get; private set; }
 
         internal System.Collections.Generic.List NetworkRigidbodyConnections = new System.Collections.Generic.List();
         internal NetworkRigidbodyBase ParentBody;
@@ -715,6 +1053,9 @@ protected virtual void OnFixedJoint2DCreated()
 
         }
 
+#if COM_UNITY_MODULES_PHYSICS2D
+        public FixedJoint2D FixedJoint2D { get; private set; }
+
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         private void ApplyFixedJoint2D(NetworkRigidbodyBase bodyToConnect, Vector3 position, float connectedMassScale = 0.0f, float massScale = 1.0f, bool useGravity = false, bool zeroVelocity = true)
         {
@@ -743,6 +1084,10 @@ private void ApplyFixedJoint2D(NetworkRigidbodyBase bodyToConnect, Vector3 posit
             FixedJoint2D.connectedBody = bodyToConnect.m_InternalRigidbody2D;
             OnFixedJoint2DCreated();
         }
+#endif
+
+#if COM_UNITY_MODULES_PHYSICS
+        public FixedJoint FixedJoint { get; private set; }
 
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         private void ApplyFixedJoint(NetworkRigidbodyBase bodyToConnectTo, Vector3 position, float connectedMassScale = 0.0f, float massScale = 1.0f, bool useGravity = false, bool zeroVelocity = true)
@@ -762,7 +1107,7 @@ private void ApplyFixedJoint(NetworkRigidbodyBase bodyToConnectTo, Vector3 posit
             FixedJoint.massScale = massScale;
             OnFixedJointCreated();
         }
-
+#endif
 
         /// 
         /// Authority Only:
@@ -806,6 +1151,7 @@ public bool AttachToFixedJoint(NetworkRigidbodyBase objectToConnectTo, Vector3 p
 
             if (objectToConnectTo != null)
             {
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
                 if (m_IsRigidbody2D)
                 {
                     ApplyFixedJoint2D(objectToConnectTo, positionOfConnection, connectedMassScale, massScale, useGravity, zeroVelocity);
@@ -814,7 +1160,13 @@ public bool AttachToFixedJoint(NetworkRigidbodyBase objectToConnectTo, Vector3 p
                 {
                     ApplyFixedJoint(objectToConnectTo, positionOfConnection, connectedMassScale, massScale, useGravity, zeroVelocity);
                 }
-
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+                ApplyFixedJoint(objectToConnectTo, positionOfConnection, connectedMassScale, massScale, useGravity, zeroVelocity);
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+                ApplyFixedJoint2D(objectToConnectTo, positionOfConnection, connectedMassScale, massScale, useGravity, zeroVelocity);
+#endif
                 ParentBody = objectToConnectTo;
                 ParentBody.NetworkRigidbodyConnections.Add(this);
                 if (teleportObject)
@@ -833,6 +1185,42 @@ private void RemoveFromParentBody()
             ParentBody = null;
         }
 
+#if COM_UNITY_MODULES_PHYSICS2D
+        [MethodImpl(MethodImplOptions.AggressiveInlining)]
+        private void DetatchFromFixedJoint2D()
+        {
+            if (FixedJoint2D == null)
+            {
+                return;
+            }
+            if (!m_FixedJoint2DUsingGravity)
+            {
+                FixedJoint2D.connectedBody.gravityScale = m_OriginalGravityScale;
+            }
+            FixedJoint2D.connectedBody = null;
+            Destroy(FixedJoint2D);
+            FixedJoint2D = null;
+            ResetInterpolation();
+            RemoveFromParentBody();
+        }
+#endif
+#if COM_UNITY_MODULES_PHYSICS
+        [MethodImpl(MethodImplOptions.AggressiveInlining)]
+        private void DetatchFromFixedJoint3D()
+        {
+            if (FixedJoint == null)
+            {
+                return;
+            }
+            FixedJoint.connectedBody = null;
+            m_InternalRigidbody.useGravity = m_OriginalGravitySetting;
+            Destroy(FixedJoint);
+            FixedJoint = null;
+            ResetInterpolation();
+            RemoveFromParentBody();
+        }
+#endif
+
         /// 
         /// Authority Only:
         /// When invoked and already connected to an object via  or  (depending upon the type of rigid body),
@@ -849,27 +1237,22 @@ public void DetachFromFixedJoint()
             }
             if (UseRigidBodyForMotion)
             {
-                if (m_IsRigidbody2D && FixedJoint2D != null)
+#if COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+                if (m_IsRigidbody2D)
                 {
-                    if (!m_FixedJoint2DUsingGravity)
-                    {
-                        FixedJoint2D.connectedBody.gravityScale = m_OriginalGravityScale;
-                    }
-                    FixedJoint2D.connectedBody = null;
-                    Destroy(FixedJoint2D);
-                    FixedJoint2D = null;
-                    ResetInterpolation();
-                    RemoveFromParentBody();
+                    DetatchFromFixedJoint2D();
                 }
-                else if (FixedJoint != null)
+                else
                 {
-                    FixedJoint.connectedBody = null;
-                    m_InternalRigidbody.useGravity = m_OriginalGravitySetting;
-                    Destroy(FixedJoint);
-                    FixedJoint = null;
-                    ResetInterpolation();
-                    RemoveFromParentBody();
+                    DetatchFromFixedJoint3D();
                 }
+#endif
+#if COM_UNITY_MODULES_PHYSICS && !COM_UNITY_MODULES_PHYSICS2D
+                DetatchFromFixedJoint3D();
+#endif
+#if !COM_UNITY_MODULES_PHYSICS && COM_UNITY_MODULES_PHYSICS2D
+                DetatchFromFixedJoint2D();
+#endif
             }
         }
     }
diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs
index 71ecce9498..07d2b33895 100644
--- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs
+++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs
@@ -264,7 +264,7 @@ internal void PromoteSessionOwner(ulong clientId)
         }
 
         internal Dictionary NetworkTransformUpdate = new Dictionary();
-#if COM_UNITY_MODULES_PHYSICS
+#if COM_UNITY_MODULES_PHYSICS || COM_UNITY_MODULES_PHYSICS2D
         internal Dictionary NetworkTransformFixedUpdate = new Dictionary();
 #endif
 
@@ -284,7 +284,7 @@ internal void NetworkTransformRegistration(NetworkObject networkObject, bool onU
                     NetworkTransformUpdate.Remove(networkObject.NetworkObjectId);
                 }
             }
-#if COM_UNITY_MODULES_PHYSICS
+#if COM_UNITY_MODULES_PHYSICS || COM_UNITY_MODULES_PHYSICS2D
             else
             {
                 if (register)
@@ -341,7 +341,7 @@ public void NetworkUpdate(NetworkUpdateStage updateStage)
 
                         MessageManager.CleanupDisconnectedClients();
                         AnticipationSystem.ProcessReanticipation();
-#if COM_UNITY_MODULES_PHYSICS
+#if COM_UNITY_MODULES_PHYSICS || COM_UNITY_MODULES_PHYSICS2D
                         foreach (var networkObjectEntry in NetworkTransformFixedUpdate)
                         {
                             // if not active or not spawned then skip
@@ -362,7 +362,7 @@ public void NetworkUpdate(NetworkUpdateStage updateStage)
 #endif
                     }
                     break;
-#if COM_UNITY_MODULES_PHYSICS
+#if COM_UNITY_MODULES_PHYSICS || COM_UNITY_MODULES_PHYSICS2D
                 case NetworkUpdateStage.FixedUpdate:
                     {
                         foreach (var networkObjectEntry in NetworkTransformFixedUpdate)
@@ -1112,7 +1112,7 @@ internal void Initialize(bool server)
             }
 #endif
 
-#if COM_UNITY_MODULES_PHYSICS
+#if COM_UNITY_MODULES_PHYSICS || COM_UNITY_MODULES_PHYSICS2D
             NetworkTransformFixedUpdate.Clear();
 #endif
             NetworkTransformUpdate.Clear();
@@ -1157,7 +1157,7 @@ internal void Initialize(bool server)
             }
 
             this.RegisterNetworkUpdate(NetworkUpdateStage.EarlyUpdate);
-#if COM_UNITY_MODULES_PHYSICS
+#if COM_UNITY_MODULES_PHYSICS || COM_UNITY_MODULES_PHYSICS2D
             this.RegisterNetworkUpdate(NetworkUpdateStage.FixedUpdate);
 #endif
             this.RegisterNetworkUpdate(NetworkUpdateStage.PreUpdate);
diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs
index e52f144589..114154f1de 100644
--- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs
+++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs
@@ -68,7 +68,7 @@ public uint PrefabIdHash
         public List NetworkTransforms { get; private set; }
 
 
-#if COM_UNITY_MODULES_PHYSICS
+#if COM_UNITY_MODULES_PHYSICS || COM_UNITY_MODULES_PHYSICS2D
         /// 
         /// All  component instances associated with a  component instance.
         /// NOTE: This is only available if a physics package is included. If not, then this will not be available!
@@ -2625,7 +2625,7 @@ internal List ChildNetworkBehaviours
                             networkTransform.IsNested = i != 0 && networkTransform.gameObject != gameObject;
                             NetworkTransforms.Add(networkTransform);
                         }
-#if COM_UNITY_MODULES_PHYSICS
+#if COM_UNITY_MODULES_PHYSICS || COM_UNITY_MODULES_PHYSICS2D
                         else if (type.IsSubclassOf(typeof(NetworkRigidbodyBase)))
                         {
                             if (NetworkRigidbodies == null)
@@ -3379,7 +3379,7 @@ private void Awake()
         {
             m_ChildNetworkBehaviours = null;
             NetworkTransforms?.Clear();
-#if COM_UNITY_MODULES_PHYSICS
+#if COM_UNITY_MODULES_PHYSICS || COM_UNITY_MODULES_PHYSICS2D
             NetworkRigidbodies?.Clear();
 #endif
             SetCachedParent(transform.parent);
diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformOwnershipTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformOwnershipTests.cs
index b4da043e29..2c1e5798b8 100644
--- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformOwnershipTests.cs
+++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformOwnershipTests.cs
@@ -1,4 +1,4 @@
-#if COM_UNITY_MODULES_PHYSICS
+#if COM_UNITY_MODULES_PHYSICS || COM_UNITY_MODULES_PHYSICS2D
 using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Physics/NetworkRigidbodyTest.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Physics/NetworkRigidbodyTest.cs
index fc813316da..4509797369 100644
--- a/com.unity.netcode.gameobjects/Tests/Runtime/Physics/NetworkRigidbodyTest.cs
+++ b/com.unity.netcode.gameobjects/Tests/Runtime/Physics/NetworkRigidbodyTest.cs
@@ -1,4 +1,4 @@
-#if COM_UNITY_MODULES_PHYSICS
+#if COM_UNITY_MODULES_PHYSICS || COM_UNITY_MODULES_PHYSICS2D
 using System.Collections;
 using System.Collections.Generic;
 using System.Text;