With contrubitions from: - Zeeshan Ali <zeenix@gmail.com> - Nirbheek Chauhan <nirbheek@centricular.com>