diff --git a/src/World/Chunk.cpp b/src/World/Chunk.cpp
index fc0307e..8b4b9eb 100644
--- a/src/World/Chunk.cpp
+++ b/src/World/Chunk.cpp
@@ -28,14 +28,18 @@ Chunk::Chunk(const ChunkData *data) {
 	auto biomesIntArray = level->get<NBT::IntArrayTag>("Biomes");
 	auto biomesByteArray = level->get<NBT::ByteArrayTag>("Biomes");
 
-	if (biomesIntArray && biomesIntArray->getLength() == BSIZE*BSIZE*BMAXY)
+	if (biomesIntArray && biomesIntArray->getLength() == BSIZE*BSIZE*BMAXY) {
 		biomeInts = std::move(biomesIntArray);
-	else if (biomesIntArray && biomesIntArray->getLength() == SIZE*SIZE)
-		biomeIntsPre115 = std::move(biomesIntArray);
-	else if (biomesByteArray && biomesByteArray->getLength() == SIZE*SIZE)
+		biomeFormat = INT_ARRAY;
+	} else if (biomesIntArray && biomesIntArray->getLength() == SIZE*SIZE) {
+		biomeInts = std::move(biomesIntArray);
+		biomeFormat = INT_ARRAY_PRE1_15;
+	} else if (biomesByteArray && biomesByteArray->getLength() == SIZE*SIZE) {
 		biomeBytes = std::move(biomesByteArray);
-	else
+		biomeFormat = BYTE_ARRAY;
+	} else {
 		throw std::invalid_argument("corrupt biome data");
+	}
 
 	auto dataVersionTag = data->getRoot()->get<NBT::IntTag>("DataVersion");
 	uint32_t dataVersion = dataVersionTag ? dataVersionTag->getValue() : 0;
@@ -53,14 +57,16 @@ uint8_t Chunk::getBiome(block_idx_t x, y_idx_t y, block_idx_t z) const {
 	if (x > SIZE || y > MAXY || z > SIZE)
 		throw std::invalid_argument("corrupt chunk data");
 
-	if (biomeInts)
+	switch (biomeFormat) {
+	case INT_ARRAY:
 		return biomeInts->getValue((y>>BSHIFT)*BSIZE*BSIZE + (z>>BSHIFT)*BSIZE + (x>>BSHIFT));
-	else if (biomeIntsPre115)
-		return biomeIntsPre115->getValue(z*SIZE + x);
-	else if (biomeBytes)
+	case INT_ARRAY_PRE1_15:
+		return biomeInts->getValue(z*SIZE + x);
+	case BYTE_ARRAY:
 		return biomeBytes->getValue(z*SIZE + x);
-	else
+	default:
 		return 0xff;
+	}
 }
 
 Block Chunk::getBlock(block_idx_t x, Chunk::Height height, block_idx_t z) const {
diff --git a/src/World/Chunk.hpp b/src/World/Chunk.hpp
index cfae0f7..1a59efe 100644
--- a/src/World/Chunk.hpp
+++ b/src/World/Chunk.hpp
@@ -57,8 +57,14 @@ public:
 private:
 	std::vector<std::unique_ptr<Section>> sections;
 
+	enum BiomeFormat {
+		UNKNOWN = 0,
+		BYTE_ARRAY,
+		INT_ARRAY_PRE1_15,
+		INT_ARRAY,
+	} biomeFormat = UNKNOWN;
+
 	std::shared_ptr<const NBT::ByteArrayTag> biomeBytes;
-	std::shared_ptr<const NBT::IntArrayTag> biomeIntsPre115;
 	std::shared_ptr<const NBT::IntArrayTag> biomeInts;
 
 	bool getHeight(