diff --git a/src/nodedef.cpp b/src/nodedef.cpp
index 96dca730bf7785e1463ef43bbb627fbc76aa7b5f..53e4d63f5784e8b15a2d46f90e4e209e4a768d36 100644
--- a/src/nodedef.cpp
+++ b/src/nodedef.cpp
@@ -46,10 +46,15 @@ void NodeBox::reset()
 	wall_side = aabb3f(-BS/2, -BS/2, -BS/2, -BS/2+BS/16., BS/2, BS/2);
 }
 
-void NodeBox::serialize(std::ostream &os) const
+void NodeBox::serialize(std::ostream &os, u16 protocol_version) const
 {
-	writeU8(os, 1); // version
-	writeU8(os, type);
+	int version = protocol_version >= 21 ? 2 : 1;
+	writeU8(os, version);
+
+	if (version == 1 && type == NODEBOX_LEVELED)
+		writeU8(os, NODEBOX_FIXED);
+	else
+		writeU8(os, type);
 
 	if(type == NODEBOX_FIXED || type == NODEBOX_LEVELED)
 	{
@@ -76,7 +81,7 @@ void NodeBox::serialize(std::ostream &os) const
 void NodeBox::deSerialize(std::istream &is)
 {
 	int version = readU8(is);
-	if(version != 1)
+	if(version < 1 || version > 2)
 		throw SerializationError("unsupported NodeBox version");
 
 	reset();
@@ -274,8 +279,8 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version)
 	writeU8(os, liquid_renewable);
 	writeU8(os, light_source);
 	writeU32(os, damage_per_second);
-	node_box.serialize(os);
-	selection_box.serialize(os);
+	node_box.serialize(os, protocol_version);
+	selection_box.serialize(os, protocol_version);
 	writeU8(os, legacy_facedir_simple);
 	writeU8(os, legacy_wallmounted);
 	serializeSimpleSoundSpec(sound_footstep, os);
@@ -918,8 +923,8 @@ void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version)
 		writeU8(os, liquid_viscosity);
 		writeU8(os, light_source);
 		writeU32(os, damage_per_second);
-		node_box.serialize(os);
-		selection_box.serialize(os);
+		node_box.serialize(os, protocol_version);
+		selection_box.serialize(os, protocol_version);
 		writeU8(os, legacy_facedir_simple);
 		writeU8(os, legacy_wallmounted);
 		serializeSimpleSoundSpec(sound_footstep, os);
diff --git a/src/nodedef.h b/src/nodedef.h
index 067861e62314de54db23eeb791e8080db2056926..714e1ba2c22f27c78dc8f6de0d58302852b0a4f2 100644
--- a/src/nodedef.h
+++ b/src/nodedef.h
@@ -90,7 +90,7 @@ struct NodeBox
 	{ reset(); }
 
 	void reset();
-	void serialize(std::ostream &os) const;
+	void serialize(std::ostream &os, u16 protocol_version) const;
 	void deSerialize(std::istream &is);
 };