So, I did a loooot. I had to get it working with your cool blue squares thing and that made me find a ton of little bugs. So I ended up creating a clone method in the piece class and in the board class, so if you call board.clone() you get an unrefrenced clone of that board. Then I make the move, pass the board to the validate method to make sure all is good then check for check. Sorry if its a mess!