more complete interface code