added lots of extra features