anchor.diff:  	req_one_access = list(ACCESS_HEADS, ACCESS_ARMORY) //Heads of staff or the warden can go here to claim recover items from their department that people went were cryodormed with.
   	var/mode = null
   
  +	var/menu = 1 //Which menu screen to display
  +
   	//Used for logging people entering cryosleep and important items they are carrying.
   	var/list/frozen_crew = list()
   	var/list/frozen_items = list()
   
  -	var/storage_type = "crewmembers"
  -	var/storage_name = "Cryogenic Oversight Control"
  +	// Used for containing rare items traitors need to steal, so it's not
  +	// game-over if they get iced
  +	var/list/objective_items = list()
  +	// A cache of theft datums so you don't have to re-create them for
  +	// each item check
  +	var/list/theft_cache = list()
  +
   	var/allow_items = TRUE
   
   /obj/machinery/computer/cryopod/attack_ai()
   	attack_hand()
   
  -/obj/machinery/computer/cryopod/attack_hand(mob/user = usr)
  +/obj/machinery/computer/cryopod/ui_interact(mob/user = usr)
   	if(!is_operational())
   		return
   
   	user.set_machine(src)
   	add_fingerprint(user)
   
  -	var/dat
  -
  -	dat += "<hr/><br/><b>[storage_name]</b><br/>"
  -	dat += "<i>Welcome, [user.real_name].</i><br/><br/><hr/>"
  -	dat += "<a href='?src=[REF(src)];log=1'>View storage log</a>.<br>"
  -	if(allow_items)
  -		dat += "<a href='?src=[REF(src)];view=1'>View objects</a>.<br>"
  -		dat += "<a href='?src=[REF(src)];item=1'>Recover object</a>.<br>"
  -		dat += "<a href='?src=[REF(src)];allitems=1'>Recover all objects</a>.<br>"
  -
  -	user << browse(dat, "window=cryopod_console")
  -	onclose(user, "cryopod_console")
  +	var/dat = ""
  +
  +	dat += "<h2>Welcome, [user.real_name].</h2><hr/>"
  +	dat += "<br><br>"
  +
  +	switch(src.menu)
  +		if(1)
  +			dat += "<a href='byond://?src=[REF(src)];menu=2'>View crew storage log</a><br><br>"
  +			if(allow_items)
  +				dat += "<a href='byond://?src=[REF(src)];menu=3'>View objects storage log</a><br><br>"
  +				dat += "<a href='byond://?src=[REF(src)];item=1'>Recover object</a><br><br>"
  +				dat += "<a href='byond://?src=[REF(src)];allitems=1'>Recover all objects</a><br>"
  +		if(2)
  +			dat += "<a href='byond://?src=[REF(src)];menu=1'><< Back</a><br><br>"
  +			dat += "<h3>Recently stored Crew</h3><br/><hr/><br/>"
  +			if(!frozen_crew.len)
  +				dat += "There has been no storage usage at this terminal.<br/>"
  +			else
  +				for(var/person in frozen_crew)
  +					dat += "[person]<br/>"
  +			dat += "<hr/>"
  +		if(3)
  +			dat += "<a href='byond://?src=[REF(src)];menu=1'><< Back</a><br><br>"
  +			dat += "<h3>Recently stored objects</h3><br/><hr/><br/>"
  +			if(!frozen_items.len)
  +				dat += "There has been no storage usage at this terminal.<br/>"
  +			else
  +				for(var/obj/item/I in frozen_items)
  +					dat += "[I.name]<br/>"
  +			dat += "<hr/>"
  +
  +	var/datum/browser/popup = new(user, "cryopod_console", "Cryogenic System Control")
  +	popup.set_content(dat)
  +	popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
  +	popup.open()
   
   /obj/machinery/computer/cryopod/Topic(href, href_list)
   	if(..())
  
positive.code: 
  	add_fingerprint(user)
  
  	if(href_list["log"])
  
  		var/dat = "<b>Recently stored [storage_type]</b><br/><hr/><br/>"
  		for(var/person in frozen_crew)
  			dat += "[person]<br/>"
  		dat += "<hr/>"
  
  		user << browse(dat, "window=cryolog")
  
  	if(href_list["view"])
  		if(!allow_items) return
  
  		var/dat = "<b>Recently stored objects</b><br/><hr/><br/>"
  		for(var/obj/item/I in frozen_items)
  			dat += "[I.name]<br/>"
  		dat += "<hr/>"
  
  		user << browse(dat, "window=cryoitems")
  
  	else if(href_list["item"])
  		if(!allowed(user))
  			to_chat(user, "<span class='warning'>Access Denied.</span>")
  			return
  		if(!allow_items) return
  
  		if(frozen_items.len == 0)
  			to_chat(user, "<span class='notice'>There is nothing to recover from storage.</span>")
  			return
  
  		var/obj/item/I = input(user, "Please choose which object to retrieve.","Object recovery",null) as null|anything in frozen_items
  		if(!I)
  			return
  
  		if(!(I in frozen_items))
  			to_chat(user, "<span class='notice'>\The [I] is no longer in storage.</span>")
  			return
  
  		visible_message("<span class='notice'>The console beeps happily as it disgorges \the [I].</span>")
  
  		I.forceMove(get_turf(src))
  		frozen_items -= I
  
  	else if(href_list["allitems"])
  		if(!allowed(user))
  			to_chat(user, "<span class='warning'>Access Denied.</span>")
  			return
  		if(!allow_items) return
  
  		if(frozen_items.len == 0)
  			to_chat(user, "<span class='notice'>There is nothing to recover from storage.</span>")
  			return
  
  		visible_message("<span class='notice'>The console beeps happily as it disgorges the desired objects.</span>")
  
  		for(var/obj/item/I in frozen_items)
  			I.forceMove(get_turf(src))
  			frozen_items -= I
  
  	updateUsrDialog()
  	return
  
  
negative.code: 		announcer.announce("CRYOSTORAGE", mob_occupant.real_name, announce_rank, list())
  		visible_message("<span class='notice'>\The [src] hums and hisses as it moves [mob_occupant.real_name] into storage.</span>")
  
  	// Ghost and delete the mob.
  	if(!mob_occupant.get_ghost(1))
  		mob_occupant.ghostize(0) // Players who cryo out may not re-enter the round
  