fonctionne correctement, mais doit etre refactorer