diff --git a/.hgtags b/.hgtags
index f59575790ddbe70cab60a7ef3fde2da3f0b32bf9..95bda33a868aa0ef86b5a9aa028931078bf479dd 100644
--- a/.hgtags
+++ b/.hgtags
@@ -1,6 +1 @@
 c37bcfd89dd627fdb131ae3f77fcaab02721bf76 working
-69547bd6be420eb40f55524fd2131cbbaa2e0e29 110107195706-exp
-e3c3c8e27bbc8c9b61710517a78944deb1c61696 110211211322
-23880c78e40c50ad54fcd8844510f7a423b37f2a 110212200513
-20c49c98c92a62df457b773c562df41d4167492b 110214175330
-10be2b71f965585af90af96903e83b4ddff52bf9 20110424_0
diff --git a/data/sandstone.png b/data/sandstone.png
new file mode 100644
index 0000000000000000000000000000000000000000..c4759b4d0289346f97ba69c44230d34b409c2a1d
Binary files /dev/null and b/data/sandstone.png differ
diff --git a/src/mapnode.cpp b/src/mapnode.cpp
index ca36697efa93f1e2fd01f1cccd468be0c719a74c..c006b8222ec13e75ebc3c9ad47fc446219927c84 100644
--- a/src/mapnode.cpp
+++ b/src/mapnode.cpp
@@ -181,6 +181,14 @@ void init_mapnode()
 	f->is_ground_content = true;
 	f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
 	
+	i = CONTENT_SANDSTONE;
+	f = &g_content_features[i];
+	f->setAllTextures("sandstone.png");
+	f->setInventoryTextureCube("sandstone.png", "sandstone.png", "sandstone.png");
+	f->param_type = CPT_MINERAL;
+	f->is_ground_content = true;
+	f->dug_item = std::string("MaterialItem ")+itos(CONTENT_SAND)+" 1";
+	
 	i = CONTENT_TREE;
 	f = &g_content_features[i];
 	f->setAllTextures("tree.png");
diff --git a/src/mapnode.h b/src/mapnode.h
index 57382aa2b9fe6bbd218dfbd5670791b8b7f053b8..ad256585ff425aaa3c2f232c0fa709546b5bbac0 100644
--- a/src/mapnode.h
+++ b/src/mapnode.h
@@ -101,6 +101,7 @@ void init_content_inventory_texture_paths();
 #define CONTENT_STEEL 19
 #define CONTENT_GLASS 20
 #define CONTENT_FENCE 21
+#define CONTENT_SANDSTONE 22
 
 /*
 	Content feature list
diff --git a/src/materials.cpp b/src/materials.cpp
index 841f1d6552911733c146ea01a74a3e7a552c2504..60c1894bff6a70a4a0bbf061938c5feb6d8a40fc 100644
--- a/src/materials.cpp
+++ b/src/materials.cpp
@@ -59,6 +59,7 @@ void initializeMaterialProperties()
 	*/
 
 	setStoneLikeDiggingProperties(CONTENT_STONE, 1.0);
+	setStoneLikeDiggingProperties(CONTENT_SANDSTONE, 1.0);
 	setStoneLikeDiggingProperties(CONTENT_MESE, 0.5);
 	setStoneLikeDiggingProperties(CONTENT_COALSTONE, 1.5);
 	setStoneLikeDiggingProperties(CONTENT_FURNACE, 3.0);
diff --git a/src/server.cpp b/src/server.cpp
index 9248e62984696caf7f5ba0f305aa9cbddedcecc9..c7b64f413eee08fc3b5c77bcacc5e9e213f6c039 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -3972,6 +3972,21 @@ void Server::UpdateCrafting(u16 peer_id)
 					found = true;
 				}
 			}
+
+			// Sandstone
+			if(!found)
+			{
+				ItemSpec specs[9];
+				specs[3] = ItemSpec(ITEM_MATERIAL, CONTENT_SAND);
+				specs[4] = ItemSpec(ITEM_MATERIAL, CONTENT_SAND);
+				specs[6] = ItemSpec(ITEM_MATERIAL, CONTENT_SAND);
+				specs[7] = ItemSpec(ITEM_MATERIAL, CONTENT_SAND);
+				if(checkItemCombination(items, specs))
+				{
+					rlist->addItem(new MaterialItem(CONTENT_SANDSTONE, 1));
+					found = true;
+				}
+			}
 		}
 	
 	} // if creative_mode == false
@@ -4060,6 +4075,7 @@ void setCreativeInventory(Player *player)
 		CONTENT_MUD,
 		CONTENT_STONE,
 		CONTENT_SAND,
+		CONTENT_SANDSTONE,
 		CONTENT_TREE,
 		CONTENT_LEAVES,
 		CONTENT_GLASS,
diff --git a/src/tile.cpp b/src/tile.cpp
index dabc1dcf3764b6eeaa5a1f9855bfac15b1b7c4c8..8b0c3f2ea155230541ff773cae1834ea90364bb7 100644
--- a/src/tile.cpp
+++ b/src/tile.cpp
@@ -506,6 +506,7 @@ void TextureSource::buildMainAtlas()
 	sourcelist.push_back("stone.png");
 	sourcelist.push_back("mud.png");
 	sourcelist.push_back("sand.png");
+	sourcelist.push_back("sandstone.png");
 	sourcelist.push_back("grass.png");
 	sourcelist.push_back("grass_footsteps.png");
 	sourcelist.push_back("tree.png");