added a lot of fancy stuff