Proper core classes. Simple working implementation