Pure class based implementation