add quite a few more features