Impl most of API - still unstable