add specs, add exception handling