diff --git a/src/java/mmm/Mmm.java b/src/java/mmm/Mmm.java
index 2e9e97d..cadde8d 100644
--- a/src/java/mmm/Mmm.java
+++ b/src/java/mmm/Mmm.java
@@ -2,6 +2,7 @@ package mmm;
 
 
 import mmm.deco.DecorativeBlocks;
+import mmm.utils.UAccessors;
 import mmm.utils.URegistry;
 import mmm.utils.USeat;
 import net.minecraftforge.fml.common.Mod;
@@ -32,6 +33,8 @@ public class Mmm
 
 		public void preInit( final FMLPreInitializationEvent event )
 		{
+			UAccessors.preInit( );
+
 			DecorativeBlocks.preInit( );
 			URegistry.registerRecipes( );
 		}
diff --git a/src/java/mmm/deco/DExtraSlab.java b/src/java/mmm/deco/DExtraSlab.java
new file mode 100644
index 0000000..d12ba1f
--- /dev/null
+++ b/src/java/mmm/deco/DExtraSlab.java
@@ -0,0 +1,58 @@
+package mmm.deco;
+
+
+import mmm.utils.I_URecipeRegistrar;
+import mmm.utils.URegistry;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockStone;
+import net.minecraft.block.state.IBlockState;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemSlab;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fml.common.registry.GameRegistry;
+
+
+
+public class DExtraSlab
+		implements I_URecipeRegistrar
+{
+	public static DExtraSlab fromStone( final BlockStone.EnumType type )
+	{
+		final IBlockState bs = Blocks.STONE.getDefaultState( ).withProperty( BlockStone.VARIANT , type );
+		final String name = type.getName( ).replace( "smooth_" , "" );
+		return new DExtraSlab( bs , name );
+	}
+
+	public final DExtraSlabHalf HALF;
+	public final DExtraSlabDouble DOUBLE;
+	public final ItemSlab ITEM;
+
+
+	public DExtraSlab( final IBlockState modelState , final String name )
+	{
+		this.HALF = new DExtraSlabHalf( modelState , name );
+		this.DOUBLE = new DExtraSlabDouble( this.HALF , name );
+		this.ITEM = new ItemSlab( this.HALF , this.HALF , this.DOUBLE );
+		URegistry.setIdentifiers( this.ITEM , "deco" , "slabs" , name );
+	}
+
+
+	public DExtraSlab register( )
+	{
+		URegistry.addBlock( this.HALF , this.ITEM );
+		URegistry.addBlock( this.DOUBLE , null );
+		URegistry.addRecipeRegistrar( this );
+		return this;
+	}
+
+
+	@Override
+	public void registerRecipes( )
+	{
+		final Block block = this.HALF.modelBlock;
+		final IBlockState state = this.HALF.modelState;
+		GameRegistry.addShapedRecipe( new ItemStack( this.HALF ) , //
+				"BBB" , //
+				'B' , new ItemStack( block , 6 , block.getMetaFromState( state ) ) );
+	}
+}
diff --git a/src/java/mmm/deco/DExtraSlabBlock.java b/src/java/mmm/deco/DExtraSlabBlock.java
new file mode 100644
index 0000000..07a4d4f
--- /dev/null
+++ b/src/java/mmm/deco/DExtraSlabBlock.java
@@ -0,0 +1,124 @@
+package mmm.deco;
+
+
+import mmm.utils.UAccessors;
+import mmm.utils.URegistry;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockSlab;
+import net.minecraft.block.properties.IProperty;
+import net.minecraft.block.properties.PropertyEnum;
+import net.minecraft.block.state.BlockStateContainer;
+import net.minecraft.block.state.IBlockState;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IStringSerializable;
+
+
+
+public abstract class DExtraSlabBlock
+		extends BlockSlab
+{
+
+	public static enum E_Variant
+			implements IStringSerializable {
+		DEFAULT;
+
+		@Override
+		public String getName( )
+		{
+			return "default";
+		}
+	}
+
+	public static final PropertyEnum< DExtraSlabBlock.E_Variant > VARIANT //
+			= PropertyEnum.< DExtraSlabBlock.E_Variant > create( "variant" , DExtraSlabBlock.E_Variant.class );
+
+	public final IBlockState modelState;
+	public final Block modelBlock;
+
+
+	public DExtraSlabBlock( final IBlockState modelState , final String name )
+	{
+		super( modelState.getMaterial( ) );
+		this.modelState = modelState;
+		this.modelBlock = modelState.getBlock( );
+
+		this.setSoundType( this.modelBlock.getSoundType( ) );
+		try {
+			this.setHardness( UAccessors.getBlockHardness( this.modelBlock ) );
+			this.setResistance( UAccessors.getBlockResistance( this.modelBlock ) + 0.5f );
+		} catch ( final Throwable e ) {
+			if ( e instanceof RuntimeException ) {
+				throw (RuntimeException) e;
+			}
+			throw new RuntimeException( e );
+		}
+		this.setCreativeTab( CreativeTabs.BUILDING_BLOCKS );
+
+		IBlockState state = this.blockState.getBaseState( );
+		if ( !this.isDouble( ) ) {
+			state = state.withProperty( BlockSlab.HALF , BlockSlab.EnumBlockHalf.BOTTOM );
+		}
+		this.setDefaultState( state.withProperty( DExtraSlabBlock.VARIANT , E_Variant.DEFAULT ) );
+
+		URegistry.setIdentifiers( this , "deco" , "slabs" , name );
+	}
+
+
+	@Override
+	public IBlockState getStateFromMeta( final int meta )
+	{
+		IBlockState iblockstate = this.getDefaultState( ).withProperty( DExtraSlabBlock.VARIANT , E_Variant.DEFAULT );
+		if ( !this.isDouble( ) ) {
+			iblockstate = iblockstate.withProperty( BlockSlab.HALF ,
+					( meta & 1 ) == 0 ? BlockSlab.EnumBlockHalf.BOTTOM : BlockSlab.EnumBlockHalf.TOP );
+		}
+		return iblockstate;
+	}
+
+
+	@Override
+	public int getMetaFromState( final IBlockState state )
+	{
+		int i = 0;
+		if ( !this.isDouble( ) && state.getValue( BlockSlab.HALF ) == BlockSlab.EnumBlockHalf.TOP ) {
+			i |= 1;
+		}
+		return i;
+	}
+
+
+	@Override
+	protected BlockStateContainer createBlockState( )
+	{
+		return this.isDouble( ) //
+				? new BlockStateContainer( this , new IProperty[] {
+						DExtraSlabBlock.VARIANT
+				} ) //
+				: new BlockStateContainer( this , new IProperty[] {
+						BlockSlab.HALF , DExtraSlabBlock.VARIANT
+				} );
+	}
+
+
+	@Override
+	public String getUnlocalizedName( final int meta )
+	{
+		return super.getUnlocalizedName( );
+	}
+
+
+	@Override
+	public IProperty< ? > getVariantProperty( )
+	{
+		return DExtraSlabBlock.VARIANT;
+	}
+
+
+	@Override
+	public Comparable< ? > getTypeForItem( final ItemStack stack )
+	{
+		return E_Variant.DEFAULT;
+	}
+
+}
diff --git a/src/java/mmm/deco/DExtraSlabDouble.java b/src/java/mmm/deco/DExtraSlabDouble.java
new file mode 100644
index 0000000..79c8939
--- /dev/null
+++ b/src/java/mmm/deco/DExtraSlabDouble.java
@@ -0,0 +1,48 @@
+package mmm.deco;
+
+import java.util.Random;
+
+import javax.annotation.Nullable;
+
+import net.minecraft.block.state.IBlockState;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.World;
+
+public class DExtraSlabDouble
+		extends DExtraSlabBlock
+{
+
+	public final DExtraSlabHalf singleSlab;
+
+
+	public DExtraSlabDouble( final DExtraSlabHalf single , final String name )
+	{
+		super( single.modelState , name + "_double" );
+		this.singleSlab = single;
+	}
+
+
+	@Override
+	@Nullable
+	public Item getItemDropped( final IBlockState state , final Random rand , final int fortune )
+	{
+		return Item.getItemFromBlock( this.singleSlab );
+	}
+
+
+	@Override
+	public ItemStack getItem( final World worldIn , final BlockPos pos , final IBlockState state )
+	{
+		return new ItemStack( this.singleSlab );
+	}
+
+
+	@Override
+	public boolean isDouble( )
+	{
+		return true;
+	}
+
+}
\ No newline at end of file
diff --git a/src/java/mmm/deco/DExtraSlabHalf.java b/src/java/mmm/deco/DExtraSlabHalf.java
new file mode 100644
index 0000000..6c7e717
--- /dev/null
+++ b/src/java/mmm/deco/DExtraSlabHalf.java
@@ -0,0 +1,21 @@
+package mmm.deco;
+
+import net.minecraft.block.state.IBlockState;
+
+public class DExtraSlabHalf
+		extends DExtraSlabBlock
+{
+
+	public DExtraSlabHalf( final IBlockState modelState , final String name )
+	{
+		super( modelState , name );
+	}
+
+
+	@Override
+	public boolean isDouble( )
+	{
+		return false;
+	}
+
+}
\ No newline at end of file
diff --git a/src/java/mmm/deco/DExtraStairs.java b/src/java/mmm/deco/DExtraStairs.java
index 661d4b9..4c3a238 100644
--- a/src/java/mmm/deco/DExtraStairs.java
+++ b/src/java/mmm/deco/DExtraStairs.java
@@ -17,9 +17,9 @@ public class DExtraStairs
 		extends BlockStairs
 		implements I_URecipeRegistrar
 {
-	public static DExtraStairs makeStoneStairs( BlockStone.EnumType type )
+	public static DExtraStairs fromStone( final BlockStone.EnumType type )
 	{
-		IBlockState bs = Blocks.STONE.getDefaultState( ).withProperty( BlockStone.VARIANT , type );
+		final IBlockState bs = Blocks.STONE.getDefaultState( ).withProperty( BlockStone.VARIANT , type );
 		return new DExtraStairs( bs , type.getName( ).replace( "smooth_" , "" ) );
 	}
 
@@ -27,7 +27,7 @@ public class DExtraStairs
 	public final Block modelBlock;
 
 
-	public DExtraStairs( final IBlockState modelState , String name )
+	public DExtraStairs( final IBlockState modelState , final String name )
 	{
 		super( modelState );
 		this.modelState = modelState;
@@ -43,7 +43,7 @@ public class DExtraStairs
 				"B  " , //
 				"BB " , //
 				"BBB" , //
-				'B' , new ItemStack( this.modelBlock , 1 , this.modelBlock.getMetaFromState( this.modelState ) ) );
+				'B' , new ItemStack( this.modelBlock , 4 , this.modelBlock.getMetaFromState( this.modelState ) ) );
 	}
 
 }
diff --git a/src/java/mmm/deco/DecorativeBlocks.java b/src/java/mmm/deco/DecorativeBlocks.java
index 4ccf456..ab69f2a 100644
--- a/src/java/mmm/deco/DecorativeBlocks.java
+++ b/src/java/mmm/deco/DecorativeBlocks.java
@@ -12,6 +12,10 @@ public class DecorativeBlocks
 	public static final DExtraStairs STAIRS_DIORITE;
 	public static final DExtraStairs STAIRS_ANDESITE;
 
+	public static final DExtraSlab SLAB_GRANITE;
+	public static final DExtraSlab SLAB_DIORITE;
+	public static final DExtraSlab SLAB_ANDESITE;
+
 	public static final DBlockTable TABLE_OAK;
 	public static final DBlockTable TABLE_BIRCH;
 	public static final DBlockTable TABLE_SPRUCE;
@@ -27,9 +31,17 @@ public class DecorativeBlocks
 	public static final DBlockChair CHAIR_ACACIA;
 
 	static {
-		URegistry.addBlock( STAIRS_GRANITE = DExtraStairs.makeStoneStairs( BlockStone.EnumType.GRANITE_SMOOTH ) );
-		URegistry.addBlock( STAIRS_DIORITE = DExtraStairs.makeStoneStairs( BlockStone.EnumType.DIORITE_SMOOTH ) );
-		URegistry.addBlock( STAIRS_ANDESITE = DExtraStairs.makeStoneStairs( BlockStone.EnumType.ANDESITE_SMOOTH ) );
+		final BlockStone.EnumType granite = BlockStone.EnumType.GRANITE_SMOOTH;
+		final BlockStone.EnumType diorite = BlockStone.EnumType.DIORITE_SMOOTH;
+		final BlockStone.EnumType andesite = BlockStone.EnumType.ANDESITE_SMOOTH;
+
+		URegistry.addBlock( STAIRS_GRANITE = DExtraStairs.fromStone( granite ) );
+		URegistry.addBlock( STAIRS_DIORITE = DExtraStairs.fromStone( diorite ) );
+		URegistry.addBlock( STAIRS_ANDESITE = DExtraStairs.fromStone( andesite ) );
+
+		SLAB_GRANITE = DExtraSlab.fromStone( granite ).register( );
+		SLAB_DIORITE = DExtraSlab.fromStone( diorite ).register( );
+		SLAB_ANDESITE = DExtraSlab.fromStone( andesite ).register( );
 
 		URegistry.addBlock( TABLE_OAK = new DBlockTable( E_DWoodType.OAK ) );
 		URegistry.addBlock( TABLE_BIRCH = new DBlockTable( E_DWoodType.BIRCH ) );
diff --git a/src/java/mmm/utils/UAccessors.java b/src/java/mmm/utils/UAccessors.java
new file mode 100644
index 0000000..afcde72
--- /dev/null
+++ b/src/java/mmm/utils/UAccessors.java
@@ -0,0 +1,66 @@
+package mmm.utils;
+
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.reflect.Field;
+
+import net.minecraft.block.Block;
+import net.minecraft.launchwrapper.Launch;
+
+
+
+/** Accessors for various Minecraft fields */
+public class UAccessors
+{
+	private static final boolean isDeobfuscated;
+
+
+	private static MethodHandle createGetter( Class< ? > cls , String fnForge , String fnSearge )
+	{
+		String fn = isDeobfuscated ? fnForge : fnSearge;
+		Field f;
+		try {
+			f = cls.getDeclaredField( fn );
+		} catch ( NoSuchFieldException e ) {
+			throw new RuntimeException( "could not find field " + fnForge + " / " + fnSearge //
+					+ " in class " + cls.getCanonicalName( ) , e );
+		}
+		f.setAccessible( true );
+		try {
+			return MethodHandles.lookup( ).unreflectGetter( f );
+		} catch ( IllegalAccessException e ) {
+			throw new RuntimeException( "error while creating getter for " + fnForge + " / " + fnSearge //
+					+ " in class " + cls.getCanonicalName( ) , e );
+		}
+	}
+
+	private static final MethodHandle fg_Block_blockHardness;
+	private static final MethodHandle fg_Block_blockResistance;
+
+	static {
+		isDeobfuscated = (Boolean) Launch.blackboard.get( "fml.deobfuscatedEnvironment" );
+		fg_Block_blockHardness = createGetter( Block.class , "blockHardness" , "field_149782_v" );
+		fg_Block_blockResistance = createGetter( Block.class , "blockResistance" , "field_149781_w" );
+	}
+
+
+	public static void preInit( )
+	{
+		// EMPTY
+	}
+
+
+	public static float getBlockHardness( Block block )
+			throws Throwable
+	{
+		return (float) fg_Block_blockHardness.invokeExact( block );
+	}
+
+
+	public static float getBlockResistance( Block block )
+			throws Throwable
+	{
+		return (float) fg_Block_blockResistance.invokeExact( block );
+	}
+}
diff --git a/src/resources/assets/mmm/blockstates/deco/slabs/andesite.json b/src/resources/assets/mmm/blockstates/deco/slabs/andesite.json
new file mode 100644
index 0000000..8dbac6b
--- /dev/null
+++ b/src/resources/assets/mmm/blockstates/deco/slabs/andesite.json
@@ -0,0 +1,6 @@
+{
+    "variants": {
+        "half=bottom,variant=default": { "model": "mmm:deco/slabs/andesite/bottom" },
+        "half=top,variant=default": { "model": "mmm:deco/slabs/andesite/top" }
+    }
+}
\ No newline at end of file
diff --git a/src/resources/assets/mmm/blockstates/deco/slabs/andesite_double.json b/src/resources/assets/mmm/blockstates/deco/slabs/andesite_double.json
new file mode 100644
index 0000000..d49ad89
--- /dev/null
+++ b/src/resources/assets/mmm/blockstates/deco/slabs/andesite_double.json
@@ -0,0 +1,5 @@
+{
+    "variants": {
+        "variant=default": { "model": "mmm:deco/slabs/andesite/double" }
+    }
+}
diff --git a/src/resources/assets/mmm/blockstates/deco/slabs/diorite.json b/src/resources/assets/mmm/blockstates/deco/slabs/diorite.json
new file mode 100644
index 0000000..fa83946
--- /dev/null
+++ b/src/resources/assets/mmm/blockstates/deco/slabs/diorite.json
@@ -0,0 +1,6 @@
+{
+    "variants": {
+        "half=bottom,variant=default": { "model": "mmm:deco/slabs/diorite/bottom" },
+        "half=top,variant=default": { "model": "mmm:deco/slabs/diorite/top" }
+    }
+}
\ No newline at end of file
diff --git a/src/resources/assets/mmm/blockstates/deco/slabs/diorite_double.json b/src/resources/assets/mmm/blockstates/deco/slabs/diorite_double.json
new file mode 100644
index 0000000..2ab4210
--- /dev/null
+++ b/src/resources/assets/mmm/blockstates/deco/slabs/diorite_double.json
@@ -0,0 +1,5 @@
+{
+    "variants": {
+        "variant=default": { "model": "mmm:deco/slabs/diorite/double" }
+    }
+}
diff --git a/src/resources/assets/mmm/blockstates/deco/slabs/granite.json b/src/resources/assets/mmm/blockstates/deco/slabs/granite.json
new file mode 100644
index 0000000..d9a1162
--- /dev/null
+++ b/src/resources/assets/mmm/blockstates/deco/slabs/granite.json
@@ -0,0 +1,6 @@
+{
+    "variants": {
+        "half=bottom,variant=default": { "model": "mmm:deco/slabs/granite/bottom" },
+        "half=top,variant=default": { "model": "mmm:deco/slabs/granite/top" }
+    }
+}
\ No newline at end of file
diff --git a/src/resources/assets/mmm/blockstates/deco/slabs/granite_double.json b/src/resources/assets/mmm/blockstates/deco/slabs/granite_double.json
new file mode 100644
index 0000000..56e4a65
--- /dev/null
+++ b/src/resources/assets/mmm/blockstates/deco/slabs/granite_double.json
@@ -0,0 +1,5 @@
+{
+    "variants": {
+        "variant=default": { "model": "mmm:deco/slabs/granite/double" }
+    }
+}
diff --git a/src/resources/assets/mmm/lang/en_US.lang b/src/resources/assets/mmm/lang/en_US.lang
index df92673..90cc950 100644
--- a/src/resources/assets/mmm/lang/en_US.lang
+++ b/src/resources/assets/mmm/lang/en_US.lang
@@ -1,13 +1,21 @@
-tile.mmm.deco.table.oak.name=Oak table
-tile.mmm.deco.table.birch.name=Birch table
-tile.mmm.deco.table.spruce.name=Spruce table
-tile.mmm.deco.table.acacia.name=Acacia table
-tile.mmm.deco.table.jungle.name=Jungle wood table
-tile.mmm.deco.table.dark_oak.name=Dark oak table
+tile.mmm.deco.stairs.granite.name=Granite Stairs
+tile.mmm.deco.stairs.diorite.name=Diorite Stairs
+tile.mmm.deco.stairs.andesite.name=Andesite Stairs
 
-tile.mmm.deco.chair.oak.name=Oak chair
-tile.mmm.deco.chair.birch.name=Birch chair
-tile.mmm.deco.chair.spruce.name=Spruce chair
-tile.mmm.deco.chair.acacia.name=Acacia chair
-tile.mmm.deco.chair.jungle.name=Jungle wood chair
-tile.mmm.deco.chair.dark_oak.name=Dark oak chair
+tile.mmm.deco.slabs.granite.name=Granite Slab
+tile.mmm.deco.slabs.diorite.name=Diorite Slab
+tile.mmm.deco.slabs.andesite.name=Andesite Slab
+
+tile.mmm.deco.table.oak.name=Oak Table
+tile.mmm.deco.table.birch.name=Birch Table
+tile.mmm.deco.table.spruce.name=Spruce Table
+tile.mmm.deco.table.acacia.name=Acacia Table
+tile.mmm.deco.table.jungle.name=Jungle Wood Table
+tile.mmm.deco.table.dark_oak.name=Dark Oak Table
+
+tile.mmm.deco.chair.oak.name=Oak Chair
+tile.mmm.deco.chair.birch.name=Birch Chair
+tile.mmm.deco.chair.spruce.name=Spruce Chair
+tile.mmm.deco.chair.acacia.name=Acacia Chair
+tile.mmm.deco.chair.jungle.name=Jungle Wood Chair
+tile.mmm.deco.chair.dark_oak.name=Dark Oak Chair
diff --git a/src/resources/assets/mmm/models/block/deco/slabs/andesite/bottom.json b/src/resources/assets/mmm/models/block/deco/slabs/andesite/bottom.json
new file mode 100644
index 0000000..4361a8e
--- /dev/null
+++ b/src/resources/assets/mmm/models/block/deco/slabs/andesite/bottom.json
@@ -0,0 +1,8 @@
+{
+    "parent": "minecraft:block/half_slab",
+    "textures": {
+        "bottom": "minecraft:blocks/stone_andesite_smooth",
+        "top": "minecraft:blocks/stone_andesite_smooth",
+        "side": "minecraft:blocks/stone_andesite_smooth"
+    }
+}
diff --git a/src/resources/assets/mmm/models/block/deco/slabs/andesite/double.json b/src/resources/assets/mmm/models/block/deco/slabs/andesite/double.json
new file mode 100644
index 0000000..28f0d36
--- /dev/null
+++ b/src/resources/assets/mmm/models/block/deco/slabs/andesite/double.json
@@ -0,0 +1,7 @@
+{
+    "parent": "minecraft:block/cube_column",
+    "textures": {
+        "end": "minecraft:blocks/stone_andesite_smooth",
+        "side": "minecraft:blocks/stone_andesite_smooth"
+    }
+}
\ No newline at end of file
diff --git a/src/resources/assets/mmm/models/block/deco/slabs/andesite/top.json b/src/resources/assets/mmm/models/block/deco/slabs/andesite/top.json
new file mode 100644
index 0000000..e0c29a8
--- /dev/null
+++ b/src/resources/assets/mmm/models/block/deco/slabs/andesite/top.json
@@ -0,0 +1,8 @@
+{
+    "parent": "minecraft:block/upper_slab",
+    "textures": {
+        "bottom": "minecraft:blocks/stone_andesite_smooth",
+        "top": "minecraft:blocks/stone_andesite_smooth",
+        "side": "minecraft:blocks/stone_andesite_smooth"
+    }
+}
\ No newline at end of file
diff --git a/src/resources/assets/mmm/models/block/deco/slabs/diorite/bottom.json b/src/resources/assets/mmm/models/block/deco/slabs/diorite/bottom.json
new file mode 100644
index 0000000..8db4067
--- /dev/null
+++ b/src/resources/assets/mmm/models/block/deco/slabs/diorite/bottom.json
@@ -0,0 +1,8 @@
+{
+    "parent": "minecraft:block/half_slab",
+    "textures": {
+        "bottom": "minecraft:blocks/stone_diorite_smooth",
+        "top": "minecraft:blocks/stone_diorite_smooth",
+        "side": "minecraft:blocks/stone_diorite_smooth"
+    }
+}
diff --git a/src/resources/assets/mmm/models/block/deco/slabs/diorite/double.json b/src/resources/assets/mmm/models/block/deco/slabs/diorite/double.json
new file mode 100644
index 0000000..99fba90
--- /dev/null
+++ b/src/resources/assets/mmm/models/block/deco/slabs/diorite/double.json
@@ -0,0 +1,7 @@
+{
+    "parent": "minecraft:block/cube_column",
+    "textures": {
+        "end": "minecraft:blocks/stone_diorite_smooth",
+        "side": "minecraft:blocks/stone_diorite_smooth"
+    }
+}
\ No newline at end of file
diff --git a/src/resources/assets/mmm/models/block/deco/slabs/diorite/top.json b/src/resources/assets/mmm/models/block/deco/slabs/diorite/top.json
new file mode 100644
index 0000000..6a5e706
--- /dev/null
+++ b/src/resources/assets/mmm/models/block/deco/slabs/diorite/top.json
@@ -0,0 +1,8 @@
+{
+    "parent": "minecraft:block/upper_slab",
+    "textures": {
+        "bottom": "minecraft:blocks/stone_diorite_smooth",
+        "top": "minecraft:blocks/stone_diorite_smooth",
+        "side": "minecraft:blocks/stone_diorite_smooth"
+    }
+}
\ No newline at end of file
diff --git a/src/resources/assets/mmm/models/block/deco/slabs/granite/bottom.json b/src/resources/assets/mmm/models/block/deco/slabs/granite/bottom.json
new file mode 100644
index 0000000..6cc3717
--- /dev/null
+++ b/src/resources/assets/mmm/models/block/deco/slabs/granite/bottom.json
@@ -0,0 +1,8 @@
+{
+    "parent": "minecraft:block/half_slab",
+    "textures": {
+        "bottom": "minecraft:blocks/stone_granite_smooth",
+        "top": "minecraft:blocks/stone_granite_smooth",
+        "side": "minecraft:blocks/stone_granite_smooth"
+    }
+}
diff --git a/src/resources/assets/mmm/models/block/deco/slabs/granite/double.json b/src/resources/assets/mmm/models/block/deco/slabs/granite/double.json
new file mode 100644
index 0000000..b6fef9f
--- /dev/null
+++ b/src/resources/assets/mmm/models/block/deco/slabs/granite/double.json
@@ -0,0 +1,7 @@
+{
+    "parent": "minecraft:block/cube_column",
+    "textures": {
+        "end": "minecraft:blocks/stone_granite_smooth",
+        "side": "minecraft:blocks/stone_granite_smooth"
+    }
+}
\ No newline at end of file
diff --git a/src/resources/assets/mmm/models/block/deco/slabs/granite/top.json b/src/resources/assets/mmm/models/block/deco/slabs/granite/top.json
new file mode 100644
index 0000000..89d4f73
--- /dev/null
+++ b/src/resources/assets/mmm/models/block/deco/slabs/granite/top.json
@@ -0,0 +1,8 @@
+{
+    "parent": "minecraft:block/upper_slab",
+    "textures": {
+        "bottom": "minecraft:blocks/stone_granite_smooth",
+        "top": "minecraft:blocks/stone_granite_smooth",
+        "side": "minecraft:blocks/stone_granite_smooth"
+    }
+}
\ No newline at end of file
diff --git a/src/resources/assets/mmm/models/item/deco/slabs/andesite.json b/src/resources/assets/mmm/models/item/deco/slabs/andesite.json
new file mode 100644
index 0000000..54d44c2
--- /dev/null
+++ b/src/resources/assets/mmm/models/item/deco/slabs/andesite.json
@@ -0,0 +1,3 @@
+{
+	"parent": "mmm:block/deco/slabs/andesite/bottom"
+}
\ No newline at end of file
diff --git a/src/resources/assets/mmm/models/item/deco/slabs/diorite.json b/src/resources/assets/mmm/models/item/deco/slabs/diorite.json
new file mode 100644
index 0000000..95773ea
--- /dev/null
+++ b/src/resources/assets/mmm/models/item/deco/slabs/diorite.json
@@ -0,0 +1,3 @@
+{
+	"parent": "mmm:block/deco/slabs/diorite/bottom"
+}
\ No newline at end of file
diff --git a/src/resources/assets/mmm/models/item/deco/slabs/granite.json b/src/resources/assets/mmm/models/item/deco/slabs/granite.json
new file mode 100644
index 0000000..a35011e
--- /dev/null
+++ b/src/resources/assets/mmm/models/item/deco/slabs/granite.json
@@ -0,0 +1,3 @@
+{
+	"parent": "mmm:block/deco/slabs/granite/bottom"
+}
\ No newline at end of file