add some methods, clean-up the code a little and add progress plan