updating with more functionality