Too much to summarize; Look at the diff