'exists' and 'get' share quite some logic. Consider lifting this?