adding a more finished version