Final version! (I hope) Everything complete