diff --git a/server/src/events/entity_creation.rs b/server/src/events/entity_creation.rs
index 49a4a8e872..6ecd41dd29 100644
--- a/server/src/events/entity_creation.rs
+++ b/server/src/events/entity_creation.rs
@@ -159,6 +159,6 @@ pub fn handle_create_waypoint(server: &mut Server, pos: Vec3<f32>) {
             animated: true,
         })
         .with(WaypointArea::default())
-        .with(comp::Mass(100000.0))
+        .with(comp::Mass(10_f32.powi(10)))
         .build();
 }
diff --git a/server/src/events/entity_manipulation.rs b/server/src/events/entity_manipulation.rs
index bc4ed8c6ba..8ca9d2cfee 100644
--- a/server/src/events/entity_manipulation.rs
+++ b/server/src/events/entity_manipulation.rs
@@ -40,12 +40,15 @@ pub fn handle_knockback(server: &Server, entity: EcsEntity, impulse: Vec3<f32>)
 
     if let Some(physics) = ecs.read_storage::<PhysicsState>().get(entity) {
         //Check if the entity is on a surface. If it is not, reduce knockback.
-        let impulse = impulse
+        let mut impulse = impulse
             * if physics.on_surface().is_some() {
                 1.0
             } else {
                 0.4
             };
+        if let Some(mass) = ecs.read_storage::<comp::Mass>().get(entity) {
+            impulse /= mass.0;
+        }
         let mut velocities = ecs.write_storage::<comp::Vel>();
         if let Some(vel) = velocities.get_mut(entity) {
             vel.0 = impulse;