updated with a lot of nice features