move behavior into classes