Some implementation ideas
Example API abstraction