diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm
index dd1d1777d8..f0c7bba885 100644
--- a/code/modules/hydroponics/gene_modder.dm
+++ b/code/modules/hydroponics/gene_modder.dm
@@ -85,14 +85,15 @@
interact(user)
return
else if(istype(I, /obj/item/disk/plantgene))
- if(disk)
- to_chat(user, "A data disk is already loaded into the machine!")
- else
- if(!user.transferItemToLoc(I, src))
- return
- disk = I
- to_chat(user, "You add [I] to the machine.")
- interact(user)
+ if (operation)
+ to_chat(user, "Please complete current operation.")
+ return
+ eject_disk()
+ if(!user.transferItemToLoc(I, src))
+ return
+ disk = I
+ to_chat(user, "You add [I] to the machine.")
+ interact(user)
else
..()
@@ -266,18 +267,13 @@
to_chat(usr, "You add [I] to the machine.")
update_icon()
else if(href_list["eject_disk"] && !operation)
- if (disk)
- disk.forceMove(drop_location())
- disk.verb_pickup()
- disk = null
- update_genes()
- else
- var/obj/item/I = usr.get_active_held_item()
- if(istype(I, /obj/item/disk/plantgene))
- if(!usr.transferItemToLoc(I, src))
- return
- disk = I
- to_chat(usr, "You add [I] to the machine.")
+ var/obj/item/I = usr.get_active_held_item()
+ eject_disk()
+ if(istype(I, /obj/item/disk/plantgene))
+ if(!usr.transferItemToLoc(I, src))
+ return
+ disk = I
+ to_chat(usr, "You add [I] to the machine.")
else if(href_list["op"] == "insert" && disk && disk.gene && seed)
if(!operation) // Wait for confirmation
operation = "insert"
@@ -365,6 +361,16 @@
update_genes()
update_icon()
+/obj/machinery/plantgenes/proc/eject_disk()
+ if (disk && !operation)
+ if(Adjacent(usr) && !issilicon(usr))
+ if (!usr.put_in_hands(disk))
+ disk.forceMove(drop_location())
+ else
+ disk.forceMove(drop_location())
+ disk = null
+ update_genes()
+
/obj/machinery/plantgenes/proc/update_genes()
core_genes = list()
reagent_genes = list()