renamed spec
added more specs and implementation