added a lot of stuff inside