interface should be (nearly) feature-complete