Final commit before v3.0 rewrite (not happy with the path v2.0 was taking)