sub-functions for abstraction layers