refactor code to add complexity, moved more values into traits