a working version -- all 5