add #28 spec
implement #28