Initial structure
Basic implementation and tests