anchor.diff:  /client/proc/callproc()
   	set category = "Debug"
   	set name = "Advanced ProcCall"
  -	set waitfor = 0
  +	set waitfor = FALSE
   
   	if(!check_rights(R_DEBUG))
   		return
   
   	var/datum/target = null
  -	var/targetselected = 0
  +	var/targetselected = FALSE
   	var/returnval = null
   
  -	switch(alert("Proc owned by something?",,"Yes","No"))
  -		if("Yes")
  -			targetselected = 1
  -			var/list/value = vv_get_value(default_class = VV_ATOM_REFERENCE, classes = list(VV_ATOM_REFERENCE, VV_DATUM_REFERENCE, VV_MOB_REFERENCE, VV_CLIENT))
  -			if (!value["class"] || !value["value"])
  -				return
  -			target = value["value"]
  -		if("No")
  -			target = null
  -			targetselected = 0
  -
  -	var/procname = input("Proc path, eg: /proc/fake_blood","Path:", null) as text|null
  -	if(!procname)
  -		return
  -	
  +	if(alert("Proc owned by something?",,"Yes","No") == "Yes")
  +		targetselected = TRUE
  +		var/list/value = vv_get_value(default_class = VV_ATOM_REFERENCE, classes = list(VV_ATOM_REFERENCE, VV_DATUM_REFERENCE, VV_MOB_REFERENCE, VV_CLIENT))
  +		if (!value["class"] || !value["value"])
  +			return
  +		target = value["value"]
  +
  +	var/procpath = input("Proc path, eg: /proc/fake_blood","Path:", null) as text|null
  +	if(!procpath)
  +		return
  +
   	//strip away everything but the proc name
  -	var/list/proclist = splittext(procname, "/")
  +	var/list/proclist = splittext(procpath, "/")
   	if (!length(proclist))
   		return
  -	procname = proclist[proclist.len]
  -	
  -	var/proctype = "proc"
  -	if ("verb" in proclist)
  -		proctype = "verb"
  -	
  -	if(targetselected && !hascall(target, procname))
  -		to_chat(usr, "<font color='red'>Error: callproc(): type [target.type] has no [proctype] named [procname].</font>")
  -		return
  -	else
  -		var/procpath = text2path("[proctype]/[procname]")
  -		if (!procpath)
  -			to_chat(usr, "<font color='red'>Error: callproc(): proc [procname] does not exist. (Did you forget the /proc/ part?)</font>")
  +
  +	var/procname = proclist[proclist.len]
  +	var/proctype = ("verb" in proclist) ? "verb" :"proc"
  +
  +	if(targetselected)
  +		if(!hascall(target, procname))
  +			to_chat(usr, "<span class='warning'>Error: callproc(): type [target.type] has no [proctype] named [procpath].</span>")
   			return
  +	else
  +		procpath = "/[proctype]/[procname]"
  +		if(!text2path(procpath))
  +			to_chat(usr, "<span class='warning'>Error: callproc(): [procpath] does not exist.</span>")
  +			return
  +
   	var/list/lst = get_callproc_args()
   	if(!lst)
   		return
   
   	if(targetselected)
   		if(!target)
  -			to_chat(usr, "<font color='red'>Error: callproc(): owner of proc no longer exists.</font>")
  +			to_chat(usr, "<span class='warning'>Error: callproc(): owner of proc no longer exists.</span>")
   			return
  -		var/msg = "[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]."
  +		var/msg = "[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no argument"]."
   		log_admin(msg)
   		message_admins(msg)
   		admin_ticket_log(target, msg)
  -		returnval = WrapAdminProcCall(target, procname, lst) // Pass the lst as an argument list to the proc
  -	else
  -		//this currently has no hascall protection. wasn't able to get it working.
  -		log_admin("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
  -		message_admins("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
  -		returnval = WrapAdminProcCall(GLOBAL_PROC, procname, lst) // Pass the lst as an argument list to the proc
  +		returnval = WrapAdminProcCall(target, procname, lst)
  +	else
  +		var/msg = "[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no argument"]."
  +		log_admin(msg)
  +		message_admins(msg)
  +		returnval = WrapAdminProcCall(GLOBAL_PROC, procpath, lst) //calling globals needs full qualified name (e.g /proc/foo)
   	. = get_callproc_returnval(returnval, procname)
   	if(.)
   		to_chat(usr, .)
  
positive.code: 	if(!A || !IsValidSrc(A))
  		to_chat(usr, "<span class='warning'>Error: callproc_datum(): owner of proc no longer exists.</span>")
  		return
  	log_admin("[key_name(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
  	var/msg = "[key_name(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]."
  	message_admins(msg)
  	admin_ticket_log(A, msg)
  	SSblackbox.record_feedback("tally", "admin_verb", 1, "Atom ProcCall") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
  
negative.code: 					. += "\n[elem]"
  		else
  			. = "[procname] returned an empty list"
  		. += "</span>"
  
  	else
  		. = "<span class='notice'>[procname] returned: [!isnull(returnval) ? returnval : "null"]</span>"
  
  
  /client/proc/Cell()
  