updated with lots of extras