introduced internal interfaces for clean up public interfaces. issue #2489