anchor.diff:  		to_chat(user, span_warning("You can't seem to find a way to detonate the charge."))
   		return
   
  -	for(var/datum/traitor_objective/locate_weakpoint/weakpoint_objecitve in SStraitor.taken_objectives_by_type[/datum/traitor_objective/locate_weakpoint])
  -		var/datum/uplink_handler/handler = weakpoint_objecitve.handler
  -		if(handler.owner != user.mind)
  -			continue
  -		objective = weakpoint_objecitve
  -
  -	if(!objective || objective.objective_state == OBJECTIVE_STATE_INACTIVE)
  +	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_areas[3])
  -		var/area/weakpoint_area = objective.weakpoint_areas[3]
  -		to_chat(user, span_warning("[src] can only be detonated in [initial(weakpoint_area.name)]."))
  +	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))
  
positive.code: 	. = ..()
  	switch(action)
  		if("locator")
  			if(locator)
  				return
  			locator = new(user.drop_location())
  			user.put_in_hands(locator, weakpoint_areas[1], weakpoint_areas[2])
  			locator.balloon_alert(user, "the weakpoint locator materializes in your hand")
  
  		if("shatter_charge")
  			if(shatter_charge)
  				return
  			shatter_charge = new(user.drop_location())
  			user.put_in_hands(shatter_charge)
  			shatter_charge.balloon_alert(user, "the ES8 charge materializes in your hand")
  
  /datum/traitor_objective/locate_weakpoint/proc/weakpoint_located()
  	description = "Structural weakpoint has been located in %AREA%. Detonate an ES8 explosive charge there to create a shockwave that will severely damage the station."
  	var/area/weakpoint_area = weakpoint_areas[3]
  	replace_in_name("%AREA%", initial(weakpoint_area.name))
  	weakpoint_found = TRUE
  
  
negative.code: 
  	boom_sizes = list(3, 6, 9)
  
  	/// Weakref to user's objective
  	var/datum/weakref/objective_weakref
  
  /obj/item/grenade/c4/es8/Initialize(mapload, objective)
  	. = ..()
  	objective_weakref = WEAKREF(objective)
  
  /obj/item/grenade/c4/es8/Destroy()
  	objective_weakref = null
  	return ..()
  
  /obj/item/grenade/c4/es8/afterattack(atom/movable/target, mob/user, flag)
  