diff --git a/code/__DEFINES/icon_smoothing.dm b/code/__DEFINES/icon_smoothing.dm
index bb7c61f8390..e1edb67d048 100644
--- a/code/__DEFINES/icon_smoothing.dm
+++ b/code/__DEFINES/icon_smoothing.dm
@@ -95,6 +95,7 @@ DEFINE_BITFIELD(smoothing_flags, list(
#define SMOOTH_GROUP_SURVIVAL_TIANIUM_POD S_OBJ(14) ///turf/closed/wall/mineral/titanium/survival/pod, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/shuttle/survival_pod
#define SMOOTH_GROUP_HIERO_WALL S_OBJ(15) ///obj/effect/temp_visual/elite_tumor_wall, /obj/effect/temp_visual/hierophant/wall
+#define SMOOTH_GROUP_STONE_WALLS S_OBJ(19) ///turf/closed/wall/mineral/stone, /obj/structure/falsewall/stone // SKYRAT EDIT: Adds stone
#define SMOOTH_GROUP_PAPERFRAME S_OBJ(20) ///obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe
#define SMOOTH_GROUP_WINDOW_FULLTILE S_OBJ(21) ///turf/closed/indestructible/fakeglass, /obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile
diff --git a/modular_skyrat/modules/stone/code/ore_veins.dm b/modular_skyrat/modules/stone/code/ore_veins.dm
new file mode 100644
index 00000000000..1cf6881889e
--- /dev/null
+++ b/modular_skyrat/modules/stone/code/ore_veins.dm
@@ -0,0 +1,134 @@
+/obj/structure/ore_vein
+ name = "ore vein"
+ desc = "An ore vein that can mined."
+ icon = 'modular_skyrat/modules/stone/icons/ore.dmi'
+ icon_state = "stone"
+ density = TRUE
+ anchored = TRUE
+ /// When we start mining, what do we tell the user they're mining?
+ var/ore_descriptor = "stone"
+ /// What type of ore do we drop?
+ var/ore_type = /obj/item/stack/ore/stone
+ /// How much ore do we drop?
+ var/ore_amount = 1
+ /// If the ore vein has been recently mined. If so, we cannot mine and must wait for it to regenerate.
+ var/depleted = FALSE
+ /// How long it takes for the ore to 'respawn' after being mined.
+ var/regeneration_time = 15 SECONDS
+ /// How long it takes for a tool to mine the ore vein.
+ var/mining_time = 3 SECONDS
+ /// How many unique sprites for ore we have, we will pick them at random.
+ var/unique_sprites = 1
+ /// If we should pick a random sprite for the ore vein or not.
+ var/random_sprite = TRUE
+ /// Our original description to hold. We'll revert to this when switching between the ore vein being depleted and not.
+ var/base_desc = ""
+
+/obj/structure/ore_vein/Initialize()
+ . = ..()
+ base_desc = desc
+ if(random_sprite == TRUE)
+ icon_state += "[rand(1, (unique_sprites))]"
+ base_icon_state = icon_state
+
+/obj/structure/ore_vein/update_icon_state()
+ . = ..()
+ if(depleted == TRUE)
+ icon_state = "[base_icon_state]_depleted"
+ else
+ icon_state = "[base_icon_state]"
+
+/obj/structure/ore_vein/examine()
+ . = ..()
+ . += "[depleted ? "The ore vein is exhausted." : ""]"
+
+/obj/structure/ore_vein/attackby(obj/item/W, mob/user, params)
+ if(W.tool_behaviour != TOOL_MINING)
+ to_chat(user, "You need a pickaxe to mine this.")
+ return FALSE
+ if(!ore_type)
+ to_chat(user, "There's no ore to mine!")
+ return FALSE
+ if(!ore_amount)
+ to_chat(user, "The [src] is too low quality to yield any useful amount of [ore_descriptor].")
+ return FALSE
+ if(depleted == TRUE)
+ to_chat(user, "This ore vein is exhausted.")
+ return FALSE
+// Our early return checks to tell the user what went wrong.
+ to_chat(user, "You start mining the [ore_descriptor]...")
+ if(W.use_tool(src, user, src.mining_time, volume=50))
+ to_chat(user, "You mine the [ore_descriptor].")
+ if(ore_type && ore_amount && depleted == FALSE)
+ new ore_type(loc, ore_amount)
+ SSblackbox.record_feedback("tally", "pick_used_mining", 1, W.type)
+ depleted = TRUE
+ update_icon_state()
+ addtimer(CALLBACK(src, .proc/regenerate_ore), regeneration_time)
+
+// After the ore vein finishes its wait, we make the ore 'respawn' and return the ore to its original post-Initialize() icon_state.
+/obj/structure/ore_vein/proc/regenerate_ore()
+ depleted = FALSE
+ update_icon_state()
+
+/obj/structure/ore_vein/stone
+ name = "stone mine"
+ desc = "High-quality stone that once mined and refined, creates a robust construction material."
+ icon_state = "stone"
+ ore_type = /obj/item/stack/ore/stone
+ ore_amount = 1
+ unique_sprites = 2
+
+/obj/structure/ore_vein/iron
+ name = "iron mine"
+ desc = "An iron ore vein!"
+ icon_state = "iron"
+ ore_descriptor = "iron"
+ ore_type = /obj/item/stack/ore/iron
+ ore_amount = 1
+ unique_sprites = 2
+ mining_time = 5 SECONDS
+
+/obj/structure/ore_vein/silver
+ name = "silver mine"
+ desc = "Silver! In demand for more than it's beautiful lustre."
+ icon_state = "silver"
+ ore_descriptor = "silver"
+ ore_type = /obj/item/stack/ore/silver
+ ore_amount = 1
+ unique_sprites = 1
+ mining_time = 10 SECONDS
+ regeneration_time = 20 SECONDS
+
+/obj/structure/ore_vein/gold
+ name = "gold mine"
+ desc = "Precious shiny gold! A vital component for goods like electronics all the way to un-manned space vehicles."
+ icon_state = "gold"
+ ore_descriptor = "gold"
+ ore_type = /obj/item/stack/ore/gold
+ ore_amount = 1
+ unique_sprites = 2
+ mining_time = 10 SECONDS
+ regeneration_time = 20 SECONDS
+
+/obj/structure/ore_vein/plasma
+ name = "plasma mine"
+ desc = "Solid plasma! It's rather common."
+ icon_state = "plasma"
+ ore_descriptor = "plasma"
+ ore_type = /obj/item/stack/ore/plasma
+ ore_amount = 1
+ unique_sprites = 1
+ mining_time = 5 SECONDS
+ regeneration_time = 20 SECONDS
+
+/obj/structure/ore_vein/diamond
+ name = "diamond mine"
+ desc = "Diamond! It's rare and its industrial applications keep it very valuable."
+ icon_state = "diamond"
+ ore_descriptor = "diamond"
+ ore_type = /obj/item/stack/ore/diamond
+ ore_amount = 1
+ unique_sprites = 2
+ mining_time = 30 SECONDS
+ regeneration_time = 120 SECONDS
diff --git a/modular_skyrat/modules/stone/code/stone.dm b/modular_skyrat/modules/stone/code/stone.dm
new file mode 100644
index 00000000000..10dc0ddd708
--- /dev/null
+++ b/modular_skyrat/modules/stone/code/stone.dm
@@ -0,0 +1,79 @@
+/obj/item/stack/sheet/mineral/stone
+ name = "stone"
+ desc = "Stone brick."
+ singular_name = "stone block"
+ icon = 'modular_skyrat/modules/stone/icons/ore.dmi'
+ icon_state = "sheet-stone"
+ inhand_icon_state = "sheet-metal"
+ mats_per_unit = list(/datum/material/stone=MINERAL_MATERIAL_AMOUNT)
+ throwforce = 10
+// flags_1 = null
+ resistance_flags = FIRE_PROOF
+ merge_type = /obj/item/stack/sheet/mineral/stone
+ grind_results = null
+ point_value = 0
+// tableVariant = /obj/structure/table/stone
+ material_type = /datum/material/stone
+ matter_amount = 0
+// cost = 500
+ source = null
+
+/datum/material/stone
+ name = "stone"
+ desc = "It's stone."
+ categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
+ sheet_type = /obj/item/stack/sheet/mineral/stone
+ value_per_unit = 0.005
+ beauty_modifier = 0.01
+
+/obj/item/stack/ore/stone
+ name = "unrefined stone"
+ desc = "Chunks of high-quality stone. This could be cut into bricks to form a really good building material."
+ icon = 'modular_skyrat/modules/stone/icons/ore.dmi'
+ icon_state = "stone_ore"
+ inhand_icon_state = "Iron ore"
+ singular_name = "unrefined stone chunk"
+ points = 1
+ mats_per_unit = list(/datum/material/stone=MINERAL_MATERIAL_AMOUNT)
+ refined_type = /obj/item/stack/sheet/mineral/stone
+ mine_experience = 1
+ scan_state = null
+ spreadChance = 20
+ merge_type = /obj/item/stack/ore/stone
+
+/turf/closed/wall/mineral/stone
+ name = "stone wall"
+ desc = "A wall made of solid stone brick."
+ icon = 'modular_skyrat/modules/stone/icons/wall.dmi'
+ icon_state = "wall-0"
+ base_icon_state = "wall"
+ sheet_type = /obj/item/stack/sheet/mineral/stone
+ slicing_duration = 1.5 SECONDS //literal rock
+ explosion_block = 2
+ smoothing_flags = SMOOTH_BITMASK
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_STONE_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_STONE_WALLS)
+ custom_materials = list(/datum/material/stone = 4000)
+
+/turf/closed/indestructible/stone
+ name = "stone wall"
+ desc = "A wall made of solid stone brick."
+ icon = 'modular_skyrat/modules/stone/icons/wall.dmi'
+ icon_state = "wall-0"
+ base_icon_state = "wall"
+ smoothing_flags = SMOOTH_BITMASK
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_STONE_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_STONE_WALLS)
+ custom_materials = list(/datum/material/stone = 4000)
+
+/obj/structure/falsewall/stone
+ name = "stone wall"
+ desc = "A wall made of solid stone brick."
+ icon = 'modular_skyrat/modules/stone/icons/wall.dmi'
+ icon_state = "wall-0"
+ base_icon_state = "wall"
+ mineral = /obj/item/stack/sheet/mineral/stone
+ walltype = /turf/closed/wall/mineral/stone
+ smoothing_flags = SMOOTH_BITMASK
+ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_STONE_WALLS)
+ canSmoothWith = list(SMOOTH_GROUP_STONE_WALLS)
diff --git a/modular_skyrat/modules/stone/icons/ore.dmi b/modular_skyrat/modules/stone/icons/ore.dmi
new file mode 100644
index 00000000000..116a36a7c81
Binary files /dev/null and b/modular_skyrat/modules/stone/icons/ore.dmi differ
diff --git a/modular_skyrat/modules/stone/icons/wall.dmi b/modular_skyrat/modules/stone/icons/wall.dmi
new file mode 100644
index 00000000000..7cd20b77d14
Binary files /dev/null and b/modular_skyrat/modules/stone/icons/wall.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 34145743242..3fe16b2e8a3 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -4272,6 +4272,8 @@
#include "modular_skyrat\modules\specborg\code\game\objects\items\cyborg_items.dm"
#include "modular_skyrat\modules\specborg\code\modules\living\sillicon\robot\robot_module.dm"
#include "modular_skyrat\modules\ssd_indicator\code\mob.dm"
+#include "modular_skyrat\modules\stone\code\ore_veins.dm"
+#include "modular_skyrat\modules\stone\code\stone.dm"
#include "modular_skyrat\modules\stock_market\code\articles.dm"
#include "modular_skyrat\modules\stock_market\code\computer.dm"
#include "modular_skyrat\modules\stock_market\code\computer_circuitboards.dm"