safe interface, first pass, not tested.