class definitions, documentation draft