anchor.diff:  
   //Presets for art gallery mapping, for paintings to be shared across stations
   /obj/structure/sign/painting/library
  -	name = "Public Painting Exhibit"
  -	desc = "Art or \"Art\"? You decide. Part of the Public Painting Exhibit. Any painting placed here will be archived at the end of the shift. Use wirecutters to remove the painting."
  +	name = "\improper Public Painting Exhibit mounting"
  +	desc = "For art pieces hung by the public."
  +	desc_with_canvas = "A piece of art (or \"art\"). Anyone could've hung it."
   	persistence_id = "library"
   
   /obj/structure/sign/painting/library_secure
  -	name = "Secure Painting Exhibit"
  -	desc = "A masterpiece hand-picked by the curator, supposedly. Part of the Secure Painting Exhibit. Any painting placed here will be archived at the end of the shift. Use wirecutters to remove the painting."
  +	name = "\improper Curated Painting Exhibit mounting"
  +	desc = "For masterpieces hand-picked by the curator."
  +	desc_with_canvas = "A masterpiece hand-picked by the curator, supposedly."
   	persistence_id = "library_secure"
   
   /obj/structure/sign/painting/library_private // keep your smut away from prying eyes, or non-librarians at least
  -	name = "Private Painting Exhibit"
  -	desc = "An art piece deemed too subversive or too illegal for prying eyes. Part of the Private Painting Exhibit. Any painting placed here will be archived at the end of the shift. Use wirecutters to remove the painting."
  +	name = "\improper Private Painting Exhibit mounting"
  +	desc = "For art pieces deemed too subversive or too illegal to be shared outside of curators."
  +	desc_with_canvas = "A painting hung away from lesser minds."
   	persistence_id = "library_private"
   
   /obj/structure/sign/painting/vv_get_dropdown()
  
positive.code: 	if(!I)
  		return
  	if(istype(I, /obj/item/toy/crayon))
  		var/obj/item/toy/crayon/C = I
  		return C.paint_color
  	else if(istype(I, /obj/item/pen))
  		var/obj/item/pen/P = I
  		switch(P.colour)
  
negative.code: 	SSpersistence.painting_frames -= src
  
  /obj/structure/sign/painting/attackby(obj/item/I, mob/user, params)
  	if(!current_canvas && istype(I, /obj/item/canvas))
  		frame_canvas(user,I)
  	else if(current_canvas && current_canvas.painting_name == initial(current_canvas.painting_name) && istype(I,/obj/item/pen))
  		try_rename(user)
  	else
  		return ..()
  
  /obj/structure/sign/painting/examine(mob/user)
  	. = ..()
  	if(persistence_id)
  		. += "<span class='notice'>Any painting placed here will be archived at the end of the shift.</span>"
  	if(current_canvas)
  		current_canvas.ui_interact(user)
  		. += "<span class='notice'>Use wirecutters to remove the painting.</span>"
  
  /obj/structure/sign/painting/wirecutter_act(mob/living/user, obj/item/I)
  	. = ..()
  	if(current_canvas)
  		current_canvas.forceMove(drop_location())
  		current_canvas = null
  		to_chat(user, "<span class='notice'>You remove the painting from the frame.</span>")
  		update_icon()
  		update_name_and_desc()
  		return TRUE
  
  /obj/structure/sign/painting/proc/frame_canvas(mob/user,obj/item/canvas/new_canvas)
  	if(user.transferItemToLoc(new_canvas,src))
  		current_canvas = new_canvas
  		if(!current_canvas.finalized)
  			current_canvas.finalize(user)
  		to_chat(user,"<span class='notice'>You frame [current_canvas].</span>")
  	update_icon()
  	update_name_and_desc()
  
  /obj/structure/sign/painting/proc/try_rename(mob/user)
  	if(current_canvas.painting_name == initial(current_canvas.painting_name))
  		current_canvas.try_rename(user)
  
  /obj/structure/sign/painting/proc/update_name_and_desc()
  	if(current_canvas)
  		name = "painting - [current_canvas.painting_name]"
  		desc = desc_with_canvas
  	else
  		name = initial(name)
  		desc = initial(desc)
  
  /obj/structure/sign/painting/update_icon_state()
  	. = ..()
  	if(current_canvas?.generated_icon)
  		icon_state = "frame-overlay"
  	else
  		icon_state = "frame-empty"
  