full specification implemented