initial implementation and adapters