abstract out error handling and existence/truthyness