added more functionality, needs TLC