Basic implementation and api