more functionality implemented