add more functionality, needs testing