working version 4 : clean code