created a gui, made the entire process serializable to support pause and resume!