diff --git a/python-api-src/lib_building_placer.cpp b/python-api-src/lib_building_placer.cpp
index 6cb1b3e3703a634d885b013f0fbc1f009e902eaa..b925c749ab99620325d6f9fd6195b60d37ee1024 100644
--- a/python-api-src/lib_building_placer.cpp
+++ b/python-api-src/lib_building_placer.cpp
@@ -7,7 +7,7 @@ void define_building_placer(py::module & m)
     py::class_<BuildingPlacer>(m, "BuildingPlacer")
         .def("can_build_here", &BuildingPlacer::canBuildHere, "x"_a, "y"_a, "unit_type"_a)
         .def("can_build_here_with_spaces", &BuildingPlacer::canBuildHereWithSpace, "x"_a, "y"_a, "unit_type"_a, "build_distance"_a)
-        .def("get_build_location_near", &BuildingPlacer::getBuildLocationNear, "point2di"_a, "unit_type"_a, "build_distance"_a = 2)
+        .def("get_build_location_near", &BuildingPlacer::getBuildLocationNear, "point2di"_a, "unit_type"_a, "build_distance"_a = 2, "search_count"_a = 1000)
         .def("reserve_tiles", &BuildingPlacer::reserveTiles, "x"_a, "y"_a, "width"_a, "height"_a)
         .def("free_tiles", &BuildingPlacer::freeTiles, "x"_a, "y"_a, "width"_a, "height"_a);
 }
\ No newline at end of file
diff --git a/src/BuildingPlacer.cpp b/src/BuildingPlacer.cpp
index c3d14327ad536f6c3561d6b194b2e48cd5c02673..f5394da1625766d27022293bbc6846ef8ae82425 100644
--- a/src/BuildingPlacer.cpp
+++ b/src/BuildingPlacer.cpp
@@ -95,7 +95,7 @@ bool BuildingPlacer::canBuildHereWithSpace(int bx, int by, const UnitType & type
     return true;
 }
 
-CCTilePosition BuildingPlacer::getBuildLocationNear(const CCTilePosition & p, const UnitType & t, int buildDist) const
+CCTilePosition BuildingPlacer::getBuildLocationNear(const CCTilePosition & p, const UnitType & t, int buildDist, size_t search_count) const
 {
     //Timer t;
     //t.start();
@@ -106,7 +106,7 @@ CCTilePosition BuildingPlacer::getBuildLocationNear(const CCTilePosition & p, co
     //double ms1 = t.getElapsedTimeInMilliSec();
 
     // iterate through the list until we've found a suitable location
-    for (size_t i(0); i < closestToBuilding.size() && i < 1000; ++i)
+    for (size_t i(0); i < closestToBuilding.size() && (search_count == 0 || i < search_count); ++i)
     {
         auto & pos = closestToBuilding[i];
 
diff --git a/src/BuildingPlacer.h b/src/BuildingPlacer.h
index 7e762b5f81add17a9a52e680562ac41a9643bde2..791d3d95fe7c8c613124ab9ca506b75094c9a6b0 100644
--- a/src/BuildingPlacer.h
+++ b/src/BuildingPlacer.h
@@ -29,7 +29,7 @@ public:
     bool canBuildHereWithSpace(int bx, int by, const UnitType & type, int buildDist) const;
 
     // returns a build location near a building's desired location
-    CCTilePosition getBuildLocationNear(const CCTilePosition & p, const UnitType & type, int buildDist) const;
+    CCTilePosition getBuildLocationNear(const CCTilePosition & p, const UnitType & type, int buildDist, size_t search_count = 1000) const;
 
     void drawReservedTiles();