diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index ed8f8504e9a7d3a98a0badea67e2115912aa81e1..6d359379e6842b3b1fc9e5672037d2d24497ade4 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -2679,10 +2679,20 @@ This is basically a reference to a C++ `ServerActiveObject`
 * `get_player_velocity()`: returns `nil` if is not a player, otherwise a
   table {x, y, z} representing the player's instantaneous velocity in nodes/s
 * `get_look_dir()`: get camera direction as a unit vector
-* `get_look_pitch()`: pitch in radians
-* `get_look_yaw()`: yaw in radians (wraps around pretty randomly as of now)
-* `set_look_pitch(radians)`: sets look pitch
-* `set_look_yaw(radians)`: sets look yaw
+* `get_look_vertical()`: pitch in radians
+     * Angle ranges between -pi/2 and pi/2, which are straight up and down respectively.
+* `get_look_horizontal()`: yaw in radians
+     * Angle is counter-clockwise from the +z direction.
+* `set_look_vertical(radians)`: sets look pitch
+     * radians - Angle from looking forward, where positive is downwards.
+* `set_look_horizontal(radians)`: sets look yaw
+     * radians - Angle from the +z direction, where positive is counter-clockwise.
+* `get_look_pitch()`: pitch in radians - Deprecated as broken. Use get_look_vertical.
+     * Angle ranges between -pi/2 and pi/2, which are straight down and up respectively.
+* `get_look_yaw()`: yaw in radians - Deprecated as broken. Use get_look_horizontal.
+     * Angle is counter-clockwise from the +x direction.
+* `set_look_pitch(radians)`: sets look pitch - Deprecated. Use set_look_vertical.
+* `set_look_yaw(radians)`: sets look yaw - Deprecated. Use set_look_horizontal.
 * `get_breath()`: returns players breath
 * `set_breath(value)`: sets players breath
      * values:
diff --git a/src/player.h b/src/player.h
index 6687ca86e6ac57a8d00210b40fce3ed35ded6ae2..e6fcf388acc0da0acdc35ba75fa5adf3b969c0c7 100644
--- a/src/player.h
+++ b/src/player.h
@@ -188,16 +188,28 @@ class Player
 		m_breath = breath;
 	}
 
-	f32 getRadPitch()
+	// Deprecated
+	f32 getRadPitchDep()
 	{
 		return -1.0 * m_pitch * core::DEGTORAD;
 	}
 
-	f32 getRadYaw()
+	// Deprecated
+	f32 getRadYawDep()
 	{
 		return (m_yaw + 90.) * core::DEGTORAD;
 	}
 
+	f32 getRadPitch()
+	{
+		return m_pitch * core::DEGTORAD;
+	}
+
+	f32 getRadYaw()
+	{
+		return m_yaw * core::DEGTORAD;
+	}
+
 	const char *getName() const
 	{
 		return m_name;
diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp
index 6d6614e7da9e3a36d3518c5eddf275d4db3524c0..befae42539e0d7ffc00fcd9e2f2df3605eb0f521 100644
--- a/src/script/lua_api/l_object.cpp
+++ b/src/script/lua_api/l_object.cpp
@@ -1016,27 +1016,61 @@ int ObjectRef::l_get_look_dir(lua_State *L)
 	Player *player = getplayer(ref);
 	if (player == NULL) return 0;
 	// Do it
-	float pitch = player->getRadPitch();
-	float yaw = player->getRadYaw();
+	float pitch = player->getRadPitchDep();
+	float yaw = player->getRadYawDep();
 	v3f v(cos(pitch)*cos(yaw), sin(pitch), cos(pitch)*sin(yaw));
 	push_v3f(L, v);
 	return 1;
 }
 
+// DEPRECATED
 // get_look_pitch(self)
 int ObjectRef::l_get_look_pitch(lua_State *L)
 {
 	NO_MAP_LOCK_REQUIRED;
+
+	log_deprecated(L,
+		"Deprecated call to get_look_pitch, use get_look_vertical instead");
+
 	ObjectRef *ref = checkobject(L, 1);
 	Player *player = getplayer(ref);
 	if (player == NULL) return 0;
 	// Do it
-	lua_pushnumber(L, player->getRadPitch());
+	lua_pushnumber(L, player->getRadPitchDep());
 	return 1;
 }
 
+// DEPRECATED
 // get_look_yaw(self)
 int ObjectRef::l_get_look_yaw(lua_State *L)
+{
+	NO_MAP_LOCK_REQUIRED;
+
+	log_deprecated(L,
+		"Deprecated call to get_look_yaw, use get_look_horizontal instead");
+
+	ObjectRef *ref = checkobject(L, 1);
+	Player *player = getplayer(ref);
+	if (player == NULL) return 0;
+	// Do it
+	lua_pushnumber(L, player->getRadYawDep());
+	return 1;
+}
+
+// get_look_pitch2(self)
+int ObjectRef::l_get_look_vertical(lua_State *L)
+{
+	NO_MAP_LOCK_REQUIRED;
+	ObjectRef *ref = checkobject(L, 1);
+	Player *player = getplayer(ref);
+	if (player == NULL) return 0;
+	// Do it
+	lua_pushnumber(L, player->getRadPitch());
+	return 1;
+}
+
+// get_look_yaw2(self)
+int ObjectRef::l_get_look_horizontal(lua_State *L)
 {
 	NO_MAP_LOCK_REQUIRED;
 	ObjectRef *ref = checkobject(L, 1);
@@ -1047,10 +1081,41 @@ int ObjectRef::l_get_look_yaw(lua_State *L)
 	return 1;
 }
 
+// set_look_vertical(self, radians)
+int ObjectRef::l_set_look_vertical(lua_State *L)
+{
+	NO_MAP_LOCK_REQUIRED;
+	ObjectRef *ref = checkobject(L, 1);
+	PlayerSAO* co = getplayersao(ref);
+	if (co == NULL) return 0;
+	float pitch = luaL_checknumber(L, 2) * core::RADTODEG;
+	// Do it
+	co->setPitch(pitch);
+	return 1;
+}
+
+// set_look_horizontal(self, radians)
+int ObjectRef::l_set_look_horizontal(lua_State *L)
+{
+	NO_MAP_LOCK_REQUIRED;
+	ObjectRef *ref = checkobject(L, 1);
+	PlayerSAO* co = getplayersao(ref);
+	if (co == NULL) return 0;
+	float yaw = luaL_checknumber(L, 2) * core::RADTODEG;
+	// Do it
+	co->setYaw(yaw);
+	return 1;
+}
+
+// DEPRECATED
 // set_look_pitch(self, radians)
 int ObjectRef::l_set_look_pitch(lua_State *L)
 {
 	NO_MAP_LOCK_REQUIRED;
+
+	log_deprecated(L,
+		"Deprecated call to set_look_pitch, use set_look_vertical instead.");
+
 	ObjectRef *ref = checkobject(L, 1);
 	PlayerSAO* co = getplayersao(ref);
 	if (co == NULL) return 0;
@@ -1060,10 +1125,15 @@ int ObjectRef::l_set_look_pitch(lua_State *L)
 	return 1;
 }
 
+// DEPRECATED
 // set_look_yaw(self, radians)
 int ObjectRef::l_set_look_yaw(lua_State *L)
 {
 	NO_MAP_LOCK_REQUIRED;
+
+	log_deprecated(L,
+		"Deprecated call to set_look_yaw, use set_look_horizontal instead.");
+
 	ObjectRef *ref = checkobject(L, 1);
 	PlayerSAO* co = getplayersao(ref);
 	if (co == NULL) return 0;
@@ -1754,6 +1824,10 @@ const luaL_reg ObjectRef::methods[] = {
 	luamethod(ObjectRef, get_look_dir),
 	luamethod(ObjectRef, get_look_pitch),
 	luamethod(ObjectRef, get_look_yaw),
+	luamethod(ObjectRef, get_look_vertical),
+	luamethod(ObjectRef, get_look_horizontal),
+	luamethod(ObjectRef, set_look_horizontal),
+	luamethod(ObjectRef, set_look_vertical),
 	luamethod(ObjectRef, set_look_yaw),
 	luamethod(ObjectRef, set_look_pitch),
 	luamethod(ObjectRef, get_breath),
diff --git a/src/script/lua_api/l_object.h b/src/script/lua_api/l_object.h
index a4457cc051e5c81ca54989914323422c7ce9f1b7..a37d29535accfeccfc0abaec09de55df784a0a24 100644
--- a/src/script/lua_api/l_object.h
+++ b/src/script/lua_api/l_object.h
@@ -189,15 +189,31 @@ class ObjectRef : public ModApiBase {
 	// get_look_dir(self)
 	static int l_get_look_dir(lua_State *L);
 
+	// DEPRECATED
 	// get_look_pitch(self)
 	static int l_get_look_pitch(lua_State *L);
 
+	// DEPRECATED
 	// get_look_yaw(self)
 	static int l_get_look_yaw(lua_State *L);
 
+	// get_look_pitch2(self)
+	static int l_get_look_vertical(lua_State *L);
+
+	// get_look_yaw2(self)
+	static int l_get_look_horizontal(lua_State *L);
+
+	// set_look_vertical(self, radians)
+	static int l_set_look_vertical(lua_State *L);
+
+	// set_look_horizontal(self, radians)
+	static int l_set_look_horizontal(lua_State *L);
+
+	// DEPRECATED
 	// set_look_pitch(self, radians)
 	static int l_set_look_pitch(lua_State *L);
 
+	// DEPRECATED
 	// set_look_yaw(self, radians)
 	static int l_set_look_yaw(lua_State *L);