diff --git a/src/client/tile.h b/src/client/tile.h
index 744aa2c3dc959f0ce4d09973acc6b5b2f3f9a450..c08ffc8ad080d9649c0d881077ed9da37c4aff19 100644
--- a/src/client/tile.h
+++ b/src/client/tile.h
@@ -168,6 +168,8 @@ enum MaterialType{
 // defined by extra parameters
 #define MATERIAL_FLAG_ANIMATION_VERTICAL_FRAMES 0x08
 #define MATERIAL_FLAG_HIGHLIGHTED 0x10
+#define MATERIAL_FLAG_TILEABLE_HORIZONTAL 0x20
+#define MATERIAL_FLAG_TILEABLE_VERTICAL 0x40
 
 /*
 	This fully defines the looks of a tile.
@@ -216,7 +218,9 @@ struct TileSpec
 			alpha == other.alpha &&
 			material_type == other.material_type &&
 			material_flags == other.material_flags &&
-			rotation == other.rotation
+			rotation == other.rotation &&
+			(material_flags & MATERIAL_FLAG_TILEABLE_HORIZONTAL) &&
+			(material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL)
 		);
 	}
 
@@ -250,12 +254,26 @@ struct TileSpec
 		}
 		material.BackfaceCulling = (material_flags & MATERIAL_FLAG_BACKFACE_CULLING)
 			? true : false;
+		if (!(material_flags & MATERIAL_FLAG_TILEABLE_HORIZONTAL)) {
+			material.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE;
+		}
+		if (!(material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL)) {
+			material.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE;
+		}
 	}
 
 	void applyMaterialOptionsWithShaders(video::SMaterial &material) const
 	{
 		material.BackfaceCulling = (material_flags & MATERIAL_FLAG_BACKFACE_CULLING)
 			? true : false;
+		if (!(material_flags & MATERIAL_FLAG_TILEABLE_HORIZONTAL)) {
+			material.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE;
+			material.TextureLayer[1].TextureWrapU = video::ETC_CLAMP_TO_EDGE;
+		}
+		if (!(material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL)) {
+			material.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE;
+			material.TextureLayer[1].TextureWrapV = video::ETC_CLAMP_TO_EDGE;
+		}
 	}
 	
 	u32 texture_id;
diff --git a/src/nodedef.cpp b/src/nodedef.cpp
index c9c461b20118a5ebbee063a163191443988a7c48..daaa871f9c8c7d5653fbd644992bc14d2addee4d 100644
--- a/src/nodedef.cpp
+++ b/src/nodedef.cpp
@@ -1014,7 +1014,7 @@ void CNodeDefManager::fillTileAttribs(ITextureSource *tsrc, TileSpec *tile,
 	}
 	tile->flags_texture = tsrc->getShaderFlagsTexture(
 		tile->normal_texture ? true : false,
-		tiledef->tileable_horizontal, tiledef->tileable_vertical);
+		tiledef->tileable_vertical, tiledef->tileable_horizontal);
 
 	// Material flags
 	tile->material_flags = 0;
@@ -1022,6 +1022,10 @@ void CNodeDefManager::fillTileAttribs(ITextureSource *tsrc, TileSpec *tile,
 		tile->material_flags |= MATERIAL_FLAG_BACKFACE_CULLING;
 	if (tiledef->animation.type == TAT_VERTICAL_FRAMES)
 		tile->material_flags |= MATERIAL_FLAG_ANIMATION_VERTICAL_FRAMES;
+	if (tiledef->tileable_horizontal)
+		tile->material_flags |= MATERIAL_FLAG_TILEABLE_HORIZONTAL;
+	if (tiledef->tileable_vertical)
+		tile->material_flags |= MATERIAL_FLAG_TILEABLE_VERTICAL;
 
 	// Animation parameters
 	int frame_count = 1;
diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp
index 42c6889d893b816f7b5321c6633f186aa0d6a991..3754fc2ff9f8f886d8d1873b185791348da771f8 100644
--- a/src/script/common/c_content.cpp
+++ b/src/script/common/c_content.cpp
@@ -258,17 +258,20 @@ void push_object_properties(lua_State *L, ObjectProperties *prop)
 }
 
 /******************************************************************************/
-TileDef read_tiledef(lua_State *L, int index)
+TileDef read_tiledef(lua_State *L, int index, u8 drawtype)
 {
 	if(index < 0)
 		index = lua_gettop(L) + 1 + index;
 
 	TileDef tiledef;
-
+	bool default_tiling = (drawtype == NDT_PLANTLIKE || drawtype == NDT_FIRELIKE)
+		? false : true;
 	// key at index -2 and value at index
 	if(lua_isstring(L, index)){
 		// "default_lava.png"
 		tiledef.name = lua_tostring(L, index);
+		tiledef.tileable_vertical = default_tiling;
+		tiledef.tileable_horizontal = default_tiling;
 	}
 	else if(lua_istable(L, index))
 	{
@@ -279,9 +282,9 @@ TileDef read_tiledef(lua_State *L, int index)
 		tiledef.backface_culling = getboolfield_default(
 			L, index, "backface_culling", true);
 		tiledef.tileable_horizontal = getboolfield_default(
-			L, index, "tileable_horizontal", true);
+			L, index, "tileable_horizontal", default_tiling);
 		tiledef.tileable_vertical = getboolfield_default(
-			L, index, "tileable_vertical", true);
+			L, index, "tileable_vertical", default_tiling);
 		// animation = {}
 		lua_getfield(L, index, "animation");
 		if(lua_istable(L, -1)){
@@ -357,7 +360,7 @@ ContentFeatures read_content_features(lua_State *L, int index)
 		int i = 0;
 		while(lua_next(L, table) != 0){
 			// Read tiledef from value
-			f.tiledef[i] = read_tiledef(L, -1);
+			f.tiledef[i] = read_tiledef(L, -1, f.drawtype);
 			// removes value, keeps key for next iteration
 			lua_pop(L, 1);
 			i++;
@@ -392,7 +395,7 @@ ContentFeatures read_content_features(lua_State *L, int index)
 		int i = 0;
 		while(lua_next(L, table) != 0){
 			// Read tiledef from value
-			f.tiledef_special[i] = read_tiledef(L, -1);
+			f.tiledef_special[i] = read_tiledef(L, -1, f.drawtype);
 			// removes value, keeps key for next iteration
 			lua_pop(L, 1);
 			i++;
diff --git a/src/script/common/c_content.h b/src/script/common/c_content.h
index 4547009e7c549a8eaa3f991e7610edd1d0883c13..46416ad8e50d1e015c1cc4e2bd7234a5568c6489 100644
--- a/src/script/common/c_content.h
+++ b/src/script/common/c_content.h
@@ -63,7 +63,8 @@ class Schematic;
 
 
 ContentFeatures    read_content_features     (lua_State *L, int index);
-TileDef            read_tiledef              (lua_State *L, int index);
+TileDef            read_tiledef              (lua_State *L, int index,
+                                              u8 drawtype);
 void               read_soundspec            (lua_State *L, int index,
                                               SimpleSoundSpec &spec);
 NodeBox            read_nodebox              (lua_State *L, int index);