diff --git a/src/ai/ai_building.cpp b/src/ai/ai_building.cpp
index 1a47ce809..f9aa0a6cd 100644
--- a/src/ai/ai_building.cpp
+++ b/src/ai/ai_building.cpp
@@ -608,8 +608,7 @@ static int AiFindMiningPlace(const CUnit &worker,
 **
 **  @param worker  Worker to build building.
 **  @param type    Type of building.
-**  @param nx      Start search near X position (or worker->X if nx == -1).
-**  @param ny      Start search near Y position (or worker->Y if ny == -1).
+**  @param nearPos Start search near nearPos position (or worker->X if nearPos is invalid).
 **  @param dpos    Pointer for position returned.
 **
 **  @return        True if place found, false if no found.
@@ -617,11 +616,9 @@ static int AiFindMiningPlace(const CUnit &worker,
 **  @todo          Better and faster way to find building place of oil
 **                 platforms Special routines for special buildings.
 */
-int AiFindBuildingPlace(const CUnit &worker, const CUnitType &type, int nx, int ny, Vec2i *dpos)
+int AiFindBuildingPlace(const CUnit &worker, const CUnitType &type, const Vec2i &nearPos, Vec2i *dpos)
 {
-	//
 	// Find a good place for a new hall
-	//
 	DebugPrint("%d: Want to build a %s(%s)\n" _C_ AiPlayer->Player->Index
 			   _C_ type.Ident.c_str() _C_ type.Name.c_str());
 
@@ -631,27 +628,25 @@ int AiFindBuildingPlace(const CUnit &worker, const CUnitType &type, int nx, int
 		//Depots
 		if (type.CanStore[i]) {
 			if (resinfo && resinfo->TerrainHarvester) {
-				return AiFindLumberMillPlace(worker, type, nx, ny, dpos);
+				return AiFindLumberMillPlace(worker, type, nearPos.x, nearPos.y, dpos);
 			} else {
-				return AiFindHallPlace(worker, type, nx, ny, dpos, i);
+				return AiFindHallPlace(worker, type, nearPos.x, nearPos.y, dpos, i);
 			}
 		} else
 			//mines
 			if (type.GivesResource == i) {
 				if (resinfo && resinfo->RefineryHarvester) {
 					//Mine have to be build ONTOP resources
-					return AiFindMiningPlace(worker, type, nx, ny,  dpos, i);
+					return AiFindMiningPlace(worker, type, nearPos.x, nearPos.y,  dpos, i);
 				} else {
 					//Mine can be build without resource restrictions: solar panels, etc
-					return AiFindBuildingPlace2(worker, type,
-												(nx != -1 ? nx : worker.tilePos.x),
-												(ny != -1 ? ny : worker.tilePos.y), dpos, 1);
+					const Vec2i& startPos = Map.Info.IsPointOnMap(nearPos) ? nearPos : worker.tilePos;
+					return AiFindBuildingPlace2(worker, type, startPos.x, startPos.y, dpos, 1);
 				}
 			}
 	}
-
-	return AiFindBuildingPlace2(worker, type,
-								(nx != -1 ? nx : worker.tilePos.x), (ny != -1 ? ny : worker.tilePos.y), dpos, 1);
+	const Vec2i& startPos = Map.Info.IsPointOnMap(nearPos) ? nearPos : worker.tilePos;
+	return AiFindBuildingPlace2(worker, type, startPos.x, startPos.y, dpos, 1);
 }
 
 //@}
diff --git a/src/ai/ai_local.h b/src/ai/ai_local.h
index fc30f47c4..b535b7d85 100644
--- a/src/ai/ai_local.h
+++ b/src/ai/ai_local.h
@@ -405,8 +405,7 @@ extern void AiNewDepotRequest(CUnit &worker);
 // Buildings
 //
 /// Find nice building place
-extern int AiFindBuildingPlace(const CUnit &worker,
-							   const CUnitType &type, int nx, int ny, Vec2i *dpos);
+extern int AiFindBuildingPlace(const CUnit &worker, const CUnitType &type, const Vec2i &nearPos, Vec2i *dpos);
 
 //
 // Forces
diff --git a/src/ai/ai_resource.cpp b/src/ai/ai_resource.cpp
index 791c90a7a..a6c5a222c 100644
--- a/src/ai/ai_resource.cpp
+++ b/src/ai/ai_resource.cpp
@@ -144,7 +144,9 @@ static int AiCheckSupply(const PlayerAi &pai, const CUnitType &type)
 	// Count what we train.
 	for (unsigned int i = 0; i < pai.UnitTypeBuilt.size(); ++i) {
 		const AiBuildQueue &queue = pai.UnitTypeBuilt[i];
-		if ((remaining -= queue.Made * queue.Type->Demand) < 0) {
+
+		remaining -= queue.Made * queue.Type->Demand;
+		if (remaining < 0) {
 			return 0;
 		}
 	}
@@ -288,7 +290,7 @@ static int AiBuildBuilding(const CUnitType &type, CUnitType &building, const Vec
 
 	Vec2i pos;
 	// Find a place to build.
-	if (AiFindBuildingPlace(unit, building, nearPos.x, nearPos.y, &pos)) {
+	if (AiFindBuildingPlace(unit, building, nearPos, &pos)) {
 		CommandBuildBuilding(unit, pos, building, FlushCommands);
 		return 1;
 	} else {
@@ -297,7 +299,7 @@ static int AiBuildBuilding(const CUnitType &type, CUnitType &building, const Vec
 			//Crush CPU !!!!!
 			for (int i = 0; i < num && table[i] != &unit; ++i) {
 				// Find a place to build.
-				if (AiFindBuildingPlace(*table[i], building, nearPos.x, nearPos.y, &pos)) {
+				if (AiFindBuildingPlace(*table[i], building, nearPos, &pos)) {
 					CommandBuildBuilding(*table[i], pos, building, FlushCommands);
 					return 1;
 				}