should this be seperated out in a public api/interface and internal implementation for foundation?