diff --git a/code/game/dna.dm b/code/game/dna.dm
index af35b1f9c5f..175cb7388b7 100644
--- a/code/game/dna.dm
+++ b/code/game/dna.dm
@@ -935,7 +935,7 @@
if("pulsese")
var/len = length(viable_occupant.dna.struc_enzymes)
num = Wrap(num, 1, len+1)
- num = randomize_radiation_accuracy(num, radduration, len)
+ num = randomize_radiation_accuracy(num, radduration + (connected.precision_coeff ** 2), len)
var/block = round((num-1)/DNA_BLOCK_SIZE)+1
var/subblock = num - block*DNA_BLOCK_SIZE
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index 72cc8216f65..ef5ba5c8b98 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -277,9 +277,14 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
U << "We could gain no benefit from absorbing a lesser creature."
return 0
- if(T.dna in absorbed_dna)
- U << "We already have that DNA in storage."
- return 0
+ for(var/datum/dna/D in absorbed_dna)
+ if(T.dna.uni_identity == D.uni_identity)
+ if(T.dna.struc_enzymes == D.struc_enzymes)
+ if(T.dna.real_name == D.real_name)
+ if(T.dna.mutantrace == D.mutantrace)
+ if(T.dna.blood_type == D.blood_type)
+ U << "We already have that DNA in storage."
+ return 0
if(!check_dna_integrity(T))
U << "[T] is not compatible with our biology."
@@ -292,7 +297,13 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
/datum/changeling/proc/absorb_dna(mob/living/carbon/T)
shuffle_dna()
T.dna.real_name = T.real_name //Set this again, just to be sure that it's properly set.
- absorbed_dna |= T.dna //And add the target DNA to our absorbed list.
+ var/datum/dna/new_dna = new T.dna.type
+ new_dna.uni_identity = T.dna.uni_identity
+ new_dna.struc_enzymes = T.dna.struc_enzymes
+ new_dna.real_name = T.dna.real_name
+ new_dna.mutantrace = T.dna.mutantrace
+ new_dna.blood_type = T.dna.blood_type
+ absorbed_dna |= new_dna //And add the target DNA to our absorbed list.
absorbedcount++ //all that done, let's increment the objective counter.
/datum/changeling/proc/shuffle_dna()//boots out the stalest DNA.
diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm
index 93b04d157a3..cbb91a9635e 100644
--- a/code/game/gamemodes/changeling/changeling_powers.dm
+++ b/code/game/gamemodes/changeling/changeling_powers.dm
@@ -161,7 +161,8 @@
changeling.chem_charges -= 5
changeling.geneticdamage = 3
- hardset_dna(src, chosen_dna.uni_identity, chosen_dna.struc_enzymes, chosen_dna.real_name, chosen_dna.mutantrace, chosen_dna.blood_type)
+ src.dna = chosen_dna
+ src.real_name = chosen_dna.real_name
updateappearance(src)
domutcheck(src, null)
@@ -216,7 +217,8 @@
changeling.chem_charges -= 5
remove_changeling_powers()
src << "We transform our appearance."
- hardset_dna(src, chosen_dna.uni_identity, chosen_dna.struc_enzymes, chosen_dna.real_name, chosen_dna.mutantrace, chosen_dna.blood_type)
+ src.dna = chosen_dna
+
var/mob/living/carbon/human/O = humanize((TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPSRC),chosen_dna.real_name)