Refactored error handling, moved to ::Gish and executes block.