anchor.diff:  
   		return .
   
  -	proc/submit_vote(var/vote)
  +	proc/submit_vote(var/ckey, var/vote)
   		if(mode)
   			if(config.vote_no_dead && usr.stat == DEAD && !usr.client.holder)
   				return 0
  -			if(!(usr.ckey in voted))
  -				if(vote && 1<=vote && vote<=choices.len)
  -					voted += usr.ckey
  -					choices[choices[vote]]++	//check this
  -					return vote
  +			if(current_votes[ckey])
  +				choices[choices[current_votes[ckey]]]--
  +			if(vote && 1<=vote && vote<=choices.len)
  +				voted += usr.ckey
  +				choices[choices[vote]]++	//check this
  +				current_votes[ckey] = vote
  +				return vote
   		return 0
   
   	proc/initiate_vote(var/vote_type, var/initiator_key)
   		if(!mode)
  -			if(started_timeofday != null)
  -				var/next_allowed_timeofday = (started_timeofday + config.vote_delay)
  -				if(world.timeofday < started_timeofday)
  -					next_allowed_timeofday -= 864000
  -				if(next_allowed_timeofday > world.timeofday)
  +			if(started_time != null)
  +				var/next_allowed_time = (started_time + config.vote_delay)
  +				if(next_allowed_time > world.time)
   					return 0
   
   			reset()
   			switch(vote_type)
   				if("restart")	choices.Add("Restart Round","Continue Playing")
  -				if("gamemode")	choices.Add(config.votable_modes)
  +				if("gamemode")
  +					choices.Add(config.votable_modes)
  +				if("crew_transfer")
  +					question = "End the shift?"
  +					choices.Add("Initiate Crew Transfer", "Continue The Round")
   				if("custom")
   					question = html_encode(input(usr,"What is the vote for?") as text|null)
   					if(!question)	return 0
  
positive.code: 
  	proc/process()	//called by master_controller
  		if(mode)
  			time_remaining = started_timeofday + config.vote_period
  			if(world.timeofday < started_timeofday)
  				time_remaining -= 864000
  			time_remaining = round((time_remaining - world.timeofday)/10)
  
  			var/i=1
  			if(time_remaining < 0)
  				result()
  				while(i<=voting.len)
  					var/client/C = voting[i]
  					if(C)
  						C << browse(null,"window=vote;can_close=0")
  					i++
  				reset()
  			else
  				while(i<=voting.len)
  					var/client/C = voting[i]
  					if(C)
  						C << browse(vote.interface(C),"window=vote;can_close=0")
  						i++
  					else
  						voting.Cut(i,i+1)
  
  	proc/reset()
  		initiator = null
  
negative.code: 		choices.Cut()
  		voted.Cut()
  		voting.Cut()
  		current_votes.Cut()
  
  	proc/get_result()
  		//get the highest number of votes
  