version with prototype list_* functions