src: abstracted classes