require subfuncs