Added initial implementation and tests