prepared for oo implementation