#2 added some rolechecking, it's getting there