Implemented (including better API)