modularize everything, split off data classes