diff --git a/baystation12.dme b/baystation12.dme
index cb3cc48b238..ce1809a193a 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -179,7 +179,6 @@
#define FILE_DIR "icons/vending_icons"
#define FILE_DIR "interface"
#define FILE_DIR "maps"
-#define FILE_DIR "maps/backup"
#define FILE_DIR "sound"
#define FILE_DIR "sound/ambience"
#define FILE_DIR "sound/announcer"
diff --git a/code/modules/mining/satchel_ore_box.dm b/code/modules/mining/satchel_ore_box.dm
new file mode 100644
index 00000000000..c49cb19258d
--- /dev/null
+++ b/code/modules/mining/satchel_ore_box.dm
@@ -0,0 +1,125 @@
+/**********************Satchel**************************/
+
+/obj/item/weapon/satchel
+ icon = 'mining.dmi'
+ icon_state = "satchel"
+ name = "Mining Satchel"
+ var/mode = 1; //0 = pick one at a time, 1 = pick all on tile
+ var/capacity = 50; //the number of ore pieces it can carry.
+ flags = FPRINT | TABLEPASS | ONBELT
+ w_class = 1
+
+/obj/item/weapon/satchel/attack_self(mob/user as mob)
+ for (var/obj/item/weapon/ore/O in contents)
+ contents -= O
+ O.loc = user.loc
+ user << "\blue You empty the satchel."
+ return
+
+/obj/item/weapon/satchel/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ ..()
+ if (istype(W, /obj/item/weapon/ore))
+ var/obj/item/weapon/ore/O = W
+ src.contents += O;
+ return
+
+/obj/item/weapon/satchel/verb/toggle_mode()
+ set name = "Switch Satchel Method"
+ set category = "Object"
+
+ mode = !mode
+ switch (mode)
+ if(1)
+ usr << "The satchel now picks up all ore in a tile at once."
+ if(0)
+ usr << "The satchel now picks up one ore at a time."
+
+
+/**********************Ore box**************************/
+
+/obj/structure/ore_box
+ icon = 'mining.dmi'
+ icon_state = "orebox0"
+ name = "Ore Box"
+ desc = "It's heavy"
+ density = 1
+
+ New()
+ if(prob(50))
+ icon_state = "orebox1"
+
+/obj/structure/ore_box/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if (istype(W, /obj/item/weapon/ore))
+ src.contents += W;
+ if (istype(W, /obj/item/weapon/satchel))
+ src.contents += W.contents
+ user << "\blue You empty the satchel into the box."
+ return
+
+/obj/structure/ore_box/attack_hand(obj, mob/user as mob)
+ var/amt_gold = 0
+ var/amt_silver = 0
+ var/amt_diamond = 0
+ var/amt_glass = 0
+ var/amt_iron = 0
+ var/amt_plasma = 0
+ var/amt_uranium = 0
+ var/amt_clown = 0
+ var/amt_adamantine = 0
+
+ for (var/obj/item/weapon/ore/C in contents)
+ if (istype(C,/obj/item/weapon/ore/diamond))
+ amt_diamond++;
+ if (istype(C,/obj/item/weapon/ore/glass))
+ amt_glass++;
+ if (istype(C,/obj/item/weapon/ore/plasma))
+ amt_plasma++;
+ if (istype(C,/obj/item/weapon/ore/iron))
+ amt_iron++;
+ if (istype(C,/obj/item/weapon/ore/silver))
+ amt_silver++;
+ if (istype(C,/obj/item/weapon/ore/gold))
+ amt_gold++;
+ if (istype(C,/obj/item/weapon/ore/uranium))
+ amt_uranium++;
+ if (istype(C,/obj/item/weapon/ore/clown))
+ amt_clown++;
+ if (istype(C,/obj/item/weapon/ore/adamantine))
+ amt_adamantine++;
+
+ var/dat = text("The contents of the ore box reveal...
")
+ if (amt_gold)
+ dat += text("Gold ore: [amt_gold]
")
+ if (amt_silver)
+ dat += text("Silver ore: [amt_silver]
")
+ if (amt_iron)
+ dat += text("Metal ore: [amt_iron]
")
+ if (amt_glass)
+ dat += text("Sand: [amt_glass]
")
+ if (amt_diamond)
+ dat += text("Diamond ore: [amt_diamond]
")
+ if (amt_plasma)
+ dat += text("Plasma ore: [amt_plasma]
")
+ if (amt_uranium)
+ dat += text("Uranium ore: [amt_uranium]
")
+ if (amt_clown)
+ dat += text("Bananium ore: [amt_clown]
")
+ if (amt_adamantine)
+ dat += text("Adamantine ore: [amt_adamantine]
")
+
+ dat += text("
Empty box")
+ user << browse("[dat]", "window=orebox")
+ return
+
+/obj/structure/ore_box/Topic(href, href_list)
+ if(..())
+ return
+ usr.machine = src
+ src.add_fingerprint(usr)
+ if(href_list["removeall"])
+ for (var/obj/item/weapon/ore/O in contents)
+ contents -= O
+ O.loc = src.loc
+ usr << "\blue You empty the box"
+ src.updateUsrDialog()
+ return
\ No newline at end of file