massive rewrite for 2.0.0