Index: BlockArea.cpp
===================================================================
--- BlockArea.cpp	(revision 1706)
+++ BlockArea.cpp	(working copy)
@@ -802,6 +802,48 @@
 
 
 
+void cBlockArea::ReplaceAllBlockMeta(NIBBLETYPE a_ChangeMeta, NIBBLETYPE a_ToChangeMeta)
+{
+	for (int y = 0; y < m_SizeY; y++)
+	{
+		for (int z = 0; z < m_SizeZ; z++)
+		{
+			for (int x = 0; x < m_SizeX; x++)
+			{
+				if (m_BlockMetas[MakeIndex(x, y, z)] == a_ChangeMeta)
+				{
+					m_BlockMetas[MakeIndex(x, y, z)] = a_ToChangeMeta);
+				} // if BlockMeta == a_ChangeMeta
+			} // for x
+		} // for z
+	} // for y
+}
+
+
+
+
+
+void cBlockArea::ReplaceAllBlockTypes(BLOCKTYPE a_ChangeType, BLOCKTYPE a_ToChangeType)
+{
+	for (int y = 0; y < m_SizeY; y++)
+	{
+		for (int z = 0; z < m_SizeZ; z++)
+		{
+			for (int x = 0; x < m_SizeX; x++)
+			{
+				if (m_BlockTypes[MakeIndex(x, y, z)] == a_ChangeType)
+				{
+					m_BlockTypes[MakeIndex(x, y, z)] = a_ToChangeType;
+				} // if BlockType == a_ChangeType
+			} // for x
+		} // for z
+	} // for y
+}
+
+
+
+
+
 void cBlockArea::RelLine(int a_RelX1, int a_RelY1, int a_RelZ1, int a_RelX2, int a_RelY2, int a_RelZ2,
 	int a_DataTypes, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta,
 	NIBBLETYPE a_BlockLight, NIBBLETYPE a_BlockSkyLight
Index: BlockArea.h
===================================================================
--- BlockArea.h	(revision 1706)
+++ BlockArea.h	(working copy)
@@ -143,6 +143,12 @@
 		NIBBLETYPE a_BlockLight = 0, NIBBLETYPE a_BlockSkyLight = 0x0f
 	);
 	
+	/// Replaces a specific block metas to the given meta
+	void ReplaceAllBlockMeta(NIBBLETYPE a_ChangeMeta, NIBBLETYPE a_ToChangeMeta);
+
+	/// Replaces a specific block type to the given type
+	void ReplaceAllBlockTypes(BLOCKTYPE a_ChangeMeta, BLOCKTYPE a_ToChangeMeta);
+
 	/// Draws a line from between two points with the specified data
 	void RelLine(int a_RelX1, int a_RelY1, int a_RelZ1, int a_RelX2, int a_RelY2, int a_RelZ2,
 		int a_DataTypes, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta = 0,
