add specs and implementation