even after adding all the abstraction, we are still using that ugly getter