diff --git a/src/content_sao.cpp b/src/content_sao.cpp
index 3526ecbd2edffb64fa6fc2978c247a6f19ba8a4b..24a9186f77c0e1e0a8d6d0589f3f873ce36ba830 100644
--- a/src/content_sao.cpp
+++ b/src/content_sao.cpp
@@ -1472,6 +1472,11 @@ std::string PlayerSAO::getPropertyPacket()
 }
 
 bool PlayerSAO::getCollisionBox(aabb3f *toset) {
-	//player collision handling is already done clientside no need to do it twice
-	return false;
+	//update collision box
+	*toset = m_player->getCollisionbox();
+
+	toset->MinEdge += m_base_position;
+	toset->MaxEdge += m_base_position;
+
+	return true;
 }
diff --git a/src/localplayer.cpp b/src/localplayer.cpp
index 6b7b0943cdc1a3ca6f7961a19fa061c14b8af021..13117d8811b54830ac5856c9fd63d867ba8ce9d6 100644
--- a/src/localplayer.cpp
+++ b/src/localplayer.cpp
@@ -154,9 +154,6 @@ void LocalPlayer::move(f32 dtime, ClientEnvironment *env, f32 pos_max_d,
 	// This should always apply, otherwise there are glitches
 	assert(d > pos_max_d);
 
-	float player_radius = BS*0.30;
-	float player_height = BS*1.55;
-	
 	// Maximum distance over border for sneaking
 	f32 sneak_max = BS*0.4;
 
@@ -184,24 +181,12 @@ void LocalPlayer::move(f32 dtime, ClientEnvironment *env, f32 pos_max_d,
 		}
 	}
 
-	/*
-		Calculate player collision box (new and old)
-	*/
-	core::aabbox3d<f32> playerbox(
-		-player_radius,
-		0.0,
-		-player_radius,
-		player_radius,
-		player_height,
-		player_radius
-	);
-
 	float player_stepheight = touching_ground ? (BS*0.6) : (BS*0.2);
 
 	v3f accel_f = v3f(0,0,0);
 
 	collisionMoveResult result = collisionMoveSimple(env, m_gamedef,
-			pos_max_d, playerbox, player_stepheight, dtime,
+			pos_max_d, m_collisionbox, player_stepheight, dtime,
 			position, m_speed, accel_f);
 
 	/*
diff --git a/src/player.cpp b/src/player.cpp
index e86b642062277e6ec10ca64702977d5476755df1..d3e16810ff51a738353002288736437e33a3430d 100644
--- a/src/player.cpp
+++ b/src/player.cpp
@@ -42,7 +42,8 @@ Player::Player(IGameDef *gamedef):
 	m_pitch(0),
 	m_yaw(0),
 	m_speed(0,0,0),
-	m_position(0,0,0)
+	m_position(0,0,0),
+	m_collisionbox(-BS*0.30,0.0,-BS*0.30,BS*0.30,BS*1.55,BS*0.30)
 {
 	updateName("<not set>");
 	inventory.clear();
diff --git a/src/player.h b/src/player.h
index 4e5b3af977eb12c8c372cba9639cf2f4652b50ec..fade6de0189b3a72d5942ecf76fabdbb76e4ba17 100644
--- a/src/player.h
+++ b/src/player.h
@@ -180,6 +180,10 @@ class Player
 		return m_name;
 	}
 
+	core::aabbox3d<f32> getCollisionbox() {
+		return m_collisionbox;
+	}
+
 	virtual bool isLocal() const
 	{ return false; }
 	virtual PlayerSAO *getPlayerSAO()
@@ -255,6 +259,7 @@ class Player
 	f32 m_yaw;
 	v3f m_speed;
 	v3f m_position;
+	core::aabbox3d<f32> m_collisionbox;
 };