initial implementation and docs