very very big commit, create base clases and traits