diff --git a/code/datums/supplypacks/hydroponics.dm b/code/datums/supplypacks/hydroponics.dm
index 67de54be202..bb368c5898b 100644
--- a/code/datums/supplypacks/hydroponics.dm
+++ b/code/datums/supplypacks/hydroponics.dm
@@ -58,15 +58,6 @@
containername = "exotic Seeds crate"
access = access_xenobiology
-/decl/hierarchy/supply_pack/hydroponics/bee_keeper
- name = "Equipment - Beekeeping"
- contains = list(/obj/item/beehive_assembly,
- /obj/item/bee_smoker,
- /obj/item/honey_frame = 5,
- /obj/item/bee_pack)
- containername = "beekeeping crate"
- access = access_hydroponics
-
/decl/hierarchy/supply_pack/hydroponics/hydrotray
name = "Equipment - Hydroponics tray"
contains = list(/obj/machinery/portable_atmospherics/hydroponics)
diff --git a/code/datums/trading/traders/ai.dm b/code/datums/trading/traders/ai.dm
index 2f77f6b2063..51d038d968b 100644
--- a/code/datums/trading/traders/ai.dm
+++ b/code/datums/trading/traders/ai.dm
@@ -104,11 +104,7 @@ They sell generic supplies and ask for generic supplies.
/obj/structure/ore_box = TRADER_THIS_TYPE,
/obj/structure/coatrack = TRADER_THIS_TYPE,
/obj/structure/bookcase = TRADER_THIS_TYPE,
- /obj/item/bee_pack = TRADER_THIS_TYPE,
- /obj/item/bee_smoker = TRADER_THIS_TYPE,
- /obj/item/beehive_assembly = TRADER_THIS_TYPE,
/obj/item/glass_jar = TRADER_THIS_TYPE,
- /obj/item/honey_frame = TRADER_THIS_TYPE,
/obj/item/training_dummy = TRADER_THIS_TYPE,
/obj/item/training_dummy/syndicate = TRADER_THIS_TYPE,
/obj/item/training_dummy/alien = TRADER_THIS_TYPE,
diff --git a/code/game/objects/items/circuitboards/machinery/household.dm b/code/game/objects/items/circuitboards/machinery/household.dm
index 8878ee43271..1e2b70aba16 100644
--- a/code/game/objects/items/circuitboards/machinery/household.dm
+++ b/code/game/objects/items/circuitboards/machinery/household.dm
@@ -46,20 +46,6 @@
/obj/item/stock_parts/circuitboard/cooker/get_buildable_types()
return subtypesof(/obj/machinery/cooker)
-/obj/item/stock_parts/circuitboard/honey
- name = "circuitboard (honey extractor)"
- build_path = /obj/machinery/honey_extractor
- board_type = "machine"
- origin_tech = @'{"biotech":2,"engineering":1}'
- req_components = list(
- /obj/item/stock_parts/manipulator = 2,
- /obj/item/stock_parts/matter_bin = 2)
-
-/obj/item/stock_parts/circuitboard/honey/seed
- name = "circuitboard (seed extractor)"
- build_path = /obj/machinery/seed_extractor
- board_type = "machine"
-
/obj/item/stock_parts/circuitboard/seed_storage
name = "circuitboard (seed storage)"
build_path = /obj/machinery/seed_storage
diff --git a/code/modules/crafting/stack_recipes/recipes_planks.dm b/code/modules/crafting/stack_recipes/recipes_planks.dm
index 797c346a9dd..e1e762675cf 100644
--- a/code/modules/crafting/stack_recipes/recipes_planks.dm
+++ b/code/modules/crafting/stack_recipes/recipes_planks.dm
@@ -10,13 +10,6 @@
difficulty = MAT_VALUE_VERY_HARD_DIY
category = "weapons"
-/decl/stack_recipe/planks/beehive_assembly
- result_type = /obj/item/beehive_assembly
- category = "furniture"
-
-/decl/stack_recipe/planks/beehive_frame
- result_type = /obj/item/honey_frame
-
/decl/stack_recipe/planks/zipgunframe
result_type = /obj/item/zipgunframe
difficulty = MAT_VALUE_VERY_HARD_DIY
diff --git a/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm b/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm
index 756507124eb..3e5b152aeee 100644
--- a/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm
+++ b/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm
@@ -344,11 +344,8 @@
/datum/fabricator_recipe/imprinter/circuit/cooker
path = /obj/item/stock_parts/circuitboard/cooker
-/datum/fabricator_recipe/imprinter/circuit/honey_extractor
- path = /obj/item/stock_parts/circuitboard/honey
-
/datum/fabricator_recipe/imprinter/circuit/seed_extractor
- path = /obj/item/stock_parts/circuitboard/honey/seed
+ path = /obj/item/stock_parts/circuitboard/seed
/datum/fabricator_recipe/imprinter/circuit/vending
path = /obj/item/stock_parts/circuitboard/vending
diff --git a/maps/exodus/exodus.dm b/maps/exodus/exodus.dm
index 081ad6f823b..47e23abbfe0 100644
--- a/maps/exodus/exodus.dm
+++ b/maps/exodus/exodus.dm
@@ -3,6 +3,7 @@
#include "../../mods/content/mundane.dm"
#include "../../mods/content/scaling_descriptors.dm"
+ #include "../../mods/content/beekeeping/_beekeeping.dme"
#include "../../mods/content/bigpharma/_bigpharma.dme"
#include "../../mods/content/corporate/_corporate.dme"
#include "../../mods/content/government/_government.dme"
diff --git a/maps/ministation/ministation.dm b/maps/ministation/ministation.dm
index 4a4d0277102..4b103d995e4 100644
--- a/maps/ministation/ministation.dm
+++ b/maps/ministation/ministation.dm
@@ -43,6 +43,7 @@ Twice...
#include "../../mods/mobs/dionaea/_dionaea.dme"
#include "../../mods/mobs/borers/_borers.dme"
+ #include "../../mods/content/beekeeping/_beekeeping.dme"
#include "../../mods/content/tabloids/_tabloids.dme"
#include "../../mods/species/ascent/_ascent.dme"
#include "../../mods/species/tajaran/_tajaran.dme"
diff --git a/maps/tradeship/tradeship.dm b/maps/tradeship/tradeship.dm
index e829a329918..5a866a9c8b8 100644
--- a/maps/tradeship/tradeship.dm
+++ b/maps/tradeship/tradeship.dm
@@ -11,6 +11,7 @@
#include "../../mods/content/government/away_sites/icarus/icarus.dm"
#include "../../mods/content/corporate/away_sites/lar_maria/lar_maria.dm"
+ #include "../../mods/content/beekeeping/_beekeeping.dme"
#include "../../mods/content/mundane.dm"
#include "../../mods/content/scaling_descriptors.dm"
diff --git a/mods/content/beekeeping/_beekeeping.dm b/mods/content/beekeeping/_beekeeping.dm
new file mode 100644
index 00000000000..e9af8c7b24c
--- /dev/null
+++ b/mods/content/beekeeping/_beekeeping.dm
@@ -0,0 +1,3 @@
+/decl/modpack/beekeeping
+ name = "Beekeeping Content"
+
\ No newline at end of file
diff --git a/mods/content/beekeeping/_beekeeping.dme b/mods/content/beekeeping/_beekeeping.dme
new file mode 100644
index 00000000000..3c5ab7163b3
--- /dev/null
+++ b/mods/content/beekeeping/_beekeeping.dme
@@ -0,0 +1,12 @@
+#ifndef MODPACK_INSECTS
+#define MODPACK_INSECTS
+// BEGIN_INCLUDE
+#include "_beekeeping.dm"
+#include "centrifuge.dm"
+#include "closets.dm"
+#include "items.dm"
+#include "recipes.dm"
+#include "trading.dm"
+#include "hives/_hive.dm"
+// END_INCLUDE
+#endif
diff --git a/icons/obj/apiary_bees_etc.dmi b/mods/content/beekeeping/apiary_bees_etc.dmi
similarity index 100%
rename from icons/obj/apiary_bees_etc.dmi
rename to mods/content/beekeeping/apiary_bees_etc.dmi
diff --git a/mods/content/beekeeping/centrifuge.dm b/mods/content/beekeeping/centrifuge.dm
new file mode 100644
index 00000000000..39e837d6d7f
--- /dev/null
+++ b/mods/content/beekeeping/centrifuge.dm
@@ -0,0 +1,54 @@
+
+/obj/machinery/honey_extractor
+ name = "honey extractor"
+ desc = "A machine used to extract honey and wax from a beehive frame."
+ icon = 'icons/obj/virology.dmi'
+ icon_state = "centrifuge"
+ anchored = TRUE
+ density = TRUE
+ construct_state = /decl/machine_construction/default/panel_closed
+ uncreated_component_parts = null
+ stat_immune = 0
+
+ var/processing = 0
+ var/honey = 0
+
+/obj/machinery/honey_extractor/components_are_accessible(path)
+ return !processing && ..()
+
+/obj/machinery/honey_extractor/cannot_transition_to(state_path, mob/user)
+ if(processing)
+ return SPAN_NOTICE("You must wait for \the [src] to finish first!")
+ return ..()
+
+/obj/machinery/honey_extractor/attackby(var/obj/item/I, var/mob/user)
+ if(processing)
+ to_chat(user, "\The [src] is currently spinning, wait until it's finished.")
+ return
+ if((. = component_attackby(I, user)))
+ return
+ if(istype(I, /obj/item/honey_frame))
+ var/obj/item/honey_frame/H = I
+ if(!H.honey)
+ to_chat(user, "\The [H] is empty, put it into a beehive.")
+ return
+ user.visible_message("\The [user] loads \the [H] into \the [src] and turns it on.", "You load \the [H] into \the [src] and turn it on.")
+ processing = H.honey
+ icon_state = "centrifuge_moving"
+ qdel(H)
+ spawn(50)
+ new /obj/item/honey_frame(loc)
+ new /obj/item/stack/material/bar/wax(loc, 1)
+ honey += processing
+ processing = 0
+ icon_state = "centrifuge"
+ else if(istype(I, /obj/item/chems/glass))
+ if(!honey)
+ to_chat(user, "There is no honey in \the [src].")
+ return
+ var/obj/item/chems/glass/G = I
+ var/transferred = min(G.reagents.maximum_volume - G.reagents.total_volume, honey)
+ G.add_to_reagents(/decl/material/liquid/nutriment/honey, transferred)
+ honey -= transferred
+ user.visible_message("\The [user] collects honey from \the [src] into \the [G].", "You collect [transferred] units of honey from \the [src] into \the [G].")
+ return 1
diff --git a/mods/content/beekeeping/closets.dm b/mods/content/beekeeping/closets.dm
new file mode 100644
index 00000000000..224ff0561eb
--- /dev/null
+++ b/mods/content/beekeeping/closets.dm
@@ -0,0 +1,15 @@
+/obj/structure/closet/crate/hydroponics/beekeeping
+ name = "beekeeping crate"
+ desc = "All you need to set up your own beehive."
+
+/obj/structure/closet/crate/hydroponics/beekeeping/Initialize()
+ . = ..()
+ new /obj/item/beehive_assembly(src)
+ new /obj/item/bee_smoker(src)
+ new /obj/item/honey_frame(src)
+ new /obj/item/honey_frame(src)
+ new /obj/item/honey_frame(src)
+ new /obj/item/honey_frame(src)
+ new /obj/item/honey_frame(src)
+ new /obj/item/bee_pack(src)
+ new /obj/item/crowbar(src)
diff --git a/code/modules/hydroponics/beekeeping/beehive.dm b/mods/content/beekeeping/hives/_hive.dm
similarity index 57%
rename from code/modules/hydroponics/beekeeping/beehive.dm
rename to mods/content/beekeeping/hives/_hive.dm
index e2c2d1bc219..5fe7f93c8d4 100644
--- a/code/modules/hydroponics/beekeeping/beehive.dm
+++ b/mods/content/beekeeping/hives/_hive.dm
@@ -1,6 +1,6 @@
/obj/machinery/beehive
name = "apiary"
- icon = 'icons/obj/beekeeping.dmi'
+ icon = 'mods/content/beekeeping/icons/beekeeping.dmi'
icon_state = "beehive-0"
desc = "A wooden box designed specifically to house our buzzling buddies. Far more efficient than traditional hives. Just insert a frame and a queen, close it up, and you're good to go!"
density = TRUE
@@ -164,140 +164,3 @@
H.plant_health += 0.05 * coef
++trays
honeycombs = min(honeycombs + 0.1 * coef * min(trays, 5), frames * 100)
-
-/obj/machinery/honey_extractor
- name = "honey extractor"
- desc = "A machine used to extract honey and wax from a beehive frame."
- icon = 'icons/obj/virology.dmi'
- icon_state = "centrifuge"
- anchored = TRUE
- density = TRUE
- construct_state = /decl/machine_construction/default/panel_closed
- uncreated_component_parts = null
- stat_immune = 0
-
- var/processing = 0
- var/honey = 0
-
-/obj/machinery/honey_extractor/components_are_accessible(path)
- return !processing && ..()
-
-/obj/machinery/honey_extractor/cannot_transition_to(state_path, mob/user)
- if(processing)
- return SPAN_NOTICE("You must wait for \the [src] to finish first!")
- return ..()
-
-/obj/machinery/honey_extractor/attackby(var/obj/item/I, var/mob/user)
- if(processing)
- to_chat(user, "\The [src] is currently spinning, wait until it's finished.")
- return TRUE
- if(istype(I, /obj/item/honey_frame))
- var/obj/item/honey_frame/H = I
- if(!H.honey)
- to_chat(user, "\The [H] is empty, put it into a beehive.")
- return TRUE
- user.visible_message("\The [user] loads \the [H] into \the [src] and turns it on.", "You load \the [H] into \the [src] and turn it on.")
- processing = H.honey
- icon_state = "centrifuge_moving"
- qdel(H)
- spawn(50)
- new /obj/item/honey_frame(loc)
- new /obj/item/stack/material/bar/wax(loc, 1)
- honey += processing
- processing = 0
- icon_state = "centrifuge"
- return TRUE
- else if(istype(I, /obj/item/chems/glass))
- if(!honey)
- to_chat(user, "There is no honey in \the [src].")
- return TRUE
- var/obj/item/chems/glass/G = I
- var/transferred = min(G.reagents.maximum_volume - G.reagents.total_volume, honey)
- G.add_to_reagents(/decl/material/liquid/nutriment/honey, transferred)
- honey -= transferred
- user.visible_message("\The [user] collects honey from \the [src] into \the [G].", "You collect [transferred] units of honey from \the [src] into \the [G].")
- return TRUE
- return ..() // smack it, interact with components, etc.
-
-/obj/item/bee_smoker
- name = "bee smoker"
- desc = "A device used to calm down bees before harvesting honey."
- icon = 'icons/obj/items/weapon/batterer.dmi'
- icon_state = ICON_STATE_WORLD
- w_class = ITEM_SIZE_SMALL
- material = /decl/material/solid/metal/steel
-
-/obj/item/honey_frame
- name = "beehive frame"
- desc = "A frame for the beehive that the bees will fill with honeycombs."
- icon = 'icons/obj/beekeeping.dmi'
- icon_state = "honeyframe"
- w_class = ITEM_SIZE_SMALL
- material = /decl/material/solid/organic/wood/oak
- var/honey = 0
-
-/obj/item/honey_frame/filled
- name = "filled beehive frame"
- desc = "A frame for the beehive that the bees have filled with honeycombs."
- honey = 20
- material = /decl/material/solid/organic/wood/oak
-
-/obj/item/honey_frame/filled/Initialize()
- . = ..()
- overlays += "honeycomb"
-
-/obj/item/beehive_assembly
- name = "beehive assembly"
- desc = "Contains everything you need to build a beehive."
- icon = 'icons/obj/apiary_bees_etc.dmi'
- icon_state = "apiary"
- material = /decl/material/solid/organic/wood/oak
-
-/obj/item/beehive_assembly/attack_self(var/mob/user)
- to_chat(user, "You start assembling \the [src]...")
- if(do_after(user, 30, src))
- user.visible_message("\The [user] constructs a beehive.", "You construct a beehive.")
- new /obj/machinery/beehive(get_turf(user))
- qdel(src)
-
-/obj/item/bee_pack
- name = "bee pack"
- desc = "Contains a queen bee and some worker bees. Everything you'll need to start a hive!"
- icon = 'icons/obj/beekeeping.dmi'
- icon_state = "beepack"
- material = /decl/material/solid/organic/plastic
- var/full = 1
-
-/obj/item/bee_pack/Initialize()
- . = ..()
- overlays += "beepack-full"
-
-/obj/item/bee_pack/proc/empty()
- full = 0
- name = "empty bee pack"
- desc = "A stasis pack for moving bees. It's empty."
- overlays.Cut()
- overlays += "beepack-empty"
-
-/obj/item/bee_pack/proc/fill()
- full = initial(full)
- SetName(initial(name))
- desc = initial(desc)
- overlays.Cut()
- overlays += "beepack-full"
-
-/obj/structure/closet/crate/hydroponics/beekeeping
- name = "beekeeping crate"
- desc = "All you need to set up your own beehive."
-
-/obj/structure/closet/crate/hydroponics/beekeeping/Initialize()
- . = ..()
- new /obj/item/beehive_assembly(src)
- new /obj/item/bee_smoker(src)
- new /obj/item/honey_frame(src)
- new /obj/item/honey_frame(src)
- new /obj/item/honey_frame(src)
- new /obj/item/honey_frame(src)
- new /obj/item/honey_frame(src)
- new /obj/item/bee_pack(src)
- new /obj/item/crowbar(src)
diff --git a/icons/obj/beekeeping.dmi b/mods/content/beekeeping/icons/beekeeping.dmi
similarity index 100%
rename from icons/obj/beekeeping.dmi
rename to mods/content/beekeeping/icons/beekeeping.dmi
diff --git a/mods/content/beekeeping/icons/smoker.dmi b/mods/content/beekeeping/icons/smoker.dmi
new file mode 100644
index 00000000000..5109ca468e5
Binary files /dev/null and b/mods/content/beekeeping/icons/smoker.dmi differ
diff --git a/mods/content/beekeeping/items.dm b/mods/content/beekeeping/items.dm
new file mode 100644
index 00000000000..d63abadaea0
--- /dev/null
+++ b/mods/content/beekeeping/items.dm
@@ -0,0 +1,85 @@
+/obj/item/beehive_assembly
+ name = "beehive assembly"
+ desc = "Contains everything you need to build a beehive."
+ icon = 'mods/content/beekeeping/apiary_bees_etc.dmi'
+ icon_state = "apiary"
+ material = /decl/material/solid/organic/wood
+
+/obj/item/beehive_assembly/attack_self(var/mob/user)
+ to_chat(user, "You start assembling \the [src]...")
+ if(do_after(user, 30, src))
+ user.visible_message("\The [user] constructs a beehive.", "You construct a beehive.")
+ new /obj/machinery/beehive(get_turf(user))
+ qdel(src)
+
+/obj/item/stock_parts/circuitboard/honey
+ name = "circuitboard (honey extractor)"
+ build_path = /obj/machinery/honey_extractor
+ board_type = "machine"
+ origin_tech = @'{"biotech":2,"engineering":1}'
+ req_components = list(
+ /obj/item/stock_parts/manipulator = 2,
+ /obj/item/stock_parts/matter_bin = 2)
+
+/obj/item/stock_parts/circuitboard/seed
+ name = "circuitboard (seed extractor)"
+ build_path = /obj/machinery/seed_extractor
+ board_type = "machine"
+ origin_tech = @'{"biotech":2,"engineering":1}'
+ req_components = list(
+ /obj/item/stock_parts/manipulator = 2,
+ /obj/item/stock_parts/matter_bin = 2
+ )
+
+/obj/item/bee_smoker
+ name = "bee smoker"
+ desc = "A device used to calm down bees before harvesting honey."
+ icon = 'mods/content/beekeeping/icons/smoker.dmi'
+ icon_state = ICON_STATE_WORLD
+ w_class = ITEM_SIZE_SMALL
+ material = /decl/material/solid/metal/steel
+
+/obj/item/honey_frame
+ name = "beehive frame"
+ desc = "A frame for the beehive that the bees will fill with honeycombs."
+ icon = 'mods/content/beekeeping/icons/beekeeping.dmi'
+ icon_state = "honeyframe"
+ w_class = ITEM_SIZE_SMALL
+ material = /decl/material/solid/organic/wood
+ var/honey = 0
+
+/obj/item/honey_frame/filled
+ name = "filled beehive frame"
+ desc = "A frame for the beehive that the bees have filled with honeycombs."
+ honey = 20
+ material = /decl/material/solid/organic/wood
+
+/obj/item/honey_frame/filled/Initialize()
+ . = ..()
+ overlays += "honeycomb"
+
+/obj/item/bee_pack
+ name = "bee pack"
+ desc = "Contains a queen bee and some worker bees. Everything you'll need to start a hive!"
+ icon = 'mods/content/beekeeping/icons/beekeeping.dmi'
+ icon_state = "beepack"
+ material = /decl/material/solid/organic/plastic
+ var/full = 1
+
+/obj/item/bee_pack/Initialize()
+ . = ..()
+ overlays += "beepack-full"
+
+/obj/item/bee_pack/proc/empty()
+ full = 0
+ name = "empty bee pack"
+ desc = "A stasis pack for moving bees. It's empty."
+ overlays.Cut()
+ overlays += "beepack-empty"
+
+/obj/item/bee_pack/proc/fill()
+ full = initial(full)
+ SetName(initial(name))
+ desc = initial(desc)
+ overlays.Cut()
+ overlays += "beepack-full"
diff --git a/mods/content/beekeeping/recipes.dm b/mods/content/beekeeping/recipes.dm
new file mode 100644
index 00000000000..03089d932ab
--- /dev/null
+++ b/mods/content/beekeeping/recipes.dm
@@ -0,0 +1,10 @@
+
+/decl/stack_recipe/planks/beehive_assembly
+ result_type = /obj/item/beehive_assembly
+ category = "furniture"
+
+/decl/stack_recipe/planks/beehive_frame
+ result_type = /obj/item/honey_frame
+
+/datum/fabricator_recipe/imprinter/circuit/honey_extractor
+ path = /obj/item/stock_parts/circuitboard/honey
diff --git a/mods/content/beekeeping/trading.dm b/mods/content/beekeeping/trading.dm
new file mode 100644
index 00000000000..1a119ddc99b
--- /dev/null
+++ b/mods/content/beekeeping/trading.dm
@@ -0,0 +1,15 @@
+/datum/trader/trading_beacon/manufacturing/New()
+ LAZYSET(possible_trading_items, /obj/item/bee_pack, TRADER_THIS_TYPE)
+ LAZYSET(possible_trading_items, /obj/item/bee_smoker, TRADER_THIS_TYPE)
+ LAZYSET(possible_trading_items, /obj/item/beehive_assembly, TRADER_THIS_TYPE)
+ LAZYSET(possible_trading_items, /obj/item/honey_frame, TRADER_THIS_TYPE)
+ ..()
+
+/decl/hierarchy/supply_pack/hydroponics/bee_keeper
+ name = "Equipment - Beekeeping"
+ contains = list(/obj/item/beehive_assembly,
+ /obj/item/bee_smoker,
+ /obj/item/honey_frame = 5,
+ /obj/item/bee_pack)
+ containername = "beekeeping crate"
+ access = access_hydroponics
diff --git a/nebula.dme b/nebula.dme
index 5519d2e270c..1b8408ccc2b 100644
--- a/nebula.dme
+++ b/nebula.dme
@@ -2588,7 +2588,6 @@
#include "code\modules\hydroponics\seed_mobs.dm"
#include "code\modules\hydroponics\seed_packets.dm"
#include "code\modules\hydroponics\seed_storage.dm"
-#include "code\modules\hydroponics\beekeeping\beehive.dm"
#include "code\modules\hydroponics\plant_types\seeds_herbs.dm"
#include "code\modules\hydroponics\plant_types\seeds_misc.dm"
#include "code\modules\hydroponics\spreading\spreading.dm"