elaboration
sort of working version