better structure and documentation