adding lots more functionality