moved most function into lib_internal/