Implement Sample and separate out interfaces