full class implementations