added more frame work to keep it clean and simple to use