alot of changes (too much to describe :) )