diff --git a/src/plugin/systems/collider.rs b/src/plugin/systems/collider.rs
index f3edc0be..015d4cfd 100644
--- a/src/plugin/systems/collider.rs
+++ b/src/plugin/systems/collider.rs
@@ -278,6 +278,12 @@ pub fn init_colliders(
 ) {
     let context = &mut *context;
 
+    let colliders = colliders.iter();
+    #[cfg(feature = "enhanced-determinism")]
+    let mut colliders: Vec<(ColliderComponents, Option<&GlobalTransform>)> = colliders.collect();
+    #[cfg(feature = "enhanced-determinism")]
+    colliders.sort_unstable_by_key(|f| f.0 .0);
+
     for (
         (
             entity,
@@ -296,7 +302,7 @@ pub fn init_colliders(
             disabled,
         ),
         global_transform,
-    ) in colliders.iter()
+    ) in colliders
     {
         let mut scaled_shape = shape.clone();
         scaled_shape.set_scale(shape.scale, config.scaled_shape_subdivision);
diff --git a/src/plugin/systems/joint.rs b/src/plugin/systems/joint.rs
index df3e489d..df464141 100644
--- a/src/plugin/systems/joint.rs
+++ b/src/plugin/systems/joint.rs
@@ -15,7 +15,13 @@ pub fn init_joints(
 ) {
     let context = &mut *context;
 
-    for (entity, joint) in impulse_joints.iter() {
+    let impulse_joints = impulse_joints.iter();
+    #[cfg(feature = "enhanced-determinism")]
+    let mut impulse_joints: Vec<(Entity, &ImpulseJoint)> = impulse_joints.collect();
+    #[cfg(feature = "enhanced-determinism")]
+    impulse_joints.sort_unstable_by_key(|f| f.0);
+
+    for (entity, joint) in impulse_joints {
         let mut target = None;
         let mut body_entity = entity;
         while target.is_none() {
@@ -41,7 +47,13 @@ pub fn init_joints(
         }
     }
 
-    for (entity, joint) in multibody_joints.iter() {
+    let multibody_joints = multibody_joints.iter();
+    #[cfg(feature = "enhanced-determinism")]
+    let mut multibody_joints: Vec<(Entity, &MultibodyJoint)> = multibody_joints.collect();
+    #[cfg(feature = "enhanced-determinism")]
+    multibody_joints.sort_unstable_by_key(|f| f.0);
+
+    for (entity, joint) in multibody_joints {
         let target = context.entity2body.get(&entity);
 
         if let (Some(target), Some(source)) = (target, context.entity2body.get(&joint.parent)) {
diff --git a/src/plugin/systems/remove.rs b/src/plugin/systems/remove.rs
index 69933986..179644c2 100644
--- a/src/plugin/systems/remove.rs
+++ b/src/plugin/systems/remove.rs
@@ -74,7 +74,13 @@ pub fn sync_removals(
     /*
      * Collider removal detection.
      */
-    for entity in removed_colliders.read() {
+    let removed_colliders = removed_colliders.read();
+    #[cfg(feature = "enhanced-determinism")]
+    let mut removed_colliders: Vec<Entity> = removed_colliders.collect();
+    #[cfg(feature = "enhanced-determinism")]
+    removed_colliders.sort_unstable();
+
+    for entity in removed_colliders {
         if let Some(parent) = context.collider_parent(entity) {
             mass_modified.send(parent.into());
         }
@@ -87,7 +93,13 @@ pub fn sync_removals(
         }
     }
 
-    for entity in orphan_colliders.iter() {
+    let orphan_colliders = orphan_colliders.iter();
+    #[cfg(feature = "enhanced-determinism")]
+    let mut orphan_colliders: Vec<Entity> = orphan_colliders.collect();
+    #[cfg(feature = "enhanced-determinism")]
+    orphan_colliders.sort_unstable();
+
+    for entity in orphan_colliders {
         if let Some(parent) = context.collider_parent(entity) {
             mass_modified.send(parent.into());
         }
diff --git a/src/plugin/systems/rigid_body.rs b/src/plugin/systems/rigid_body.rs
index ed7cb466..405c8a52 100644
--- a/src/plugin/systems/rigid_body.rs
+++ b/src/plugin/systems/rigid_body.rs
@@ -428,6 +428,12 @@ pub fn init_rigid_bodies(
     mut context: ResMut<RapierContext>,
     rigid_bodies: Query<RigidBodyComponents, Without<RapierRigidBodyHandle>>,
 ) {
+    let rigid_bodies = rigid_bodies.iter();
+    #[cfg(feature = "enhanced-determinism")]
+    let mut rigid_bodies: Vec<RigidBodyComponents> = rigid_bodies.collect();
+    #[cfg(feature = "enhanced-determinism")]
+    rigid_bodies.sort_unstable_by_key(|f| f.0);
+
     for (
         entity,
         rb,
@@ -444,7 +450,7 @@ pub fn init_rigid_bodies(
         damping,
         disabled,
         additional_solver_iters,
-    ) in rigid_bodies.iter()
+    ) in rigid_bodies
     {
         let mut builder = RigidBodyBuilder::new((*rb).into());
         builder = builder.enabled(disabled.is_none());