more work on the less naive implementation behind the more advanced interface