location can be `None` if it's not passed - does it make sense for this function to return None?