working version of 1 and 2