outlined some ideas with code