diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index 8f21ab7b1c..f66a391a14 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -77,6 +77,7 @@
#define COLOR_PURPLE_GRAY "#A2819E"
#define COLOR_RED_LIGHT "#FF3333"
#define COLOR_DEEP_SKY_BLUE "#00e1ff"
+#define COLOR_DARK_GRAY "#404040"
diff --git a/code/datums/autolathe/general.dm b/code/datums/autolathe/general.dm
index 6ec648d388..048842b301 100644
--- a/code/datums/autolathe/general.dm
+++ b/code/datums/autolathe/general.dm
@@ -129,6 +129,10 @@
name = "maglight"
path =/obj/item/device/flashlight/maglight
+/datum/category_item/autolathe/general/ecigcartridge
+ name = "ecigarette cartridge"
+ path = /obj/item/weapon/reagent_containers/ecig_cartridge/blank
+
/datum/category_item/autolathe/general/handcuffs
name = "handcuffs"
path =/obj/item/weapon/handcuffs
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 6739452da3..a18f4500a0 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -842,7 +842,19 @@
/obj/item/weapon/storage/fancy/cigarettes/menthols = 5,
/obj/item/weapon/storage/rollingpapers = 5,
/obj/item/weapon/storage/box/matches = 10,
- /obj/item/weapon/flame/lighter/random = 4)
+ /obj/item/weapon/flame/lighter/random = 4,
+ /obj/item/clothing/mask/smokable/ecig/util = 2,
+ ///obj/item/clothing/mask/smokable/ecig/deluxe = 2,
+ /obj/item/clothing/mask/smokable/ecig/simple = 2,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/med_nicotine = 10,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/high_nicotine = 5,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/orange = 5,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/mint = 5,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/watermelon = 5,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/grape = 5,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/lemonlime = 5,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/coffee = 5,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/blanknico = 2)
contraband = list(/obj/item/weapon/flame/lighter/zippo = 4)
premium = list(/obj/item/weapon/storage/fancy/cigar = 5,
/obj/item/weapon/storage/fancy/cigarettes/carcinomas = 5,
@@ -855,7 +867,20 @@
/obj/item/weapon/storage/fancy/cigarettes/menthols = 18,
/obj/item/weapon/storage/rollingpapers = 10,
/obj/item/weapon/storage/box/matches = 1,
- /obj/item/weapon/flame/lighter/random = 2)
+ /obj/item/weapon/flame/lighter/random = 2,
+ /obj/item/clothing/mask/smokable/ecig/util = 100,
+ ///obj/item/clothing/mask/smokable/ecig/deluxe = 300,
+ /obj/item/clothing/mask/smokable/ecig/simple = 150,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/med_nicotine = 10,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/high_nicotine = 15,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/orange = 15,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/mint = 15,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/watermelon = 15,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/grape = 15,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/lemonlime = 15,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/coffee = 15,
+ /obj/item/weapon/reagent_containers/ecig_cartridge/blanknico = 15)
+
/obj/machinery/vending/medical
name = "NanoMed Plus"
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 759ae702ab..608a79eccc 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -274,6 +274,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
max_smoketime = 300
smoketime = 300
var/nicotine_amt = 2
+ var/menthol_amt = 0
matchmes = "USER lights their NAME with their FLAME."
lightermes = "USER manages to light their NAME with FLAME."
zippomes = "With a flick of their wrist, USER lights their NAME with their FLAME."
@@ -284,6 +285,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM
. = ..()
if(nicotine_amt)
reagents.add_reagent("nicotine", nicotine_amt)
+ if(menthol_amt)
+ reagents.add_reagent("menthol", nicotine_amt)
+
+/obj/item/clothing/mask/smokable/cigarette/menthol
+ menthol_amt = 5
/obj/item/clothing/mask/smokable/cigarette/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
diff --git a/code/game/objects/items/weapons/ecigs.dm b/code/game/objects/items/weapons/ecigs.dm
new file mode 100644
index 0000000000..961f17e667
--- /dev/null
+++ b/code/game/objects/items/weapons/ecigs.dm
@@ -0,0 +1,227 @@
+/obj/item/clothing/mask/smokable/ecig
+ name = "electronic cigarette"
+ desc = "Device with modern approach to smoking."
+ icon = 'icons/obj/ecig.dmi'
+ var/active = 0
+ //var/obj/item/weapon/cell/ec_cell = /obj/item/weapon/cell/device
+ var/cartridge_type = /obj/item/weapon/reagent_containers/ecig_cartridge/med_nicotine
+ var/obj/item/weapon/reagent_containers/ecig_cartridge/ec_cartridge
+ w_class = ITEMSIZE_TINY
+ slot_flags = SLOT_EARS | SLOT_MASK
+ attack_verb = list("attacked", "poked", "battered")
+ body_parts_covered = 0
+ var/brightness_on = 1
+ chem_volume = 0 //ecig has no storage on its own but has reagent container created by parent obj
+ item_state = "ecigoff"
+ var/icon_off
+ var/icon_empty
+ var/ecig_colors = list(null, COLOR_DARK_GRAY, COLOR_RED_GRAY, COLOR_BLUE_GRAY, COLOR_GREEN_GRAY, COLOR_PURPLE_GRAY)
+
+/obj/item/clothing/mask/smokable/ecig/New()
+ ..()
+ ec_cartridge = new cartridge_type(src)
+
+/obj/item/clothing/mask/smokable/ecig/simple
+ name = "simple electronic cigarette"
+ desc = "A cheap Lucky 1337 electronic cigarette, styled like a traditional cigarette."
+ icon_state = "ccigoff"
+ icon_off = "ccigoff"
+ icon_empty = "ccigoff"
+ icon_on = "ccigon"
+
+/obj/item/clothing/mask/smokable/ecig/util
+ name = "electronic cigarette"
+ desc = "A popular utilitarian model electronic cigarette, the ONI-55. Comes in a variety of colors."
+ icon_state = "ecigoff1"
+ icon_off = "ecigoff1"
+ icon_empty = "ecigoff1"
+ icon_on = "ecigon"
+/obj/item/clothing/mask/smokable/ecig/util/New()
+ ..()
+ color = pick(ecig_colors)
+
+/obj/item/clothing/mask/smokable/ecig/deluxe
+ name = "deluxe electronic cigarette"
+ desc = "A premium model eGavana MK3 electronic cigarette, shaped like a cigar."
+ icon_state = "pcigoff1"
+ icon_off = "pcigoff1"
+ icon_empty = "pcigoff2"
+ icon_on = "pcigon"
+
+/obj/item/clothing/mask/smokable/ecig/process()
+ if(ishuman(loc))
+ var/mob/living/carbon/human/C = loc
+ if (src == C.wear_mask && C.check_has_mouth()) // if it's in the human/monkey mouth, transfer reagents to the mob
+ if (!active || !ec_cartridge || !ec_cartridge.reagents.total_volume)//no cartridge
+ active=0//autodisable the cigarette
+ STOP_PROCESSING(SSobj, src)
+ update_icon()
+ return
+ ec_cartridge.reagents.trans_to_mob(C, REM, CHEM_INGEST, 0.4) // Most of it is not inhaled... balance reasons.
+
+/obj/item/clothing/mask/smokable/ecig/update_icon()
+ if (active)
+ item_state = icon_on
+ icon_state = icon_on
+ set_light(brightness_on)
+ else if (ec_cartridge)
+ set_light(0)
+ item_state = icon_off
+ icon_state = icon_off
+ else
+ icon_state = icon_empty
+ item_state = icon_empty
+ set_light(0)
+ if(ismob(loc))
+ var/mob/living/M = loc
+ M.update_inv_wear_mask(0)
+ M.update_inv_l_hand(0)
+ M.update_inv_r_hand(1)
+
+
+/obj/item/clothing/mask/smokable/ecig/attackby(var/obj/item/I, var/mob/user as mob)
+ if(istype(I, /obj/item/weapon/reagent_containers/ecig_cartridge))
+ if (ec_cartridge)//can't add second one
+ to_chat(user, "A cartridge has already been installed. ")
+ else//fits in new one
+ user.remove_from_mob(I)
+ I.forceMove(src)//I.loc=src
+ ec_cartridge = I
+ update_icon()
+ to_chat(user, "You insert [I] into [src]. ")
+
+/obj/item/clothing/mask/smokable/ecig/attack_self(mob/user as mob)
+ if (active)
+ active=0
+ STOP_PROCESSING(SSobj, src)
+ to_chat(user, "You turn off \the [src]. ")
+ update_icon()
+ else
+ if (!ec_cartridge)
+ to_chat(user, "You can't use it with no cartridge installed!. ")
+ return
+ active=1
+ START_PROCESSING(SSobj, src)
+ to_chat(user, "You turn on \the [src]. ")
+ update_icon()
+
+/obj/item/clothing/mask/smokable/ecig/attack_hand(mob/user as mob)//eject cartridge
+ if(user.get_inactive_hand() == src)//if being hold
+ if (ec_cartridge)
+ active=0
+ user.put_in_hands(ec_cartridge)
+ to_chat(user, "You eject [ec_cartridge] from \the [src]. ")
+ ec_cartridge = null
+ update_icon()
+ else
+ ..()
+
+/obj/item/weapon/reagent_containers/ecig_cartridge
+ name = "tobacco flavour cartridge"
+ desc = "A small metal cartridge, used with electronic cigarettes, which contains an atomizing coil and a solution to be atomized."
+ w_class = ITEMSIZE_TINY
+ icon = 'icons/obj/ecig.dmi'
+ icon_state = "ecartridge"
+ matter = list("metal" = 50, "glass" = 10)
+ volume = 20
+ flags = OPENCONTAINER
+
+/obj/item/weapon/reagent_containers/ecig_cartridge/New()
+ create_reagents(volume)
+
+/obj/item/weapon/reagent_containers/ecig_cartridge/examine(mob/user as mob)//to see how much left
+ ..()
+ to_chat(user, "The cartridge has [reagents.total_volume] units of liquid remaining.")
+
+//flavours
+/obj/item/weapon/reagent_containers/ecig_cartridge/blank
+ name = "ecigarette cartridge"
+ desc = "A small metal cartridge which contains an atomizing coil."
+
+/obj/item/weapon/reagent_containers/ecig_cartridge/blanknico
+ name = "flavorless nicotine cartridge"
+ desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says you can add whatever flavoring agents you want."
+/obj/item/weapon/reagent_containers/ecig_cartridge/blanknico/New()
+ ..()
+ reagents.add_reagent("nicotine", 5)
+ reagents.add_reagent("water", 10)
+
+/obj/item/weapon/reagent_containers/ecig_cartridge/med_nicotine
+ name = "tobacco flavour cartridge"
+ desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its tobacco flavored."
+/obj/item/weapon/reagent_containers/ecig_cartridge/med_nicotine/New()
+ ..()
+ reagents.add_reagent("nicotine", 5)
+ reagents.add_reagent("water", 15)
+
+/obj/item/weapon/reagent_containers/ecig_cartridge/high_nicotine
+ name = "high nicotine tobacco flavour cartridge"
+ desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its tobacco flavored, with extra nicotine."
+/obj/item/weapon/reagent_containers/ecig_cartridge/high_nicotine/New()
+ ..()
+ reagents.add_reagent("nicotine", 10)
+ reagents.add_reagent("water", 10)
+
+/obj/item/weapon/reagent_containers/ecig_cartridge/orange
+ name = "orange flavour cartridge"
+ desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its orange flavored."
+/obj/item/weapon/reagent_containers/ecig_cartridge/orange/New()
+ ..()
+ reagents.add_reagent("nicotine", 5)
+ reagents.add_reagent("water", 10)
+ reagents.add_reagent("orangejuice", 5)
+
+/obj/item/weapon/reagent_containers/ecig_cartridge/mint
+ name = "mint flavour cartridge"
+ desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its mint flavored."
+/obj/item/weapon/reagent_containers/ecig_cartridge/mint/New()
+ ..()
+ reagents.add_reagent("nicotine", 5)
+ reagents.add_reagent("water", 10)
+ reagents.add_reagent("menthol", 5)
+
+/obj/item/weapon/reagent_containers/ecig_cartridge/watermelon
+ name = "watermelon flavour cartridge"
+ desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its watermelon flavored."
+/obj/item/weapon/reagent_containers/ecig_cartridge/watermelon/New()
+ ..()
+ reagents.add_reagent("nicotine", 5)
+ reagents.add_reagent("water", 10)
+ reagents.add_reagent("watermelonjuice", 5)
+
+/obj/item/weapon/reagent_containers/ecig_cartridge/grape
+ name = "grape flavour cartridge"
+ desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its grape flavored."
+/obj/item/weapon/reagent_containers/ecig_cartridge/grape/New()
+ ..()
+ reagents.add_reagent("nicotine", 5)
+ reagents.add_reagent("water", 10)
+ reagents.add_reagent("grapejuice", 5)
+
+/obj/item/weapon/reagent_containers/ecig_cartridge/lemonlime
+ name = "lemon-lime flavour cartridge"
+ desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its lemon-lime flavored."
+/obj/item/weapon/reagent_containers/ecig_cartridge/lemonlime/New()
+ ..()
+ reagents.add_reagent("nicotine", 5)
+ reagents.add_reagent("water", 10)
+ reagents.add_reagent("lemon_lime", 5)
+
+/obj/item/weapon/reagent_containers/ecig_cartridge/coffee
+ name = "coffee flavour cartridge"
+ desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its coffee flavored."
+/obj/item/weapon/reagent_containers/ecig_cartridge/coffee/New()
+ ..()
+ reagents.add_reagent("nicotine", 5)
+ reagents.add_reagent("water", 10)
+ reagents.add_reagent("coffee", 5)
+/*
+/obj/item/weapon/reagent_containers/ecig_cartridge/cannabis
+ name = "herb flavour cartridge"
+ desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label seems to be suspiciously scuffed off..."
+/obj/item/weapon/reagent_containers/ecig_cartridge/cannabis/New()
+ ..()
+ reagents.add_reagent("nicotine", 5)
+ reagents.add_reagent("water", 10)
+ reagents.add_reagent("cannabis", 5)
+*/
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 830f5a2631..a8f5ef34e8 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -296,6 +296,7 @@
desc = "With a sharp and natural organic menthol flavor, these Temperamentos are a favorite of NDV crews. Hardly anyone knows they make 'em in non-menthol!"
icon_state = "TMpacket"
brand = "\improper Temperamento Menthol"
+ starts_with = list(/obj/item/clothing/mask/smokable/cigarette/menthol = 6)
/obj/item/weapon/storage/fancy/cigarettes/carcinomas
name = "\improper pack of Carcinoma Angels"
diff --git a/code/modules/client/preference_setup/loadout/loadout_smoking.dm b/code/modules/client/preference_setup/loadout/loadout_smoking.dm
index cbedca3a67..d2097c06be 100644
--- a/code/modules/client/preference_setup/loadout/loadout_smoking.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_smoking.dm
@@ -50,3 +50,12 @@
var/obj/item/weapon/storage/fancy/cigarettes/cigarette_brand = cigarette
cigarettes[initial(cigarette_brand.name)] = cigarette_brand
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cigarettes))
+
+/datum/gear/ecig
+ display_name = "electronic cigarette"
+ path = /obj/item/clothing/mask/smokable/ecig/util
+
+/datum/gear/ecig/deluxe
+ display_name = "electronic cigarette, deluxe"
+ path = /obj/item/clothing/mask/smokable/ecig/deluxe
+ cost = 2
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
index 2ba09e0c36..3423086771 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
@@ -1377,3 +1377,13 @@
M.adjustOxyLoss(-4 * removed)
M.adjustToxLoss(-2 * removed)
M.adjustCloneLoss(-2 * removed)
+
+/datum/reagent/menthol
+ name = "Menthol"
+ description = "Tastes naturally minty, and imparts a very mild numbing sensation."
+ taste_description = "mint"
+ reagent_state = LIQUID
+ color = "#80af9c"
+ metabolism = REM * 0.002
+ overdose = REAGENTS_OVERDOSE * 0.25
+ scannable = 1
diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi
index 5403cac867..1fb8bea105 100644
Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ
diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi
index 1c92dc0afd..02990b507a 100644
Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ
diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi
index fd1af6e950..4d17629759 100644
Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ
diff --git a/icons/obj/ecig.dmi b/icons/obj/ecig.dmi
new file mode 100644
index 0000000000..1b6dde8c4b
Binary files /dev/null and b/icons/obj/ecig.dmi differ
diff --git a/polaris.dme b/polaris.dme
index d1483f5c7a..a7d01bd843 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -993,6 +993,7 @@
#include "code\game\objects\items\weapons\clown_items.dm"
#include "code\game\objects\items\weapons\cosmetics.dm"
#include "code\game\objects\items\weapons\dna_injector.dm"
+#include "code\game\objects\items\weapons\ecigs.dm"
#include "code\game\objects\items\weapons\explosives.dm"
#include "code\game\objects\items\weapons\extinguisher.dm"
#include "code\game\objects\items\weapons\flamethrower.dm"