added a lot of changes