basic version
change code according to the spec