lot a refactoring
lot of work
fix