diff --git a/src/editor/edmap.cpp b/src/editor/edmap.cpp
index c7dcde0d6..d4538eca8 100644
--- a/src/editor/edmap.cpp
+++ b/src/editor/edmap.cpp
@@ -168,9 +168,11 @@ static void EditorChangeSurrounding(const Vec2i &pos, const Vec2i &lock_pos)
 			unsigned q2 = QuadFromTile(pos + offset);
 			unsigned u = (q2 & TH_QUAD_M) | ((quad >> 16) & BH_QUAD_M);
 			if (u != q2 && (pos + offset) != lock_pos) {
-				did_change = true;
 				int tile = Map.Tileset->tileFromQuad(u & BH_QUAD_M, u);
-				EditorChangeTile(pos + offset, tile, lock_pos);
+				if (tile) {
+					did_change = true;
+					EditorChangeTile(pos + offset, tile, lock_pos);
+				}
 			}
 		}
 	}
@@ -181,9 +183,11 @@ static void EditorChangeSurrounding(const Vec2i &pos, const Vec2i &lock_pos)
 			unsigned q2 = QuadFromTile(pos + offset);
 			unsigned u = (q2 & BH_QUAD_M) | ((quad << 16) & TH_QUAD_M);
 			if (u != q2 && (pos + offset) != lock_pos) {
-				did_change = true;
 				int tile = Map.Tileset->tileFromQuad(u & TH_QUAD_M, u);
-				EditorChangeTile(pos + offset, tile, lock_pos);
+				if (tile) {
+					did_change = true;
+					EditorChangeTile(pos + offset, tile, lock_pos);
+				}
 			}
 		}
 	}
@@ -194,9 +198,11 @@ static void EditorChangeSurrounding(const Vec2i &pos, const Vec2i &lock_pos)
 			unsigned q2 = QuadFromTile(pos + offset);
 			unsigned u = (q2 & LH_QUAD_M) | ((quad >> 8) & RH_QUAD_M);
 			if (u != q2 && (pos + offset) != lock_pos) {
-				did_change = true;
 				int tile = Map.Tileset->tileFromQuad(u & RH_QUAD_M, u);
-				EditorChangeTile(pos + offset, tile, lock_pos);
+				if (tile) {
+					did_change = true;
+					EditorChangeTile(pos + offset, tile, lock_pos);
+				}
 			}
 		}
 	}
@@ -207,9 +213,11 @@ static void EditorChangeSurrounding(const Vec2i &pos, const Vec2i &lock_pos)
 			unsigned q2 = QuadFromTile(pos + offset);
 			unsigned u = (q2 & RH_QUAD_M) | ((quad << 8) & LH_QUAD_M);
 			if (u != q2 && (pos + offset) != lock_pos) {
-				did_change = true;
 				int tile = Map.Tileset->tileFromQuad(u & LH_QUAD_M, u);
-				EditorChangeTile(pos + offset, tile, lock_pos);
+				if (tile) {
+					did_change = true;
+					EditorChangeTile(pos + offset, tile, lock_pos);
+				}
 			}
 		}
 	}
diff --git a/src/map/tileset.cpp b/src/map/tileset.cpp
index 43bc8d0a3..b3b217aac 100644
--- a/src/map/tileset.cpp
+++ b/src/map/tileset.cpp
@@ -196,6 +196,7 @@
 */
 PixelSize PixelTileSize(32, 32);
 
+static const int TILE_PATH_MAX  = 6;
 
 /*----------------------------------------------------------------------------
 -- Functions
@@ -372,8 +373,11 @@ int CTileset::findTilePath(int base, int goal, int length, std::vector<char> &ma
 		*tileIndex = tileres;
 		return length;
 	}
+	if (length >= TILE_PATH_MAX) {
+		return TILE_PATH_MAX;
+	}
 	// Find any mixed tile
-	int l = INT_MAX;
+	int l = TILE_PATH_MAX;
 	for (size_t i = 0; i != tiles.size();) {
 		int j = 0;
 		if (base == tiles[i].tileinfo.BaseTerrain) {
@@ -417,7 +421,8 @@ int CTileset::tileFromQuad(unsigned fixed, unsigned quad) const
 	while (!(type1 = (fixed & 0xFF))) {
 		fixed >>= 8;
 		if (!fixed) {
-			ExitFatal(-1);
+			DebugPrint("WARNING: No fixed tile found for %x" _C_ fixed);
+			return 0;
 		}
 	}
 	fixed >>= 8;
@@ -467,7 +472,7 @@ int CTileset::tileFromQuad(unsigned fixed, unsigned quad) const
 	std::vector<char> marks;
 	marks.resize(getSolidTerrainCount(), 0);
 	marks[type1] = type1;
-	if (findTilePath(type1, type2, 0, marks, &tileIndex) == INT_MAX) {
+	if (findTilePath(type1, type2, 0, marks, &tileIndex) == TILE_PATH_MAX) {
 		DebugPrint("Huch, no mix found!!!!!!!!!!!\n");
 		const int res = findTileIndex(type1);
 		Assert(res != -1);