major update, split methods in dedicated files (using traits)