anchor.diff:  	w_class = WEIGHT_CLASS_SMALL
   	throw_speed = 3
   	throw_range = 5
  -
  -/obj/item/weakpoint_locator/Initialize(mapload, area/area1, area/area2)
  -	. = ..()
  +	var/datum/weakref/objective_weakref
  +
  +/obj/item/weakpoint_locator/Initialize(mapload, datum/traitor_objective/locate_weakpoint/objective)
  +	. = ..()
  +	objective_weakref = WEAKREF(objective)
  +	if(!objective)
  +		return
  +	var/area/area1 = objective.scan_areas[1]
  +	var/area/area2 = objective.scan_areas[2]
   	desc = replacetext(desc, "%AREA1%", initial(area1.name))
   	desc = replacetext(desc, "%AREA2%", initial(area2.name))
   
  +/obj/item/weakpoint_locator/Destroy(force)
  +	objective_weakref = null
  +	return ..()
  +
   /obj/item/weakpoint_locator/attack_self(mob/living/user, modifiers)
   	. = ..()
   	if(!istype(user) || loc != user || !user.mind) //No TK cheese
   		return
   
  -	if(!user.mind.has_antag_datum(/datum/antagonist/traitor))
  -		to_chat(user, span_warning("You have zero clue how to use [src]."))
  -		return
  -
  -	var/datum/traitor_objective/locate_weakpoint/objective = get_weakpoint_objective(user)
  +	var/datum/traitor_objective/locate_weakpoint/objective = objective_weakref.resolve()
  +
   	if(!objective || objective.objective_state == OBJECTIVE_STATE_INACTIVE)
   		to_chat(user, span_warning("Your time to use [src] has not come yet."))
   		return
   
  +	if(objective.handler.owner != user.mind)
  +		to_chat(user, span_warning("You have zero clue how to use [src]."))
  +		return
  +
   	var/area/user_area = get_area(user)
  -	if(!(user_area.type in objective.weakpoint_areas))
  +	if(!(user_area.type in objective.scan_areas))
   		balloon_alert(user, "invalid area!")
   		playsound(user, 'sound/machines/buzz-sigh.ogg', 30, TRUE)
   		return
   
  -	if(!objective.weakpoint_areas[user_area.type])
  +	if(!objective.scan_areas[user_area.type])
   		balloon_alert(user, "already scanned here!")
   		playsound(user, 'sound/machines/buzz-sigh.ogg', 30, TRUE)
   		return
  
positive.code: 
  /datum/traitor_objective/locate_weakpoint/generate_ui_buttons(mob/user)
  	var/list/buttons = list()
  	if(!locator)
  		buttons += add_ui_button("", "Pressing this will materialize a weakpoint locator in your hand.", "globe", "locator")
  	if(weakpoint_found && !shatter_charge)
  		buttons += add_ui_button("", "Pressing this will materialize an ES8 explosive charge in your hand.", "bomb", "shatter_charge")
  	return buttons
  
  
negative.code: 		to_chat(user, span_warning("You can't seem to find a way to detonate the charge."))
  		return
  
  	var/datum/traitor_objective/locate_weakpoint/objective = objective_weakref.resolve()
  
  	if(!objective || objective.objective_state == OBJECTIVE_STATE_INACTIVE || objective.handler.owner != user.mind)
  		to_chat(user, span_warning("You don't think it would be wise to use [src]."))
  		return
  
  	var/area/target_area = get_area(target)
  	if (target_area.type != objective.weakpoint_area)
  		to_chat(user, span_warning("[src] can only be detonated in [initial(objective.weakpoint_area.name)]."))
  		return
  
  	if(!isfloorturf(target) && !iswallturf(target))
  