diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm
index 7021deb3613..49cfe687eb1 100644
--- a/code/modules/assembly/igniter.dm
+++ b/code/modules/assembly/igniter.dm
@@ -19,6 +19,10 @@
var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc
if (tank)
tank.explode()
+ if (istype(src.loc.loc, /obj/item/weapon/reagent_containers/glass/beaker/))
+ var/obj/item/weapon/reagent_containers/glass/beaker/beakerbomb = src.loc.loc
+ if(beakerbomb)
+ beakerbomb.ignite()
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm
index e88c22556f5..ec6f115b6d2 100644
--- a/code/modules/reagents/reagent_containers/glass_containers.dm
+++ b/code/modules/reagents/reagent_containers/glass_containers.dm
@@ -1,4 +1,4 @@
-////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
/// (Mixing)Glass.
////////////////////////////////////////////////////////////////////////////////
/obj/item/weapon/reagent_containers/glass
@@ -190,6 +190,7 @@
item_state = "beaker"
m_amt = 0
g_amt = 500
+ var/obj/item/device/assembly_holder/assembly = null
on_reagent_change()
update_icon()
@@ -228,6 +229,51 @@
if (!is_open_container())
var/image/lid = image(icon, src, "lid_[initial(icon_state)]")
overlays += lid
+ if(assembly)
+ overlays += "assembly"
+
+/obj/item/weapon/reagent_containers/glass/beaker/verb/remove_assembly()
+ set name = "Remove Assembly"
+ set category = "Object"
+ set src in usr
+ if(usr.stat || !usr.canmove || usr.restrained())
+ return
+ if (assembly)
+ usr << "You detach [assembly] from \the [src]"
+ usr.put_in_hands(assembly)
+ assembly = null
+ update_icon()
+ else
+ usr << "There is no assembly to remove."
+
+/obj/item/weapon/reagent_containers/glass/beaker/ignite()
+ if(reagents)
+ reagents.chem_temp += 30
+ reagents.handle_reactions()
+
+/obj/item/weapon/reagent_containers/glass/beaker/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
+ if (istype(W,/obj/item/device/assembly_holder))
+ if (assembly)
+ usr << "The [src] already has an assembly."
+ return ..()
+ assembly = W
+ user.drop_item()
+ W.loc = src
+ overlays += "assembly"
+ else
+ ..()
+
+/obj/item/weapon/reagent_containers/glass/beaker/HasProximity(atom/movable/AM)
+ if(assembly)
+ assembly.HasProximity(AM)
+
+/obj/item/weapon/reagent_containers/glass/beaker/Crossed(atom/movable/AM)
+ if(assembly)
+ assembly.Crossed(AM)
+
+/obj/item/weapon/reagent_containers/glass/beaker/hear_talk(mob/living/M, msg)
+ if(assembly)
+ assembly.hear_talk(M, msg)
/obj/item/weapon/reagent_containers/glass/beaker/large
name = "large beaker"
diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi
index db617d819bf..b67e0602781 100644
Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ