Added interface and more functionality