There are some parts of the program that are generic and could be separated for possible reused.
What are the parts that are reusable?