Start to implement the proposed api and also make some changes to it because it was not 100% usable