Updated to use interfaces