diff --git a/src/core/Range2D.cpp b/src/core/Range2D.cpp
index daa36d6a..33eafd0e 100644
--- a/src/core/Range2D.cpp
+++ b/src/core/Range2D.cpp
@@ -18,5 +18,11 @@ CRange2D::DebugShowRange(float, int)
 CVector2D
 CRange2D::GetRandomPointInRange()
 {
-	return CVector2D(CGeneral::GetRandomNumberInRange(min.x, max.x), CGeneral::GetRandomNumberInRange(min.y, max.y));
+	int distX = Abs(max.x - min.x);
+	int distY = Abs(max.y - min.y);
+
+	float outX = CGeneral::GetRandomNumber() % distX + min.x;
+	float outY = CGeneral::GetRandomNumber() % distY + min.y;
+
+	return CVector2D(outX, outY);
 }
diff --git a/src/core/Range3D.cpp b/src/core/Range3D.cpp
index 14d2dbd2..7fa28d67 100644
--- a/src/core/Range3D.cpp
+++ b/src/core/Range3D.cpp
@@ -18,6 +18,13 @@ CRange3D::DebugShowRange(float, int)
 CVector
 CRange3D::GetRandomPointInRange()
 {
-	return CVector(CGeneral::GetRandomNumberInRange(min.x, max.x), CGeneral::GetRandomNumberInRange(min.y, max.y),
-	               CGeneral::GetRandomNumberInRange(min.z, max.z));
+	int distX = Abs(max.x - min.x);
+	int distY = Abs(max.y - min.y);
+	int distZ = Abs(max.z - min.z);
+
+	float outX = CGeneral::GetRandomNumber() % distX + min.x;
+	float outY = CGeneral::GetRandomNumber() % distY + min.y;
+	float outZ = CGeneral::GetRandomNumber() % distZ + min.z;
+
+	return CVector(outX, outY, outZ);
 }
diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp
index 055581ad..88b09e91 100644
--- a/src/peds/Ped.cpp
+++ b/src/peds/Ped.cpp
@@ -57,6 +57,7 @@
 #include "Timecycle.h"
 #include "ParticleObject.h"
 #include "Floater.h"
+#include "Range2D.h"
 
 #define CAN_SEE_ENTITY_ANGLE_THRESHOLD	DEGTORAD(60.0f)
 
@@ -14927,17 +14928,9 @@ CPed::WanderRange(void)
 	bool arrived = Seek();
 	if (arrived) {
 		Idle();
-		if (((m_randomSeed % 256) + 3 * CTimer::GetFrameCounter()) % 1000 > 997) {
-
-			int xDiff = Abs(m_wanderRangeBounds[1].x - m_wanderRangeBounds[0].x);
-			int yDiff = Abs(m_wanderRangeBounds[1].y - m_wanderRangeBounds[0].y);
-
-			CVector newCoords(
-				(CGeneral::GetRandomNumber() % xDiff) + m_wanderRangeBounds[0].x,
-				(CGeneral::GetRandomNumber() % yDiff) + m_wanderRangeBounds[0].y,
-				GetPosition().z);
-
-			SetSeek(newCoords, 2.5f);
+		if ((m_randomSeed + 3 * CTimer::GetFrameCounter()) % 1000 > 997) {
+			CVector2D newCoords2D = m_wanderRangeBounds->GetRandomPointInRange();
+			SetSeek(CVector(newCoords2D.x, newCoords2D.y, GetPosition().z), 2.5f);
 		}
 	}
 }
diff --git a/src/peds/Ped.h b/src/peds/Ped.h
index 56e527c5..31a75ace 100644
--- a/src/peds/Ped.h
+++ b/src/peds/Ped.h
@@ -468,7 +468,7 @@ public:
 	CEntity *m_pCollidingEntity;
 	uint8 m_stateUnused;
 	uint32 m_timerUnused;
-	CVector2D *m_wanderRangeBounds;	// array with 2 CVector2D (actually unused CRange2D class) - unused
+	class CRange2D *m_wanderRangeBounds;
 	CWeapon m_weapons[WEAPONTYPE_TOTAL_INVENTORY_WEAPONS];
 	eWeaponType m_storedWeapon;
 	uint8 m_currentWeapon;			// eWeaponType