lot of changes :D