diff --git a/src/map.cpp b/src/map.cpp
index c4884a45a12cdc3652ac2da5af01ca6f8943ad80..821805d4eff55b49f83f59fb5914bf9e8454f65f 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -1764,7 +1764,7 @@ void Map::transformLiquidsFinite(std::map<v3s16, MapBlock*> & modified_blocks)
 		}
 
 		// prevent lakes in air above unloaded blocks
-		if (p0.Y > water_level && neighbors[D_BOTTOM].n.getContent() == CONTENT_IGNORE) {
+		if (liquid_levels[D_TOP] == 0 && (p0.Y > water_level || !fast_flood) && neighbors[D_BOTTOM].n.getContent() == CONTENT_IGNORE) {
 			--total_level;
 		}
 
diff --git a/src/mapgen_indev.cpp b/src/mapgen_indev.cpp
index 7f0faf16ffc2f52c636c5d44cb79824bd13c0963..ce5cfbfeb6836f20b81df357801e0f7a324d78c2 100644
--- a/src/mapgen_indev.cpp
+++ b/src/mapgen_indev.cpp
@@ -303,7 +303,7 @@ CaveIndev::CaveIndev(Mapgen *mg, PseudoRandom *ps, PseudoRandom *ps2,
 			flooded = !ps->range(0, 3);
 			tunnel_routepoints = ps->range(5, 30);
 			min_tunnel_diameter = 30;
-			max_tunnel_diameter = ps->range(40, ps->range(80, 200));
+			max_tunnel_diameter = ps->range(40, ps->range(80, 150));
 		} else {
 			tunnel_routepoints = ps->range(5, ps->range(15,30));
 			min_tunnel_diameter = 5;