lots of changes :)