moved catch-all function to abstract parent