seemingly correct class based implementation