Add additional specs and refactor