If you want no compromises on capabilities, but can compromise on verbosity, I'll link to my previous post on this topic: