need to work on gui and others. this is just a guideline.