basic implementation and tests ...