diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index 5858c1debe..3b28c30402 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -111,12 +111,20 @@
/obj/item/stack/tile/carpet/black/fifty
amount = 50
-/obj/item/stack/tile/carpet/red
+/obj/item/stack/tile/carpet/blackred
name = "red carpet"
- icon_state = "tile-carpet-red"
- turf_type = /turf/open/floor/carpet/red
+ icon_state = "tile-carpet-blackred"
+ turf_type = /turf/open/floor/carpet/blackred
-/obj/item/stack/tile/carpet/red/fifty
+/obj/item/stack/tile/carpet/blackred/fifty
+ amount = 50
+
+/obj/item/stack/tile/carpet/monochrome
+ name = "monochrome carpet"
+ icon_state = "tile-carpet-monochrome"
+ turf_type = /turf/open/floor/carpet/monochrome
+
+/obj/item/stack/tile/carpet/monochrome/fifty
amount = 50
/obj/item/stack/tile/fakespace
diff --git a/code/game/objects/structures/table_frames.dm b/code/game/objects/structures/table_frames.dm
index 1aaae691f8..e979d4f18e 100644
--- a/code/game/objects/structures/table_frames.dm
+++ b/code/game/objects/structures/table_frames.dm
@@ -68,6 +68,22 @@
to_chat(user, "You start adding [C] to [src]...")
if(do_after(user, 20, target = src) && C.use(1))
make_new_table(/obj/structure/table/wood/fancy/black)
+ else if(istype(I, /obj/item/stack/tile/carpet/blackred))
+ var/obj/item/stack/tile/carpet/blackred/C = I
+ if(C.get_amount() < 1)
+ to_chat(user, "You need one red carpet sheet to do this!")
+ return
+ to_chat(user, "You start adding [C] to [src]...")
+ if(do_after(user, 20, target = src) && C.use(1))
+ make_new_table(/obj/structure/table/wood/fancy/blackred)
+ else if(istype(I, /obj/item/stack/tile/carpet/monochrome))
+ var/obj/item/stack/tile/carpet/monochrome/C = I
+ if(C.get_amount() < 1)
+ to_chat(user, "You need one monochrome carpet sheet to do this!")
+ return
+ to_chat(user, "You start adding [C] to [src]...")
+ if(do_after(user, 20, target = src) && C.use(1))
+ make_new_table(/obj/structure/table/wood/fancy/monochrome)
else if(istype(I, /obj/item/stack/tile/carpet))
var/obj/item/stack/tile/carpet/C = I
if(C.get_amount() < 1)
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 78c8971759..8c29c1b2c5 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -298,7 +298,7 @@
frame = /obj/structure/table_frame
framestack = /obj/item/stack/rods
buildstack = /obj/item/stack/tile/carpet
- canSmoothWith = list(/obj/structure/table/wood/fancy, /obj/structure/table/wood/fancy/black)
+ canSmoothWith = list(/obj/structure/table/wood/fancy, /obj/structure/table/wood/fancy/black, /obj/structure/table/wood/fancy/blackred, /obj/structure/table/wood/fancy/monochrome)
/obj/structure/table/wood/fancy/New()
// New() is used so that the /black subtype can override `icon` easily and
@@ -314,11 +314,28 @@
icon_state = "fancy_table_black"
buildstack = /obj/item/stack/tile/carpet/black
+/obj/structure/table/wood/fancy/blackred
+ icon = 'icons/obj/structures.dmi'
+ icon_state = "fancy_table_blackred"
+ buildstack = /obj/item/stack/tile/carpet/blackred
+
+/obj/structure/table/wood/fancy/blackred/New()
+ . = ..()
+ icon = 'icons/obj/smooth_structures/fancy_table_blackred.dmi'
+
+/obj/structure/table/wood/fancy/monochrome
+ icon = 'icons/obj/structures.dmi'
+ icon_state = "fancy_table_monochrome"
+ buildstack = /obj/item/stack/tile/carpet/monochrome
+
+/obj/structure/table/wood/fancy/monochrome/New()
+ . = ..()
+ icon = 'icons/obj/smooth_structures/fancy_table_monochrome.dmi'
+
/obj/structure/table/wood/fancy/black/New()
. = ..()
// Ditto above.
icon = 'icons/obj/smooth_structures/fancy_table_black.dmi'
-
/*
* Reinforced tables
*/
diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm
index 034fd0e606..fc1dec2acb 100644
--- a/code/game/turfs/simulated/floor/fancy_floor.dm
+++ b/code/game/turfs/simulated/floor/fancy_floor.dm
@@ -180,13 +180,19 @@
/turf/open/floor/carpet/black
icon = 'icons/turf/floors/carpet_black.dmi'
floor_tile = /obj/item/stack/tile/carpet/black
- canSmoothWith = list(/turf/open/floor/carpet/black)
+ canSmoothWith = list(/turf/open/floor/carpet/black, /turf/open/floor/carpet/blackred, /turf/open/floor/carpet/monochrome)
-/turf/open/floor/carpet/red
- icon = 'icons/turf/floors/carpet_red.dmi'
- floor_tile = /obj/item/stack/tile/carpet/red
- icon_state ="tile-carpet-red"
- canSmoothWith = list(/turf/open/floor/carpet/red)
+/turf/open/floor/carpet/blackred
+ icon = 'icons/turf/floors/carpet_blackred.dmi'
+ floor_tile = /obj/item/stack/tile/carpet/blackred
+ icon_state = "tile-carpet-blackred"
+ canSmoothWith = list(/turf/open/floor/carpet/black, /turf/open/floor/carpet/blackred, /turf/open/floor/carpet/monochrome)
+
+/turf/open/floor/carpet/monochrome
+ icon = 'icons/turf/floors/carpet_monochrome.dmi'
+ floor_tile = /obj/item/stack/tile/carpet/monochrome
+ icon_state = "tile-carpet-monochrome"
+ canSmoothWith = list(/turf/open/floor/carpet/black, /turf/open/floor/carpet/blackred, /turf/open/floor/carpet/monochrome)
/turf/open/floor/carpet/narsie_act(force, ignore_mobs, probability = 20)
. = (prob(probability) || force)
diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm
index ef4f215db0..27f78b63cc 100644
--- a/code/modules/cargo/packs.dm
+++ b/code/modules/cargo/packs.dm
@@ -1435,16 +1435,24 @@
/datum/supply_pack/service/carpet
name = "Premium Carpet Crate"
- desc = "Plasteel floor tiles getting on your nerves? These stacks of extra soft carpet will tie any room together."
+ desc = "Plasteel floor tiles getting on your nerves? These stacks of extra soft carpet will tie any room together. Contains the classics."
cost = 1000
contains = list(/obj/item/stack/tile/carpet/fifty,
/obj/item/stack/tile/carpet/fifty,
- /obj/item/stack/tile/carpet/red/fifty,
- /obj/item/stack/tile/carpet/red/fifty,
/obj/item/stack/tile/carpet/black/fifty,
/obj/item/stack/tile/carpet/black/fifty)
crate_name = "premium carpet crate"
+/datum/supply_pack/service/carpet2
+ name = "Premium Carpet Crate #2"
+ desc = "Plasteel floor tiles getting on your nerves? These stacks of extra soft carpet will tie any room together. Contains red, and monochrome"
+ cost = 1000
+ contains = list(/obj/item/stack/tile/carpet/blackred/fifty,
+ /obj/item/stack/tile/carpet/blackred/fifty,
+ /obj/item/stack/tile/carpet/monochrome/fifty,
+ /obj/item/stack/tile/carpet/monochrome/fifty)
+ crate_name = "premium carpet crate #2"
+
/datum/supply_pack/service/lightbulbs
name = "Replacement Lights"
desc = "May the light of Aether shine upon this station! Or at least, the light of forty two light tubes and twenty one light bulbs as well as a light replacer."
diff --git a/icons/obj/smooth_structures/fancy_table_blackred.dmi b/icons/obj/smooth_structures/fancy_table_blackred.dmi
new file mode 100644
index 0000000000..0766c2f2f9
Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_blackred.dmi differ
diff --git a/icons/obj/smooth_structures/fancy_table_monochrome.dmi b/icons/obj/smooth_structures/fancy_table_monochrome.dmi
new file mode 100644
index 0000000000..54b1b17577
Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_monochrome.dmi differ
diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi
index 897508fa8c..2e1fdfa7a8 100644
Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ
diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi
index 99f976a873..9305e4b7bc 100644
Binary files a/icons/obj/tiles.dmi and b/icons/obj/tiles.dmi differ
diff --git a/icons/turf/floors/carpet_red.dmi b/icons/turf/floors/carpet_blackred.dmi
similarity index 100%
rename from icons/turf/floors/carpet_red.dmi
rename to icons/turf/floors/carpet_blackred.dmi
diff --git a/icons/turf/floors/carpet_monochrome.dmi b/icons/turf/floors/carpet_monochrome.dmi
new file mode 100644
index 0000000000..9ab9bc499e
Binary files /dev/null and b/icons/turf/floors/carpet_monochrome.dmi differ