use interfaces