addded a lot of changes